钉钉群机器人 Markdown :颜色渲染 + 链接跳转 + 图片嵌入的正确实现

在企业办公场景中,钉钉群机器人是推送业务通知的常用工具,但很多开发者会遇到类似问题:link类型消息无法添加字体颜色、Markdown消息不知道如何集成链接 / 图片 。本文结合实际开发场景,讲解如何用Markdown消息实现 "颜色渲染 + 链接跳转 + 图片嵌入" 的整合,并避开所有常见坑点。

一、先理清:钉钉机器人 2 种消息类型的核心差异

在动手改造前,先明确linkMarkdown这两种常用消息类型的格式支持范围(这是很多人踩坑的根源):

消息类型 支持的格式 适用场景
link 仅纯文本,不支持任何 HTML/Markdown 标签;支持picUrl(左侧小图片)+messageUrl(跳转链接) 简单通知(需左侧图片 + 跳转)
Markdown 支持<font>颜色标签、文本链接、图片链接;不支持picUrl(需用图片链接替代) ;仅text字段支持格式 需颜色渲染、复杂排版的通知

二、Markdown 消息:字体颜色的正确写法(避 3 个坑)

很多开发者用<font>标签却不生效,核心是没避开这 3 个坑:

坑点 & 正确语法

  1. 标签必须闭合 :必须写</font>结尾,否则会显示原始标签;
  2. 色值必须完整 :用 6 位十六进制色值(如#FF0000),不能简写 / 用英文颜色名(如red仅 PC 端生效);
  3. 引号需转义 :Java 中需用\"替代",避免语法错误。

代码示例:带颜色的标题

复制代码
// 正确:闭合标签+完整色值+转义引号
String coloredTitle = "<font color=\"#FF0000\">已发布</font>"; 

如果需要跳转链接 (替代linkmessageUrl)或图片 (替代linkpicUrl),Markdown 提供了原生支持:

语法:[链接显示文本](完整URL),可结合<font>标签实现带颜色的可点击链接:

复制代码
// 带颜色的跳转链接(替代link的messageUrl)
String linkText = "[<font color=\"#0088FF\">点击查看详情</font>](https://xxx.com/order/20251212)";

语法:![图片描述](公网图片URL),需注意图片必须是公网可访问的(内网地址无法显示):

复制代码
// 替代link类型的picUrl
String imageLink = "![业务截图](https://p3-flow-imagex-sign.byteimg.com/tos-cn-i-a9rns2rl98/xxx.png)";

以用户原有的link类型代码为例,改造为支持颜色 + 链接 + 图片的 Markdown 消息:

复制代码
// 原link类型:标题无法加颜色
String title = "<font color='#FF0000'>已发布</font>"; // 无效,会显示原始标签
MessageText message = new MessageText();
message.setMsgtype("link");
MessageLink messageLink = new MessageLink();
messageLink.setText(text);
messageLink.setTitle(title);
messageLink.setPicUrl(picUrl);
messageLink.setMessageUrl(messageUrl);
message.setLink(messageLink);

改造后的 Markdown 类型代码(支持所有格式)

复制代码
// 1. 构建带颜色+图片+链接的Markdown文本
String markdownText = String.format(
    "%s \n" + // 图片链接(替代link的picUrl)
    "%s \n" + // 带颜色的标题
    "> %s \n" + // 业务文本
    "%s", // 跳转链接(替代link的messageUrl)
    "![业务截图](" + picUrl + ")", // 图片需为公网URL
    "<font color=\"#FF0000\">已发布</font>", // 红色标题
    text, // 原业务文本
    "[<font color=\"#0088FF\">点击查看详情</font>](" + messageUrl + ")"
);

// 2. 构造Markdown类型消息
MessageText message = new MessageText();
message.setMsgtype("markdown");

MessageMarkdown messageMarkdown = new MessageMarkdown();
messageMarkdown.setTitle("已发布"); // Markdown的title仅支持纯文本(不渲染格式)
messageMarkdown.setText(markdownText); // text字段渲染所有格式
message.setMarkdown(messageMarkdown);

五、必看避坑总结

  1. link类型天生不支持标签 :不要尝试在linktitle/text中加<font>/ 链接,会直接显示原始字符串;
  2. Markdown 的title字段无格式 :仅text字段支持<font>、链接、图片;
  3. 图片 URL 必须公网可访问:内网图片链接在钉钉中无法加载;
  4. 引号必须转义 :Java 中用\"包裹<font>color属性,避免 JSON 语法错误;
  5. 色值用 6 位十六进制#FF0000(红色)生效,red(仅 PC 端生效)、#F00(不生效)需避开。

示例:

相关推荐
帅哥哥珍藏版13 小时前
利用机器人Webhook向群推送告警通知
钉钉·飞书·企业微信
Dark_programmer5 天前
钉钉小程序 - - - - - 小程序内跳转其他小程序
小程序·apache·钉钉
一路向前的月光10 天前
Uniapp实现钉钉小程序前期基础配置
uni-app·钉钉
一念一花一世界11 天前
PostIn零基础学习 - 集成钉钉,使用钉钉扫码登录PostIn
钉钉·postin·接口管理工具
一念一花一世界11 天前
sourcefare零基础学习 - 集成钉钉,使用钉钉扫码登录sourcefare
钉钉·sourcefare·代码扫描工具
一念一花一世界11 天前
Arbess零基础学习 - 集成钉钉,使用钉钉扫码登录Arbess
ci/cd·钉钉·arbess
一念一花一世界13 天前
Arbess V2.1.9版本发布,支持Arm64位系统的安装部署,支持自定义消息模版,支持钉钉消息通知
ci/cd·钉钉·arm·arbess
一念一花一世界13 天前
Arbess零基础学习 - 发布流水线提交评审,通过钉钉通知评审人
ci/cd·钉钉·arbess
青靴20 天前
轻量级 CI/CD 实战(四):本地开发钉钉告警 → 自动部署云服务器 Kafka 消费者容器
ci/cd·docker·钉钉