所以我在我的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 表示用户成功完成注册。
- 用户消息机器人
- 我们检查了我们的数据库,看到它是一个新用户。我们假设状态==0。
- 由于状态为 0,因此我们忽略已发送的内容并提示发送电子邮件
- 将状态更改为 1 以表示电子邮件已提示。
- 用户通过电子邮件回复。
- 我们检查数据库并看到状态==1。我们使用"1"例程来做一些花哨的事情来验证电子邮件并存储它。
- 将状态更改为 2 以表示已收到电子邮件并且程序已结束。
注意:
- 如果您定位的平台的对话 ID 已重置在一定程度的不活动之后(或者如果您只是希望机器人模仿真实对话),存储每个用户最后的时间交互并在对话已终止。