Ghid de integrare

ISCloudSMS API — SMS client

Tot ce este necesar pentru a trimite SMS-uri, a verifica statusul livrării și a obține raportul lunar, folosind o singură cheie API.

Versiune: v1 Schemă: REST · JSON Autentificare: apiKey (UUID)

00Prezentare

API-ul client ISCloudSMS oferă trei operațiuni esențiale pentru trimiterea de mesaje SMS tranzacționale și de notificare:

OperațieMetodăRol
SendSMSPOSTTrimite un SMS către un număr
StatusSMSGETVerifică starea livrării unui SMS
MonthlySummaryGETSumar lunar al mesajelor trimise

Toate răspunsurile sunt JSON și conțin câmpurile errorCode, errorName și errorMessage. errorCode = 0 înseamnă succes.

01Base URL

Toate rutele sunt prefixate cu /ISCloudSMS.

https://smsgateway.eservicii.md/ISCloudSMS
De confirmat: host-ul exact de producție depinde de configurația de deploy — verifică valoarea efectivă înainte de integrare.

02Autentificare

Autentificarea se face cu o cheie API de tip UUID, emisă per companie. Cheia se transmite în query (la cererile GET) sau direct în corpul JSON (la POST SendSMS).

# în query
?apiKey=6061a897-0693-4686-be25-6abe73d85c08

# în corpul JSON
{ "apiKey": "6061a897-0693-4686-be25-6abe73d85c08", ... }
Limită de rată. Maxim 50 cereri/secundă per cheie API. La depășire, cererea returnează o eroare cu mesajul „Rate limit exceeded. Please wait.”

03Quick start

Trimiterea unui SMS în câteva secunde:

curl -X POST https://smsgateway.eservicii.md/ISCloudSMS/SendSMS \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "6061a897-0693-4686-be25-6abe73d85c08",
    "number": "+37360000000",
    "message": "..."
  }'

04Trimitere SMS

POST/ISCloudSMS/SendSMSapiKey

Trimite un SMS către un singur număr. Numărul este normalizat și validat, aliasul expeditor și (pentru numere internaționale) opțiunea și tariful regional sunt verificate, apoi mesajul intră în coadă.

Corpul cererii (application/json)
CâmpTipDescriere
apiKeystring (uuid)obligatoriuCheia API a companiei
numberstringobligatoriuNumărul destinatarului (format internațional recomandat, ex. +373…)
messagestringobligatoriuConținutul mesajului. Segmentele se calculează automat (GSM 7-bit / Unicode)
idstringopționalID propriu (max 100 caractere) pentru a corela ulterior statusul
aliasstringopționalAlias expeditor (max 11 caractere). Implicit, numele scurt al companiei
callBackURIstringopționalURL apelat la schimbarea stării. Vezi secțiunea Callback-uri
scheduledDatedate-timeopționalProgramare. O dată în trecut → trimitere imediată
notificationTypeintegeropționalTipul mesajului. Implicit 0 (Informational). Vezi secțiunea Tipuri de mesaj
Răspuns — 200 OK
{
                        "errorCode": 0,
                        "errorName": "NoError",
                        "errorMessage": null,
                        "uid": "f3b2c1a0-…",   // identificatorul SMS-ului în sistem
                        "smsQuantity": 1,        // nr. de segmente
                        "smSparts": 1,
                        "rejectedPhones": []     // completat dacă numărul a fost respins
}
Exemplu — număr respins
{
                        "errorCode": 116,
                        "errorName": "Company_alias_is_not_correct",
                        "rejectedPhones": [ { "number": "+37360000000", "id": "ORD-10231" } ]
}
SMS internațional. Pentru numere din afara Moldovei, compania trebuie să aibă opțiunea de SMS internațional activă și un tarif configurat pentru regiune; altfel se returnează International_SMS_option_is_not_active sau Region_is_not_active.

05Status SMS

GET/ISCloudSMS/StatusSMSapiKey

Returnează starea curentă a unui SMS. Căutarea se face după id-ul tău extern sau după uid-ul intern, limitat la mesajele companiei tale.

Param (query)TipDescriere
apiKeyuuidCheia API
idstringID-ul extern trimis la SendSMS sau uid-ul (GUID)
Exemplu cerere
GET /ISCloudSMS/StatusSMS?apiKey=6061a897-…&id=ORD-10231
Răspuns — 200 OK
{ "errorCode": 0, "state": 1 }   // state = stare SMS (vezi referință)
SMS inexistent. Dacă nu se găsește niciun mesaj cu acel identificator pentru compania ta, se returnează Record_not_exist.

