如何在Twilio中跟踪外发回复消息的传递?

时间:2019-06-13 19:15:05

标签: node.js twilio

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

  1. 向您的网络应用添加名为“ / status”的新路由
  2. 在将回复发送给“列表”命令时,请使用action属性,以在应用程序的“ / status” URL上订阅其交付时的更新
  3. 请确保使用应用程序的ngrok URL,因为Twilio将需要“ / status” URL才能公开访问
  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');
});

我的输出需要更新我的外发回复消息,包括传递时间。我需要确保在终端上打印出状态更新。

1 个答案:

答案 0 :(得分:1)

Twilio开发人员布道者在这里。 ?

此问题有两个部分。

第一 –您必须在MessagingResponse中定义操作属性。您可以按照here中的说明进行操作。

对于您的代码,每个单独的响应看起来都像这样。 ?

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']
  );
});

您可以在their documentation中找到有关快递和路线的更多信息。

我将您的示例代码on Glitch(您可以在其中的云中轻松运行节点)并根据需要进行调整。 :)

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