Как pass_thread_control работает в протоколе передачи данных Facebook?

Я пытаюсь протестировать функцию pass_thread_control в Facebook Messenger, чтобы мой бот Dialogflow направлял текущий разговор с оператором-человеком. Пока я застрял даже в попытках получить "успешный" код в Graph API Explorer. Я просмотрел документацию Facebook (https://developers.facebook.com/docs/messenger-platform/reference/handover-protocol/pass-thread-control/), внимательно просмотрел различные темы здесь или где-либо еще. У меня есть:

  1. Подписался на мою страницу в Facebook, чтобы получать сообщения messages_handovers.
  2. Установите приложение чат-бота Dialogflow в качестве основного получателя.
  3. Установите папку «Входящие» для страницы в качестве дополнительного получателя.

... И я получаю разные ошибки. Например, я пробую этот запрос в проводнике Graph API:

POST в https://graph.facebook.com/v5.0/me/pass_thread_control < / а>

с параметрами:

{
  "recipient": {
    "id": "myPageID"
  },
  "target_app_id": "263902037430900"
}

{
  "error": {
    "message": "Unsupported post request. Object with ID 'me' does not exist, cannot be loaded due to missing permissions, or does not support this operation. Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api",
    "type": "GraphMethodException",
    "code": 100,
    "error_subcode": 33,
    "fbtrace_id": "AipGijCLKQOwOl6L792ZEgG"
  }
}

Может проблема в PSID получателя? Это единственный параметр, который я понятия не имею, где его взять. Что такое идентификатор приложения с привязкой к странице? Как мне это получить?

А может я пропустил какие-то разрешения ...?

Любая помощь, чтобы меня вытащить, очень ценится ...


person mintymike    schedule 04.12.2019    source источник


Ответы (1)


Ладно, мне действительно удалось в этом разобраться.

  1. Прежде всего, я обнаружил, что страница, на которую я пытался передать управление потоком, не была связана с моей учетной записью Facebook Business, а приложение чат-бота было. Я добавил страницу в Facebook Business Manager, чтобы она была связана с той же бизнес-учетной записью, что и приложение чат-бота. ПРИМЕЧАНИЕ. Я не уверен, что это обязательное условие для всех, поэтому будьте осторожны. Это может потребоваться не во всех сценариях.

  2. Чтобы получить PSID страницы, который затем можно использовать в параметре "получатель" запроса POST для pass_thread_control, отправьте запрос GET с помощью Graph API Explorer, как показано здесь: https://developers.facebook.com/docs/facebook-login/connecting-accounts#examples

  3. Несмотря на то, что пример запроса не содержит параметра appsecret_proof, я использовал его и не тестировал запрос без него. Здесь показан очень простой способ создания appsecret_proof с использованием PHP: https://developers.facebook.com/docs/graph-api/securing-requests#generate-proof

  4. Затем, предоставив PSID, полученный с помощью метода, показанного в пункте 2., я получил «success: true» при тестировании pass_thread_control, который действительно передал управление потоком вторичному получателю = Page Inbox. Yaaay! ????

Все вышеперечисленное также описано в этой теме, что помогло мне разобраться в этом, поэтому благодарим Сунил: Является ли Facebook Messenger PSID PageScope константой для пользователя

person mintymike    schedule 04.12.2019