deliver_sm (command_id 0x00000005) est envoyé du SMSC vers l'ESME pour remettre soit un message mobile-originated (MO), soit un accusé de réception (DLR). Son corps reprend celui de submit_sm. Le champ esm_class distingue les deux : le bit 0x04 marque un accusé de réception. L'ESME doit toujours répondre par un deliver_sm_resp.
bind_transceiverOuvrir et authentifier la sessionbind_transceiver_respSession acceptéesubmit_smEnvoyer un messagesubmit_sm_respAccepté, ID du message renvoyédeliver_smAccusé de réception ou message entrantdeliver_sm_respConfirméenquire_linkKeepalive en cas d'inactivité
Une PDU, deux fonctions
deliver_sm est l'homologue SMSC-vers-ESME de submit_sm et partage la même disposition de corps. Il porte soit un message MO entrant (un abonné qui envoie un SMS à votre numéro long ou à un code court), soit un accusé de réception rapportant le sort d'un message soumis précédemment. Votre bind receiver ou transceiver gère les deux ; vous branchez sur esm_class pour les router correctement.
Distinguer MO et DLR avec esm_class
Les bits de type de message d'esm_class identifient la charge utile. Un message MO ordinaire a ses bits de type de message à zéro. Un accusé de réception positionne le bit 0x04. Lorsque 0x04 est positionné, short_message contient le texte d'accusé de l'Annexe B (id, stat, err…) et le TLV receipted_message_id porte généralement le message_id d'origine. N'analysez pas le texte d'accusé comme du contenu utilisateur.
| esm_class (bits de type de message) | Payload |
|---|---|
| 0x00 | Message normal d'origine mobile (MO) |
| 0x04 | Accusé de réception SMSC (DLR) |
| 0x08 | Accusé de réception de livraison SME |
| 0x10 | Acquittement manuel/utilisateur du SME |
| 0x20 | Interruption de conversation (CDMA coréen) |
| 0x40 | Notification de livraison intermédiaire |
Toujours répondre par deliver_sm_resp
Pour chaque deliver_sm, l'ESME doit renvoyer un deliver_sm_resp (0x80000005) avec le même sequence_number et ESME_ROK. Si vous n'acquittez pas, le SMSC considère la remise comme échouée, la renvoie, et — parce que les PDU non acquittées comptent dans la fenêtre — peut bloquer toute la session. Acquittez rapidement et effectuez les traitements lourds de façon asynchrone.
SMSC → ESME deliver_sm seq=88 esm_class=0x00 (MO: user text)
ESME → SMSC deliver_sm_resp seq=88 status=ESME_ROK
SMSC → ESME deliver_sm seq=89 esm_class=0x04 (DLR: id:... stat:DELIVRD)
ESME → SMSC deliver_sm_resp seq=89 status=ESME_ROKdata_sm comme alternative
data_sm (0x00000103) est une opération plus légère et épurée qui peut porter des messages MO et des accusés à l'aide de TLV (notamment message_payload) plutôt que du champ fixe short_message. Certains réseaux la préfèrent pour le trafic interactif ou de type WAP. Sa prise en charge est optionnelle et propre au fournisseur — confirmez avant de vous y fier.
Questions fréquemment posées
Comment distinguer un accusé de réception d'un message MO entrant ?
Vérifiez esm_class sur le deliver_sm. Si le bit de type de message 0x04 est positionné, c'est un accusé de réception et short_message contient le texte d'accusé de l'Annexe B. Si ces bits sont à zéro, c'est un message mobile-originated ordinaire d'un abonné.
Que se passe-t-il si je n'envoie pas deliver_sm_resp ?
Le SMSC suppose que la remise a échoué et renvoie le deliver_sm. Les PDU non acquittées consomment aussi votre fenêtre, si bien que l'absence de réponse peut bloquer la session et produire des traitements MO/DLR en double.
deliver_sm a-t-il les mêmes champs que submit_sm ?
Oui — deliver_sm réutilise la disposition du corps de submit_sm (service_type, adressage TON/NPI, esm_class, data_coding, short_message, etc.). Seuls le sens et l'interprétation de la charge utile diffèrent.
Un même message MO peut-il être concaténé ?
Oui. Les longs messages entrants arrivent sous forme de plusieurs PDU deliver_sm avec un en-tête de concaténation UDH (bit UDHI 0x40 d'esm_class positionné) ou des TLV SAR. Réassemblez-les par numéro de référence et de séquence, comme pour les segments sortants.
Spécifications sources
Les normes publiées sur lesquelles repose cette page. S'ouvre dans un nouvel onglet.