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

Azure Bot Framework无法拦截机器人响应问题咨询

Bot Framework 出站消息字段提取解决方案

你当前的代码已经成功实现了收发消息的拦截逻辑,无法提取机器人发送消息值的核心原因是:activities参数为数组类型,每个元素才对应单条机器人待发送的消息实体,需要遍历数组后提取对应字段。

具体实现步骤

  • 遍历activities数组,优先过滤type为message的活动,排除会话更新、事件通知等非用户可见的消息类活动
  • 从单条活动对象中提取需要的字段,常用可提取字段如下:
    • text:机器人发送的纯文本内容
    • id:消息的唯一标识ID
    • recipient.id:接收该消息的用户ID
    • attachments:消息携带的附件列表(包含富文本卡片、文件等资源)
    • locale:消息对应的语言标识

修正后的完整代码示例

adapter.use(async (turnContext, next) => {
    // 预处理用户发送的入站消息
    console.log("adapture use::入站消息内容::" + turnContext.activity.text);

    // 注册出站消息拦截处理器
    turnContext.onSendActivities(async (sendContext, activities, nextSend) => {
        // 出站消息预处理(发送前逻辑,如需修改消息内容需放在此处执行)
        activities.forEach(activity => {
            if (activity.type === 'message') {
                console.log("待发送的机器人消息文本:" + activity.text);
                console.log("消息接收用户ID:" + activity.recipient.id);
                // 此处可自定义业务逻辑,比如敏感词过滤、消息内容埋点等
            }
        });

        // 执行消息发送动作
        const sendResponse = await nextSend();

        // 出站消息后处理(发送后逻辑,如需记录发送结果可放在此处执行)
        console.log("adapture use::消息发送返回结果::" + JSON.stringify(sendResponse));

        return sendResponse;
    });

    await next();

    // 当前轮次入站消息处理完成回调
    console.log(`Processing activity ${turnContext.activity.id} finishing. `);
});

补充说明

如果机器人在单轮交互中会发送多条消息(比如先发送加载提示,再返回业务结果),activities数组会包含所有待发送的消息,遍历即可全部捕获处理。

内容的提问来源于stack exchange,提问作者krati Agarwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:27:02