如何通过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 IDMicrosoftAppPassword: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
相关产品推荐
相关产品推荐

