如何通过Microsoft Graph API在Teams频道发送含表情的消息?
解决Teams频道消息添加表情的BadRequest问题
你遇到的问题是因为使用了Teams不支持的<emoji>标签,且HTML实体转义后的Unicode字符触发了API的格式校验。以下是正确的解决方法:
替换无效标签,直接使用Unicode表情字符
Teams的消息HTML内容不支持自定义<emoji>标签,你需要把十六进制表情值转换成对应的Unicode字符,直接嵌入到消息内容里。C#中转换十六进制到Unicode字符的方法
假设你手里的表情十六进制值是1F600,可以用这段代码转换:
// 十六进制表情值(去掉前缀&#x) string emojiHex = "1F600"; // 转换为整数编码 int emojiCodePoint = int.Parse(emojiHex, System.Globalization.NumberStyles.HexNumber); // 转换为Unicode字符 string emoji = char.ConvertFromUtf32(emojiCodePoint);
- 构造正确的ChatMessage对象
把转换后的表情直接放到HTML内容中,同时确保ContentType设为Html:
var chatMsg = new ChatMessage { Body = new ItemBody { ContentType = BodyType.Html, Content = $"<div class=\"myDiv\">3/30/2023 7:28:01 PM <br/>{emoji}</div>" } };
- 调用API发送消息
保持你原有的调用代码即可:
await clientWithDelegatedToken.Teams[teamId].Channels[channelId].Messages.Request().AddAsync(chatMsg);
原理:Teams支持直接在HTML消息中显示标准Unicode表情字符,Graph SDK会自动处理字符的JSON转义,避免触发"Unicode不支持"的错误提示。
内容的提问来源于stack exchange,提问作者CloudAnywhere
相关产品推荐
相关产品推荐

