BroadNet
SMPPOpérations

SMPP submit_sm : tous les champs obligatoires

Mis à jour le 4 min de lectureFondé sur des normes
Réponse directe

submit_sm (command_id 0x00000004) envoie un message mobile-terminated de l'ESME vers le SMSC. Son corps est une séquence fixe de champs obligatoires — adressage (TON/NPI + adresse), esm_class, protocol_id, priority_flag, planification, registered_delivery, data_coding, sm_length et short_message — éventuellement suivie de TLV. submit_sm_resp renvoie le message_id du SMSC.

SchémaUne session SMPP entre votre plateforme et BroadNet
Votre plateforme (ESME)
BroadNet SMSC
Une connexion TCP/TLS persistante
  1. bind_transceiverOuvrir et authentifier la session
  2. bind_transceiver_respSession acceptée
  3. submit_smEnvoyer un message
  4. submit_sm_respAccepté, ID du message renvoyé
  5. deliver_smAccusé de réception ou message entrant
  6. deliver_sm_respConfirmé
  7. enquire_linkKeepalive en cas d'inactivité
§01

L'ordre complet des champs obligatoires

Le corps de submit_sm est une séquence fixe et ordonnée — il n'y a pas d'étiquettes de champ, donc l'ordre et la taille sont primordiaux. Le tableau liste tous les paramètres obligatoires dans l'ordre du fil. short_message peut être vide lorsque le texte est porté à la place dans un TLV message_payload ; ne renseignez pas les deux.

