如何在无回调URL时通过运行脚本将RasaCore Chatbot接入Facebook Messenger?
如何在无正式Webhook回调URL的情况下对接Rasa Core与Facebook Messenger
首先得明确:Facebook Messenger的双向交互(用户发消息→bot接收并回复)本质上依赖Webhook机制,但如果只是临时测试或者单向发送消息,我们有两种可行的方案,而且不需要自己的正式域名/服务器。
方案1:单向发送消息(无需Webhook)
如果只需要让你的Rasa bot主动给Facebook用户发消息,可以直接调用Facebook的Send API,不需要设置Webhook。你可以写个Python脚本,在Rasa处理完意图后触发这个脚本发送消息:
- 先准备好你的Facebook开发者账号里的页面访问令牌(Page Access Token),还有目标用户的PSID(用户在你的页面下的唯一ID)。
- 编写Python脚本调用Send API:
import requests def send_fb_message(page_token, psid, message_text): url = f"https://graph.facebook.com/v18.0/me/messages?access_token={page_token}" payload = { "recipient": {"id": psid}, "message": {"text": message_text} } response = requests.post(url, json=payload) if response.status_code != 200: print(f"发送失败:{response.json()}") return response # 调用示例 page_token = "你的页面访问令牌" user_psid = "目标用户的PSID" bot_response = "这是Rasa bot的回复内容" send_fb_message(page_token, user_psid, bot_response)
你可以把这个函数集成到Rasa的自定义action里,当Rasa生成回复后,调用这个函数发送消息给用户。
方案2:双向交互(临时Webhook,无需正式域名)
如果需要完整的双向对话,还是得设置Webhook,但可以用ngrok把你的本地Rasa服务暴露成公网可访问的URL,这样就能在Facebook开发者后台设置回调URL了,步骤如下:
- 下载并启动ngrok,把本地Rasa的端口(默认是5005)映射到公网:
ngrok http 5005
启动后会得到一个类似https://xxxx-xx-xx-xx-xx.ngrok.io的公网URL。
- 在Rasa的
credentials.yml里配置Facebook Messenger的连接器:
facebook: verify: "你的验证令牌(自己随便设,比如rasa_verify_token)" secret: "你的Facebook应用密钥" page-access-token: "你的页面访问令牌"
在Facebook开发者后台的Webhook设置里:
- 回调URL填
https://xxxx-xx-xx-xx-xx.ngrok.io/webhooks/facebook/webhook - 验证令牌填你刚才在
credentials.yml里设的verify值 - 订阅
messages和messaging_postbacks等事件
- 回调URL填
启动Rasa服务:
rasa run --enable-api --cors "*"
这样用户在Messenger发消息,Facebook会把请求转发到ngrok的URL,再转到你的本地Rasa服务,实现双向对话。
你之前Python脚本失败的可能原因
- 没有正确获取Facebook的页面访问令牌/应用密钥,或者权限不足(需要确保你的令牌有
pages_messaging权限) - 单向发送时,PSID不正确(PSID是用户和你的页面互动后生成的,不能随便填)
- 双向交互时,本地端口没有正确暴露,或者Webhook的路径写错了(必须是
/webhooks/facebook/webhook)
额外的参考说明
除了你找到的官方run script文档,还有这些细节需要注意:
- 你需要确保在Facebook开发者后台正确配置应用的角色和权限,比如把你的账号设为页面管理员
- 如果是测试环境,可以用Facebook的测试用户来测试,避免打扰真实用户
- 自定义action里处理Facebook的附加消息(比如按钮、快速回复)时,需要按照Facebook的消息格式来构造回复内容
内容的提问来源于stack exchange,提问作者Gignac
相关产品推荐
相关产品推荐

