我正在为我在上一课中创建的待办事项列表设置在 NodeJS 中跟踪传出消息的传递状态。现在我被指示执行以下操作:
- 将名为"/status"的新路由添加到 Web 应用
- 当您向"列表"命令发送回复时,请使用操作属性,以通过应用的"/status"网址订阅有关其交付的更新
- 请务必使用应用的 ngrok URL,因为 Twilio 需要可公开访问"/status"网址
- 在您收到交付状态更新时以某种方式显示它们,无论是在您构建的 UI 中还是打印到您的终端
- 您至少应该在传入请求上显示 MessageSid 和 X-Twilio-Signature 标头
- 确保您的最终状态更新显示您的消息已"已送达">
我正在考虑合并这个
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';
const client = require('twilio')(accountSid, authToken);
client.messages
.create({
body: ' ',
from: '+15017122661',
statusCallback: '',
to: '+15558675310'
})
.then(message => console.log(message.sid));
我还需要一个/status 路由,但我不确定如何将它们放在一起并将其添加到下面的代码中。
我的代码如下:
const http = require('http');
const express = require('express');
const MessagingResponse = require('twilio').twiml.MessagingResponse;
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
var itemList = [];
app.post('/sms', (req, res) => {
const twiml = new MessagingResponse();
const splitContent = req.body.Body.split(' ');
switch (splitContent[0]) {
case 'add':
itemList.push(splitContent.slice(1).join(' ')); // Slice 1 to start at the second item
twiml.message('Item added');
break;
case 'list':
var result = ''
var i = 1;
itemList.forEach(o => {
result += `${i}. ${o}n`;
i++;
});
twiml.message(result);
break;
case 'remove':
itemList.splice(splitContent[1] - 1, 1); // Subtract 1 to get the index
twiml.message('Item removed');
break;
}
res.writeHead(200, { 'Content-Type': 'text/xml' });
res.end(twiml.toString());
});
http.createServer(app).listen(1337, () => {
console.log('Express server listening on port 1337');
});
我的输出需要更新我的传出回复消息,包括何时传递。我需要确保在终端上打印出状态更新。
Twilio 开发者布道者在这里。 👋
这个问题有两个部分。
首先– 您必须在MessagingResponse
中定义操作属性。您可以按照此处所述进行操作。
对于您的代码,每个响应可能如下所示。 👇
twiml.message({
action: '/status',
method: 'POST'
}, result || 'No items');
其次–action
属性中的 url 或路径定义一个 HTTP 端点,该端点将接收有关已发送消息的状态信息。在 express(您正在使用的框架)中,您可以像这样定义一条新路由。👇
app.post('/status', (req, res) => {
// log the status information
console.log(
req.body.MessageSid,
req.body.MessageStatus,
req.headers['x-twilio-signature']
);
});
您可以在其文档中找到有关快速和路由的更多信息。
我把你的示例代码放在Glitch上(你可以轻松地在云中运行节点),并根据你的需要进行调整。 :)
让我知道这是否有帮助。 :)