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 "×tamp=" + 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"));}}
相关文章:
java通过钉钉机器人发消息
钉钉自定义机器人使用 加签的配置 发送消息 注意:内部群才可以创建自定义机器人 钉钉网址-自定义机器人创建 1、获得的钉钉配置信息workhook和secret //url路径private String URL "https://oapi.dingtalk.com/robot/send?access_token08ebaa04f98f7faacb…...
Git工具本地管理总结
一、本地仓库创建 https://blog.csdn.net/heshuangzong/article/details/125882372 https://blog.csdn.net/l7077/article/details/130270914 在本地创建/home/test目录,作为本地仓库目录。 $ mkdir /home/test $ cd /home/test 初始化本地的git 仓库。 $ git init Initial…...
单片机C语言实例:13、看门狗
一、看门狗溢出测试 程序实例1: #include<reg52.h>sfr WDTRST 0xA6; sbit key P3^1; /*------------------------------------------------喂狗 ------------------------------------------------*/ void Rst_Watchdog( void ) {WDTRST 0x1E…...
时序分解 | MATLAB实现基于SSA奇异谱分析的信号分解分量可视化
时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 奇异谱分解奇异谱分析SSA 可直接替换txt数据运行 Matlab 1.包含3D分解效果图 频谱图等…...
mysql报错:Duplicate entry ‘...‘ for key ‘field‘
错误信息 "Duplicate entry ... for key field" 表示在数据库表中,你正在尝试插入一条数据的number字段的值已经存在。这通常是由于你设置了field字段为唯一键(UNIQUE KEY),而你又尝试插入一个已存在的值。 解决这个问…...
什么是回流跟重绘?从中怎么优化网页性能?
目录 一、什么是回流? 二、什么是重绘? 三、如何触发回流和重绘?会带来什么问题? 四、如何减少回流和重绘的影响? 在前端开发中,回流(reflow)和重绘(repaint…...
Redis事务机制
Redis 是一款开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。在日常的使用中,我们经常会遇到需要一次执行多个命令,并且这些命令要么全部成功,要么全部失败的场景。这就需要用到 Redis 的事务机制。 Redi…...
[EROOR] SpringMVC之500 回调函数报错
首先,检查一下idea里面的报错的原因,我的是jdk的版本的问题。所以更换一下就可以了。...
[Linux]文件系统
[Linux]文件系统 文件系统是操作系统的一部分,负责组织、存储和管理存储在外部设备上的文件和目录,也就是操作系统管理外设中的文件的策略。本文讲解的是Ext2文件系统。Linux操作系统使用的就是Ext系列的文件系统。 文章目录 [Linux]文件系统了解磁盘结构…...
常见面试题记录
记录下java的常见面试题 文章目录 记录如下 记录如下 记录如下 hashmap原理lock原理synchronized锁优化过程线程状态以及创建方式线程池(执行过程,参数,淘汰策略)jvm(gc优化和OOM)volatile(可见…...
Android 系统源码目录frameworks/base/packages和packages/apps下的APP区别
概要 在 Android Open Source Project (AOSP) 源代码中,frameworks/base/packages 和 packages/apps 目录都包含 Android 系统中的应用程序,但它们在性质和用途上有一些区别: 1,frameworks/base/packages frameworks/base 目录…...
2023年数维杯数学建模A题河流-地下水系统水体污染研求解全过程文档及程序
2023年数维杯数学建模 A题 河流-地下水系统水体污染研 原题再现: 河流对地下水有着直接地影响,当河流补给地下水时,河流一旦被污染,容易导致地下水以及紧依河流分布的傍河水源地将受到不同程度的污染,这将严重影响工…...
Java测试(10)--- selenium
1.定位一组元素 (1)如何打开本地的HTML页面 拼成一个URL :file: /// 文件的绝对路径 import os os.path.abspath(文件的绝对路径) (2)先定位出同一类元素(tag name,name&…...
【文末送书】Matlab科学计算
欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…...
ElementUI浅尝辄止30:PageHeader 页头
如果页面的路径比较简单,推荐使用页头组件而非面包屑组件。 1.如何使用? <el-page-header back"goBack" content"详情页面"> </el-page-header><script>export default {methods: {goBack() {console.log(go bac…...
[Qt]基础数据类型和信号槽
文章目录 1. Qt基本结构1.1 Qt本有项目1.1.1 项目文件(.pro)1.1.2 main.cpp1.1.3 mainwindow.ui1.1.4 mainwindow.h1.1.5 mainwindow.cpp 1.2 Qt中的窗口类1.2.1基础窗口类1.2.2 窗口的显示 1.3 内存回收 2. Qt中的基础数据类型2.1 基础类型2.2 log输出2…...
UIStackView入门使用两个问题
项目中横向一排元素,竖向一排元素,可以使用UIStackView。UIStackView的原理不做介绍,这里主要讲两个初次使用容易出现的两个问题。 首先创建一个stackview -(UIStackView*)titleStackView{if(_titleStackView nil){_titleStackView [UISta…...
【Sentinel】Sentinel与gateway的限流算法
文章目录 1、Sentinel与Hystrix的区别2、限流算法3、限流算法对比4、Sentinel限流与Gateway限流 1、Sentinel与Hystrix的区别 线程隔离有两种方式实现: 线程池隔离(Hystrix默认采用)信号量隔离(Sentinel默认采用) 服…...
python实现对excel表中的某列数据进行排序
如下需要对webCms中的B列数据进行升序排序,且不能影响到其他列、工作表中的数据和格式。 import pandas as pd import openpyxl from openpyxl.utils.dataframe import dataframe_to_rows# 读取 Excel 文件 file_path 1.xlsx sheet_name webCms# 读取 Excel 文件并…...
CMS指纹识别
一.什么是指纹识别 常见cms系统 通过关键特征,识别出目标的CMS系统,服务器,开发语言,操作系统,CDN,WAF的类别版本等等 1.识别对象 1.CMS信息:比如Discuz,织梦,帝国CMS࿰…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
对象回调初步研究
_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
