切换协议未传递线程所有权-但却带来了“成功”响应-似乎像Bug

时间:2019-01-02 07:14:57

标签: python-3.x facebook-graph-api flask

我正在尝试为我的Messenger机器人实现Messenger移交协议,但是Pass_Thread_Control并未将所有权从主接收方移交给辅助接收方(收件箱)。

在打开此线程之前,我已经尝试了100次以上不同的组合。当用户单击“传递到收件箱”快速答复时,该机器人(与Python集成的Dialogflow)将启动Webhook并执行以下操作:

  1. 获取Facebook页面-次要接收方(收件箱)ID和线程所有者响应(通常,主要接收方[FB App]是线程所有者)
  2. 使用正确的输入{“ success”:true}来执行Graph API Pass_Thread_Control
  3. 再次调用Graph API线程所有者并发现Primary Receiver仍然是线程所有者(而应该是Secondary Receiver,应该是线程所有者)

结果,用户消息不会自动从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]"

预期结果->

  1. 当前线程所有者(在传递线程调用之前)-> 214020109069642(作为主接收者的FB App)----> {'数据':[{'thread_owner':{'app_id':'214020109069642'}}]}

  2. 通过线程控制---> {“ success”:true}

  3. 重新获得当前线程所有者---> 263902037430900(FB页面收件箱ID)。次要接收者应取代主要接收者的角色

  4. Webhook响应中应该存在传递线程控制JSON有效载荷

实际结果->

  1. 当前线程所有者(在传递线程调用之前)-> 214020109069642(作为主接收器的FB App) {'data':[{'thread_owner':{'app_id':'214020109069642'}}}}->正确

  2. 通过线程控制---> {“成功”:true}->正确

  3. 重新获得当前线程所有者---> 214020109069642(FB应用程序ID)####在运行Pass线程控制API之后,辅助接收器ID:263902037430900 |名称:页面收件箱->错误

  4. 传递线程控制JSON有效负载应出现在Webhook响应->不会出现

1 个答案:

答案 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也不起作用。