NAME
perl-SMS-Send-Adapter-Node-Red-plack-builder.psgi - SMS::Send Adapter to Node-RED JSON HTTP request Plack Builder PSGI Script
DESCRIPTION
A PSGI application to control SMS::Send with a web service.
API
The script is called over HTTP with a JSON Object payload.
POST http://127.0.0.1:5000/sms/
{
"driver" : "VoIP::MS",
"to" : "7035551212",
"text" : "Text Message",
"options" : { "this" : "or", "that" : "and" }
}
There are many SMS::Send drivers available on CPAN. I use VoIP::MS in examples since that is the provider that I use for my home automation notifications. My other notiable drivers are Kannel::SMSbox and NANP::Twilio.
Return is a JSON Object.
200 OK
{
"sent" : true,
"input" : {...},
}
Return on error.
400|500|502 ...
{
"sent": false,
"input": {...},
"error": "error string to help point you in the correct direction"
}
Node-Red Integration
Use four nodes: inject, function, http request, and debug.
In the function node
Set the "payload" to a JSON Object with the keys "driver", "to" and "text" and any extra "options" needed for SMS::Send objects not built on SMS::Send::Driver::WebService.
my_text = msg.payload; msg.payload = { "driver" : "VoIP::MS", "text" : my_text, "to" : "7035551212", "options" : {"key" : "value"}, }; return msg;
In the http request node
Set the "Method" to POST
Set the "URL" to http://127.0.0.1:5000/sms/
Set the "Return" to a parsed JSON Object
In the debug node
Set the "Output" to msg.payload.sent which returns boolean true or false
Node Red Example
[{"id":"3313f548.d53dba","type":"inject","z":"bbbcee28.8891c","name":"Inject","topic":"","payload":"My SMS Text","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":90,"y":1540,"wires":[["5cb3e4eb.f6d34c"]]},{"id":"3a6aed54.d74342","type":"debug","z":"bbbcee28.8891c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.sent","targetType":"msg","x":710,"y":1540,"wires":[]},{"id":"a9dfd541.a3b3f8","type":"http request","z":"bbbcee28.8891c","name":"SMS::Send","method":"POST","ret":"obj","paytoqs":false,"url":"http://127.0.0.1:5000/sms/","tls":"","persist":false,"proxy":"","authType":"","x":490,"y":1540,"wires":[["3a6aed54.d74342","aec87ffa.ec17f"]]},{"id":"aec87ffa.ec17f","type":"debug","z":"bbbcee28.8891c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"statusCode","targetType":"msg","x":700,"y":1500,"wires":[]},{"id":"707cfb7e.11b714","type":"debug","z":"bbbcee28.8891c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":490,"y":1500,"wires":[]},{"id":"5cb3e4eb.f6d34c","type":"function","z":"bbbcee28.8891c","name":"payload formatter","func":"my_text = msg.payload;\nmsg.payload = {\n \"driver\" : \"VoIP::MS\",\n \"text\" : my_text,\n \"to\" : \"7035551212\",\n \"options\" : {\"key\" : \"value\"},\n };\nreturn msg;","outputs":1,"noerr":0,"x":270,"y":1540,"wires":[["707cfb7e.11b714","a9dfd541.a3b3f8"]]}]