创建钉钉群机器人发送消息

钉钉群机器人是一个高级扩展功能,只要有一个钉钉账号,就可以使用它。它可以将第三方信息聚合到钉钉群中,实现信息自动同步。支持Webhook协议的自定义接入,通过发明者量化机器人,将提醒、报警等信息聚合到钉钉群中。支持钉钉机器人的文本(text)、链接(link)、markdown、跳转卡片(ActionCard)、消息卡片(FeedCard)类型的消息指令操作。同一条信息还可以同时发送至多个钉钉群。
参考官方链接:https://ding-doc.dingtalk.com/doc#/serverapi2/ye8tup

1、创建机器人

1.1、创建钉钉群

​ 钉钉群每创建一个自定义机器人都会产生唯一的Hook地址,我们称为WebHook地址,通过向该WebHook地址推送消息,钉钉群就会收到消息。我们以PC端钉钉为例,首先点击左上方“+”号发起群聊,如果只想自己接受消息,可以随便拉两个人再踢出去,填写群名称如:“xxx讨论组”,群类型选择普通群即可。

1.2、添加钉钉群机器人

​ 点击头像,选择机器人管理,然后选择自定义,点击添加。自定义机器人名字:“钉钉Adapter工具人”,添加到刚刚创建的钉钉群。机器人支持三种安全设置:

1)点击自定义机器人服务:

2)添加钉钉机器人

3)输入机器人名称和添加到群组

自定义关键字:只有信息包含这个关键字,信息才会被同步。

加签:相当于设置密码。

IP地址:固定第三方信息的IP地址段。

1.3、获取加密密钥

  • 来自钉钉机器人设置(群主&管理员可见)

  • 群设置 - 智能群助手 - 选定机器人打开设置,然后如下图

1.4、获取Webhook地址

创建完机器人后会显示如下界面:

接着,我们复制webhook地址备用。

如果只用于提醒或报警,选择自定义关键词就可以了。在这里我们定义的关键词是“:”,也就是说当发明者量化机器人推送的信息中包含“:”时,这条信息才会推送到钉钉群中。然后点击同意协议完成。最后复制Webhook地址备用。

2、客户端示例

在获取到Webhook地址后,我们可以在发明者量化策略中向这个地址发起HTTP POST请求,就可以给这个钉钉群发送信息。需要注意的是,在发起POST请求时,必须将字符集编码设置成UTF-8。

钉钉机器人支持文本(text)、链接(link)、markdown三种消息格式,五种消息类型。

下面是文本类型消息测试示例:

package com.test;import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @description: 钉钉机器人文本消息通知**/
@Slf4j
public class DingTalkTextMsgTest {/*** 发送超时时间10s*/private static final int TIME_OUT = 10000;/*** 钉钉机器人文档地址https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq** @param webhook* @param secret     安全设置 3选1:*                   【方式一,自定义关键词 】*                   【方式二,加签 ,创建机器人时选择加签 secret以SE开头】*                   【方式三,IP地址(段)】* @param content    发送内容* @param mobileList 通知具体人的手机号码列表 (可选)* @return*/public static String sendMsg(String webhook, String secret, String content, List<String> mobileList) {try {//钉钉机器人地址(配置机器人的webhook)if (!StringUtils.isEmpty(secret)) {Long timestamp = System.currentTimeMillis();String sign = getSign(timestamp, secret);webhook = new StringBuilder(webhook).append("&timestamp=").append(timestamp).append("&sign=").append(sign).toString();}System.out.println("webhook:" + webhook);//是否通知所有人boolean isAtAll = false;//组装请求内容String reqStr = buildReqStr(content, isAtAll, mobileList);//推送消息(http请求)String result = postJson(webhook, reqStr);log.info("推送结果result == " + result);return result;} catch (Exception e) {log.info("发送群通知异常 异常原因:{}", e.getStackTrace());return null;}}/*** 组装请求报文* 发送消息类型 text** @param content* @return*/private static String buildReqStr(String content, boolean isAtAll, List<String> mobileList) {//消息内容Map<String, String> contentMap = new HashMap<>();contentMap.put("content", content);//通知人Map<String, Object> atMap = new HashMap<>();//1.是否通知所有人atMap.put("isAtAll", isAtAll);//2.通知具体人的手机号码列表atMap.put("atMobiles", mobileList);Map<String, Object> reqMap = new HashMap<>();reqMap.put("msgtype", "text");reqMap.put("text", contentMap);reqMap.put("at", atMap);return JSON.toJSONString(reqMap);}private static String postJson(String url, String reqStr) {String body = null;try {body = HttpRequest.post(url).body(reqStr).timeout(TIME_OUT).execute().body();} catch (Exception e) {e.printStackTrace();}return body;}/*** 自定义机器人获取签名,创建机器人时选择加签获取secret以SE开头* 把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)* @param secret 机器人安全设置下的签名* @param timestamp 时间戳* @return* @throws NoSuchAlgorithmException* @throws UnsupportedEncodingException* @throws InvalidKeyException*/private static String getSign(Long timestamp, String secret) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {String stringToSign = timestamp + "\n" + secret;Mac mac = Mac.getInstance("HmacSHA256");mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");log.info("sign:" + sign);return sign;}public static void main(String[] args) {String webhook = "https://oapi.dingtalk.com/robot/send?access_token=ccxxxxxxxxxxxxxxxx";String secret = "SECxxxxxxxxxxxxx";List<String> mobileList = new ArrayList<>();mobileList.add("18888888888");DingTalkTextMsgTest.sendMsg(webhook, secret, "hello!!!", null);}
}

修改webhook地址,secret,mobileList运行示例程序即可发送钉钉机器人消息。

3、UI页面测试

1)首先打开测试工具页面:http://cxk0.com/

2)发送请求

