BroadNet
Protocoles et API Checklist gratuite

Checklist d'intégration SMPP

Une checklist de terrain pour intégrer le SMPP v3.4/v5.0 : types de bind, TLV optionnels, gestion des accusés de réception, keepalives enquire_link, throttling, TLS, et un plan de test pré-production.

33 points de contrôle5 min de lectureMis à jour le
Recevoir le PDF par e-mail
En bref

Le SMPP (Short Message Peer-to-Peer) est le protocole binaire que la plupart des agrégateurs et opérateurs exposent pour la messagerie A2P à haut débit. Une intégration propre tient moins à l'écriture des PDU qu'au soin apporté aux détails opérationnels : choisir le bon mode de bind, respecter les limites de fenêtre et de throttle, analyser les accusés de réception de façon fiable, garder la session active, et sécuriser le transport. Travaillez de haut en bas — chaque groupe est un point de contrôle que vous pouvez valider avant de promouvoir un bind en production.

La checklist

Avancez point par point, cochez au fur et à mesure.

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

Configuration de session et de bind

Choisissez le bon mode de bind selon le sens de votre trafic et confirmez la version de protocole négociée avant d'envoyer le moindre message.

  • Confirmer la version SMPP — v3.4 pour la plupart des routes, v5.0 là où le fournisseur prend en charge l'état de congestion et les TLV enrichis.La v5.0 est rétrocompatible ; ne supposez pas les fonctionnalités disponibles tant que le bind_resp ne l'a pas confirmé.
  • Choisir le bon type de bind par session.transmitter (MT uniquement), receiver (DLR/MO uniquement), ou transceiver (les deux sur une session). Préférez transceiver pour réduire de moitié le nombre de connexions là où le fournisseur le permet.
  • Définir system_id, password, system_type et address_range exactement comme provisionnés.Un address_range mal renseigné bloque silencieusement le routage MO/DLR sur les binds receiver.
  • Convenir par écrit avec le fournisseur du nombre de binds simultanés et du TPS par bind.Ouvrir plus de binds que provisionné est la cause la plus fréquente d'un compte throttlé ou coupé.
  • Gérer explicitement les codes de statut du bind_resp — réessayer sur ESME_RALYBND et ralentir sur ESME_RBINDFAIL.Ne bouclez jamais en boucle serrée sur un bind échoué ; utilisez un backoff exponentiel avec jitter.
02

Soumission des messages (submit_sm)

  • Définir correctement source_addr_ton / source_addr_npi et dest_addr_ton / dest_addr_npi pour les sender ID alphanumériques vs numériques.Sender alphanumérique → TON 5 (alphanumeric) ; MSISDN international → TON 1, NPI 1.
  • Choisir le bon data_coding : GSM 7 bits (0), 8 bits (4), ou UCS-2 (8) pour l'Unicode.Mélanger les encodages sans régler data_coding provoque du mojibake et une mauvaise segmentation.
  • Implémenter la concaténation des messages longs via UDH ou les TLV optionnels SAR (sar_msg_ref_num, sar_total_segments, sar_segment_seqnum).Choisissez une méthode et restez-y cohérent ; certaines routes rejettent l'UDH, d'autres les TLV SAR.
  • Demander les accusés de réception avec registered_delivery = 1 uniquement là où vous les exploitez.Demander des DLR que vous ne traitez pas gaspille du débit et peut déclencher des avertissements côté fournisseur.
  • Respecter la sémantique de validity_period et schedule_delivery_time selon votre cas d'usage (OTP = validité courte).Les OTP de courte durée doivent porter une validity_period serrée afin que les messages périmés ne soient pas livrés en retard.
03

Paramètres optionnels (TLV) à envisager

  • message_payload — pour les charges utiles qui dépassent la limite du champ short_message.Ne remplissez pas à la fois short_message et message_payload ; les fournisseurs rejettent cela.
  • TLV sar_* — concaténation standardisée sans octets UDH dans le corps.
  • dest_addr_subunit / source_addr_subunit — là où la route l'exige pour le routage vers le téléphone.
  • Ne transporter les métadonnées fournies par le client que dans des TLV approuvés par le fournisseur.Les TLV personnalisés hors de la plage convenue sont fréquemment supprimés ou provoquent des erreurs d'analyse en aval.
04

Gestion des accusés de réception (DLR)

