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

如何在无HTTP请求响应对象时使用CloudAdapter处理Teams活动?

迁移至CloudAdapter后异步处理Teams活动的替代方案

我们此前通过botframeworkAdapter.processActivityDirect处理MS Teams Webhook活动,但BotFrameworkAdapter已被弃用,官方要求迁移至CloudAdapter。由于业务采用作业队列+工作进程的异步处理架构,无法获取原始HTTP请求/响应对象,而CloudAdapter仅提供依赖HTTP对象的CloudAdapter.process方法,缺少直接处理活动内容的能力,目前已在botbuilder-js仓库提交功能请求,以下是可行的临时解决方案:

方案一:模拟HTTP请求响应对象

手动构造符合框架要求的Request/Response对象,将队列中取出的活动内容注入请求体,再传入CloudAdapter.process处理:

const { CloudAdapter } = require('botbuilder');

// 从作业队列获取待处理的Teams活动
const queuedActivity = yourQueuedActivityData;

// 模拟请求对象,填充活动内容与必要请求头
const mockReq = {
  body: queuedActivity,
  headers: {
    'authorization': 'Bearer ' + yourBotAuthToken
  }
};

// 模拟响应对象,实现process方法所需的基础方法
const mockRes = {
  status: () => mockRes,
  send: () => {},
  end: () => {}
};

const adapter = new CloudAdapter({
  appId: process.env.MICROSOFT_APP_ID,
  appPassword: process.env.MICROSOFT_APP_PASSWORD
});

// 调用process方法处理活动
adapter.process(mockReq, mockRes, async (context) => {
  // 此处编写原processActivityDirect中的业务逻辑
});

方案二:直接构造TurnContext处理活动

跳过HTTP解析流程,直接创建TurnContext并调用CloudAdapter的核心处理逻辑(注意:此方式依赖内部实现,需关注版本兼容性):

const { CloudAdapter, TurnContext } = require('botbuilder');

const adapter = new CloudAdapter({
  appId: process.env.MICROSOFT_APP_ID,
  appPassword: process.env.MICROSOFT_APP_PASSWORD
});

// 从队列获取活动数据
const activity = yourQueuedActivityData;

// 创建TurnContext实例
const turnContext = new TurnContext(adapter, activity);

// 可选:复用CloudAdapter的活动验证逻辑(若Webhook接收时已验证可跳过)
await adapter.validateActivity(turnContext);

// 执行活动处理逻辑
await adapter.run(turnContext, async (context) => {
  // 你的业务处理代码
});

方案三:等待官方功能迭代

已提交的功能请求若被采纳,官方会在后续版本中添加类似processActivityDirect的方法,可关注botbuilder-js仓库的issue进展,在此期间可使用上述方案临时过渡。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:55:31