如何在Teams频道创建主动对话?解决CreateConversationAsync仅发私信问题
问题根因
当前代码是1:1私信场景的配置,缺少Teams频道会话必需的核心参数,所以只会触发私信发送,无法在频道内创建新对话,核心错误点如下:
IsGroup赋值为false,频道属于群组类会话,该值必须设为true- 缺失必填的
ChannelData字段,Teams接口需要通过该字段识别目标团队、目标频道信息,没有该参数时接口默认走私信投递逻辑 Members字段仅在私信场景需要传入接收方用户ID,频道场景下无需填写该字段
修正代码
const string botAppId = "<MicrosoftAppId GUID>"; const string serviceUrl = "<对应区域的服务URL>"; const string tenantId = "<租户ID>"; const string targetTeamId = "<消息要发送到的目标团队ID>"; const string targetChannelId = "<消息要发送到的目标频道ID>"; var title = "test title"; var activity = Activity.CreateMessageActivity(); activity.Type = ActivityTypes.Message; activity.Text = "test message"; await ((BotAdapter)_adapter).CreateConversationAsync( botAppId: botAppId, channelId: Microsoft.Bot.Connector.Channels.Msteams, serviceUrl: serviceUrl, audience: null, conversationParameters: new ConversationParameters { Activity = (Activity)activity, Bot = new ChannelAccount(botAppId), IsGroup = true, TopicName = title, TenantId = tenantId, ChannelData = new TeamsChannelData { Channel = new ChannelInfo(targetChannelId), Team = new TeamInfo { Id = targetTeamId }, Tenant = new TenantInfo(tenantId) } }, callback: BotCallback, cancellationToken: default(CancellationToken));
前置要求与说明
- 机器人必须提前被添加到目标团队的对应频道中,否则接口会返回403无权限错误
serviceUrl必须和获取目标团队、频道信息时拿到的服务端点一致,跨区域端点调用会直接失败- 上述代码用于在频道内创建全新对话线程,如果需要在已有频道线程下回复,不要调用
CreateConversationAsync,直接持有对应线程的conversationId后调用SendToConversationAsync即可 - 目标团队ID、频道ID可从机器人被加入频道时的事件回调payload中获取,不要用用户ID填充这两个字段
内容的提问来源于stack exchange,提问作者RussNicholls
相关产品推荐
相关产品推荐

