如何用C#实现Web应用存记录后向Teams指定用户发自适应卡片通知
可以用C#实现,推荐通过Microsoft Graph API完成需求
因为要给特定用户推送通知到你的Teams应用,Incoming Webhooks无法满足,而Microsoft Graph API支持直接与用户的Teams应用会话交互。
核心实现步骤
1. 前置准备
- 在Azure AD注册应用,获取租户ID、客户端ID、客户端密钥,并添加以下应用权限(需管理员同意):
TeamsAppInstallation.ReadWriteForUser.AllChatMessage.Send
- 确保你的Teams应用已发布到租户,且目标用户已安装该应用(若未安装,可通过API强制安装,但推荐用户主动安装)
- 获取你的Teams应用ID(可在Teams开发者平台的应用详情中找到)
2. C#代码实现
先安装必要的NuGet包:Microsoft.Graph 和 Azure.Identity
初始化Graph客户端
using Microsoft.Graph; using Azure.Identity; var tenantId = "你的租户ID"; var clientId = "Azure AD应用客户端ID"; var clientSecret = "Azure AD应用客户端密钥"; var credential = new ClientSecretCredential(tenantId, clientId, clientSecret); var graphClient = new GraphServiceClient(credential);
发送自适应卡片到指定用户
// 1. 通过用户UPN获取用户ID var targetUserUpn = "目标用户的邮箱/UPN,比如user@yourdomain.com"; var user = await graphClient.Users[targetUserUpn].GetAsync(); var userId = user.Id; // 2. 获取用户与你的Teams应用的会话ID var teamsAppId = "你的Teams应用ID"; var appInstallation = await graphClient.Users[userId].Teamwork.InstalledApps[teamsAppId].GetAsync(); var chatId = appInstallation.ChatId; // 3. 构造自适应卡片内容 var adaptiveCard = @" { ""type"": ""AdaptiveCard"", ""version"": ""1.0"", ""body"": [ { ""type"": ""TextBlock"", ""text"": ""记录保存成功"", ""size"": ""Large"", ""weight"": ""Bolder"" }, { ""type"": ""TextBlock"", ""text"": ""新记录已成功保存,信息如下:"" }, { ""type"": ""FactSet"", ""facts"": [ {""title"": ""记录ID"", ""value"": ""REC-789""}, {""title"": ""保存时间"", ""value"": ""2024-05-20 15:40""} ] } ], ""actions"": [ { ""type"": ""Action.OpenUrl"", ""title"": ""查看详情"", ""url"": ""https://你的Web应用地址/records/REC-789"" } ] }"; // 4. 发送通知消息 var chatMessage = new ChatMessage { Body = new ItemBody { ContentType = BodyType.Html, Content = $"<attachment>{adaptiveCard}</attachment>" } }; await graphClient.Chats[chatId].Messages.PostAsync(chatMessage);
3. 关键注意事项
- 目标用户必须已安装你的Teams应用,否则无法获取会话ID
- 自适应卡片需严格遵循Teams的自适应卡片规范,避免使用不兼容的元素
- Azure AD应用的权限必须正确配置并完成管理员同意,否则API调用会报错
内容的提问来源于stack exchange,提问作者kcbg18
相关产品推荐
相关产品推荐

