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

Posted

技术标签:

【中文标题】Twilio 使用 Node.js 接收和回复 SMS【英文标题】:Twilio receive and reply SMS using Node.js 【发布时间】:2018-06-29 06:01:56 【问题描述】:

我正在尝试设置我们的 twilio 应用程序以在收到短信时响应客户端。我创建了一个发送初始文本的 js 文件和另一个在收到回复时发送响应的 js 文件。

然后我从我的机器上启动了初始服务器,然后启动了 ngrok http 1337 我将来自 ngrok 的转发 url 复制并粘贴到我的 twilio 仪表板上的消息传递 webhook 中,并将“/sms”添加到 url 的末尾。

当我回复文本时,我没有收到回复,并且可以在 ngrok 中看到我收到“502 Bad Gateway error”。

const accounSid = 'xxxxxxxxxxxxx'
const authToken = 'xxxxxxxxxxxxx'

const client  = require('twilio')(accounSid, authToken)

client.messages.create(
    to: '+13101234567',
    from: '+13109876543',
    body: 'test'
)
.then((message) => 
    console.log(message.sid)
)

const http = require('http')
const express = require('express')

const MessagingResponse = require('twilio').twiml.MessagingResponse

const app = express()

app.post('/sms', (req,res) => 
    const twiml = new MessagingResponse()

    twiml.message('testing 123')

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

http.createServer(app).listen(1337, () => 
    console.log('express server listening on port 1337')
)

【问题讨论】:

我刚刚运行了您的确切代码,我可以通过指向端口 1337 的 localhost 和 ngrok 使用 curl 成功地向您的 /sms 端点发出 POST 请求。所以,看起来您的应用程序是正确的(只要因为您安装了版本 3 Twilio 库)。您是否可以了解有关该错误的更多详细信息?您可以在发布请求功能中记录来自 Node 应用程序的任何内容吗? ngrok 仪表板 (127.0.0.1:4040) 是否显示其他内容? 【参考方案1】:

您从 ngrok 收到 502 Bad Gateway,因为您的 Express http 服务器无法正常工作或出现问题。

当您回复 SMS 时,Twilio 正在向您的 ngrok 发出 POST 请求,这正在工作,因为您会在屏幕上看到该消息 502 Bad Gateway

当您启动 Express 时,您应该会看到 express server listening on port 1337

如果您使用浏览器访问http://localhost:1337/,您应该会看到带有Cannot GET / 的页面,因为浏览器不会发出 POST 请求,但至少您可以确认 Express 服务器正在工作。

【讨论】:

以上是关于Twilio 使用 Node.js 接收和回复 SMS的主要内容,如果未能解决你的问题,请参考以下文章

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

Twilio 中的字符限制问题并手动回复

使用 nTwitter 使用 node.js 回复推文

我的 Twilio 电话号码即使在收到状态码:200 时也不会回复短信,有啥原因吗?

不接收 Twilio 聊天推送通知(Ionic 和 Firebase)

使用node.js实现多人聊天室(socket.ioB/S)