Facebook Messenger Bot,有人能告诉我我是如何得到我问的答案

时间:2016-07-13 10:32:05

标签: node.js express facebook-messenger

所以我在Facebook Messenger Bot上工作。 我想知道我可以找到像

这样的问题的答案
  

Bot:输入您的电子邮件

     

用户:输入电子邮件

     

Bot:添加了地址

我的代码看起来像Facebook

中的示例应用
app.post('/webhook', function (req, res) {

  var data = req.body;

  // Make sure this is a page subscription
  if (data.object == 'page') {
    // Iterate over each entry
    // There may be multiple if batched
    data.entry.forEach(function(pageEntry) {
      var pageID = pageEntry.id;
      var timeOfEvent = pageEntry.time;

      // Iterate over each messaging event
      pageEntry.messaging.forEach(function(messagingEvent) {
        if (messagingEvent.optin) {
          receivedAuthentication(messagingEvent);
        } else if (messagingEvent.message) {
          receivedMessage(messagingEvent);
        } else if (messagingEvent.delivery) {
          receivedDeliveryConfirmation(messagingEvent);
        } else if (messagingEvent.postback) {
          receivedPostback(messagingEvent);
        } else {
          console.log("Webhook received unknown messagingEvent: ", messagingEvent);
        }
      });
    });

    // Assume all went well.
    //
    // You must send back a 200, within 20 seconds, to let us know you've 
    // successfully received the callback. Otherwise, the request will time out.
    res.sendStatus(200);
  }
});

2 个答案:

答案 0 :(得分:0)

您可以为其发送电子邮件提示的ID设置一个标志,然后在他们回复后检查是否是电子邮件,如果是,则保存并回送给他们。< / p>

答案 1 :(得分:0)

如果机器人是基于问题/答案,我通常做的处理响应跟踪的做法是将机器人视为有限状态自动机。将机器人可以处于的每个“状态”分配给某个唯一的状态标识符,并使用所述状态标识符来确定用户正在回复的内容。你也可以存储回调而不是状态id,但是高级别的行为也会相同。

<小时/>

例如:

首先定义有限自动机。在这种情况下,我们假设它是:

0 --> 1 --> 2

其中0表示新用户,1表示等待电子邮件回复,2表示用户成功完成注册。

  1. 用户消息bot
  2. 我们检查数据库并看到它是新用户。我们猜测 状态== 0。
  3. 因为州是0,我们忽略发送的内容并提示发送电子邮件
  4. 将状态更改为1表示已提示电子邮件。
  5. 用户回复电子邮件。
  6. 我们检查数据库并查看状态== 1。我们使用“1”例程做一些花哨的东西来验证电子邮件并存储它。
  7. 将状态更改为2表示已收到电子邮件且程序已结束。
  8. <小时/>

    注意:

    • 如果您要定位的平台的会话ID已重置 经过一定程度的不活动(或者你只是想要机器人) 模仿真实的对话),存储每个用户的最后时间 交互并清除所有不活动的对话 谈话已经终止。