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

向会议成员发送Adaptive Card时遇“Invalid user identity in provided tenant”错误

解决Teams机器人向会议成员发送Adaptive Card时的"Invalid user identity in provided tenant"错误
  • 检查应用权限配置
    确认机器人的权限包含ChannelMessage.Send.Group和ChatMessage.Send,特别是向非创建者成员发送时,这些权限必须正确配置并完成管理员同意。在Azure AD应用注册的API权限中添加Microsoft Graph的对应权限,确保管理员已授予同意(应用权限需管理员操作)。

  • 验证成员租户一致性
    即使member对象显示有tenantId,也要确认成员的tenantId和机器人所在租户ID完全匹配。如果会议包含外部租户成员,机器人默认无法跨租户发送消息,需先配置跨租户访问。可以在代码中添加校验跳过异租户成员:

    const botTenantId = process.env.M365_TENANT_ID; // 从环境变量取机器人租户ID
    for (const member of members) {
        if (member.tenantId !== botTenantId) {
            console.warn(`跳过来自异租户 ${member.tenantId} 的成员 ${member.id}`);
            continue;
        }
        await member.sendAdaptiveCard(<<adaptive card details>>);
    }
    
  • 改用会议上下文发送
    遍历成员发送可能触发身份验证问题,试试直接向会议频道发送卡片并@目标成员:

    if (target.type === "Group") {
        const card = {
            body: [
                {
                    type: "TextBlock",
                    text: "请查看此通知 <at>all</at>",
                    wrap: true
                }
            ],
            msteams: {
                entities: [
                    {
                        type: "mention",
                        text: "<at>all</at>",
                        mentioned: {
                            type: "team"
                        }
                    }
                ]
            }
        };
        await target.sendAdaptiveCard(card);
    }
    
  • 核对Teams Toolkit环境配置
    检查.env文件里的M365_TENANT_ID、BOT_ID、BOT_PASSWORD等参数是否正确,确保租户ID和会议所在租户一致。重新运行Teams Toolkit的「Provision」和「Deploy」步骤,同步配置到Azure资源。

  • 备选:用Microsoft Graph API发送
    如果以上方法都无效,可尝试通过Graph API的chatMessages端点发送:

    // 初始化已授权的Graph客户端
    const graphClient = getAuthenticatedGraphClient();
    const chatId = member.chatId; // 从member对象获取或通过Graph查询
    await graphClient.api(`/chats/${chatId}/messages`).post({
        body: {
            contentType: "html",
            content: "<attachment id='card1'></attachment>"
        },
        attachments: [
            {
                id: "card1",
                contentType: "application/vnd.microsoft.card.adaptive",
                content: <<adaptive card details>>
            }
        ]
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:48:14