如何使用C#和Incoming Webhook向Microsoft Teams单个用户发消息
如何用C#向Microsoft Teams单个用户发送消息
你当前的代码是通过频道Incoming Webhook发送消息,这类Webhook仅支持向团队频道推送内容,无法直接发送到单个用户的一对一聊天窗口。要实现给单个用户发消息,推荐使用Microsoft Graph API,以下是具体实现步骤和代码:
前提准备
- 在Azure AD中注册应用程序,添加
ChatMessage.Send应用权限(若要以应用身份发送,无需用户登录)或委派权限(需用户登录),并完成权限授予。 - 获取应用的访问令牌(使用客户端凭据流获取应用权限令牌,或授权码流获取委派权限令牌)。
C#代码示例
using System; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; public async Task SendMessageToUser(string accessToken, string userId, string messageContent) { using var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); // 构建文本消息请求体 var requestBody = new { body = new { content = messageContent } }; var jsonContent = new StringContent( JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json"); // 调用Graph API发送消息到指定用户的一对一聊天 var response = await httpClient.PostAsync( $"https://graph.microsoft.com/v1.0/users/{userId}/chatMessages", jsonContent); response.EnsureSuccessStatusCode(); // 可根据业务需求添加异常处理逻辑 }
补充说明
userId可以是用户的UPN(例如user@yourdomain.com)或Azure AD对象ID。- 如果需要发送富格式消息(如自适应卡片、附件),可以修改
body.content为HTML格式,或在请求体中添加attachments字段扩展内容结构。 - 目前Teams官方不支持直接创建一对一聊天的Incoming Webhook,Graph API是实现用户定向消息推送的标准方案。
内容的提问来源于stack exchange,提问作者Amol
相关产品推荐
相关产品推荐

