Spécifications techniques du SMPP

Base de connaissances

Spécifications techniques du SMPP


Icons/System/eye-open Created with Sketch. 10105 vues 05.03.2025 Telecom / SMS

Objectif

Découvrez les spécifications techniques de l'offre SMPP OVHcloud.

Glossaire

  • PDU : Protocol Data Unit est l'objet/entité permettant d'échanger des requêtes et des réponses
  • SMPP : Short Message Peer to Peer Protocol
  • SMSC : Short Message Service Center (serveur)
  • ESME : External Short Message Entity (client)
  • UDH : User Data Header
  • SM : Short Message
  • DLR : Delivery Receipt
  • PTT : Premium Tracking Technical est un code d'erreur communiqué dans le message d'un DLR
  • MT : Mobile Terminated
  • MO : Mobile Originated

Pour plus d'explications sur les abréviations, consultez la page 10 des spécifications SMPP de smpp.org.

Présentation

A quoi sert le SMPP ?

Le SMPP (Short Message Peer-to-Peer) est un protocole permettant d’échanger des SMS vers des opérateurs téléphoniques et par des fournisseurs de contenu. Il utilise en général deux connexions TCP/IP, une pour l'envoi et une pour la réception de données.

Quels sont les bénéfices du SMPP par rapport à l'offre standard SMS

  • Le protocole est standardisé et permet de s’intégrer à de nombreux outils du marché
  • Il permet d’obtenir un débit important avec peu de latence

Quelle est l'utilisation type d’envoi d’un SMS par SMPP ?

L'application d'envoi de SMS du client (ESME) a trois moyens de communication avec le SMSC :

  • Transmitter : émission d’un message
  • Receiver : réception d’un message
  • Transceiver : émission et réception d’un message

Retrouvez des informations complémentaires sur les moyens de communication au chapitre Liste des PDUs.

Une fois la connexion établie entre le ESME et un SMSC OVHcloud, l'émission et/ou la réception d’un message peuvent être effectuées.
L’authentification de la connexion au SMSC se fait avec le system_id (identifiant), le password et l’adresse IP de votre application.

L’offre SMPP OVHcloud permet :

  • L’envoi de SMS avec (ou sans) accusé de réception (DLR)
  • La réception d’un message envoyé depuis un mobile
SourceDestination
Envoi d'un SMS (MT)- Shortcode (France métropolitaine et Belgique)
- Alphanumérique
- Numéro virtuel*
Numéro international au format E.164
Envoi d'un SMS autorisant une réponse- Shortcode (France métropolitaine)Numéro international au format E.164
Envoi d'un SMS autorisant une réponse avec un ratio MT/MO 1:1- Numéro virtuel*Numéro virtuel*
Réception d'un SMS envoyé depuis un mobile (MO)- Numéro du téléphone mobileNuméro virtuel*

Numéro virtuel* : canal transactionnel uniquement

Spécifications techniques

Description des protocoles

Bind Request

Un ESME peut se connecter dans l'un des trois modes suivants : Transmitter, Receiver, Transceiver.
Ces demandes de connexion sont prises en charge conformément à la spécification du protocole SMPP v3.4.

Bind Response

Lors du processus de connexion, le ESME fait une requête de Bind en fournissant le system_id (identifiant) et son mot de passe.
Ces informations, ainsi que l'IP de votre application, sont utilisées pour authentifier la demande de connexion.
Une réponse est ensuite envoyée par le SMSC avec un statut définissant le succès ou non de l'authentification.

Liste des PDUs

bind_transceiver et bind_transceiver_resp

