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

如何用.NET Bot Framework向Teams群聊发消息?对话ID格式错误

问题分析与解决思路

你的代码是针对Teams团队内频道设计的,直接复用它向群聊发送消息时,会因为参数格式和调用方法不匹配导致错误,具体问题和修复方案如下:

错误原因

  • 调用CreateConversationAsync时,第二个参数传入了聊天ID,但该参数要求的是租户ID(Tenant ID),而非聊天/频道ID,这是格式错误的核心原因。
  • CreateConversationAsync的作用是创建新会话,而你需要向已存在的、已安装应用的群聊发送消息,应该使用ContinueConversationAsync而非创建会话的方法。
  • 群聊场景不需要设置TeamsChannelData.Channel,该参数是团队频道专用的,强行传入会触发格式校验错误。

修复方案

1. 提前存储群聊会话信息

当应用被添加到群聊时,Bot会收到ConversationUpdate类型的活动,从中提取并存储以下关键信息:

  • conversationId:群聊的会话ID
  • serviceUrl:该群聊对应的Teams服务地址(不同区域可能不同,不要硬写固定值)
  • tenantId:租户ID

2. 使用ContinueConversationAsync发送消息

替换原有的PostMessageAsync方法,改用继续会话的方式发送消息:

public async Task PostMessageToGroupChatAsync(string message, string conversationId, string serviceUrl, string tenantId)
{
    var botClientId = _appSettings.Integrations.Teams.ClientId;
    var messageActivity = MessageFactory.Text(message);

    await ((BotAdapter)_adapter).ContinueConversationAsync(
        botClientId,
        new ConversationReference
        {
            Conversation = new ConversationAccount { Id = conversationId },
            ServiceUrl = serviceUrl,
            TenantId = tenantId
        },
        async (turnContext, cancellationToken) =>
        {
            await turnContext.SendActivityAsync(messageActivity, cancellationToken);
        },
        default);
}

3. 补充说明

  • 如果需要创建新的群聊(而非向已存在的群聊发消息),才需要使用CreateConversationAsync,此时第二个参数传租户ID,且ConversationParameters中需要指定Members(参与聊天的用户ID列表),不能设置Channel参数。
  • 不要硬写serviceUrl,必须从会话活动中获取,不同区域的Teams服务地址不同,硬编码会导致跨区域场景失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:30:25