java实现钉钉自定义机器人发送消息

news2024/9/27 19:19:54

       钉钉作为现在很多企业的移动办公平台,具有很多很强大的功能,可以帮助我们更加及时的发现问题,解决问题,今天我们做一个java实现钉钉自定义机器发送消息的功能。

        首先,先放出官方文档地址:https://open.dingtalk.com/document/orgapp/custom-robot-access

        接下来,先创建一个钉钉的群,打开钉钉群,在群的右上角点击齿轮图标 - 群设置,

再打开的群设置按钮,点击机器人,选择机器人 - 添加机器人 - 自定义机器人 

添加机器人

 自定义机器人

 进入到机器人设置页面

设置完成之后,会生成一个webhook地址,复制该地址出来。

        然后点击完成,群内自定义机器人就添加完成了。

         机器人添加完成之后,我们需要在代码中实现对机器人发送消息的功能。

         在java代码中,我们可以创建一个钉钉发送消息的utils类,代码如下

public class DingdingTalkUtils {

    public static String url = "webhook地址"; //生成机器人申城webhook地址

    public static String keyWords = "安全设置-关键字内容"
    public static String access__secret = "安全设置-加签"; //安全设置 - 加签方式下生成的秘钥

    public static String sendKeyWordMessage(String json) {
        try {
            if (!StringUtils.contains(json, keyWords)) {
                log.error("使用了钉钉群发送消息但是没有关键词 :{} >>> {} 将无法发送消息,直接退回", json, keyWords);
                return null;
            }
            Map<String, String> tmpMap = new HashMap<>();
            tmpMap.put("content", json);

            Map<String, Object> contentMap = new HashMap<>();
            contentMap.put("msgtype", "text");
            contentMap.put("text", tmpMap);

            Map<String, String> headers = new HashMap<>();
            headers.put("Content-Type", "application/json; charset=utf-8");
            headers.put("Accept", "application/json");
            return HttpSupport.makeFastConnect().doPostBody(url,               JsonUtil.obj2Json(contentMap), headers).result();

        } catch (Exception e) {
            log.error("发送钉钉消息出现异常:{}", e.getMessage());
        }
        return null;
    }

    public static String sendEncryptMessage(String json, String secretKey) {
        try {
            String url = getUrl(secretKey);
            Map<String, String> tmpMap = new HashMap<>();
            tmpMap.put("content", json);

            Map<String, Object> contentMap = new HashMap<>();
            contentMap.put("msgtype", "text");
            contentMap.put("text", tmpMap);

            Map<String, String> headers = new HashMap<>();
            headers.put("Content-Type", "application/json; charset=utf-8");
            headers.put("Accept", "application/json");
            return HttpSupport.makeFastConnect().doPostBody(url, JsonUtil.obj2Json(contentMap), headers).result();

        } catch (Exception e) {
            log.error("发送钉钉消息出现异常:{}", e.getMessage());
        }
        return null;
    }

    private static String getUrl(String secretKey) throws Exception {
        String result = url;
        long timestamp = System.currentTimeMillis();
        String stringToSign = timestamp + "\n" + secretKey;
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
        byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
        result += "&timestamp=" + timestamp + "&sign=" + sign;
        return result;
    }

}

 上面的代码提供了通过关键字匹配发送,以及加签方式发送消息的两种方法,其中

contentMap.put("msgtype", "text");

这里面指定了发送的消息以何种形式展现,目前钉钉提供了五种展现消息的形式:
  • 文本 (text)

  • 链接 (link)

  • markdown(markdown)

  • ActionCard

  • FeedCard

 另外,如果引入钉钉的sdk,还能实现@功能,有兴趣的同学可以看一下官方文档,实现钉钉机器人发送消息的功能并不难实现,相信难不倒大家,不过还是希望这篇文章能对大家有一点点的帮助,好了,今天的分享就到这里了,感谢大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GIS在城市规划中的作用与应用

山海鲸可视化-GIS影像 简介 GIS&#xff08;地理信息系统&#xff09;是一种用于捕获、存储、管理、分析和显示地理空间数据的技术和工具。GIS可以用于各种领域&#xff0c;包括城市规划、土地管理、自然资源管理、公共安全、环境保护、气象预报、交通运输、农业、地质勘探、…

支持多模型数据分析探索的存算分离湖仓一体架构解析(上)

当企业需要建设独立的数据仓库系统来支撑BI和业务分析业务时&#xff0c;有了“数据湖数据仓库”的混合架构。但混合架构带来了更高的建设成本、管理成本和业务开发成本。随着大数据技术的发展&#xff0c;通过在数据湖层增加分布式事务、元数据管理、极致的SQL性能、SQL和数据…

Python实现哈里斯鹰优化算法(HHO)优化Catboost分类模型(CatBoostClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris Hawk Optimization, HHO)&#xff0c;该算法有较强的全…

BI数据可视化报表模板分享,附免费下载方法

奥威BI软件上既有大量单张下载套用的BI数据可视化报表模板&#xff0c;又有以通用标准方案、行业通用方案为基础打造的标准化BI数据可视化报表模板套装&#xff0c;下载套用即可完成整个企业的BI数据可视化分析。这些BI数据可视化报表模板的效果如何&#xff0c;怎么下载&#…

Spring set注入专题

简单数据类型&#xff0c;来自BeanUtils&#xff0c;包含8种基本数据类型&#xff0c;8种包装类等 Temporal是java8之后的新特性&#xff0c;表示时区&#xff0c;时间等 Local为语言类 注入简单数据类型(包括String): 注意&#xff0c;property中不能使用ref&#xff0c;要使…

连接云服务器

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

