Envoyer et recevoir des SMS depuis un programme

Envoyer et recevoir des SMS depuis un programme

Nous venons d'ajouter une nouvelle fonctionnalité au YoctoHub-GSM. Si vous mettez son firmware à jour, vous pourrez désormais l'utiliser pour envoyer et recevoir des SMS. Ca n'est pas forcément très utile pour accéder à un capteur Yoctopuce, mais par contre ça permet de nouvelles utilisations du YoctoHub-GSM, pour lui-même. Par exemple, l'échange de SMS pour implémenter une identification à deux facteurs.



De nos jours, un simple mot de passe n'est plus suffisant pour identifier un utilisateur avec une raisonnable certitude. On utilise donc en général une identification à deux facteurs, c'est-à-dire un deuxième canal de communication indépendant, par exemple un numéro de téléphone portable, pour vérifier avec l'utilisateur qui se connecte que c'est bien lui. D'où l'intérêt de pouvoir échanger des SMS...

Il existe bien sûr des passerelles entre SMS et mail ou vers le web que vous pourriez utiliser pour envoyer et recevoir des SMS. Mais si votre application est importante, vous ne voudrez probablement pas dépendre d'un service tiers sur lequel vous n'avez aucun contrôle. Nous allons donc vous montrer comment procéder à l'aide de modules Yoctopuce.

Pour réaliser cet exemple, vous aurez donc besoin d'un YoctoHub-GSM-2G, YoctoHub-GSM-3G-EU ou YoctoHub-GSM-3G-NA. Vous devrez peut-être le mettre à jour avec le dernier firmware, car nous venons d'ajouter la fonctionnalité SMS dans les YoctoHub-GSM. Il vous faudra aussi charger la dernière version de la librairie Yoctopuce pour le langage de programmation de votre choix pour avoir les fonctions d'envoi et de réception de SMS.

L'envoi d'un SMS de simple texte ne demande que l'appel d'une seule méthode: sendTextMessage(). Vous pouvez même utiliser notre librairie en ligne de commande pour le faire depuis un shell script. En supposant que vous ayez branché le YoctoHub-GSM par USB, il suffit de la commande:

YMessageBox any sendTextMessage "+123456789" "Hello world!"


pour envoyer un Hello World au numéro de téléphone +123456789.

Vous pouvez aussi envoyer un SMS Flash, aussi appelé SMS de classe 0, qui s'affiche directement sur l'écran du téléphone portable du destinataire et n'est pas forcément enregistré sur la carte SIM. Pour cela, utilisez la méthode sendFlashMessage():

YMessageBox any sendFlashMessage "+123456789" "Votre code SMS est 1234"



Pour avoir plus de contrôle sur les différents paramètres du message que vous envoyez, ou pour rajouter des caractères unicodes spéciaux comme des émoticônes, vous passerez par un objet intermédiaire YSms. Voici un exemple en PHP:

$mbox = YMessageBox::FirstMessageBox();
$sms = $mbox->newMessage('+123456789');
$sms->addText("Surchauffe de la salle serveur ");
$sms->addUnicodeData(Array(0x1F630)); // smiley transpirant
$sms->send();


Si le contenu de votre message fait plus de 160 caractères de l'alphabet GSM, ou plus de 70 caractères s'il contient des caractères unicode quelconques, il sera automatiquement envoyé en plusieurs messages SMS, et ré-assemblé par le récepteur.

Si vous optez pour un protocole de vérification à deux facteurs où l'utilisateur doit lui-même vous envoyer un message, vous pouvez aller vérifier les messages reçus et autoriser les sessions en conséquence. Voici un exemple en Node.js (EcmaScript):

var mbox = YMessageBox.FirstMessageBox();
var messages = mbox.get_messages();
for(var i = 0; i < messages.length; i++) {à
    var msg = messages[i];
    console.log(msg.get_sender() + ': ' + msg.get_textData());
}



Dernière difficulté potentielle: si vous ne pouvez pas brancher de YoctoHub-GSM directement à votre serveur web, par exemple si vous utilisez un hébergement chez un tiers, le plus efficace est de brancher le YoctoHub-GSM sur un YoctoHub-Ethernet. En effet, rien ne vous empèche d'utiliser un YoctoHub-GSM comme un simple périphérique servant à envoyer des messages. Par exemple, si vous le branchez sur un YoctoHub-Ethernet, vous pourrez configurer ce dernier pour qu'il fasse des callback HTTP permettant au serveur de prendre le controle du YoctoHub-GSM sans engendrer de frais de connexion GSM. Si votre hébergement web est basé sur Java ou Node.js, vous pourrez même utiliser un callback WebSocket et ainsi garder votre YoctoHub-GSM connecté en permanence à votre serveur web. Si vous êtes en PHP, vous devrez configurer votre callback HTTP pour se connecter toutes les quelques secondes sur votre site web pour envoyer les SMS en attente des dernières secondes. C'est un peu moins élégant, mais cela fonctionnera aussi !

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.