根据目前(2025年11月)主流消息平台(如钉钉、企业微信、飞书等)的官方文档和实践,ActionCard 类型的消息本身不支持直接在卡片内容中使用 @ 语法来精确 @ 某个具体的人。
以下是详细解释和替代方案:
为什么 ActionCard 通常不支持直接 @
设计定位不同:
文本消息:是聊天流的一部分,天然支持
@提及功能,用于在对话中直接唤起特定成员的注意。ActionCard:是一种功能性的富媒体卡片,主要用于展示信息摘要和提供交互按钮(如“审批”、“查看详情”、“立即处理”)。它的核心是“操作”,而不是“对话”。
技术实现:
@功能需要解析消息内容中的@符号并关联到具体的用户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 的
text或markdown内容里写@手机号或@用户名就能实现提醒。能:必须使用机器人API提供的
at相关参数(如atMobiles,mentioned_list)来指定被通知人。最佳实践:始终使用
at字段来确保关键人员能被有效通知,同时在 ActionCard 内容中清晰地说明任务和提供操作按钮。