如何设置待办事项列表以使用 Twilio 接收和发送短信

How to set up a Todo List to receive and send SMS with Twilio

TwilioQuest

构建一个小型 Web 应用程序来为我们的待办事项机器人提供支持。您的 bot 应该会收到一条短信,查看消息的正文,然后用确认短信响应以下三个命令之一: "add {{ thing to do }}" - 添加命令应该向待办事项列表中添加一件事。例如,"add buy milk" 应该添加一个名为 "buy milk" "list" 的项目 - 列表命令应该 return 编号列表中待办事项列表中的每个项目。两个项目的列表将 return “1. 买牛奶 2. 洗衣服” "remove #" - 删除命令应根据项目在列表中的位置从待办事项列表中删除该项目。所以 "remove 2" 会从上面删除 "Wash clothes" 项目 要完成这个 objective,请在你的待办事项列表中添加一个名为 "Complete this objective." 的项目 你的待办事项应用程序应该回复确认该项目已添加的短信。然后在下面给我们您的待办事项机器人的 phone 号码。

我在这个 twilio 教程中使用 NodeJS,但我不确定如何设置编号列表和删除列表。到目前为止我已经设置好了

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

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

  if (req.body.Body == 'add') {
    twiml.message('buy milk');
...
...
    );
  }

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

http.createServer(app).listen(1337, () => {
  console.log('Express server listening on port 1337');
});

--需要想出这个--- 在您的 Web 应用程序中创建一个新变量来存储我们用户的待办事项。对于本练习,不必担心让您的机器人一次支持多个用户。

更改网络应用程序中的“/sms”路由,以查看每条传入短信中的第一个单词,看看它是否与我们的任何命令匹配 如果命令是 "add",则将消息正文的其余部分添加为待办事项列表变量中的条目。

如果命令是 "list",则使用待办事项列表变量中每个项目的编号列表回复短信。

如果命令是 "remove",则使用用户指定的数字从待办事项列表变量中删除该项目。

我需要有关如何为待办事项列表机器人设置列表和删除命令的帮助

代码应如下所示:

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());
});