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

如何通过Curl向Teams频道发送消息并@指定人员?

在Teams中通过Curl发送带@提醒的Jenkins构建消息

Teams的@提醒不能直接在消息文本里打@用户名,必须遵循它的消息卡片格式规范,结合用户标识和特定标签实现。以下是具体实现步骤和示例:

核心原理

要@指定用户,消息体需要包含两部分:

  • 在文本中用<at>显示名称</at>标记要@的位置
  • 在mentions数组里声明被@用户的唯一标识(用户ID或用户主体名userPrincipalName)

获取用户标识

你需要先拿到要@用户的以下任一标识:

  • 用户ID:在Teams中右键目标用户→「查看详情」,复制页面底部的用户ID(一串长字符)
  • 用户主体名:通常是用户的公司邮箱(比如zhangsan@company.com)

Curl命令示例

1. @单个用户

curl -H "Content-Type: application/json" -X POST -d '{
    "text": "Jenkins构建完成:<at>张三</at>,你负责的项目构建失败,请及时排查!",
    "mentions": [
        {
            "id": "12345678-1234-1234-1234-123456789abc",
            "mentionType": "person",
            "text": "<at>张三</at>",
            "user": {
                "id": "12345678-1234-1234-1234-123456789abc",
                "userPrincipalName": "zhangsan@company.com",
                "displayName": "张三"
            }
        }
    ]
}' "你的Teams webhook URL"

2. @多个用户

如果需要同时@多个人,只需在mentions数组里添加多个用户对象即可:

curl -H "Content-Type: application/json" -X POST -d '{
    "text": "Jenkins构建完成:<at>张三</at>、<at>李四</at>,项目构建失败,请及时排查!",
    "mentions": [
        {
            "id": "12345678-1234-1234-1234-123456789abc",
            "mentionType": "person",
            "text": "<at>张三</at>",
            "user": {
                "id": "12345678-1234-1234-1234-123456789abc",
                "userPrincipalName": "zhangsan@company.com",
                "displayName": "张三"
            }
        },
        {
            "id": "87654321-4321-4321-4321-cba987654321",
            "mentionType": "person",
            "text": "<at>李四</at>",
            "user": {
                "id": "87654321-4321-4321-4321-cba987654321",
                "userPrincipalName": "lisi@company.com",
                "displayName": "李四"
            }
        }
    ]
}' "你的Teams webhook URL"

Jenkins集成优化

在Jenkins脚本中,你可以动态获取构建责任人的信息:

  • 从Git提交记录里提取提交者邮箱(对应userPrincipalName)
  • 提前维护用户ID和邮箱的映射表,或者用Azure AD Graph API根据邮箱获取用户ID
  • 将这些动态值替换到Curl的payload中,实现自动@责任人

比如,用Jenkins变量替换的示例:

BUILD_STATUS="失败"
RESPONSIBLE_EMAIL="zhangsan@company.com"
RESPONSIBLE_NAME="张三"
RESPONSIBLE_ID="12345678-1234-1234-1234-123456789abc"

curl -H "Content-Type: application/json" -X POST -d '{
    "text": "Jenkins构建完成:<at>'"$RESPONSIBLE_NAME"'</at>,你负责的项目构建'"$BUILD_STATUS"',请及时排查!",
    "mentions": [
        {
            "id": "'"$RESPONSIBLE_ID"'",
            "mentionType": "person",
            "text": "<at>'"$RESPONSIBLE_NAME"'</at>",
            "user": {
                "id": "'"$RESPONSIBLE_ID"'",
                "userPrincipalName": "'"$RESPONSIBLE_EMAIL"'",
                "displayName": "'"$RESPONSIBLE_NAME"'"
            }
        }
    ]
}' "你的Teams webhook URL"

内容的提问来源于stack exchange,提问作者TATA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:03:17