输入机器人TokenURL(Webhook地址),加密密钥(secretToken),Markdown消息标题和Markdown文本消息。

钉钉机器人(1)创建钉钉群机器人推送消息相关推荐

  1. 通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)

    通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python) https://github.com/QInzhengk/Math-Model-and-Machine-Learn ...

  2. delphi 企业微信消息机器人_如何使用企业微信群机器人?实时推送消息

    很多已经开通了微信企业号的企业都会采用企业微信来进行工作上的沟通.在日常工作中,特别是服务性的行业,经常需要帮助用户解决常见的而又老是重复的问题,还需要针对顾客的使用情况,发送某些提示或者引导咨询的信 ...

  3. java消息推送怎么实现_调用钉钉接口实现机器人推送消息

    一.摘要 现实交易中为了能及时了解发明者量化机器人交易状态,有时候我们需要将机器人所执行的交易结果发送到微信.邮箱.短信等等.但每天上百条各种各样的信息,使得对这些信息已经不敏感,导致重要的信息不能及 ...

  4. python发钉钉消息_Python调用钉钉机器人推送消息

    1.创建钉钉机器人 群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步: 进入一个钉钉群,点击右上角的"群设置"进入群设置页面: 选择 ...

  5. dingtalk 推送手机号信息 golang_Python学习第九十六天:Python调用钉钉机器人推送消息...

    1.创建钉钉机器人 群机器人是钉钉群的高级扩展功能,群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步: 进入一个钉钉群,点击右上角的"群设置"进入群设置页面: 选择 ...

  6. 钉钉电脑版怎么创建共享文件 钉钉文件共享的方法

    1.进入首页,点击首页左侧任务栏的"钉盘"按钮,进入相应页面. 钉钉电脑版怎么创建共享文件? 钉钉文件共享的方法 2.在钉盘页面中,点击"共享文件"按钮,如图所 ...

  7. 蒲公英上传应用后推送消息到钉钉、微信、QQ

    蒲公英上传生产包,测试人员通过后,就直接下载发布到应用商店的.当发布应用时,推送消息给相关人员,不需要开发一个一个私聊.发下载链接的了. 一.绑定钉钉群,上传应用后,会推送到钉钉群 1.在钉钉群创建机 ...

  8. 持续集成之钉钉消息推送:2:推送消息格式说明

    这篇文章介绍一下目前企业微信所支持的推送消息的格式和使用方法,大部分内容与消息示例均来源于目前钉钉的开发文档. 推送消息示例 curl 'https://oapi.dingtalk.com/robot ...

  9. 插件实现了钉钉和企业微信推送消息

    项目需要开发一个消息推送插件,今天整理一下做一个记录. 消息推送插件实现了钉钉和企业微信推送消息的功能. 首先介绍的是钉钉的实现方式: 1.需要在钉钉后台创建一个应用,并且需要记录下agentId.a ...

最新文章

  1. 程序员面试题100题第19题——反转链表
  2. 开发软件真是一件有意思的事情
  3. python seaborn_Python数据可视化,seaborn如何做出非常规图表
  4. Uncaught SyntaxError - unexpected end of input
  5. 前端学习(1149):变量let02
  6. BZOJ 1191 [HNOI2006]超级英雄Hero
  7. Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth
  8. java 打印机类printer_Spring案例打印机的实现过程详解
  9. com.android.yf.idp,QQ轻聊版-com.tencent.qqlite_v3.3.0_apkpure.apk
  10. Redis的lua脚本
  11. mac 版 idea 破解
  12. 走好数据中台最后一公里,为什么说数据服务API是数据中台的标配?
  13. 如何用C语言封装 C++的类
  14. Opencv中的颜色检测
  15. 查询表空间建立表空间和删除表空间
  16. 教室计算机广播控制,小学智能广播系统(模拟广播)系统解决方案
  17. 配置赛门铁克(Symantec)https证书:从阿里云申请免费赛门铁克(Symantec)https证书并配置到cdn
  18. Bootstrap-CL:标签
  19. idea spark java,IntelliJ Idea 搭建spark 开发环境
  20. 携手华为,瑞金医院病理科为健康数字化保驾护航

热门文章

  1. 小程序Canvas生成分享海报避坑指南
  2. OpenCV 4.x API 详解与C++实例-Mat数据类型详解
  3. java面试题集 代码_java面试题集1.txt 源代码在线查看 - 常见的JAva面试试题 资源下载 虫虫电子下载站...
  4. 1.4_22 Axure RP 9 for mac 高保真原型图 - 案例21【中继器 - 入门2】添加数据
  5. SpringBootStarter slf4j 冷门错误(SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.)
  6. Git的使用:本地有新改动如何提交到远程服务器,仅做参考!
  7. mysql表结构以及数据导入postgresql常见问题
  8. Linux 安装OpenGL
  9. 网络视频播放ZFPlayer
  10. XBoot前后端分离开发平台springboot 2.x iview admin vue 集成activiti工作流 模型设计器 动态数据权限 权限按钮显示 s...