You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在微软聊天机器人中捕获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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:06:11