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

更新Teams聊天机器人后无法主动发消息的解决方案咨询

问题分析

核心原因是机器人主动发消息依赖用户的会话引用(Conversation Reference),更新部署后,之前存储的会话引用可能失效,或是机器人的身份验证、服务配置出现异常,导致无法直接发起主动对话。

推荐处理方式

1. 重新获取并持久化目标用户的会话引用

如果之前未持久化会话引用,或原有引用已失效,可通过Microsoft Graph API批量创建主动会话并存储有效引用:

  • 调用/users/{user-id}/teamwork/conversations接口创建一对一会话,提取会话引用后存入外部数据库(如Azure Cosmos DB、SQL数据库)。
  • Node.js代码示例:
const { Client } = require('@microsoft/microsoft-graph-client');
const { TokenCredentialAuthenticationProvider } = require('@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials');
const { DefaultAzureCredential } = require('@azure/identity');

const credential = new DefaultAzureCredential();
const authProvider = new TokenCredentialAuthenticationProvider(credential, {
  scopes: ['https://graph.microsoft.com/.default']
});
const graphClient = Client.initWithMiddleware({ authProvider });

// 创建主动会话并存储引用
async function createUserConversation(userId) {
  const conversation = await graphClient.api(`/users/${userId}/teamwork/conversations`)
    .post({
      chatType: 'oneOnOne',
      members: [
        {
          '@odata.type': '#microsoft.graph.aadUserConversationMember',
          roles: ['owner'],
          user@odata.bind: `https://graph.microsoft.com/v1.0/users('${userId}')`
        }
      ]
    });

  const conversationReference = {
    conversation: { id: conversation.id },
    user: { id: userId },
    bot: { id: process.env.BOT_ID },
    serviceUrl: conversation.serviceUrl,
    channelId: 'msteams'
  };
  // 替换为你的数据库存储逻辑
  await saveConversationReferenceToDB(conversationReference);
}

2. 验证机器人服务配置

  • 检查Azure Function部署后的服务URL,确保与Azure Bot Service中注册的地址完全一致,若部署后域名/路径变更,需同步更新Bot Service配置。
  • 确认环境变量中的Microsoft App ID和Microsoft App Password配置正确,避免身份验证失败导致主动消息请求被拒绝。

3. 监听安装事件自动获取会话引用

在机器人代码中添加installationUpdate事件监听,当用户或管理员安装机器人时,自动捕获并存储会话引用:

// 机器人消息处理逻辑中添加安装事件监听
adapter.onTurn(async (context) => {
  if (context.activity.type === 'installationUpdate' && context.activity.action === 'add') {
    const conversationReference = TurnContext.getConversationReference(context.activity);
    // 存储会话引用到数据库
    await saveConversationReferenceToDB(conversationReference);
  }
});

4. 确认应用权限配置

  • 机器人需申请Chat.Create或Teamwork.Migrate.All等Graph API权限,且需组织管理员完成权限授予,否则无法批量创建主动会话。
  • 在Azure AD应用注册后台检查权限状态,确保已获取所需权限的管理员同意。
部署时保留主动发消息能力的注意事项
  • 会话引用存储独立于部署包:必须使用外部数据库存储会话引用,禁止存在本地文件或内存中,避免部署更新导致数据丢失。
  • 部署前备份会话数据:若使用数据库存储,部署前备份现有会话引用数据,防止部署过程中出现数据异常。
  • 自动化批量同步会话引用:部署完成后,运行批量脚本通过Graph API获取所有目标用户的会话引用并存储,快速恢复主动发消息能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:12:33