
L'interface souple et l'excellent support technique nous ont permis d'intégrer notre système front-office avec un minimum d'effort. Une excellente société.
Nous avons récemment reçu un nombre croissant d'appels d'assistance demandant si nous prenons en charge l'envoi d'un message texte SMS sur un port spécifique de téléphone. En deux mots, c'est possible, mais il s'agit d'un sujet complexe, et d'un processus très manuel, que la plupart des utilisateurs n'ont pas à mettre en œuvre. Mais si vous souhaitez relevez vos manches de chemise et vous y plonger, veuillez consulter ce qui suit. Nous allons commencer par un préambule avant d'aborder le vif du sujet. Je suppose, par ailleurs, que vous savez utiliser un service Web ou effectuer des appels HTTP Post vers une page Web.
Brève introduction au SMPP et aux PDU
La plupart de nos connexions aux opérateurs réseau s'effectuent via protocole SMPP (voir smsforum.net pour les téléchargements de spécification). Envoyer un SMS vers un port spécifique nécessite de posséder les rudiments des concepts sur lesquels repose ce protocole, en particulier le PDU (Protocol Data Unit) SubmitSM. En termes simples, SMPP exploite des PDU de requête et de réponse. Pour envoyer un message, nous envoyons un PDU SubmitSM à l'opérateur, qui renvoie ensuite un PDU de réponse pour signifier son acceptation.
Un PDU SubmitSM contient tous les éléments nécessaires à l'opérateur pour envoyer un message texte : les numéros de mobile d'émission et de destination (dans les paramètres d'adresse de la source et de la destination), le texte du message à envoyer (dans la section de données utilisateur) et un certain nombre d'autres paramètres que nous devons définir pour décrire le contenu du message.
Parmi ces paramètres, les deux plus importants sont le programme de codage de données et la classe ESM. Le programme de codage de données (Data Coding Scheme ou DCS) sert à décrire la manière dont les octets de la section données utilisateur du PDU sont encodés. La classe ESM décrit les attributs spéciaux appliqués au message (sujet détaillé ultérieurement).
Point important, le PDU SubmitSM ne possède pas de paramètres prenant directement en charge les ports de source et de destination de l'application sur l'appareil pour y envoyer le message.
Alors, comment spécifier les valeurs de port du PDU si aucun paramètre ne les prend en compte ? Il suffit de placer un en-tête dans la section de données utilisateur.
Introduction aux UDH (User Data Headers)
Un UDH est une série d'octets de la section de données utilisateur d'un PDU SubmitSM. Un message texte standard ne possède pas d'UDH. Il est donc traité comme un message texte normal par le téléphone et est transmis à la boîte de réception de message standard. Un UDH peut contenir des informations de port et de concaténation, qui indiquent à l'appareil où envoyer le message et s'il doit attendre des parties de message supplémentaires.
Dans cet exemple, il nous suffit de connaître les informations de port de l'UDH.
Voici un flux d'octets (encodé en hexadécimal) susceptible de se trouver dans la section de données utilisateur du PDU d'un message Push WAP (un message Push WAP doit contenir des informations de port) :
0605040B8423F025060A03AE81EAAF828DADB48401056A0045C60C0364657670726F6A32302E626C6F6773706F742 E636F6D2F000801034D7920426C6F67000101
L'en-tête de ce message est le suivant :
0605040B8423F0
Les trois premiers octets (060504) décrivent différentes longueurs dans l'en-tête. Les informations de port sont contenues dans les quatre octets suivants (0B8423F0). En résumé, le message complet peut être décomposé comme suit :
060504: Indicateurs de longueur
0B84 : Port de destination (2948)
23F0 : Port d'émission (9200)
25060.... : les octets de message décrivant l'URL et du texte.
Un message Push WAP est donc une série d'octets avec un UDH spécifiant le port de destination 2948 et le port source 9200. Mais comme les en-têtes sont optionnels dans une section de données utilisateur, comment le téléphone reconnaît-il leur présence ? Elle est indiquée dans le paramètre de classe ESM du PDU.
Indicateur UDH et codage de données
Le paramètre de classe ESM, qui joue un rôle majeur dans l'interprétation du message et son affichage sur le téléphone, est simplement constitué d'un seul octet. Les combinaisons des bits individuels de cet octet indiquent différentes exigences, mais celle qui nous intéresse est l'indicateur UDH. Si vous définissez ces bits (et que vous n'avez pas besoin d'autres ensembles), la valeur de l'octet de classe ESM est 64 (0x40), ce qui indique qu'un UDH est présent dans la section de données utilisateur.
Le paramètre DCS entre ici en jeu, en indiquant comment décoder les octets situés après l'en-tête (s'il en existe un). Dans un message normal sans en-tête, ce paramètre possède la valeur 0, qui indique l'alphabet par défaut utilisé par l'opérateur. Dans un message Push Wap, il possède la valeur 4, qui indique un binaire 8 bits.
Comment envoyer, dans ce cas, un message vers un port ?
Maintenant que vous êtes familiarisé avec les concepts de base, je vais finalement vous dévoiler ce pourquoi vous lisez ce message. Nous proposons un service d'envoi avancé (Advanced Send Service) sous la forme d'un service Web et d'une interface HTTP Post. En examinant l'un de ces éléments, vous découvrirez les paramètres ESMClass et DataCodingScheme (vous voyez : je vous ai dit qu'ils étaient importants. Donc, si vous avez directement entamé votre lecture à ce point et ne voyez pas de quoi je parle, revenez en arrière et lisez la totalité du document).
Prenons un exemple. Vous devez envoyer un message texte « ab » (sans les guillemets) vers le port 5000 (pour les valeurs de port réelles, consultez la documentation de l'application de destination).
1. Construisez l'en-tête
Vous devez construire l'en-tête et encoder le texte à la fin de ce dernier.
Dans cet exemple, l'en-tête sera :
06050413880000
Car :
060504: Indicateurs de longueur
0B84 : Port de destination (5000)
0000 : Port d'émission (zéro si vous n'avez pas besoin d'un port spécifique)
2. Encodez votre texte
Encodez votre texte en ASCII et ajoutez-le à l'en-tête. Le texte « ab » étant égal à 0x6162, votre message complet avec en-tête est :
060504138800006162
3. Soumettez le message
Dans ce cas la valeur du paramètre ESMClass sera 64 et celle de DataCodingScheme, 0. Placez la chaîne 060504138800006162 comme paramètre de corps, entrez les valeurs du reste des paramètres (émetteur, destination, etc.) et effectuez votre envoi.
Et voilà. Tant que votre en-tête est correct et que vous avez encodé le texte correctement, votre message sera transmis à l'application du téléphone qui le requiert.
Remarques importantes
Points à prendre en compte lors de l'envoi de messages de ce type

L'interface souple et l'excellent support technique nous ont permis d'intégrer notre système front-office avec un minimum d'effort. Une excellente société.