当前位置: 首页 > news >正文

java通过钉钉机器人发消息

钉钉自定义机器人使用 加签的配置 发送消息

注意:内部群才可以创建自定义机器人
钉钉网址-自定义机器人创建

1、获得的钉钉配置信息workhook和secret

//url路径private String URL = "https://oapi.dingtalk.com/robot/send?access_token=08ebaa04f98f7faacbacd80fa879463d85cdccdd6cef184ef01bb5a8b6ae6f6c";
//加签密钥private String DINGDING_SECRET = "SEC27596efd776991b2f6786270fa59552459f64612b17adf377295669361af3fae";

2、配置加签

配置路径

    private String getSign() {Long timestamp = System.currentTimeMillis();String stringToSign = timestamp + "\n" + DINGDING_SECRET;Mac mac = null;String sign = null;try {mac = Mac.getInstance("HmacSHA256");mac.init(new SecretKeySpec(DINGDING_SECRET.getBytes("UTF-8"), "HmacSHA256"));byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");} catch (Exception e) {throw new IllegalArgumentException("加签处理有误");}return "&timestamp=" + timestamp + "&sign=" + sign;}

3、按照钉钉要求整理json数据结构

如果phone为null则发送普通消息,不为空则发送给特定的人

   private JSONObject buildDingDingMessage(String phone, String message) {//2、按要求配置参数格式JSONObject json = new JSONObject();json.put("msgtype", "text");json.put("text", new JSONObject() {{put("content", message);}});if (!UtilString.isBlank(phone)) {ArrayList<String> list = new ArrayList<>();list.add(phone);json.put("at", new JSONObject() {{put("atMobiles", list.toArray());}});}return json;}
    @Overridepublic void doSendMessage(String phone, String message) {//1、检查数据if (UtilString.isBlank(message)) {throw new IllegalArgumentException("请输入钉钉服务机器人要输出的信息");}//2、配置钉钉信息JSONObject  json = buildDingDingMessage(phone, message);//3、请求String url = URL + getSign();String responseText = HttpClient.textBody(url).json(json.toJSONString()).connectTimeout(60).readTimeout(5 * 60).writeTimeout(5 * 60).asString();
//无错则不发送日志消息JSONObject responseJson = JSON.parseObject(responseText);if (!responseJson.getString("errmsg").equals("ok")) {log.error(responseJson.getString("errmsg"));}}
http://www.lryc.cn/news/162880.html

相关文章:

  • Git工具本地管理总结
  • 单片机C语言实例:13、看门狗
  • 时序分解 | MATLAB实现基于SSA奇异谱分析的信号分解分量可视化
  • mysql报错:Duplicate entry ‘...‘ for key ‘field‘
  • 什么是回流跟重绘?从中怎么优化网页性能?
  • Redis事务机制
  • [EROOR] SpringMVC之500 回调函数报错
  • [Linux]文件系统
  • 常见面试题记录
  • Android 系统源码目录frameworks/base/packages和packages/apps下的APP区别
  • 2023年数维杯数学建模A题河流-地下水系统水体污染研求解全过程文档及程序
  • Java测试(10)--- selenium
  • 【文末送书】Matlab科学计算
  • ElementUI浅尝辄止30:PageHeader 页头
  • [Qt]基础数据类型和信号槽
  • UIStackView入门使用两个问题
  • 【Sentinel】Sentinel与gateway的限流算法
  • python实现对excel表中的某列数据进行排序
  • CMS指纹识别
  • STL- 常用算法
  • 苹果铃声怎么设置?3招教你设置个性化铃声!
  • LRTimelapse 6 for Mac(延时摄影视频制作软件)
  • 数据结构和算法(4):栈与队列
  • pdf怎么转换成dwg格式?简单转换方法分享
  • uniapp使用H5实现预览pdf文件
  • Studio 3T for MongoDB的介绍及语法简单介绍
  • MySQL数据库——存储引擎(1)-MySQL体系结构、存储引擎简介
  • 211. 添加与搜索单词 - 数据结构设计
  • 【深度学习】You Only Segment Once: Towards Real-Time Panoptic Segmentation,YOSO全景分割
  • ping与Traceroute是如何工作的