基于Node.js开发MS Teams每日主动推送自适应卡片问卷机器人咨询
MS Teams 机器人开发实操指南(Node.js)
技术选型清晰化
- 完全不需要ReactJS:你的需求是后端驱动的机器人,React是前端框架,仅用于自定义Teams标签页场景,这里用不上。
- 核心工具选Bot Framework SDK for Node.js:这是微软官方的Teams机器人开发套件,主动消息发送、卡片交互、消息更新这些核心能力都已封装,不用纠结connector还是bot,直接基于这个SDK开发即可。
核心步骤拆解
1. 快速初始化项目
用官方脚手架一键生成适配Teams的机器人项目:
npm init yo microsoft-botframework
选择Teams机器人模板,生成的项目已经包含Teams环境的基础配置和消息处理骨架。
2. 实现每日主动发送问卷卡片
- 先获取目标频道的
conversationReference:让机器人加入目标频道后,监听频道的首次消息事件,把返回的conversationReference保存到数据库或配置文件(只需一次,后续复用)。 - 结合定时任务发送主动消息(用
node-schedule包实现定时):
const { TeamsActivityHandler, CardFactory } = require('botbuilder'); const schedule = require('node-schedule'); // 导入你的问卷自适应卡片JSON const surveyCard = require('./survey-adaptive-card.json'); // 已保存的目标频道conversationReference const targetChannelRef = { /* 从监听事件中获取的完整对象 */ }; // 每天9点发送问卷 schedule.scheduleJob('0 9 * * *', async () => { await adapter.continueConversation(targetChannelRef, async (context) => { await context.sendActivity({ attachments: [CardFactory.adaptiveCard(surveyCard)] }); }); });
3. 处理卡片点击并更新原卡片
- 在机器人的
onAdaptiveCardInvoke方法中监听卡片交互:
class TeamsSurveyBot extends TeamsActivityHandler { async onAdaptiveCardInvoke(context, invokeValue) { // 解析用户点击的按钮数据 const userAnswer = invokeValue.action.data; // 生成更新后的卡片(比如添加提交反馈、禁用按钮) const updatedCard = { ...surveyCard }; updatedCard.body.push({ type: "TextBlock", text: `已收到你的反馈:${userAnswer.choice}`, color: "success" }); // 替换原消息的卡片内容 await context.updateActivity({ id: context.activity.replyToId, attachments: [CardFactory.adaptiveCard(updatedCard)] }); // 返回交互成功响应 return { statusCode: 200 }; } }
- 注意:自适应卡片的按钮要配置
type="Action.Submit",并带上自定义data字段,方便后端识别用户操作。
4. 关键配置与权限
- 在Azure门户注册机器人,获取
MicrosoftAppId和MicrosoftAppPassword,配置到项目的.env文件中。 - 确保机器人已添加到目标Teams频道,在Azure AD权限中配置
ChannelMessage.Send、ChannelMessage.ReadBasic等必要权限。
避坑提示
- 保存
conversationReference时要存完整对象,缺失团队、频道ID会导致主动消息发送失败。 - 更新卡片必须使用原消息的
id(通过context.activity.replyToId获取),不能发送新消息替代。 - 定时任务依赖机器人服务持续在线,建议部署到Azure App Service或其他云托管平台,避免本地运行中断。
内容的提问来源于stack exchange,提问作者misaizdaleka
相关产品推荐
相关产品推荐

