@ 人
@ 是怎么生效的
请求里的 at 对象带上被 @ 人的手机号(或 isAtAll)——它决定谁收到通知。
MARKDOWN 和 ACTION_CARD 除此之外还要求消息正文里出现对应的 @手机号 文本, 否则 @ 完全不生效、连通知都没有。插件会自动补上:把 @手机号 追加到消息末尾; 如果你在自定义消息里已经写了 @手机号,插件不会再追加一遍,@ 会留在你写的位置。
TEXT 类型不需要正文里有 @手机号——钉钉会自己把 @ 渲染出来(正文没写就追加到末尾, 写了就在原位渲染),所以插件对 TEXT 类型不做任何追加。
TIP
只有在群内的成员才可被 @。官方说明:非群内成员的手机号会被脱敏,此时 @ 完全不生效、也不会有通知。 如果 @ 没有任何反应,先确认这个手机号是不是机器人所在群的成员。
勾选 通知所有人 时,插件不再把手机号追加到正文:所有人本来就会收到通知,而钉钉在 @所有人 的情况下 不再解析单个手机号,追加上去只会在消息里留下一串没有变成姓名的号码。
各消息类型的差异
| 消息类型 | 是否支持 @ | 电脑端可点击 | 手机端可点击 |
|---|---|---|---|
TEXT | ✅ | ✅ | ✅ |
MARKDOWN | ✅ | ✅ | ❌ |
ACTION_CARD | ✅ | ✅ | ❌ |
LINK | ❌ | —— | —— |
「是否支持 @」指的是通知能否送达。MARKDOWN 和 ACTION_CARD 的 @ 通知是正常送达的, 被 @ 的人会收到提醒;差别只在手机端的显示与交互。
手机端 @ 不可点击是钉钉的行为
插件的内置消息使用 ACTION_CARD 类型,因此它的 @ 在手机端不会高亮、也点不开。 这不是插件的问题,钉钉对此有明确说明:
@人是否高亮显示:使用不同类型发送消息,被@后是否高亮显示效果不同。
@效果 是否支持高亮 Text类型 是 Markdown类型 否 ActionCard类型 否 机器人发送 Markdown 消息类型@人员,不支持高亮显示。
经实测,MARKDOWN / ACTION_CARD 里的 @ 在电脑端会被渲染出来并且可以点击, 手机端则完全不渲染、点不开;TEXT 类型两端都可以点击。 换用 atUserIds(钉钉 userId)代替手机号不会改变这一点——决定因素是消息类型,不是标识符。
TIP
@ 的具体样式取决于你是不是被 @ 的那个人(官方对「查看 @ 自己的消息」和「@ 其他人的消息」分别举例), 所以判断 @ 有没有真正生效,看的是能不能点开,而不是颜色。
需要可点击的 @ 怎么办
在 pipeline 中使用 TEXT 类型发送:
dingtalk(
robot: 'robot-id',
type: 'TEXT',
text: ['构建完成,请查看'],
at: ['13800000000']
)代价是 TEXT 类型不渲染任何 markdown:标题、链接、颜色、按钮都不可用, #、[文字](链接)、<font> 都会原样显示。所以这是一个取舍—— 需要卡片样式就接受手机端的 @ 不可点击,需要可点击的 @ 就接受纯文本。
WARNING
不要为了 @ 的交互效果把内置消息改成 TEXT——内置消息依赖 markdown 渲染标题、状态颜色和两个按钮, 换成 TEXT 后这些都会变成可见的原始标记。
