如何在微软聊天机器人中捕获m.me链接的Referral参数?
解决方案:捕获Facebook Referral参数并发送个性化欢迎消息
我来帮你搞定这个问题!你之前没成功捕获到Referral参数,是因为这个参数并不是直接在请求的顶层payload里,而是由Facebook封装在Bot Framework Activity的channelData字段中。下面是一步步的解决方法和代码调整:
1. 确认m.me链接格式正确
首先要确保你发送给用户的个性化链接格式无误,正确的带Referral参数的m.me链接应该是:
m.me/你的Facebook页面用户名?ref=你的唯一交易ID
这里的ref值就是你用来识别用户交易的唯一标识,每个用户的链接里这个值都不一样。
2. 修改Bot代码捕获Referral参数
在你的Bot逻辑里,需要专门处理Facebook发送的Referral事件。这个事件会以event类型的Activity传递过来,我们可以在onTurn方法里提取channelData中的ref参数,然后发送个性化欢迎消息。
调整后的完整代码示例
const restify = require('restify'); const { ActivityHandler } = require('botbuilder'); // 定义你的Bot类,处理Referral事件和普通消息 class MyBot extends ActivityHandler { async onTurn(context) { // 优先处理Facebook的Referral事件 if (context.activity.channelId === 'facebook' && context.activity.type === 'event' && context.activity.name === 'referral') { // 从channelData中提取唯一交易ID const transactionId = context.activity.channelData.referral.ref; // 发送个性化欢迎消息 await context.sendActivity(`嗨!感谢你通过专属链接来访,你的交易标识是:${transactionId},我马上为你开启专属调研~`); } // 处理用户的普通消息 else if (context.activity.type === 'message') { await context.sendActivity(`收到你的消息啦:${context.activity.text}`); } // 调用父类的onTurn处理其他默认逻辑 await super.onTurn(context); } } // 创建Bot实例 const myBot = new MyBot(); // 创建Restify服务器 const server = restify.createServer(); server.listen(process.env.port || process.env.PORT || 80, function () { console.log(`\n${server.name} listening to ${server.url}`); console.log(`\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator`); console.log(`\nTo talk to your bot, open simplePrompts.bot file in the Emulator`); }); server.use(restify.plugins.bodyParser()); // 处理来自Bot Framework的请求 server.post('/api/messages', (req, res) => { // 你可以在这里打印完整请求体,确认Referral参数是否存在 // console.log(JSON.stringify(req.body, null, 2)); adapter.processActivity(req, res, async (context) => { await myBot.onTurn(context); }); });
3. 关键说明
- Referral参数的位置:Facebook会把Referral信息放在
context.activity.channelData.referral里,所以你之前直接找顶层payload肯定找不到。 - 事件类型判断:当用户点击带ref的m.me链接时,Facebook会发送一个
event类型的Activity,name字段为referral,我们可以通过这个判断来触发个性化欢迎逻辑。 - 调试技巧:你可以打开代码中注释的
console.log(JSON.stringify(req.body, null, 2)),查看完整的请求体,确认channelData里的Referral参数是否正常传递。
4. 额外检查
确保你已经在Bot Framework Portal中正确配置了Facebook通道:
- 关联了目标Facebook页面
- 填写了正确的页面访问令牌
- 启用了所有需要的事件(尤其是Referral事件)
内容的提问来源于stack exchange,提问作者Akas Antony
相关产品推荐
相关产品推荐

