Azure Bot在Microsoft Teams私聊中无需@即可解析消息的问题
解决Teams私聊中Azure Bot无需@即可响应消息的问题
问题原因
Teams私聊场景默认仅当消息中@Bot名称时,才会将消息转发给Azure Bot;而频道场景下,只要Bot加入频道,所有消息都会被转发。这是Teams默认的消息路由规则,和应用权限配置无关。
解决方案
要实现私聊无需@Bot即可触发响应,需修改Azure Bot的Teams频道配置:
- 登录Azure门户,找到你的Bot资源
- 进入Channels页面,找到Microsoft Teams频道,点击Configure
- 在配置界面中找到消息传递模式(Message delivery mode)选项,选择始终传递消息(Always deliver messages)
- 保存配置,等待5-10分钟让设置生效
代码适配说明
你的现有代码逻辑无需大幅调整,因为私聊消息不带@Bot名称时,activity.Text就是纯消息内容,原正则表达式@"#(\d+)"依然能正常匹配#123455这类格式的消息。以下是修正符号后的核心代码:
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken) { var activity = turnContext.Activity; var submitActionData = turnContext.Activity.Value as JObject; string action = null; if (submitActionData != null) { action = submitActionData["action"]?.ToString(); } var text = activity.Text.Trim().ToLower(); Regex regex = new Regex(@"#(\d+)"); MatchCollection matches = regex.Matches(text); if (matches.Count > 0) { List<string> identifiers = new List<string>(); foreach (Match match in matches) { identifiers.Add(match.Value.Replace("#", "")); } await FetchDataAndSendAdaptiveCardAsync(turnContext, identifiers, cancellationToken); } }
注意事项
- 配置生效后,私聊中所有消息都会发送给Bot,可根据需求在代码中添加过滤逻辑,避免不必要的响应
- 该配置仅影响私聊场景,频道的消息转发规则不受影响
内容的提问来源于stack exchange,提问作者Vitaliy Charnou
相关产品推荐
相关产品推荐

