跳转第三方Facebook Messenger机器人时如何自动携带预设文本消息?
可以实现!用Messenger深度链接+Webhook事件监听就能搞定
嘿,这个需求完全可行,不用纠结Send API单独的用法——我们需要结合Messenger深度链接和Webhook事件触发来实现自动发送城市名的效果,具体步骤如下:
1. 构造带城市参数的Messenger深度链接
你需要给用户生成一个包含城市信息的专属Messenger打开链接,格式是:
https://m.me/[你的机器人页面用户名]?ref=[URL编码后的城市名]
举个例子,你的机器人页面用户名为WeatherBotXYZ,城市是苏黎世,链接就是:
https://m.me/WeatherBotXYZ?ref=Zurich
如果是带空格的城市名(比如“New York”),记得做URL编码,变成New%20York,避免链接解析出错。
用户点击这个链接后,会直接跳转到Messenger并打开和你机器人的对话窗口。
2. 在Webhook中监听Referral事件
当用户通过带ref参数的链接进入对话时,Facebook会向你的机器人Webhook发送一个messaging_referrals事件,里面包含你传递的城市参数。
首先要确保你在Facebook开发者后台的Webhook设置里,已经订阅了messaging_referrals这个事件类型。
然后在你的Webhook处理代码中,捕获这个事件并提取ref值:
// 示例Node.js代码片段 app.post('/webhook', (req, res) => { const body = req.body; if (body.object === 'page') { body.entry.forEach(entry => { entry.messaging.forEach(event => { // 监听Referral事件 if (event.referral) { const psid = event.sender.id; const city = event.referral.ref; // 这里拿到传递的城市名,比如Zurich // 调用Send API发送该城市的天气预报 sendWeatherForecast(psid, city); } }); }); res.status(200).send('EVENT_RECEIVED'); } else { res.sendStatus(404); } });
3. 自动发送天气预报
拿到城市名和用户的PSID后,就可以调用Send API给用户自动发送对应的天气预报了——这一步就是你熟悉的Send API用法,把城市作为查询参数传入你的天气接口,再把结果发给用户即可。
注意事项
- 如果用户之前已经和你的机器人互动过,再次点击带
ref的链接,依然会触发referral事件,所以不用担心重复互动的问题。 - 一定要对城市名做URL编码,避免特殊字符导致参数解析失败。
- 确保你的机器人已经通过Facebook的审核,具备发送消息的权限(尤其是主动消息的权限,不过这里是用户触发的事件,属于合规范围)。
这样用户点击链接后,不用手动输入城市,一进入对话就能看到苏黎世的天气预报啦!
内容的提问来源于stack exchange,提问作者Knu8




