使用 node.js 处理入站 Twilio 消息

Posted

技术标签:

【中文标题】使用 node.js 处理入站 Twilio 消息【英文标题】:Handling inbound Twilio messages using node.js 【发布时间】:2016-07-24 18:09:03 【问题描述】:

我正在阅读与 SMS 消息响应相关的 Twilio 文档 (https://www.twilio.com/help/faq/why-does-my-twilio-number-respond-with-thanks-for-the-message-configure-your-numbers-sms-url-to-change-this-message) 的部分内容,并且正在尝试构建一个 node.js 应用程序,该应用程序将允许我使用编程响应来响应入站 SMS 消息。

我一直在尝试模拟这个处理类似问题 (How can I respond to incoming Twilio calls and SMS messages using node.js?) 的 SO 帖子,并具有以下代码:

var AUTH_TOKEN = "*********************";
var twilio = require('twilio');
var express = require('express');
var http = require('http');

var app = express();

var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded());


app.post('/welcome/sms/reply/', function(req, res) 
    //Validate that this request really came from Twilio...
    if (twilio.validateExpressRequest(req, AUTH_TOKEN)) 
        var twiml = new twilio.TwimlResponse();
        twiml.say('Hi!  Thanks for checking out my app!');
        res.type('text/xml');
        res.send(twiml.toString());
    
    else 
        res.send('you are not twilio.  Buzz off.');
    
);

http.createServer(app).listen(3000);

通过 REST 客户端调用 POST 请求 /welcome/sms/reply 会产生 else 语句,我不知道为什么,因为 AUTH_TOKEN 正是我在我的帐户仪表板中拥有的。

【问题讨论】:

【参考方案1】:

这里是 Twilio 开发者宣传员。

如果您尝试使用 REST 客户端调用您自己的端点并且您正在验证请求 (twilio.validateExpressRequest),那么您将需要构建您的请求 same as Twilio does。至关重要的是,这包括一个 X-Twilio-Signature 标头,请在该链接上阅读更多内容以获取更多详细信息。

如果您使用 Twilio 测试您的代码,它应该可以工作并且是一个有效的请求。

【讨论】:

感谢 Phil - 原来我没有在我的 Twilio 帐户中设置 ngrok 并正确更改请求 URL,所以一旦我修复了一切正常。【参考方案2】:

在合并 ngrok + Express 时,请参阅这篇文章作为参考。 https://www.twilio.com/blog/2015/09/monitoring-call-progress-events-with-node-js-and-express.html

【讨论】:

以上是关于使用 node.js 处理入站 Twilio 消息的主要内容,如果未能解决你的问题,请参考以下文章

javascript 入站操作 - 处理和处理入站电子邮件

Twilio 使用 Node.js 接收和回复 SMS

如何从 twilio 跟踪用户消息和用户电话号码到我们的应用程序

通过 Laravel / PHP 的 Mandrill 入站电子邮件

Twilio 按内容过滤消息?

在 Twisted App 中持久化数据