我正在尝试为我的Messenger机器人实现Messenger移交协议,但是Pass_Thread_Control并未将所有权从主接收方移交给辅助接收方(收件箱)。
在打开此线程之前,我已经尝试了100次以上不同的组合。当用户单击“传递到收件箱”快速答复时,该机器人(与Python集成的Dialogflow)将启动Webhook并执行以下操作:
结果,用户消息不会自动从Facebook页面“完成”文件夹传输到“收件箱”。
其他配置: [1] FB页面已订阅FB App [2]为FB页选择的事件:消息,messaging_postbacks,messagings_handovers,standby,messagement_policy_enforcement [3] FB页面->主接收器:FB APP,辅助接收器:页面收件箱
_mapController.markers.forEach((marker) {
print("Pos: " + marker.options.position.toString())
});
// Prints "Pos: LatLng[7.2906, 80.63369999999998]"
预期结果->
当前线程所有者(在传递线程调用之前)-> 214020109069642(作为主接收者的FB App)----> {'数据':[{'thread_owner':{'app_id':'214020109069642'}}]}
通过线程控制---> {“ success”:true}
重新获得当前线程所有者---> 263902037430900(FB页面收件箱ID)。次要接收者应取代主要接收者的角色
Webhook响应中应该存在传递线程控制JSON有效载荷
实际结果->
当前线程所有者(在传递线程调用之前)-> 214020109069642(作为主接收器的FB App) {'data':[{'thread_owner':{'app_id':'214020109069642'}}}}->正确
通过线程控制---> {“成功”:true}->正确
重新获得当前线程所有者---> 214020109069642(FB应用程序ID)####在运行Pass线程控制API之后,辅助接收器ID:263902037430900 |名称:页面收件箱->错误
传递线程控制JSON有效负载应出现在Webhook响应->不会出现
答案 0 :(得分:0)
我想我已经解决了这个问题。这不是错误。而是参数未在此处传递(标题),从而导致此处的错误响应。对于如此愚蠢的错误(并浪费了3天的时间),我感到抱歉。下面是正确的语法:
headers = {'Content-type': 'application/json'}
target_payload = {
"recipient": {"id": id},
"target_app_id": target_inbox_id ,
"metadata": req.get('queryResult').get('queryText')
}
pass_control_result = requests.post("https://graph.facebook.com/v3.2/me/pass_thread_control?access_token=" + ACCESS_TOKEN, data=json.dumps(target_payload), headers=headers)
只需一个查询: 一旦僵尸程序待命(人与收件箱中的用户对话),它就不会响应聊天命令来控制线程(例如:如果用户单击“返回到僵尸程序”按钮,则僵尸程序在待机模式下保持安静且没有网络挂接)响应进一步产生)。
仅单击“标记为完成”即可再次启用漫游器。 用户是否可以通过任何方式再次通过bot调用线程控制(无需管理员单击“标记为完成”)?由于它不响应任何命令,因此调用“请求线程所有者”或“接受线程控制” API也不起作用。