You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#实现Web应用存记录后向Teams指定用户发自适应卡片通知

可以用C#实现,推荐通过Microsoft Graph API完成需求

因为要给特定用户推送通知到你的Teams应用,Incoming Webhooks无法满足,而Microsoft Graph API支持直接与用户的Teams应用会话交互。

核心实现步骤

1. 前置准备

  • 在Azure AD注册应用,获取租户ID、客户端ID、客户端密钥,并添加以下应用权限(需管理员同意):
    • TeamsAppInstallation.ReadWriteForUser.All
    • ChatMessage.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:00:06