Formatul raportului de livrare SMPP
Rapoartele de livrare SMPP sunt trimise de Serverul SMPP, către clientul SMPP după ce mesajele text au fost livrate cu succes pe dispozitivul mobil. SMS-ul original este trimis de clientul SMPP folosind o cerere smpp submit_sm. Când submit_sm este acceptat de serverul SMPP, acesta returnează un răspuns submit_sm_resp, cu un ID de referință pentru SMS. Raportul de livrare vine la o dată ulterioară. Acesta conține ora livrării și ID-ul de referință SMS care identifică SMS-ul. Documentul de mai jos explică conținutul unui PDU de raport de livrare SMPP și vă oferă un exemplu de raport de livrare.
Care este formatul raportului de livrare SMPPUn raport de livrare SMPP este primit ca un mesaj text standard. Textul mesajului are un format special, care conține diverse câmpuri despre SMS-ul trimis inițial. Aceste câmpuri pot fi folosite pentru a determina starea livrării SMS-ului.
Exemplu de raport de livrareRaport de livrare primit. +44251234567->+0000000 'Livrat; Către: +44251234567; La: 2022-10-03 12:07:00; Ref: 636445148; id:636445148 sub:000 dlvrd:001 data trimiterii:2210031207 data finalizării:2210031207 stat:DELIVRD err: text:' Livrare reușită raportată către admin@localhost. ID-ul sarcinii: cdfd66e1-880e-4ead-a559-7ca46d9ec669. Livrat; Către: +44251234567; La: 2022-10-03 12:07:00; Ref: 636445148; id:636445148 sub:000 dlvrd:001 data trimiterii:2210031207 data finalizării:2210031207 stat:DELIVRD err: text:Cum să primești un raport de livrare SMPP
Pentru a primi un raport de livrare SMPP
- Conectează clientul SMPP
- Conectează-te ca transceiver
- Trimite SMS-ul folosind PDU submit_sm
- Înregistrează ID-ul SMS din submit_sm_resp
- Așteaptă ca SMS-ul să ajungă la mobil
- Primește PDU-ul raportului de livrare SMS
- Potrivește ID-ul SMS cu mesajul trimis
- Înregistrează data și ora livrării SMS
SMPP acceptă confirmări de livrare / rapoarte (DLR) pentru mesajele SMS, astfel încât aplicația ta să poată determina rezultatele livrării.
Returnarea unei confirmări de livrare / raport (DLR) depinde de valoarea setată în câmpul registered_delivery al mesajului trimis inițial de la ESME la MC într-o operațiune submit_sm. Acesta poate fi configurat pentru scenarii de nelivrare și doar livrare, care pot duce la situații în care confirmarea nu va fi returnată. Confirmările de livrare sunt returnate în operațiunile deliver_sm și data_sm.
Următoarele câmpuri sunt relevante în operațiunile deliver_sm și data_sm atunci când sunt folosite pentru transmiterea confirmărilor de livrare.
- adresa sursă (adică source_addr_ton, source_addr_npi, source_addr) - Adresa sursă va fi preluată din adresa destinație a mesajului scurt original, care a generat confirmarea de livrare. Confirmarea apare ca și cum ar proveni de la destinatarul mesajului original înregistrat.
- adresa destinație (adică dest_addr_ton, dest_addr_npi, destination_addr) - Adresa destinație va fi preluată din adresa sursă a mesajului scurt original, care a generat confirmarea de livrare. Confirmarea este adresată SME-ului care a trimis inițial mesajul înregistrat.
- esm_class - Bitul 2 din esm_class este setat la 1 pentru a indica că mesajul este o confirmare de livrare MC. Dacă bitul 5 este setat, atunci mesajul este o notificare intermediară.
- message_state TLV - Indică starea finală a mesajului original. Vezi Stările mesajului mai jos.
- network_error_code TLV - Vezi Codurile de eroare mai jos.
- receipted_message_id TLV - ID-ul mesajului care a fost returnat către ESME de către MC în PDU-ul submit_sm_resp.
Acest tip de mesaj este folosit pentru a transporta o confirmare de livrare MC. MC, la detectarea stării finale a unui mesaj înregistrat, ar genera în mod normal o nouă confirmare adresată expeditorului primului mesaj. Confirmarea de livrare MC este apoi livrată către ESME într-o operațiune deliver_sm sau data_sm.
ESME-către-MC: Setare biții 0 și 1 în câmpul registered_delivery al unei operațiuni submit_sm pentru a solicita o confirmare de livrare MC.
Bit 1 | Bit 0 | Semnificație |
---|---|---|
0 | 0 | fără confirmare |
0 | 1 | confirmare solicitată atunci când rezultatul final este succes sau eșec la livrare |
1 | 0 | confirmare solicitată atunci când rezultatul final este eșec la livrare |
1 | 1 | confirmare solicitată atunci când rezultatul final este succes la livrare (doar SMPP v5) |
MC-către-ESME: Bitul 2 din câmpul esm_class al unui deliver_sm indică faptul că confirmarea este o confirmare de livrare MC.
O notificare intermediară este o formă specială de mesaj pe care MC o poate trimite către un ESME pentru livrarea unui mesaj către un mobil. Aceasta oferă o stare intermediară a unei încercări de livrare a mesajului.
Utilizările tipice sunt raportarea rezultatului încercărilor de livrare făcute în timpul duratei de retransmitere a mesajului în cadrul MC. Aceasta poate fi folosită pentru a urmări diversele motive pentru care un mesaj nu este livrat la destinație și pentru a profila disponibilitatea abonatului.
Suportul pentru funcționalitatea de notificare intermediară este specific implementării MC și Furnizorului de Servicii MC și depășește scopul acestei specificații.
ESME-către-MC: Setare bitul 4 în câmpul registered_delivery al unui PDU submit_sm pentru a solicita o notificare intermediară.
MC-către-ESME: Bitul 5 din câmpul esm_class al unui deliver_sm indică faptul că confirmarea este o notificare intermediară.
Confirmare în câmpul short_message
Confirmare în câmpul short_message
Multe API-uri anterioare versiunii 3.4 și Centre de Mesaje care suportă v3.3 au probabil o metodă de transmitere a informațiilor de confirmare în câmpul short_message. Aceasta se aplică atât Confirmărilor de Livrare MC, cât și Notificărilor Intermediare. Detaliile de format ale acestor informații sunt specifice gateway-ului SMS și platformei SMSC și depășesc scopul specificației. Cu toate acestea, următorul exemplu ilustrează abordarea tipică:
id:123A456B sub:1 dlvrd:1 submit date:1702281424 done date:1702281424 stat:DELIVRD err:0 text:
Câmpurile sunt specificate după cum urmează:
Câmp | Dimensiune (octeți) | Descriere |
---|---|---|
id | Variabilă | ID-ul mesajului atribuit de SMSC la trimiterea inițială. |
sub | 3 | Numărul de mesaje scurte trimise inițial. Valoarea poate fi completată cu zerouri la început. |
dlvrd | 3 | Numărul de mesaje scurte livrate. Valoarea poate fi completată cu zerouri la început. |
submit date
|
10 |
Data și ora la care mesajul scurt a fost trimis. În cazul unui mesaj înlocuit, aceasta este data la care mesajul original a fost înlocuit. Formatul este următorul: YYMMDDhhmm unde: |
done date
|
10 | Data și ora la care mesajul scurt a atins starea finală. Formatul este același ca pentru submit date. |
stat | 7 | Starea finală a mesajului. Consultați Stările mesajelor mai jos. Textul stării poate fi prescurtat. |
err | 3 | Un cod de eroare al rețelei sau SMSC pentru mesaj. Consultați Codurile de eroare mai jos. |
text | 20 | Câmp neutilizat, rezultatul va fi gol. |
În urma implementării unui număr foarte mare de conexiuni SMPP, am identificat următoarele probleme în diverse implementări:
Descoperirea 1:Valoarea câmpului ID din raportul de livrare (pe care îl numim Submit Reference în Ozeki) este adesea diferită de ID-ul primit de la furnizorul de servicii SMS. Cea mai frecventă diferență este că ID-ul original este returnat ca un număr întreg standard, iar ID-ul din raportul de livrare este returnat ca un număr hexazecimal. Acest lucru poate apărea și invers. Partea bună este că, în această situație, la conversie, cele două numere coincid, astfel încât rapoartele de livrare pot fi potrivite. Implementările Ozeki SMS efectuează diverse verificări și pot gestiona corect situația descrisă.
Descoperirea 2:Valoarea câmpurilor de dată vine adesea într-un format non-standard. Ozeki analizează în prezent câmpurile de dată folosind următoarele modele. De asemenea, puteți defini un model personalizat pentru câmpul de dată în formularul de configurare al software-ului.
- "yyMMddHHmm",
- "yyMMddHHmmss",
- "dd-MMM-yyHH:mm",
- "dd-MMM-yyHH:mm:ss",
- "dd-MMM-yy HH:mm",
- "dd-MMM-yy HH:mm:ss",
- "yyyyMMddHHmmss",
- "yyyyMMddHHmm",
- personalizat
Mesaj stări
Următoarea este o listă de stări permise pentru un mesaj scurt. MC returnează valoarea message_state către ESME ca parte a PDU-ului query_sm_resp, query_broadcast_sm_resp sau deliver_sm pentru confirmarea de livrare.
Stările intermediare sunt stări care se pot schimba. Stările finale sunt stări care reprezintă o stare de sfârșit de viață pentru un mesaj.
De exemplu, un mesaj în retry poate returna o stare ENROUTE. La un moment dat în viitor, acest mesaj va fie expira, fie va fi livrat. Starea va progresa apoi la EXPIRED sau DELIVERED. Astfel, un mesaj în starea ENROUTE se spune că este într-o stare intermediară.
Un mesaj în starea DELIVERED sau EXPIRED nu poate progresa către o altă stare. Aceste stări sunt, prin urmare, stări finale.
Stare Mesaj | Valoare | Tip |
---|---|---|
SCHEDULED | 0 | Intermediar |
Mesajul este programat. Livrarea nu a fost încă inițiată. Un mesaj trimis cu o oră de livrare programată poate returna această stare la interogare. Această valoare a fost adăugată pentru SMPP v5.0. MC-urile care suportă versiuni anterioare ale SMPP v3.3 și SMPP v3.4 probabil vor returna ENROUTE pentru mesajele programate. | ||
ENROUTE sau EN_ROUTE |
1 | Intermediar |
Mesajul este în stare enroute. Aceasta este o stare generală folosită pentru a descrie un mesaj ca fiind activ în cadrul MC-ului. Mesajul poate fi în retry sau expediat către o rețea mobilă pentru livrare către mobil. | ||
DELIVERED | 2 | Final |
Mesajul este livrat la destinație. Mesajul a fost livrat la destinație. Nu vor mai avea loc alte livrări. | ||
EXPIRED | 3 | Final |
Perioada de valabilitate a mesajului a expirat. Mesajul nu a reușit să fie livrat în perioada sa de valabilitate și/sau perioada de retry. Nu se vor mai face încercări de livrare. | ||
DELETED | 4 | Final |
Mesajul a fost șters. Mesajul a fost anulat sau șters din MC. Nu se vor mai face încercări de livrare. | ||
UNDELIVERABLE | 5 | Final |
Mesajul este nelivrabil. Mesajul a întâmpinat o eroare de livrare și este considerat permanent nelivrabil. Nu se vor mai face încercări de livrare. Anumite erori de rețea sau interne MC duc la nelivrarea permanentă a unui mesaj. Exemple de astfel de erori ar fi un abonat necunoscut sau o eroare de rețea care indică faptul că destinația mobilă dată a fost refuzată serviciul SMS sau nu poate suporta SMS. |