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࿰…...
5个简单步骤彻底解决MoviePilot连接TheMovieDb异常问题
5个简单步骤彻底解决MoviePilot连接TheMovieDb异常问题 【免费下载链接】MoviePilot NAS媒体库自动化管理工具 项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot MoviePilot作为一款优秀的NAS媒体库自动化管理工具,为你提供了便捷的影视资源管理体验…...
Wonder3D完整解决方案:从单张图片到高质量3D模型的5步实施路径
Wonder3D完整解决方案:从单张图片到高质量3D模型的5步实施路径 【免费下载链接】Wonder3D Single Image to 3D using Cross-Domain Diffusion for 3D Generation 项目地址: https://gitcode.com/gh_mirrors/wo/Wonder3D 面对传统3D建模复杂耗时、学习曲线陡峭…...
MSP430 FRAM技术解析与嵌入式存储优化实践
1. MSP430 MCU存储技术迁移背景在嵌入式系统设计中,微控制器(MCU)的非易失性存储技术选择直接影响产品性能和开发效率。传统Flash存储器虽然成本低廉,但其写入速度慢(需先擦除后写入)、功耗高(需要电荷泵)和…...
PADS Layout老手进阶:Gerber文件生成背后的‘负片’、‘钻孔图’与制造工艺解读
PADS Layout老手进阶:Gerber文件生成背后的‘负片’、‘钻孔图’与制造工艺解读 在PCB设计领域,Gerber文件是连接设计与制造的桥梁。对于使用PADS Layout的中高级工程师而言,仅仅掌握操作步骤远远不够。当面对四层或以上的复杂PCB板ÿ…...
网络出口IP管理工具ipman:原理、使用与实战指南
1. 项目概述与核心价值最近在折腾网络工具和代理配置时,发现了一个挺有意思的开源项目,叫twisker/ipman。乍一看这个名字,可能会联想到IP地址管理,但实际上,它的定位更偏向于一个轻量级的、用于在特定网络环境下管理和…...
Go语言系统编程与命令行工具
Go语言系统编程与命令行工具 一、命令行参数解析 Go语言提供了多个标准库来处理命令行参数,包括flag包和os包。 使用flag包 package mainimport ("flag""fmt" )func main() {// 定义命令行参数name : flag.String("name", "Gues…...
在OpenClaw中集成Taotoken实现多模型Agent工作流的详细步骤
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在OpenClaw中集成Taotoken实现多模型Agent工作流的详细步骤 对于使用OpenClaw构建AI Agent的开发者而言,能够灵活调用不…...
谷歌关键词搜索怎么做上去? 提升首页点击率的4个标题优化细节
某家出口企业耗费6个月将“工业水泵制造”推至搜索结果第三位。搜索控制台报表显示,该网页月度曝光量达45,000次,访客仅有540人。点击率停留在1.2%。排在第五位的同行业公司,凭借52个字符的标题,拿走月均3,200个访客。一份针对海外…...
语音提示工程实战:从原理到应用,构建高质量AI语音交互
1. 项目概述:语音提示工程的“Awesome”宝库如果你正在探索语音AI应用,或者对如何让ChatGPT、Claude这类大语言模型“开口说话”感到好奇,那么你很可能已经遇到了一个核心难题:如何写出一个真正有效的语音提示词?这不仅…...
利用CTranslate2与INT8量化,实现Whisper语音识别7倍加速
1. 项目概述:当Whisper遇上CTranslate2,语音转文字的“涡轮增压”如果你尝试过OpenAI的Whisper模型来做语音识别,大概率会被它的准确性所折服,但同时也可能被其缓慢的推理速度所困扰。尤其是在处理长音频文件或需要批量处理时&…...
