ActionCard 类型消息可以@人吗

阿里云服务器

根据目前(2025年11月)主流消息平台(如钉钉、企业微信、飞书等)的官方文档和实践,ActionCard 类型的消息本身不支持直接在卡片内容中使用 @ 语法来精确 @ 某个具体的人

以下是详细解释和替代方案:

为什么 ActionCard 通常不支持直接 @

  1. 设计定位不同

    • 文本消息:是聊天流的一部分,天然支持 @ 提及功能,用于在对话中直接唤起特定成员的注意。

    • ActionCard:是一种功能性的富媒体卡片,主要用于展示信息摘要和提供交互按钮(如“审批”、“查看详情”、“立即处理”)。它的核心是“操作”,而不是“对话”。

  2. 技术实现@ 功能需要解析消息内容中的 @ 符号并关联到具体的用户ID。在 ActionCard 的富文本或Markdown格式中,@ 符号通常被视为普通字符,不会被平台解析为提及指令。

替代方案:如何在 ActionCard 中实现“通知到人”的效果

虽然不能直接 @,但有以下几种更有效的方式,既能达到通知目的,又符合 ActionCard 的设计理念:

1. 利用“被@人”字段 (最推荐)

这是最标准、最有效的方法。几乎所有支持 ActionCard 的机器人API都提供了专门的参数来指定需要被通知的用户。

  • 原理:在发送 ActionCard 消息的API请求中,有一个独立的字段(如 atMobiles, atDing, mentioned_list 等)来传入需要被@的用户的手机号或用户ID。

  • 效果:消息发送后,整个 ActionCard 会以“被@”的形式展示给指定用户,并在聊天列表中产生明显的提醒(如红点、通知),确保他们不会错过。

  • 示例 (钉钉机器人API)

    {
        "msgtype": "actionCard",
        "actionCard": {
            "title": "【紧急】系统故障告警",
            "text": "## 系统出现严重故障\n> **故障模块**:支付网关\n> **影响范围**:全国用户\n> **发生时间**:2025-11-01 10:30\n\n请立即处理!",
            "btnOrientation": "0",
            "singleTitle": "查看告警详情",
            "singleURL": "https://your-monitoring-system.com/alert/123"
        },
        "at": {
            "atMobiles": [
                "13800138000", // 运维负责人A的手机号
                "13900139000"  // 运维负责人B的手机号
            ],
            "isAtAll": false
        }
    }
    • 在这个例子中,虽然 text 里没有 @,但通过 at.atMobiles 字段,运维负责人A和B会收到明确的“被@”通知。

2. 在卡片内容中提及姓名或角色 (辅助手段)

  • 方法:在 ActionCard 的 text 内容中,直接写出需要通知的人的姓名或角色。

    • 例如:紧急通知:@张三 @李四,请立即处理该工单!

  • 效果

    • 优点:信息明确,即使不是被精确 @,看到消息的人也能知道该找谁。

    • 缺点不会触发平台的“被@”提醒机制。如果目标用户没有在群聊,他们可能不会立即收到通知,效果远不如使用 at 字段。

3. 结合文本消息发送 (复杂场景)

  • 方法:先发送一条简单的文本消息,内容为 @相关人员 + 一条简短的提醒(如“有新的紧急任务,请查收卡片”),紧接着再发送 ActionCard 消息。

  • 效果:利用文本消息的 @ 功能确保人员被唤醒,再用 ActionCard 提供详细信息和操作入口。

  • 缺点:发送两条消息,体验稍显割裂。

总结

  • 不能:不要期望在 ActionCard 的 textmarkdown 内容里写 @手机号@用户名 就能实现提醒。

  • :必须使用机器人API提供的 at 相关参数(如 atMobiles, mentioned_list)来指定被通知人。

  • 最佳实践始终使用 at 字段来确保关键人员能被有效通知,同时在 ActionCard 内容中清晰地说明任务和提供操作按钮。