Comment insérer des données dans le champ SM SMPP

Dans SMPP (Short Message Peer-to-Peer), la charge utile du message court (SM) est le texte réel (ou les données binaires) du message SMS transmis. Pour garantir une interprétation correcte de ce contenu, le champ data_coding dans le PDU joue un rôle crucial en indiquant le format d'encodage du message.

Encodages courants dans SMPP

Le champ data_coding fait 1 octet et informe le SMSC sur la manière d'interpréter la charge utile du message.

HexDécimalEncodageDescription
0x000GSM 7-bit par défautJeu de caractères SMS standard
0x011ASCIIASCII 8-bit (sous-ensemble Latin-1)
0x033Latin-1 (ISO 8859-1)Jeu de caractères d'Europe occidentale
0x088UCS2Unicode (16-bit, big-endian)
0x044BinaireDonnées binaires brutes 8-bit

Exemples de messages encodés

1. GSM 7-bit (data_coding = 0x00)

Encodage SMS standard. Efficace (jusqu'à 160 caractères dans un seul message).

Texte : "Hello"
GSM 7-bit Packed : C8 32 9B FD 06

2. UCS2 (data_coding = 0x08)

Utilisé pour les scripts non latins (ex. arabe, chinois, emojis). Supporte 70 caractères par message.

Texte : "مرحبا"
UCS2 Hex : 0645 0631 062D 0628 0627
Octets (hex) : 06 45 06 31 06 2D 06 28 06 27

3. ASCII (data_coding = 0x01)

Caractères latins de base uniquement, moins efficace en espace que GSM 7-bit.

Texte : "Hello"
ASCII Hex : 48 65 6C 6C 6F

Exemple de PDU SMPP avec encodage UCS2

Voici un PDU SMPP submit_sm transportant un message Unicode :

0000004B  // Longueur de commande (75 octets)
00000004  // ID de commande (submit_sm)
00000000  // Statut de commande
00000001  // Numéro de séquence
74657374  // service_type : "test"
01        // source_addr_ton : International
01        // source_addr_npi : ISDN
31323334  // source_addr : "1234" (ASCII)
00
01        // dest_addr_ton
01        // dest_addr_npi
35363738  // destination_addr : "5678"
00
00        // esm_class
00        // protocol_id
00        // priority_flag
00        // schedule_delivery_time
00        // validity_period
00        // registered_delivery
00        // replace_if_present_flag
08        // data_coding : UCS2
00        // sm_default_msg_id
0A        // sm_length : 10 octets
06450631  // Message en UCS2 (ex. "مر")
062D0628

Encodage et concaténation

Les messages longs sont divisés en parties à l'aide de l'UDH (User Data Header). Cela réduit la taille maximale de la charge utile :

  • GSM 7-bit : 160 → 153 caractères par partie
  • UCS2 : 70 → 67 caractères par partie

Exemple d'UDH pour une partie de message :

05 00 03 CC 02 01
// 05 : longueur de l'en-tête
// 00 03 : IEI de concaténation
// CC : Référence du message
// 02 : nombre total de parties
// 01 : partie actuelle

Résumé

SMPP offre des options d'encodage flexibles via le champ data_coding. Un encodage approprié garantit la compatibilité entre les réseaux mondiaux, en particulier lors de la gestion de texte multilingue ou de données binaires. Les développeurs doivent faire correspondre les types d'encodage avec le contenu et les destinataires attendus pour éviter la corruption des messages.

Références

  • Spécification SMPP 3.4
  • Jeu de caractères GSM 03.38
  • Standard Unicode

More information