传递线程控制Facebook messenger bot

时间:2018-03-14 16:50:45

标签: facebook facebook-graph-api facebook-javascript-sdk facebook-messenger dialogflow

我正在为我的机器人尝试Handover Protocal,但我无法得到 关于passing thread control虽然我仍然阅读文档,但我很困惑

curl -X POST -H "Content-Type: application/json" -d '{
  "recipient":{"id":"<PSID>"},
  "target_app_id":123456789,
  "metadata":"String to pass to secondary receiver app" 
}' "https://graph.facebook.com/v2.6/me/pass_thread_control?access_token=<PAGE_ACCESS_TOKEN>"

示例pass_thread_control事件

{
  "sender":{
    "id":"<PSID>"
  },
  "recipient":{
    "id":"<PAGE_ID>"
  },
  "timestamp":1458692752478,
  "pass_thread_control":{
    "new_owner_app_id":"123456789",
    "metadata":"Additional content that the caller wants to set"
  }
}

我想知道这里PSID是什么,target_app_id是什么。 任何人都可以用适当的例子来帮助我。

1 个答案:

答案 0 :(得分:1)

我花了一点时间弄明白,所以我完全明白你的挫败感!在使用切换协议时,没有足够的文档。

我目前的用例是机器人,如果无法理解用户,可以选择与代表交谈。这是通过使用回发按钮完成的,这意味着用户激活切换。用户单击该按钮后,将运行以下代码:

graph.setAccessToken(<YOUR_APP_ACCESS_TOKEN>);
graph.setAppSecret(<YOUR_APP_SECRET>);
graph.setVersion("2.12");

graph.post(
    `me/pass_thread_control?access_token=${functions.config().messenger.token}`, 
    handoverMessage, 
    (err, res) => {
        if(err) {
            console.log('HANDOVER ERROR:', err);
            return;
        }                    
        console.log('HANDOVER SUCCESS:', res);
});

switcMessage变量是放置psid和target_app_id的地方:

let handoverMessage = {
    "recipient": {
        "id": <PSID>
     },
     "target_app_id": <YOUR_TARGET_APP_ID>
}

调用此代码会将对话的控制权交给您的target_app_id。

如果您想知道“图形”是什么,它是一个名为“fbgraph”的节点包,在处理facebook图形api时我发现它非常有用。它当然不是唯一的封装器,并且可能有更好的封装,但它到目前为止对我有用。

相关问题