钉钉群机器人 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(不生效)需避开。

示例:

相关推荐
翼龙云_cloud10 小时前
阿里云代理商:阿里云部署的Hermes Agent 钉钉接入指南
人工智能·阿里云·云计算·钉钉·ai 智能体·hermes agent
lizz6661 天前
Hermes-Agent:钉钉dingtalk增加语音识别
人工智能·钉钉·语音识别
tianxiaxue12 天前
企微群内超时提醒通知到飞书/钉钉?
钉钉·飞书·企业微信
lizz6665 天前
Hermes-Agent:钉钉dingtalk配置定时任务收集
人工智能·钉钉
光于前裕于后6 天前
OpenMetadata设置数据质量规则,并通过钉钉告警
钉钉
观测云6 天前
观测云集成钉钉 SSO 最佳实践
钉钉·sso·观测云
终端行者7 天前
Jenkins流水线添加企业微信或者钉钉通知 pipeline 如何通过企微/钉钉通知
ci/cd·jenkins·钉钉·企业微信
就叫飞六吧8 天前
钉钉组织架构同步到本地(排除管理员+管理员两版本)
钉钉
小小AK8 天前
钉钉与金蝶云星空无缝集成方案
大数据·人工智能·钉钉
dtsola16 天前
小遥搜索v1.8.0版本更新【钉钉文档+知识库支持】
程序员·钉钉·ai搜索·ai创业·独立开发者·个人开发者·一人公司