Я пытаюсь реализовать протокол передачи сообщений Messenger для моего бота-мессенджера, но Pass_Thread_Control не передает права владения из основного приемника во вторичный приемник (входящие).
Я пробовал более 100 раз с разными комбинациями, прежде чем открывать эту тему. Когда пользователь нажимает на быстрый ответ «Перейти в папку« Входящие »», бот (Dialogflow, интегрированный в Python) запускает Webhook и делает следующее:
- Получить страницу Facebook - ID вторичного получателя (Входящие) и ответ владельца потока (в основном Основной получатель [FB App] является владельцем потока)
- Выполнить API-интерфейс Graph Pass_Thread_Control с правильными входными данными {"success": true}
- Снова вызовите владельца потока API-интерфейса Graph и обнаружите, что основной приемник по-прежнему является владельцем потока (тогда как это должен быть вторичный приемник, который должен быть владельцем потока)
В результате пользовательское сообщение не было автоматически перенесено из папки «Готово» на странице Facebook в «Входящие».
Другая конфигурация:
[1] Страница FB подписана на приложение FB
[2] События, выбранные для страницы FB: сообщения, messaging_postbacks, messaging_handovers, standby, messaging_policy_enforcement
[3] Страница FB -> Основной получатель: приложение FB, Дополнительный получатель: Входящие страницы
def human_control(req):
# GET ID OF INCOMING USER FROM WEBHOOK
id=req.get('originalDetectIntentRequest').get('payload').get('data').get('sender').get('id')
# CURRENT THREAD OWNER (BEFORE PASS_THREAD_CONTROL RUNS)
current_thread_owner = "https://graph.facebook.com/v2.6/me/thread_owner?recipient=" + id + "&access_token=" + ACCESS_TOKEN
result = urllib.request.urlopen(current_thread_owner).read()
# PASS_THREAD_CONTROL JSON Parameters:
target_payload = {
"recipient": {"id": id},
"target_app_id": "263902037430900",
"metadata": req.get('queryResult').get('queryText')
}
# PASS_THREAD_CONTROL - To Secondary Inbox - via Graph API call
# BELOW FORMAT WORKS ONLY IN PYTHON & BRINGS SUCCESS
# FB SUGGESTED WAY: https://developers.facebook.com/docs/messenger-platform/handover-protocol/pass-thread-control
pass_control_result = requests.post("https://graph.facebook.com/v2.6/" + id + "?pass_thread_control&access_token=" + ACCESS_TOKEN, params=target_payload)
# CURRENT THREAD OWNER (BEFORE PASS_THREAD_CONTROL RUNS)
current_thread_owner = "https://graph.facebook.com/v2.6/me/thread_owner?recipient=" + id + "&access_token=" + ACCESS_TOKEN
result = urllib.request.urlopen(current_thread_owner).read()
res = {
"payload": {
"facebook": {
"text": "Wait a while. Our Admin will be in touch shortly.",
"quick_replies": [
{
"content_type": "text",
"title": "Back to Bot",
"payload": "Back to Bot",
}
]
}
},
};
res = json.dumps(res, indent=4)
print (res)
r = make_response(res)
r.headers['Content-Type'] = 'application/json'
return r
Ожидаемый результат ->
Текущий владелец потока (до вызова потока передачи) -> 214020109069642 (приложение FB, являющееся основным получателем) ---->
{'data': [{'thread_owner': {'app_id': '214020109069642'}}]}
Pass Thread Control ---> {"success": true}
Снова текущий владелец темы ---> 263902037430900 (идентификатор папки входящих на странице FB). Вторичный получатель должен взять на себя роль основного получателя
Pass Thread Control JSON Полезная нагрузка должна присутствовать в ответе Webhook
Фактический результат ->
Текущий владелец потока (до вызова потока передачи) -> 214020109069642 (приложение FB, являющееся основным получателем)
{'data': [{'thread_owner': {'app_id': '214020109069642'}}]} ----> Исправить
Пропустить управление потоком ---> {"success": true} -> Correct
Снова текущий владелец потока ---> 214020109069642 (идентификатор приложения FB) #### После запуска Pass API управления потоком, идентификатор ВТОРИЧНОГО ПОЛУЧАТЕЛЯ: 263902037430900 | ИМЯ: Входящие страницы -> Неправильно
Передать управление потоком JSON Полезная нагрузка должна присутствовать в ответе Webhook -> Not Coming