精彩回顾|SOFA 五周年,Live Long and Prosper!

2023 年 4 月 15 日&#xff0c;SOFAStack 社区在北京市朝阳区 C work 举办了自己的第五个生日。在“Live Long and Prosper”的活动主题贯彻下&#xff0c;活动现场的开源技术探索氛围变得尤其浓厚。 SOFA 开源集市 在 SOFA 五周年的开源集市中&#xff0c;汇聚了 SOFAStack 的…

Transformer应用之构建聊天机器人(一)

一、概述 聊天机器人的基本功能是系统根据用户当前的输入语句&#xff0c;生成相应的语句并输出给用户&#xff0c;用户和聊天机器人之间的一问一答构成了一个utterance&#xff0c;多个utterance就构成了一段对话。目前流行的聊天机器人都是基于Transformer的架构来做的&…

FT2000+ openEuler 20.03 LTS SP3 yum install qemu手动创建虚拟机 图形界面安装openEuler 20.03系统

安装qemu yum install qemu -y 安装系统 创建虚拟硬盘 /usr/bin/qemu-img create -f qcow2 openEuler.qcow2 20g 挂载iso启动 /usr/bin/qemu-kvm -machine virt,accelkvm,usbon -cpu host -m 32G -smp 8,sockets1,cores8,threads1 -boot d -hda /home/yeqiang/qemu-virt…

python字符串模糊匹配,并计算匹配分数

一、thefuzz thefuzz包以前叫fuzzywuzzy&#xff0c;0.19版本开始改名为thefuzz&#xff0c;github地址&#xff1a; GitHub - seatgeek/thefuzz: Fuzzy String Matching in Python 可以通过命令pip install thefuzz安装此包。用法还是比较简单的: from thefuzz import fuz…

redis_exporter 结合prometheus 监控redis cluster集群

redis_exporter 结合prometheus 监控redis cluster集群 前提1&#xff1a;已经搭建好redis cluster集群前提2&#xff1a;已搭建好prometheus 1、下载redis_exporter wget https://github.com/oliver006/redis_exporter/releases/download/v1.50.0/redis_exporter-v1.50.0.l…

WebServer项目(三)->linux网络编程基础知识

WebServer项目[三]-&#xff1e;linux网络编程基础知识 1. I/O多路复用&#xff08;I/O多路转接&#xff09;2. select1)select简介2)select详解select具体怎么用?那FD_CLR函数是干嘛的?关于 fd_set,它具体是什么? 3. poll(改进select)4. epoll5.epoll的两种工作模式6.UDP通…

qemu-img resize gpt分区 parted修复分区信息 虚拟机 lvm 扩容根分区

扩容qcow2虚拟盘 关闭虚拟机 virsh destroy redflag1 qemu-img resize从20G扩容至40G qemu-img resize redflag.qcow2 40G 启动 virsh start redflag1 查看状态&#xff0c;当前无任何变化 fdisk 查看vda&#xff0c;已经变大 查看lvm信息 xfs_info 扩容虚拟机根分区 修…

KD2684S电机匝间耐电压测试仪

一、产品简介 试验仪适用于电机、变压器、电器线圈等这些由漆包线绕制的产品。因漆包线的绝缘涂敷层本身存在着质量问题&#xff0c;以及在绕线、嵌线、刮线、接头端部整形、绝缘浸漆、装配等工序工艺中不慎而引起绝缘层的损伤等&#xff0c;都会造成线圈层间或匝间绝缘层的绝缘…

BGP的路径属性及选路规则

路径属性 路径属性对于BGP而言&#xff0c;BGP路径属性描述了该条路由的各项特征&#xff0c;同时&#xff0c;路由携带的路径属性也在某些场景下影响BGP路由优选的决策。 公认属性-----所有的BGP路由器均可以识别的属性 强制属性-----指当BGP路由器使用update报文通报路由更新…

机器学习实战:Python基于DT决策树模型进行分类预测(六)

文章目录 1 前言1.1 决策树的介绍1.2 决策树的应用 2 Scikit-learn数据集演示2.1 导入函数2.2 导入数据2.3 建模2.4 评估模型2.5 可视化决策树2.6 优化模型2.7 可视化优化模型 3 讨论 1 前言 1.1 决策树的介绍 决策树&#xff08;Decision Tree&#xff0c;DT&#xff09;是一…

R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

【springboot】缓存之@Cacheable、@CachePut、@CacheEvict的用法

目录 一、注解参数说明1.1 属性说明1.1.1 value/cacheNames 属性1.1.2 key属性1.1.3 keyGenerator属性1.1.4 cacheManager属性1.1.5 cacheResolver属性1.1.6 condition属性1.1.7 unless 属性1.1.8 sync 属性 1.2 Cacheable注解1.3 CachePut注解1.4 CacheEvict注解1.4.1 allEntr…

低代码产品如何分类,大部分人都没有搞清楚

最近许多技术峰会都出现了低代码这个名词&#xff0c;可以说&#xff0c;低代码是中台之后&#xff0c;又一个热门话题和名词了。 一、什么是低代码平台&#xff1f; 低代码平台是无需编码或通过少量代码就可以快速生成应用程序的开发平台。也是一款图形化、拖拉拽方式快速实…

hadoop伪分布式安装

文章目录 1. 将安装包hadoop-3.1.3.tar.gz上次至linux中2. 进行解压操作3. 修改目录名称4. 配置环境变量5. 修改自定义配置文件5.1 hadoop-env.sh5.2 core-site.xml5.3 hdfs-site.xml5.4 workers 6. 格式化集群7. 免密登录8. 启动hdfs9. 关闭hdfs 1. 将安装包hadoop-3.1.3.tar.…