Facebook Messenger Webhook не принимает мой URL обратного вызова

Я создаю чат-бота с помощью платформы разработчиков Facebook Messenger.

Моя проблема возникает, когда я пытаюсь настроить Webhook, используя туннель ngrok как callback_url и используя драгоценный камень figaro, чтобы добавить свой access_token а также verify_token к моему приложению.

Почему-то тест никогда не проходит, и я не знаю почему.

Мой сайт ngrok отлично работает в браузере. Тем не менее, я думаю, что проблема связана с тем, что Webhook не получает информацию, которую он хочет, иначе access_token & verify_token насколько я понимаю.

Я попытался перенаправить туннель ngrok на страницу, которая возвращает переменные среды обоих (ENV["ACCESS_TOKEN"] & ENV["VERIFY_TOKEN"]) но это не работает Так что я просто не уверен, чего ожидает API и почему он этого не получает.

Спасибо за помощь!!!!!

скриншот того, что я вижу на платформе разработчика fb

1 ответ

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

      @app.route('/facebook/webhook', methods=['GET'])
    def verify_webhook():
        mode = request.args.get('hub.mode')
        token = request.args.get('hub.verify_token')
        challenge = request.args.get('hub.challenge')

        if mode and token and mode == 'subscribe' and token == fb_app_token:        
            return challenge
        else:
            return 'Error, wrong token', 403

@app.route('/facebook/webhook', methods=['POST'])
    def handle_webhook():
        data = request.json
        print('were here')
        print('we got here', data)
        if data['object'] == 'page':
            for entry in data['entry']:
                messaging = entry['messaging']
                for message in messaging:
                    if 'message' in message:
                        sender_id = message['sender']['id']
                        chatbot_response = chatbot_service.call_chatbot([message['message'].get('text', '')])
                        # Reply with the same text received
                        send_message(sender_id, chatbot_response)

Допустим, вы предоставляете эти две функции как конечные точки.

verify_webhook() имеет строку с именем fb_app_token, это просто строка любого значения, здесь я использовал значение GUID.

Кроме того, handle_webhook() — это фактическая функция обратного вызова, которую вы также предоставите.

Обратите внимание на методы HTTP, несмотря на то же соглашение об именах конечных точек.

Facebook отправит запрос GET на тот же CallbackUrl, который вы указали. Итак, когда вы зайдете в свою учетную запись разработчика, у вас будут эти два варианта:

URL обратного вызова: https://www.myweb_or_ngrok.com/facebook/webhook.

Verify Token: GUID, сгенерированный вами для вашего fb_app_token.

Facebook отправит значение VerifyToken перед любым запросом GET на ваш обратный вызов. Если они совпадают, Facebook подтверждает, что достиг правильной конечной точки, и теперь может отправить фактический запрос POST на ваш обратный вызов.

Слишком много упоминания слова callbackurl :).

Это должно заставить вас проверить/зарегистрировать свой обратный вызов в FB.

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