Travis Libby
Travis Libby

Reputation: 71

Receive text message with Twilio node module and respond with a text message

var http = require('http');
var twilio = require('twilio')(ACCOUNT_SID, AUTH_TOKEN);
var qs = require('querystring');

http.createServer(function (req, res) {
  var body = '';
  req.setEncoding('utf8');

  req.on('data', function(data) {
    body += data;
  });

  req.on('end', function() {
    var data = qs.parse(body);
    var jsonString = JSON.stringify(data);
    var jsonDataObject = JSON.parse(jsonString);

    // log the received message
    console.log(jsonDataObject.Body);


      twilio.messages.create({
      to:'MY_PHONE_NUMBER',
      from:'TWILIO_NUMBER',
      body:'Hello World'
      }, function(error, message) {
        if (error) {
          console.log('There was an error.')
          console.log(error.message);
        }
      });

      res.writeHead(200, {'Content-Type': 'text/xml'});
      res.end();
  });

}).listen(1337, '127.0.0.1');

console.log('TwiML servin\' server running at http://127.0.0.1:1337/');

I'm trying to use the Twilio node module to receive a text message and in turn respond to that text message once received. There seems to be no problem receiving the message as I'm able to log the body. But, I get a 401 Authenticate error when I try and respond to that message. I'm using ngrok to expose my localhost so I can hook it into Twilio's API. Please see below:

Where am I going wrong here?

Twilio Dashboard

Upvotes: 0

Views: 805

Answers (2)

Hunter
Hunter

Reputation: 416

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
const MessagingResponse = require('twilio').twiml.MessagingResponse;


var server = app.listen(80, function () {
   var host = server.address().address
   var port = server.address().port
   console.log(" web app listening at http://%s:%s", host, port)


})

app.post('/txt', urlencodedParser,(req, res) => {
  const twiml = new MessagingResponse();

  twiml.message('Finally Twilio works!');
  res.status(200);
  res.send(twiml.toString());

  });

Under your phone number in the console. You can click webhooks and change it to the http://"putyourserverhere"/txt This will automatically text back the inbound user. Enjoy. Make sure you have the newest version of twilio installed.

Upvotes: 0

philnash
philnash

Reputation: 73075

Twilio developer evangelist here.

You actually don't need to use the REST API in order to reply to an incoming message to a Twilio number. You can, in fact, respond to the incoming HTTP request with TwiML that describes the message in response.

To do this, you need to use the <Message> verb. In your application, this would look like:

First, just require the twilio module without the account credentials:

var twilio = require("twilio");

Then, respond to the incoming request with TwiML, like so:

  req.on('end', function() {
    var data = qs.parse(body);
    var jsonString = JSON.stringify(data);
    var jsonDataObject = JSON.parse(jsonString);

    // log the received message
    console.log(jsonDataObject.Body);

    var twiml = new twilio.TwimlResponse();
    twiml.message("Hello world");

    res.writeHead(200, {'Content-Type': 'text/xml'});
    res.end(twiml.toString());
  });

Let me know if this helps at all.

Upvotes: 1

Related Questions