Paramètres obligatoires de submit_sm (dans l'ordre du fil)
#ChampTypeNotes
1service_typeC-Octet String (6)Catégorie de service ; généralement vide
2source_addr_tonInteger (1)Type de numéro de l'expéditeur
3source_addr_npiInteger (1)Plan de numérotation de l'expéditeur
4source_addrC-Octet String (21)Adresse de l'expéditeur / identifiant alphanumérique
5dest_addr_tonInteger (1)Type de numéro du destinataire
6dest_addr_npiInteger (1)Plan de numérotation du destinataire
7destination_addrC-Octet String (21)MSISDN du destinataire
8esm_classInteger (1)Mode de message + type + indicateur UDHI
9protocol_idInteger (1)GSM TP-PID ; généralement 0
10priority_flagInteger (1)0 (normal) – 3 (maximum)
11schedule_delivery_timeC-Octet String (1|17)Vide = immédiat
12validity_periodC-Octet String (1|17)Vide = SMSC par défaut
13registered_deliveryInteger (1)Demander un accusé de réception
14replace_if_present_flagInteger (1)0 = non, 1 = remplacer
15data_codingInteger (1)Encodage / DCS
16sm_default_msg_idInteger (1)Identifiant du message prédéfini ; généralement 0
17sm_lengthInteger (1)Longueur de short_message (0–254)
18short_messageOctet String (0–254)La charge utile du message
§02

Adressage : TON et NPI

source_addr et destination_addr portent chacun un Type of Number (TON) et un Numbering Plan Indicator (NPI). Pour un MSISDN international, utilisez TON 1 (International) avec NPI 1 (ISDN/E.164). Pour un identifiant d'expéditeur alphanumérique, utilisez TON 5 (Alphanumeric) — source_addr contient alors jusqu'à 11 caractères GSM-7. Un TON/NPI erroné est une cause majeure de trafic non remis ou mal routé.

Valeurs courantes de TON et NPI
TONSignificationNPISignification
0Inconnu0Inconnu
1International1ISDN (E.163/E.164)
2National3Données (X.121)
3Spécifique au réseau4Telex (F.69)
4Numéro d'abonné6Mobile terrestre (E.212)
5Alphanumérique8National
6Abrégé9Privé
§03

esm_class

esm_class est un champ de bits qui définit le mode de messagerie, le type de message et des fonctions propres au GSM. Le bit le plus important pour les expéditeurs est UDHI (0x40) : positionnez-le lorsque short_message commence par un User Data Header, par exemple un en-tête de concaténation. Le bit 0x80 demande le reply path GSM.

Signification des bits d'esm_class (sélection)
BitsChampValeur → signification
1–0Mode de messagerie0 par défaut · 1 datagramme · 2 transfert · 3 stockage et retransmission
5–2Type de message0 par défaut · 0x04 accusé de réception · 0x08 acquittement de remise · 0x10 acquittement utilisateur
6UDHI0x40 = short_message begins with a UDH
7Chemin de réponse0x80 = set GSM reply path
§04

data_coding, registered_delivery et validité

data_coding sélectionne l'encodage du texte : 0x00 = défaut du SMSC (généralement GSM 7 bits), 0x04 = binaire 8 bits, 0x08 = UCS-2 pour l'Unicode. Les deux bits de poids faible de registered_delivery contrôlent les accusés : 0 = aucun, 1 = accusé au succès ou à l'échec final, 2 = à l'échec seulement. validity_period et schedule_delivery_time utilisent la forme absolue YYMMDDhhmmsstnnp ou une forme relative ; une chaîne vide signifie remise immédiate et validité par défaut du SMSC. Gardez validity_period court pour les OTP afin qu'un code retardé expire plutôt que d'arriver périmé.

data_coding — les valeurs que vous utilisez réellement
ValeurEncodage
0x00Alphabet par défaut du SMSC (généralement GSM 7 bits)
0x03Latin-1 (ISO-8859-1)
0x04binaire 8 bits (octet non spécifié)
0x08UCS-2 (UTF-16BE) — Unicode
§05

La réponse

submit_sm_resp (0x80000004) renvoie command_status et, en cas de succès, un message_id (C-Octet String, jusqu'à 65 caractères) que le SMSC attribue au message. Conservez-le : c'est la clé que vous rapprochez du receipted_message_id dans l'accusé de réception. Méfiez-vous des divergences de format — certains SMSC renvoient l'id en hexadécimal au submit et en décimal dans le DLR, aussi normalisez les deux lors de la corrélation.

FAQ

Questions fréquemment posées

Quels TON/NPI utiliser pour un identifiant d'expéditeur alphanumérique ?

Utilisez source_addr_ton = 5 (Alphanumeric) et source_addr_npi = 0 (Unknown). source_addr contient alors jusqu'à 11 caractères GSM-7. Les identifiants d'expéditeur alphanumériques sont en affichage seul et ne peuvent recevoir de réponses.

Comment demander un accusé de réception dans submit_sm ?

Positionnez registered_delivery = 1 pour un accusé à la remise finale ou à l'échec, ou 2 pour l'échec seulement. Ne demandez des accusés que là où vous les consommez réellement, car des DLR non lus gaspillent du débit.

Quelle est la longueur maximale de short_message ?

Le champ short_message contient jusqu'à 254 octets, sm_length en donnant le nombre exact. Pour un texte plus long, soit segmentez avec un UDH sur plusieurs PDU submit_sm, soit portez toute la charge utile dans le TLV message_payload au lieu de short_message.

Puis-je renseigner à la fois short_message et message_payload ?

Non. Renseignez l'un ou l'autre. Les fournisseurs rejettent un submit_sm qui porte le message à la fois dans le champ obligatoire short_message et dans le TLV message_payload.

Comment envoyer un message Unicode ?

Positionnez data_coding = 0x08 (UCS-2) et encodez le texte en UTF-16 big-endian dans short_message. Un SMS UCS-2 unique contient 70 caractères ; un texte Unicode plus long est segmenté à 67 caractères par partie.

Références

Spécifications sources

Les normes publiées sur lesquelles repose cette page. S'ouvre dans un nouvel onglet.

BNMaintenu par l'équipe d'ingénierie BroadNet·Messagerie de qualité opérateur depuis 2003
Placez-le sur le fil

Conçu avec une véritable liaison SMPP et une API REST.

Demandez un accès de test avec de véritables clés de test : envoyez d’abord à votre propre numéro vérifié, puis passez en production dans plus de 200 pays une fois que votre identité d’expéditeur et vos routes seront approuvées.