Facebook Messenger Bot,有人可以告诉我我如何抓住我问的问题的答案吗?



所以我在我的Facebook Messenger 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);
  }
});

您可以为其 ID 设置一个已发送电子邮件提示的标志,然后在他们响应后检查它是否是电子邮件,如果是,则保存它并将其回显给他们。

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


例如:

首先定义一个有限自动机。在本例中,让我们假设它是:

0 --> 1 --> 2

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

  1. 用户消息机器人
  2. 我们检查了我们的数据库,看到它是一个新用户。我们假设状态==0。
  3. 由于状态为 0,因此我们忽略已发送的内容并提示发送电子邮件
  4. 将状态更改为 1 以表示电子邮件已提示。
  5. 用户通过电子邮件回复。
  6. 我们检查数据库并看到状态==1。我们使用"1"例程来做一些花哨的事情来验证电子邮件并存储它。
  7. 将状态更改为 2 以表示已收到电子邮件并且程序已结束。


注意:

  • 如果您定位的平台的对话 ID 已重置在一定程度的不活动之后(或者如果您只是希望机器人模仿真实对话),存储每个用户最后的时间交互并在对话已终止。

相关内容

最新更新