06Sumar lunar

GET/ISCloudSMS/MonthlySummaryapiKey

Numărul de SMS-uri trimise cu succes într-o lună, grupat pe aliasul expeditor.

Param (query)TipDescriere
apiKeyuuidCheia API
yearintegerAn (între 2000 și anul curent + 1)
monthintegerLună (1–12)
Exemplu cerere
GET /ISCloudSMS/MonthlySummary?apiKey=6061a897-…&year=2026&month=5
Răspuns — 200 OK
{
                        "errorCode": 0,
                        "items": [
    { "companyShortName": "MyDiscount", "count": 1240 }
  ]
}
Validare. Lună sau an în afara intervalului → Invalid_parameter cu mesajul „Data invalidă.”.

07Callback-uri (notificări de stare)

Dacă specifici callBackURI la SendSMS, sistemul îți apelează URL-ul (asincron) când starea SMS-ului se schimbă. Codul stării este atașat URL-ului în unul din două moduri:

Dacă URL-ul conține…Rezultat
placeholder-ul {status}{status} este înlocuit cu codul stării
fără placeholdercodul stării este adăugat la finalul URL-ului
Exemple
# cu placeholder
https://exemplu.md/sms/callback?status={status}  →  ...?status=8
                                                 →  ...?status=1

# fără placeholder
https://exemplu.md/sms/callback?status=  →  ...?status=8
Două notificări per SMS: prima la acceptarea de către SMSC (cod 8), a doua cu starea finală confirmată prin DLR (1 sau 2). Dacă operatorul nu trimite DLR, sosește doar prima. Tratează callback-urile ca idempotente și ignoră codurile pe care nu le folosești.

Sunt acceptate doar URL-uri absolute http / https.

08Stările unui SMS

Câmpul state (din StatusSMS și din callback) este un cod întreg. Stările posibile:

CodStareSemnificație
0PendingÎn coadă, în așteptarea trimiterii
3MessageBufferedPreluat de gateway (buffer SMSC)
8AcceptedSmscAcceptat de SMSC — predat operatorului, livrarea încă neconfirmată
1DeliverySuccessfulLivrat cu succes la destinatar (confirmat prin DLR)
100DeliveryToBulkSMSPredat către agregatorul bulk
2FailedDeliveryEșec la livrare
16RejectedSmscRespins (validare alias / internațional / SMSC)
1000RejectedNumberNumăr respins la validare

09Tipuri de mesaj (notificationType)

Câmpul opțional notificationType din SendSMS spune ce fel de mesaj trimiți. Implicit 0. Tipul nu schimbă tariful, dar schimbă prioritatea în coadă și durata de valabilitate:

CodTipSemnificație
0InformationalNotificare obișnuită (implicit)
1AdvertisingMesaj promoțional
2WarningAlertă / avertizare
3ValidationCodeCod de unică folosință (OTP)
ValidationCode (3) este rezervat codurilor OTP. Mesajele de acest tip trec înaintea celorlalte în coadă și sunt valabile 60 de secunde de la creare; după această fereastră NU se mai trimit și sunt marcate FailedDelivery (2), fiindcă un cod expirat n-ar mai fi acceptat oricum la verificare. Reîncercările se fac tot în interiorul ferestrei.

Ca privilegiul acesta să nu fie folosit pentru a sări coada, un mesaj declarat ValidationCode este verificat la trimitere și respins cu Invalid_parameter (105) dacă:

CondițieMotiv
nu conține un număr de 4-8 cifrefără cod, nu e un OTP
Exemple
# acceptat
{ "notificationType": 3, "message": "Codul dvs. este 123456" }

# respins — Invalid_parameter
{ "notificationType": 3, "message": "Reducere 50%! Detalii pe site" }

10Coduri de eroare

Fiecare răspuns conține errorCode (număr), errorName și errorMessage. 0 = succes. Codurile relevante pentru endpoint-urile client:

errorNameCând apare
NoErrorOperație reușită
Invalid_parameterParametri invalizi (ex. lună/an în afara intervalului)
APIKey_not_existCheie API inexistentă sau firmă negăsită
Record_not_existSMS-ul căutat nu există pentru compania ta
Company_alias_is_not_correctAlias expeditor neautorizat sau peste 11 caractere
International_SMS_option_is_not_activeNumăr internațional, dar opțiunea nu e activată pe firmă
Region_is_not_activeRegiune internațională inactivă sau fără tarif configurat
Internal_errorEroare neașteptată sau limită de rată depășită (vezi errorMessage)