Teams会议群组机器人@提及在桌面/网页端显示空白问题咨询
Teams群聊机器人@提及桌面端/网页端空白问题修复方案
问题表现
- 机器人向群组发送的带@提及的消息,桌面端、网页端聊天视图显示空白
- 移动端、左侧通知栏可正常展示完整内容
问题根因
- 构造Mention对象时,仅传入了用户ID,未补全
ChannelAccount的Name字段,桌面端渲染@提及需要同时匹配ID、名称、@文本三者一致性,移动端和通知栏渲染逻辑更宽松因此可以正常显示 - 若使用XML转义后直接显示原文,是因为未显式设置消息的
TextFormat为Xml格式,默认纯文本格式会直接输出标签内容
修复步骤
- 构造
ChannelAccount时同时传入用户ID和用户名称 - 给消息对象显式设置
TextFormat = TextFormatTypes.Xml - 优化正则捕获逻辑,直接取分组内容避免字符串分割出错
修复后代码
... using Microsoft.Bot.Schema; using Microsoft.Bot.Connector; using System.Text.RegularExpressions; using (ConnectorClient _client = new ConnectorClient(new Uri(groupChat.ServiceUrl), GetMicrosoftAppCredentials(), new HttpClient())) { var theMessage = Activity.CreateMessageActivity(); theMessage.Text = messageDto.Message; // 新增:设置文本格式为Xml,正确解析<at>标签 theMessage.TextFormat = TextFormatTypes.Xml; // 匹配消息中的<at>标签 var textMentions = Regex.Matches(theMessage.Text, @"<at>(.*?)<\/at>"); var mentionObjects = new List<Entity>(); foreach (Match textMention in textMentions) { // 直接取正则分组的用户名,无需分割字符串 var theName = textMention.Groups[1].Value.Trim(); if (string.IsNullOrEmpty(theName)) continue; var teamsUser = _botContext.Users.FirstOrDefault(u => u.Name.Equals(theName)); if (teamsUser == null) continue; var mention = new Mention { // 补全ChannelAccount的Name字段,桌面端渲染必须 Mentioned = new ChannelAccount(teamsUser.TeamsUserId, teamsUser.Name), Text = textMention.Value }; mentionObjects.Add(mention); } theMessage.Entities = mentionObjects; try { var response = await _client.Conversations.SendToConversationAsync(groupChat.GroupChatId, (Activity)theMessage); return Ok(response.Id); } catch (Exception e) { // 建议添加异常日志便于排查问题 } } ...
补充验证点
如果修复后仍有问题,可以检查以下配置:
- 确认机器人在目标群组内拥有发送提及的权限
- 升级Teams桌面客户端到最新版本,部分旧版本存在提及渲染兼容问题
- 确认
teamsUser.TeamsUserId是正确的29/28开头的Teams用户AADID,而非其他平台的用户ID
内容的提问来源于stack exchange,提问作者Xebozone
相关产品推荐
相关产品推荐

