如何在 Twilio 中跟踪传出回复邮件的送达情况?



我正在为我在上一课中创建的待办事项列表设置在 NodeJS 中跟踪传出消息的传递状态。现在我被指示执行以下操作:

  1. 将名为"/status"的新路由添加到 Web 应用
  2. 当您向"列表"命令发送回复时,请使用操作属性,以通过应用的"/status"网址订阅有关其交付的更新
  3. 请务必使用应用的 ngrok URL,因为 Twilio 需要可公开访问"/status"网址
  4. 在您收到交付状态更新时以某种方式显示它们,无论是在您构建的 UI 中还是打印到您的终端
  5. 您至少应该在传入请求上显示 MessageSid 和 X-Twilio-Signature 标头
  6. 确保您的最终状态更新显示您的消息已"已送达">

我正在考虑合并这个

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上(你可以轻松地在云中运行节点),并根据你的需要进行调整。 :)

让我知道这是否有帮助。 :)

相关内容

最新更新