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

如何通过Bot Framework Node.js向Outlook发送自适应卡片

扩展Bot向Outlook发送自适应卡片的实现方案

核心差异说明

Teams环境下你使用的notificationApp.notification.getPagedInstallations()是TeamsFx封装的针对Teams用户安装实例的方法,不适用于Outlook通道。Outlook通道下,Bot可直接通过用户邮箱地址发起对话(无需用户预先安装Bot),只要你的Outlook通道已完成域名验证且用户邮箱属于允许域。

代码修改实现

1. 新增Outlook通知接口(或扩展原有接口)

以下是新增接口的示例,核心是使用Bot Framework的ConnectorClient创建Outlook对话并发送自适应卡片:

server.post(
  "/api/notificationByOutlook",
  restify.plugins.queryParser(),
  restify.plugins.bodyParser(),
  async (req, res) => {
    const adaptiveCardData = req.body;
    const { Receivers, TemplateType, MerlinUser, MerlinPassword } = adaptiveCardData;

    // 加密管理员数据(和Teams逻辑保持一致)
    adaptiveCardData.MerlinUser = encryptData(MerlinUser);
    adaptiveCardData.MerlinPassword = encryptData(MerlinPassword);
    adaptiveCardData.Originator = process.env.Originator;

    // 初始化ConnectorClient,传入Bot的身份信息和端点
    const connectorClient = new ConnectorClient(
      {
        appId: process.env.MicrosoftAppId,
        appPassword: process.env.MicrosoftAppPassword,
      },
      { baseUri: process.env.BotEndpoint }
    );

    // 遍历收件人邮箱,逐个发送卡片
    for (const email of Receivers) {
      try {
        // 构造Outlook对话参数
        const conversationParameters = {
          members: [
            {
              id: email,
              name: email.split('@')[0],
              role: "user"
            }
          ],
          channelData: {
            notification: {
              alertInMeeting: false,
              externalResourceUrl: null
            }
          },
          isGroup: false,
          topicName: "自适应卡片通知"
        };

        // 创建对话并获取会话ID
        const conversationResponse = await connectorClient.conversations.createConversation(conversationParameters);
        const conversationId = conversationResponse.id;

        // 渲染自适应卡片模板
        const selectedTemplate = selectTemplate(TemplateType);
        const adaptiveCard = AdaptiveCards.declare(selectedTemplate).render({
          ...adaptiveCardData
        });

        // 构造消息活动并发送
        const messageActivity = {
          type: "message",
          attachments: [
            {
              contentType: "application/vnd.microsoft.card.adaptive",
              content: adaptiveCard
            }
          ],
          conversation: { id: conversationId }
        };

        await connectorClient.conversations.sendToConversation(conversationId, messageActivity);
      } catch (error) {
        console.error(`发送到邮箱${email}失败:`, error);
      }
    }

    res.json({ status: "success", message: "Outlook通知发送完成" });
  }
);

2. 关键依赖与配置

  • 安装必要依赖包:
    npm install botframework-connector
    
  • 补充环境变量:
    • MicrosoftAppId:Azure Bot Service的Microsoft App ID
    • MicrosoftAppPassword:Azure Bot Service的Microsoft App密码
    • BotEndpoint:Azure Bot Service的消息端点(格式示例:https://<你的Bot名称>.azurewebsites.net/api/messages)

3. 前置验证要求

  • 确保Outlook通道已完成域名验证,收件人邮箱需属于已验证的域名范围
  • 确认Azure Bot Service已具备Outlook消息发送的基础权限(添加通道后默认配置)

合并Teams与Outlook逻辑(可选)

如果需要在同一接口中同时发送到Teams和Outlook,可将两个逻辑整合:

// 原有Teams循环发送逻辑...

// 追加Outlook发送逻辑
for (const email of Receivers) {
  // 上述Outlook发送代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:54:50