Подписанные приложения Facebook Messenger, генерация токенов страниц и приложений

Я ударился о стену, пока развил бесшовную интеграцию страницы Facebook с моим ботом.

По сути, я хочу добиться той же интеграции, что и Chatfuel или Manychat, когда вход в систему с помощью вашей учетной записи Facebook позволяет вам просто выбрать страницу, к которой вы подключаетесь, и вы готовы к работе.

Проблема, с которой я сталкиваюсь, заключается в создании правильного токена для привязки выбранной страницы к моему приложению (боту). Согласно документации Facebook:

Когда вы создаете край подписанного приложения, идентификатор страницы, который вы используете в конечной точке, должен соответствовать идентификатору страницы токена доступа к странице, используемого в вызове API. Для страницы установлено приложение, для которого предназначен токен доступа.

Поскольку у вызова нет другого параметра, кроме токена доступа, этого токена доступа должно быть достаточно, чтобы Facebook мог:

  1. Авторизуйте действие на странице.
  2. Определите, какое приложение подписывается на страницу.

Это подтверждается при использовании Facebook Graph API Explorer, где выбирается страница и приложение для привязки, и генерируется правильный токен доступа:

Они будут подписаны на странице

Этот токен правильно работает, используя cURL в терминале:

$ curl -X POST 'https://graph.facebook.com/v3.0/<MY_APP_ID_HERE>/subscribed_apps?access_token=<TOKEN_PASTED_FROM_GRAPH_API_EXPLORER>'
{"success":true}

С помощью отладчика токена доступа Facebook (значок информации слева от токена доступа, затем откройте его в инструменте доступа токена), подтверждается, что токен знает как о странице, так и о приложении, которое необходимо подключить. У нас есть страница и информация о приложении

Вопрос в том, как эти токены, связанные с приложением страницы, создаются программным способом? Кажется, я не могу найти правильный вызов API в документации Facebook, и это во что бы то ни стало возможно, поскольку Chatfuel и Manychat делают это.

Заранее спасибо за вашу поддержку lars.schwarz и сообщества!

2 ответа

Добавим некоторые подробности к ответу Алекса, чтобы он был более полным.

При подписке приложения на страницу Facebook необходимо:

  1. Знай, о каком приложении ты говоришь.
  2. Знай, о какой странице ты говоришь.
  3. Знайте, что у вас есть разрешения на этой странице, чтобы подписать приложение.

Как Facebook все это знает?

1 происходит из-за того, что вход в Facebook происходит в контексте страницы, на самом деле код Javascript для Facebook содержит ваш appId:

js.src = 'https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.0&appId=<YOUR_APP_ID_IS_HERE>&autoLogAppEvents=1';

2 Получается из page_id в URL, который используется для подписки приложений на страницы:

https://graph.facebook.com/v3.0/YOUR_APP_ID_HERE/ subscribed_apps? access_token = YOUR_ACCESS_TOKEN_HERE

3 Происходит от токена доступа, полученного в контексте приложения через логин Facebook, который передается в качестве параметра в URL-адресе, используемом для подписки приложений на страницы:

https://graph.facebook.com/v3.0/YOUR_APP_ID_HERE/subscribed_apps?access_token=YOUR_ACCESS_TOKEN_HERE

Для этого вам нужно разместить FB Login на вашем сайте / портале для клиентов и запросить разрешения pages_messaging и manage_pages. Человек, который входит в систему, должен быть администратором страницы.

Как только ваше приложение получило такое разрешение для страницы, вы можете сгенерировать токен доступа к странице, как описано здесь:

https://developers.facebook.com/docs/pages/access-tokens

Другие вопросы по тегам