logo
1
1
Login
支持所有钉钉机器人消息类型,参数精确匹配

dingtalk-bot-msg

发送钉钉机器人消息,支持所有钉钉机器人消息类型

在 云原生构建 上使用

main: push: - stages: - name: dingtalk-bot-msg imports: https://xxx/envs.yaml image: tencentcom/dingtalk-bot-msg:latest settings: content: "your message" c_type: "text" # 支持: text, markdown, link, actionCard, multiActionCard, feedCard secret: $SECRET webhook: $WEBHOOK at: "199xxxxxx" # 多个用分号(;)分隔 isAtAll: false debug: false # 新增: 是否启用调试模式

envs.yaml文件示例:

WEBHOOK: xxx SECRET: xxx

消息类型使用说明

1. 文本消息(text)

c_type: "text" content: "文本消息内容"

2. Markdown消息(markdown)

c_type: "markdown" content: "#### Markdown标题\n- 项目1\n- 项目2"

3. 链接消息(link)

c_type: "link" content: "标题|消息内容|图片URL|跳转URL"

4. 整体跳转ActionCard(actionCard)

c_type: "actionCard" content: "标题|消息内容|按钮方向(0-垂直,1-水平)|按钮标题|跳转URL"

5. 独立跳转ActionCard(multiActionCard)

c_type: "multiActionCard" content: "标题|消息内容|按钮方向(0-垂直,1-水平)|按钮1标题,按钮1URL|按钮2标题,按钮2URL"

6. FeedCard消息(feedCard)

c_type: "feedCard" content: "标题1,跳转URL1,图片URL1|标题2,跳转URL2,图片URL2"

参数说明

  • content:消息内容,格式根据消息类型有所不同

  • c_type:消息类型。支持: text, markdown, link, actionCard, multiActionCard, feedCard

  • webhook:钉钉机器人 WebHook [需要在PC端钉钉客户端创建]。 参考文档

  • secret:安全设置加签的密钥。可选(推荐)。 参考文档

  • at:需要 at 的人。填写需要 at 人的手机号,多个以 ";" 隔开

  • isAtAll:是否 at 所有人。bool值

  • debug:是否启用调试模式。bool值,默认为false。启用后会显示完整的请求和响应信息,包括敏感信息

调试模式说明

新增的调试模式(debug)功能可以帮助用户在开发和测试过程中更好地排查问题:

  1. 功能特点

    • 显示完整的webhook地址(不会隐藏token部分)
    • 显示完整的secret密钥(不会用星号替代)
    • 显示完整的手机号码(不会隐藏中间部分)
    • 显示详细的签名生成过程(时间戳和签名值)
    • 显示完整的请求内容和响应内容
  2. 使用方法

    • 在配置中添加debug: true参数
    • 或在命令行中使用--debug true参数
  3. 使用场景

    • 开发测试阶段排查问题
    • 验证签名算法是否正确
    • 检查请求和响应的完整内容
  4. 安全提示

    • 调试模式会显示敏感信息,请勿在生产环境中启用
    • 调试日志可能包含secret、token等敏感信息,注意保护日志安全

完整实现说明

  1. 支持所有钉钉机器人消息类型
    • 文本消息(text)
    • Markdown消息(markdown)
    • 链接消息(link)
    • 整体跳转ActionCard(actionCard)
    • 独立跳转ActionCard(multiActionCard)
    • FeedCard消息(feedCard)
  2. 参数处理优化
    • 使用管道符(|)分隔复杂消息类型的多个参数
    • 对于多条目消息(如FeedCard),支持用管道符分隔多个条目
  3. 错误处理
    • 增加了各种消息类型的格式验证
    • 提供更清晰的错误提示
  4. 兼容性
    • 保持与原有实现的兼容
    • 新增功能不影响原有text和markdown消息的使用
  5. 调试功能
    • 新增debug模式,方便开发测试和问题排查
    • 提供敏感信息保护机制,非调试模式下自动隐藏敏感信息

这个扩展实现覆盖了钉钉机器人所有支持的消息类型,并提供了清晰的文档说明和测试用例,便于用户使用各种消息类型。

关于测试脚本的说明

优化说明

  1. 参数精确匹配

    • 只有textmarkdown类型消息包含PLUGIN_ATPLUGIN_ISATALL参数
    • 其他类型消息不包含这些参数,因为它们不支持@功能

    故优化了入口文件entrypoint.sh

  2. 增强可读性

    • 添加了分隔线和测试类型说明
    • 使用了更真实的测试消息内容
  3. 参数完整性

    • 每种消息类型都包含了它支持的所有参数
    • 对于可选参数(如SECRET),在部分测试中保留,部分测试中省略,以测试不同场景
  4. 格式统一

    • 所有消息类型的content格式与代码中的解析逻辑完全匹配
    • 使用一致的参数命名风格
  5. 错误预防

    • 避免在不支持@功能的消息类型中传递AT参数
    • 确保每种消息的参数组合都是有效的
  6. 调试支持

    • 在测试脚本中添加了对debug参数的支持
    • 部分测试用例启用debug模式,以验证调试功能正常工作

这个测试脚本现在可以全面验证各种消息类型的正确性,同时符合钉钉机器人API的规范要求。

插件入口文件的变更

当前的entrypoint.sh脚本已经优化,根据消息类型有条件地传递参数,并支持debug模式:

#!/bin/sh # 基础参数 ARGS="--content \"$PLUGIN_CONTENT\" \ --c_type \"$PLUGIN_C_TYPE\" \ --webhook \"$PLUGIN_WEBHOOK\"" # 添加secret参数(如果存在) if [ -n "$PLUGIN_SECRET" ]; then ARGS="$ARGS --secret \"$PLUGIN_SECRET\"" fi # 只有text和markdown消息支持@功能 case "$PLUGIN_C_TYPE" in "text"|"markdown") # 添加at参数(如果存在) if [ -n "$PLUGIN_AT" ]; then ARGS="$ARGS --at \"$PLUGIN_AT\"" fi # 添加isAtAll参数(默认为false) ARGS="$ARGS --isAtAll ${PLUGIN_ISATALL:-false}" ;; esac # 最后添加debug参数 ARGS="$ARGS --debug \"${PLUGIN_DEBUG:-false}\"" # 执行Go程序 eval "go run /plugins/main.go $ARGS"

插件入口文件的优化说明

  1. 条件性参数传递
    • 只有textmarkdown消息类型会传递--at--isAtAll参数
    • 其他消息类型不会传递这些参数
  2. 参数构建方式
    • 使用变量逐步构建参数列表
    • 使用eval最终执行命令,正确处理带空格的参数
  3. 可选参数处理
    • secret参数只在提供时才会传递
    • at参数只在提供时才会传递(仅对支持的消息类型)
  4. 默认值处理
    • isAtAll保持默认值为false(仅对支持的消息类型)
    • debug参数默认为false
  5. 安全性
    • 所有参数都用双引号包裹,防止空格或特殊字符导致的问题
    • 使用eval前确保参数已正确转义

注意事项

  1. linkactionCardmultiActionCardfeedCard类型消息不支持@功能
  2. 消息内容中特殊字符需正确转义
  3. 每种消息类型有不同的大小限制,请参考钉钉官方文档
  4. 调试模式会显示敏感信息,请勿在生产环境中启用
  5. 使用加签方式(secret参数)可以提高安全性,建议启用

更多用法参考:钉钉开放平台帮助文档