Ce type de bind est utilisé pour initier une connexion permettant la communication bidirectionnelle entre le SMSC et le ESME (c'est la fusion des modes transmitter et receiver).

bind_transmitter et bind_transmitter_resp

Ce type de bind est utilisé pour initier une connexion permettant uniquement la communication du ESME vers le SMSC (envoi de SMS vers un mobile). Le SMSC envoie les réponses associées aux PDUs de requête sur la même connexion.

bind_receiver et bind_receiver_resp

Ce type de bind est utilisé pour initier une connexion permettant uniquement la communication du SMSC vers le ESME (envoi d'accusé de réception (DLR) ou de messages envoyés depuis un mobile). Le ESME envoie les réponses associées aux PDUs de requête sur la même connexion.

unbind et unbind_resp

Requête de fermeture d'une connexion étant initiée par le SMSC ou le ESME. La partie recevant la requête renvoie une réponse quand elle est prête pour couper la connexion.

Le SMSC OVHcloud ferme (unbind) les connexions toutes les 24h, le ESME doit se reconnecter automatiquement.

outbind

Non supporté

submit_sm et submit_sm_resp

Le submit_sm est utilisée par un ESME pour soumettre un SMS au SMSC pour transmission à un numéro de téléphone mobile.

Paramètres obligatoires :

Nom du paramètreRéf. Spec 3.4Supporté
service_type5.2.11Non
source_addr_ton5.2.5Oui
source_addr_npi5.2.6Oui
source_addr5.2.8Oui
dest_addr_ton5.2.5Oui
dest_addr_npi5.2.6Oui
destination_addr5.2.9Oui
esm_class5.2.12Oui
protocol_id5.2.13Non
priority_flag5.2.14Non
schedule_delivery_time5.2.15Oui
validity_period5.2.16Oui
registered_delivery5.2.17Oui
replace_if_present_flag5.2.18Non
data_coding5.2.19Oui
sm_default_msg_id5.2.20Non
sm_length5.2.21Oui
short_message5.2.22Oui
  • source_addr peut être un numéro international, un numéro alphanumérique ou un numéro shortcode :
    • alphanumérique : ces numéros de téléphone sont composés de lettres et de chiffres (ex : ovh123).
      • source_addr_ton = 5
      • source_addr_npi = 0
    • shortcode : ces numéros de téléphone contiennent entre 3 et 8 numéros (ex : 38069). Le shortcode est seulement là pour avertir notre service que nous allons devoir en utiliser un. Le shortcode réel utilisé pour envoyer le sms sera défini par l'opérateur télécom.
      • source_addr_ton = 3
      • source_addr_npi = 1
    • international : ces numéros de téléphone se composent de l'identifiant du pays et du numéro habituel sans le premier 0 (par exemple 33601020304).
      • source_addr_ton = 1
      • source_addr_npi = 1
  • destination_addr doit être un numéro international (ex : 33600000001)
    • dest_addr_ton = 1
    • dest_addr_npi = 1

Paramètres optionnels :

Nom du paramètreRéf. Spec 3.4Supporté
user_message_reference5.3.2.17Non
source_port5.3.2.20Non
source_addr_subunit5.3.2.2Non
destination_port5.3.2.21Non
dest_addr_subunit5.3.2.1Oui
sar_msg_ref_num5.3.2.22Non
sar_total_segments5.3.2.23Non
sar_segment_seqnum5.3.2.24Non
more_messages_to_send5.3.2.34Non
payload_type5.3.2.10Non
message_payload5.3.2.32Non
privacy_indicator5.3.2.14Non
callback_num5.3.2.36Non
callback_num_pres_ind5.3.2.37Non
callback_num_atag5.3.2.38Non
source_subaddress5.3.2.15Non
dest_subaddress5.3.2.16Non
user_response_code5.3.2.18Non
display_time5.3.2.26Non
sms_signal5.3.2.40Non
ms_validity5.3.2.27Non
ms_msg_wait_facilities5.3.2.13Non
number_of_messages5.3.2.39Non
alert_on_msg_delivery5.3.2.41Non
language_indicator5.3.2.19Non
its_reply_type5.3.2.42Non
its_session_info5.3.2.43Non
ussd_service_op5.3.2.44Non

Le submit_sm_resp est la confirmation de la bonne réception du submit_sm par le SMSC.
Il contient un message_id qui est l'identifiant du message du SMSC permettant de faire le lien avec l'accusé de réception (DLR) envoyé plus tard lorsque le mobile a reçu le SMS (sous réserve que la demande d'un DLR est spécifiée dans le submit_sm).

deliver_sm et deliver_sm_resp

Le deliver_sm est émis par le SMSC pour envoyer un accusé de réception (DLR) au ESME si ce dernier en a fait la demande dans le submit_sm, ou lorsqu'un SMS entrant est reçu (réponse à un shortcode ou un SMS envoyé à destination d'un numéro virtuel).

Paramètres obligatoires :

Nom du paramètreRéf. Spec 3.4Supporté
service_type5.2.11Non
source_addr_ton5.2.5Oui
source_addr_npi5.2.6Oui
source_addr5.2.8Oui
dest_addr_ton5.2.5Oui
dest_addr_npi5.2.6Oui
destination_addr5.2.9Oui
esm_class5.2.12Oui
protocol_id5.2.13Non
priority_flag5.2.14Non
schedule_delivery_time5.2.15Non
validity_period5.2.16Non
registered_delivery5.2.17Non
replace_if_present_flag5.2.18Non
data_coding5.2.19Oui
sm_default_msg_id5.2.20Non
sm_length5.2.21Oui
short_message5.2.22Oui

Paramètres optionnels :

Nom du paramètreRéf. Spec 3.4Supporté
receipted_message_id5.3.2.12Oui
user_message_reference5.3.2.17Non
source_port5.3.2.20Non
destination_port5.3.2.21Non
sar_msg_ref_num5.3.2.22Non
sar_total_segments5.3.2.23Non
sar_segment_seqnum5.3.2.24Non
user_response_code5.3.2.18Non
privacy_indicator5.3.2.14Non
payload_type5.3.2.10Non
message_payload5.3.2.32Non
callback_num5.3.2.36Non
source_subaddress5.3.2.15Non
dest_subaddress5.3.2.16Non
language_indicator5.3.2.19Non
its_session_info5.3.2.43Non
network_error_code5.3.2.31Non
message_state5.3.2.35Non

Paramètres propres à OVHcloud :

Nom du paramètreTag TLV (hex)Type de champTailleDescription
outgoing_id0x1401Chaîne de caractères terminée par null (\0)64 octetsID interne à OVHcloud utilisé dans le cas d'un DLR
incoming_id0x1402Chaîne de caractères terminée par null (\0)64 octetsID interne à OVHcloud utilisé dans le cas d'un MO

Notre service essaie d'envoyer les deliver_sm au ESME pendant 7 jours maximum.

Codes d'erreur des accusés de réception (DLR)
Code d'erreur (PTT)Description
0No Error
1Internal Error
2Network Error
3Unreachable Destination
4Equipment Error
5Subscriber / Credit Related (e.g. Recipient number unreachable)
6Timeout
7Operator Related
8Parental Lock
9Undeliverable
10Account Credit (e.g. Not enough credit, Auto-recredit issue)
50Internal Error
51Internal Error
52Missing Template (e.g. US destination requires approved templates)
53Blacklisted (a STOP response sent by the recipient to block the sender)
54Forbidden destination
55Sender Temporarily Ratelimited (maximum sms sent exceeded during a short period)
100Invalid Destination Numbering Plan
101Invalid Content
102Invalid GSM7 Coding (e.g. error with packed/unpacked GSM7)
103Message too long for the number of allowed segments
254Pending
255Unknown Error
800Undeliverable
801Expired
802Deleted
803Rejected
804Unknown

PDU utilisée par le SMSC et le ESME pour vérifier si une connexion est toujours active.

Il est recommandé de respecter un intervalle de 30 secondes entre chaque requête.

generic_nack

PDU retourné par le SMSC lorsqu'un PDU n'est pas supporté ou corrompu.

query_sm et query_sm_resp

Non supportés.

cancel_sm et cancel_sm_resp

Non supportés.

replace_sm et replace_sm_resp

Non supportés.

alert_notification

Non supporté.

submit_multi et submit_multi_resp

Non supportés.

data_sm et data_sm_resp

Non supportés

Statuts des PDU de réponse

Tout PDU de réponse (ceux terminant par _resp) possède un statut. La spécification SMPP fournit une liste de statuts génériques (SMPP 3.4, 5.1.3 command_status) communs à tous les SMSC.

Une plage spécifique de statuts est réservé aux SMSC. Voici ceux utilisés par OVHcloud :

Code d'erreurValeurDescription
ESME_RBINDTHROTTLED0x00000400Too many bind authentication
ESME_RUNSDATACODING0x00000401Data Coding unsupported
ESME_RINVGSM7CODING0x00000402Short message GSM7 (GSM 03.38) encoding issues, contact support

Data Coding Scheme

Le data coding est utilisé par le submit_sm et le deliver_sm pour encoder le message.

Liste des data coding supportés:

  • GSM 03.38 (GSM 7 bits)*
  • UCS2

GSM 03.38* : cet endodage représente chaque caractère sur un septet mais certains clients SMPP le représentent sur un octet. Le format octet étant le plus utilisé, votre compte SMPP est configuré par défaut sur ce format. Si vous rencontrez des problèmes d'encodage avec votre client SMPP, veuillez contacter le support OVHcloud pour faire modifier le format.

TLV

Un TLV (Tag, Length, Value) permet d'enrichir un PDU en y ajoutant des informations optionnelles. Certains sont communs et utilisés par plusieurs SMSCs et d'autres peuvent être plus spécifiques à OVHcloud.

Système d'identification

Système ID

Le system_id est l'identifiant de connexion SMPP, il est généré sous la forme d'une chaîne de caractères aléatoires.

Mot de passe

Le mot de passe est généré et fourni à chaque création de compte SMPP.

Liste d'IPs autorisées

Une liste d'IPs est nécessaire pour autoriser la ou les machines à se connecter au SMSC.

Type de connexion

  • Connexion sécurisée : connexion chiffrée avec TLS 1.3 minimum.
  • Connexion non sécurisée : connexion ne bénéficiant pas de chiffrement TLS pour des besoins de rétrocompatibilité (tous les échanges sont en clair et donc visibles par des personnes tierces).

Limites d'envoi

Connexion par zone

Par défaut, un compte SMPP ne peut avoir qu'une paire de Transmitter/Receiver ou un Transceiver par zone.

Windowing

Par défaut, un compte SMPP est autorisé à traiter jusqu'à maximum 10 messages simultanément.

Débit autorisé

Par défaut, un compte SMPP est autorisé à traiter jusqu'à maximum 20 messages par seconde par connexion.

Version du protocole

La version du protocole est le 3.4.

Liste des clients SMPP testés par OVHcloud

  • Kannel 1.4.5

Aller plus loin

Documentation technique SMPP

Gestion d'un compte SMS SMPP

Articles associés