Les accusés de réception arrivent sous forme de PDU deliver_sm et constituent l'ossature de votre réconciliation et de votre reporting qualité.

  • Analyser l'accusé depuis le champ short_message du deliver_sm : id, sub, dlvrd, date de soumission, date d'achèvement, stat, err.Le champ `stat` (DELIVRD, UNDELIV, EXPIRED, REJECTD, etc.) est votre statut final.
  • Corréler les DLR à votre soumission via le format message_id du fournisseur, pas seulement le texte de l'accusé.Le message_id peut être renvoyé en hexadécimal dans le submit_resp mais en décimal dans le DLR — normalisez les deux.
  • Traiter les accusés intermédiaires (non finaux) séparément des états finaux.Le bit 0x04 de l'esm_class marque un accusé de réception ; seules les valeurs `stat` finales doivent clore un message.
  • Toujours renvoyer un deliver_sm_resp — un DLR non acquitté est renvoyé et peut bloquer la fenêtre.Répondez rapidement même si le traitement en aval est asynchrone.
  • Faire correspondre les codes d'erreur des opérateurs à une taxonomie normalisée (abonné absent, téléphone occupé, bloqué comme spam, numéro invalide).Les codes d'erreur bruts varient selon la route ; une taxonomie normalisée rend la qualité comparable d'une route à l'autre.
05

Keepalive et contrôle de flux

  • Envoyer enquire_link sur une minuterie d'inactivité (typiquement 30 à 60 s) et traiter un enquire_link_resp manquant comme une session morte.C'est le seul moyen fiable de détecter une connexion TCP à moitié ouverte.
  • Implémenter la fenêtre SMPP : plafonner les PDU non acquittés en attente et suspendre les soumissions quand la fenêtre est pleine.Envoyer des submit_sm au-delà de la fenêtre sans discernement est ce qui déclenche ESME_RTHROTTLED.
  • Ralentir sur ESME_RTHROTTLED (0x58) plutôt que réessayer immédiatement.Ajoutez du jitter pour que les tempêtes de reconnexion ne se synchronisent pas entre workers.
  • Respecter unbind / unbind_resp pour un arrêt propre ; se reconnecter avec backoff sur les déconnexions inattendues.
06

Sécurité du transport (TLS)

  • Utiliser SMPP sur TLS là où le fournisseur le propose ; désactiver les binds en clair en production.Le SMPP n'a pas de chiffrement natif — le TLS est le contrôle au niveau de la couche transport.
  • Épingler ou valider la chaîne de certificats du serveur et imposer TLS 1.2 ou supérieur.Rejetez les certificats expirés ou auto-signés ; ne désactivez pas la vérification « pour que ça marche ».
  • Restreindre les binds à des IP source autorisées des deux côtés.L'allow-listing d'IP est un contrôle opérateur standard et un moyen rapide de contenir les fuites d'identifiants.
  • Faire tourner les identifiants SMPP sur un calendrier et les stocker dans un gestionnaire de secrets, jamais dans le code.
07

Plan de test pré-production

  • Envoyer vers un MSISDN de test en direct sur chaque route cible et confirmer la réception sur le téléphone de bout en bout.
  • Vérifier l'aller-retour du DLR pour les issues livré, non livré, expiré et rejeté.
  • Tester les messages longs (multi-segments) et le contenu Unicode (UCS-2) sur chaque route.
  • Effectuer un test de charge au TPS provisionné et confirmer un comportement propre au plafond de fenêtre/throttle.
  • Simuler une connexion coupée en milieu de fenêtre et confirmer une reconnexion propre sans double soumission.L'idempotence en cas de réessai évite la double facturation et la livraison en double sur le téléphone.
  • Confirmer le monitoring : état du bind, occupation de la fenêtre, latence submit/DLR, et taux de codes d'erreur, tous alertants.
Références

Normes et textes des régulateurs cités dans ce guide. BroadNet est membre associé de la GSMA et membre du MEF et opère une messagerie de niveau opérateur depuis 2003.

Obtenir le PDF

Recevez « SMPP Integration Checklist » par e-mail.

Nous vous enverrons un PDF propre et imprimable de cette checklist, à diffuser dans votre équipe ou à garder pour votre appel d'offres (RFP). Un ingénieur messagerie ne vous recontactera que si vous le demandez — aucun spam commercial.

  • PDF imprimable, une page par section
  • Tout le contenu de cette page, mis en forme pour être partagé
  • En option : un appel avec un ingénieur BroadNet

Vous préférez ne pas donner votre e-mail ? Utilisez Imprimer / enregistrer en PDF ci-dessus — la checklist complète figure sur cette page.

Ligne directe · réponse sous un jour ouvré

Recevoir « SMPP Integration Checklist »

Dites-nous où l'envoyer. Nous vous enverrons le PDF par e-mail et ne vous recontacterons que si vous le demandez.

  1. 1Qui
  2. 2Besoin
  3. 3Contexte

Nous répondons sous un jour ouvré ; les devis sous deux jours ouvrés.