我创建了一个带有信使和对话流的机器人,这很好用 但是当我尝试实施切换协议时问题出现了
第一种方法:将线程控制传递给PAGE INBOX
我使用'input.handover'动作建立了对话流的意图,然后当我键入切换时,我调用我的webhook并使用pass_thread_control调用fb api并将控件传递到页面收件箱,我获得成功响应和对话从 BOT 传递到 PAGE INBOX 。但是这里坚持 PAGE INBOX 而且我不能将take_thread_control带到 BOT ,因为 PAGE INBOX 没有与对话流或任何其他webhook链接。
第二种方法:将线程控制传递给另一个应用
使用相同的第一种方法设置,但这次我将线程控制传递给我创建的facebook APP 并与webhook链接(在heroku上托管了nodejs),我获得了成功响应,但这次没有消息来到此 APP 收件箱,在heroku控制台上我可以看到消息来到webhook但不是 APP 收件箱。
现在我只是被困在这里。如果有人知道如何使用对话流或任何帮助实现切换协议,我很欣赏。
感谢。
答案 0 :(得分:1)
好吧,我只是通过混合两种方法找到解决方法
第1步:第二个应用将您的webhook订阅到机器人页面
page_subscribe
第2步:第二个应用webhook只是当用户输入特殊关键字(退出或返回...)时将线程控制带回主应用
app.post('/webhook', (request, response) => {
const webhook_events = request.body.entry[0];
// console.log('webhook_events : ', webhook_events);
// Secondary Receiver is in control - listen on standby channel
if (webhook_events.standby) {
// iterate webhook events from standby channel
webhook_events.standby.forEach(event => {
const psid = event.sender.id;
const message = event.message;
// check if the user want back to the bot
if (message && (message.text == 'exit' || message.text == 'back')) {
// HandoverProtocol.takeThreadControl is just call the facebook api to takeThreadControl
HandoverProtocol.takeThreadControl(psid).then(reps => {
// replay.sendMessage also call facebook api to send a message to the user to let him know he is back chat with the bot
replay.sendMessage(psid, 'Hi, your are back to the BOT');
}).catch(err => console.log(err));
}
});
}
// respond to all webhook events with 200 OK
response.sendStatus(200);
})
现在所有用户消息都从第二个应用程序webhook传递,当他键入' back'例如,webhook将控制权带回主应用程序(在本例中为机器人)