Facebook Messenger webhook 不接受我的回调 url

问题描述 投票:0回答:1

我正在使用 Facebook Messenger 开发者平台创建一个聊天机器人。

我的问题来了,因为我正在尝试使用 ngrok 隧道作为 callback_url 设置 Webhook,并使用 figaro gem 将我的

access_token
verify_token
添加到我的应用程序。

不知何故,测试从未通过,我不知道为什么。

我的 ngrok 网站在浏览器中运行完美。但我认为问题源于 Webhook 没有收到它想要的信息,也就是我理解的

access_token
verify_token

我已经尝试将 ngrok 隧道重定向到一个页面,该页面返回两个(

ENV["ACCESS_TOKEN"]
ENV["VERIFY_TOKEN"]
)的环境变量,但这不起作用。所以我只是不确定 API 期望什么以及为什么它没有得到它。

感谢您的帮助!!!!!

screenshot of what I see on the fb developer platform

ruby-on-rails facebook webhooks messenger figaro-ruby
1个回答
0
投票

其实很简单,让我解释一下。

@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() 是您还将公开的实际 callbackurl 函数。

注意 HTTP 方法,尽管端点命名约定相同。

Facebook 将向您提供的同一 CallbackUrl 发送 GET 请求。 所以当你进入你的开发者账户时,你将有这两个选项

回调网址:https://www.myweb_or_ngrok.com/facebook/webhook

验证令牌:您为 fb_app_token 生成的 GUID

Facebook 将在 GET 请求中的任何请求之前将 VerifyToken 值发送到您的 callbackurl。如果它们匹配,facebook 确认它已经到达正确的端点,它现在可以将实际的 POST 请求发送到您的 callbackurl。

过多提及 callbackurl 一词 :).

这应该让你用 FB 验证/注册你的 callbackurl。

© www.soinside.com 2019 - 2024. All rights reserved.