Node-RED - Envoie de SMS

Textos, Textos, qui veut mes Textos ?

Nous avons, dans un précédent article, installé et configuré un serveur (passerelle) SMS : sms3tools. Utilisons Node-RED pour envoyer un SMS via le dashboard à une tierce personne.

Objectif:

  • Récupérer les informations téléphone + texte à envoyer
  • Envoyer l’objet json à NODE-RED
{
   "payload":"Ceci est le message",
   "topic":"33612345678",
   "_msgid":"6eb2943f.7ab59c"
}
  • Envoyer le SMS au destinataire

Prérequis

Implémentation

Difficulté appréhendée

Lorsque l’on débute avec Node-RED, la manipulation d’un objet json, n’est pas forcemment simple. Ici nous sommes face à la difficultée suivante :

Objet retourné par le formulaire:

{
  "payload":
  {
    "topic":"33612345678",
    "payload":"Ceci est le message"
  },
  "socketid":"Blz2Pm_yeZQp5YwOAAAB",
  "_msgid":"3d93fb0b.857094"
}

Soit un objet de 3 propriétés, dont la première (payload), est, elle même, un objet de deux propriétés : payload et topic.

Objet attendu par le noeud sms out:

{
  "payload":"Ceci est le message",
  "topic":"33612345678",
  "_msgid":"3d93fb0b.857094"
}

Solution implémentée

Après moults tergiversations, le noeud “function” semble le plus approprié, pour manipuler et transformer les données, fonction de la cible (objet) attendue.

Voici le flux complet proposé:

 nodered-smsgateway-flow

Explications:

Remarque la propriété _msgid n’est pas retirée, cet id, permet une tracabilitée dans la chaine de traitement. Ne vaut-il pas mieux garder cette propriété de bout en bout ?

Code de la fonction 2to1:

var payload=msg.payload.payload
var topic=msg.payload.topic
msg.payload=payload
msg.topic=topic
return msg;

Code complet du flow:

[{"id":"754604fc.a77ec4","type":"sms-out","z":"602114bc.b2e564","name":"@téléphone","topic":"","x":720,"y":220,"wires":[]},{"id":"ec87386c.d9a0e8","type":"ui_form","z":"602114bc.b2e564","name":"","label":"","group":"ae419132.f7df58","order":2,"width":0,"height":0,"options":[{"label":"Telephone","value":"topic","type":"text","required":true,"rows":null},{"label":"SMS","value":"payload","type":"text","required":true,"rows":null}],"formValue":{"topic":"","payload":""},"payload":"","submit":"submit","cancel":"cancel","topic":"","x":130,"y":160,"wires":[["f46f0597.38f7c8"]]},{"id":"70e9d2b7.7859c4","type":"debug","z":"602114bc.b2e564","name":"SMS - Debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":720,"y":160,"wires":[]},{"id":"7f9646e7.83431","type":"function","z":"602114bc.b2e564","name":"2to1","func":"var payload=msg.payload.payload\nvar topic=msg.payload.topic\nmsg.payload=payload\nmsg.topic=topic\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":160,"wires":[["70e9d2b7.7859c4","754604fc.a77ec4"]]},{"id":"f46f0597.38f7c8","type":"change","z":"602114bc.b2e564","name":"","rules":[{"t":"delete","p":"socketid","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":320,"y":160,"wires":[["7f9646e7.83431"]]},{"id":"ae419132.f7df58","type":"ui_group","z":"","name":"Form","tab":"4b84c940.7f1fe8","order":1,"disp":true,"width":"6","collapse":false},{"id":"4b84c940.7f1fe8","type":"ui_tab","z":"","name":"SMS","icon":"dashboard","disabled":false,"hidden":false}]

le dashboard obtenu:

nodered-smsgateway-dash

Documentation