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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:30:49