Java项目如何接入钉钉群机器人

  1. 创建群机器人:对于任意我们所在的群,我们都可以创建自己的机器人,不需要群主权限,每个机器人信息只能自己看到。 我们项目通过对应的链接调用机器人发送消息。
    在这里插入图片描述

  2. 创建对应的鉴权方式, 关键字只要消息内容携带即可,签名需要对应秘钥对timestamp加密生成sign校验,链接后需要传递timestamp和sign
    在这里插入图片描述

  3. 接口实现

package com.adutiaoxun.study.service.impl;import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.adutiaoxun.study.common.Constants;
import com.adutiaoxun.study.domain.MessageRequest;
import com.adutiaoxun.study.enums.validateEnums.group.MessageTypeEnum;
import com.adutiaoxun.study.service.MessageSendService;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;
import lombok.Getter;
import org.apache.tomcat.util.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;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.Arrays;
import java.util.List;/*** DingTalkSendService** @author yejianjun* @CreateDate 2022/10/25*/
@Service
@Getter
public class DingTalkSendService implements MessageSendService {public String channel = "DingTalk";@Value("${dingTalk.baseUrl}")private String baseUrl;@Value("${dingTalk.accessToken}")private String accessToken;@Value("${dingTalk.secret}")private String secret;@Overridepublic void sendMessage(MessageRequest messageRequest)throws ApiException, NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {String messageType = messageRequest.getMessageType();Long timestamp = System.currentTimeMillis();String stringToSign = timestamp + "\n" + secret;Mac mac = Mac.getInstance(Constants.HMAC_SHA256);mac.init(new SecretKeySpec(secret.getBytes(Constants.UTF_8), Constants.HMAC_SHA256));byte[] signData = mac.doFinal(stringToSign.getBytes(Constants.UTF_8));String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), Constants.UTF_8);String url = StrUtil.concat(true, baseUrl, accessToken, "&timestamp=", timestamp.toString(), "&sign=", sign);DefaultDingTalkClient client = new DefaultDingTalkClient(url);OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype(messageType);buildAt(request, messageRequest);buildContentByMsgType(request, messageRequest);List<String> atMobiles = StrUtil.split(messageRequest.getAtMobiles(), StrUtil.COMMA);OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();at.setIsAtAll(messageRequest.getIsAtAll());at.setAtMobiles(atMobiles);request.setAt(JSONUtil.toJsonStr(at));OapiRobotSendResponse response = client.execute(request);System.out.println(response);}private void buildAt(OapiRobotSendRequest request, MessageRequest messageRequest) {if (StrUtil.equalsAny(messageRequest.getMessageType(), MessageTypeEnum.MARKDOWN.getType(), MessageTypeEnum.TEXT.getType()) &&StrUtil.isNotBlank(messageRequest.getAtMobiles())){OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();at.setIsAtAll(messageRequest.getIsAtAll());at.setAtMobiles(Arrays.asList(messageRequest.getAtMobiles().split(StrUtil.COMMA)));request.setAt(at);}}private void buildContentByMsgType(OapiRobotSendRequest request, MessageRequest messageRequest) {String msgType = messageRequest.getMessageType();switch (MessageTypeEnum.getByType(msgType)) {case MARKDOWN:OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();markdown.setText(messageRequest.getMessageBody());markdown.setTitle(messageRequest.getTitle());request.setMarkdown(markdown);break;case TEXT:OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();text.setContent(messageRequest.getMessageBody());request.setText(text);break;case ACTION_CARD:OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard();actionCard.setTitle(messageRequest.getMessageBody());actionCard.setText(messageRequest.getMessageBody());actionCard.setBtnOrientation("1");OapiRobotSendRequest.Btns okBtn = new OapiRobotSendRequest.Btns();okBtn.setTitle("我来看看");okBtn.setActionURL("https://gitee.com/ye-jianjun");OapiRobotSendRequest.Btns noBtn = new OapiRobotSendRequest.Btns();noBtn.setTitle("什么玩意儿");actionCard.setBtns(Arrays.asList(okBtn, noBtn));request.setActionCard(actionCard);break;default:break;}}
}

消息体详情见:https://open.dingtalk.com/document/robots/custom-robot-access

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雷军入局ChatGPT大战/ AutoGPT星标超PyTorch/ 马斯克星舰今晚发射…今日更多新鲜事在此...

h日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是4月17日星期一&#xff0c;新的一周要元气满满哦~ 今天科技圈有哪些新鲜事儿&#xff0c;和日报君一起来看看~ 马斯克星舰今晚发射&#xff1a;将进行直播&#xff0c;此前曾延期 SpaceX官网发布通告称&…

[论文阅读] Collaborative and Adversarial Learning of Focused and Dispersive Representation

[论文地址] [代码] [ICCV 21] Abstract 从结肠镜图像中自动分割息肉是计算机辅助诊断结直肠癌的一个重要步骤。近年来报道的大多数息肉分割方法都是基于完全监督的深度学习。然而&#xff0c;医生在诊断过程中对息肉图像的注释是非常耗时和昂贵的。在本文中&#xff0c;我们提…

2000元训练比肩ChatGPT的开源大模型!GPT-4亲自盖章认证,模型权重均可下载

鱼羊 编辑整理量子位 | 公众号 QbitAI 2000块&#xff0c;调教出一个达到ChatGPT九成功力的开源大模型。 还是被GPT-4亲自盖章认证实力的那种。 这事儿&#xff0c;一群主要来自加州大学伯克利分校的研究人员做到了。 如图中所见&#xff0c;这个模型名叫Vicuna &#xff08;小…

chatgpt赋能python:Python处理雷达基数据:从入门到实践

Python处理雷达基数据&#xff1a;从入门到实践 随着气象技术的不断发展&#xff0c;雷达探测技术已成为当今天气预报和气象研究的主要手段之一。雷达基数据是气象雷达接收到的未经加工的原始数据&#xff0c;因其包含大量天气信息&#xff0c;不仅在天气预报、天气预警等方面…

推演语言模型的大小与计算开销

2020年&#xff0c;OpenAI提出了在增加模型尺寸与提高模型性能之间的扩展定律&#xff0c;指出人们应该将大部分预算用于扩大模型规模。这篇论文直接推动了增大模型规模的浪潮。然而&#xff0c;在预算和内存有限的情况下&#xff0c;盲目扩大模型规模并不是提升模型性能的最佳…

codesblocks头文件的正确使用

之前对头文件如何引用一直百思不得其解&#xff0c;现在弄懂了&#xff0c;来复盘一下。关键点在于要建立工程文件。 下面以一个长度转换的程序来简单说明。 第一步&#xff0c;建立C语言项目。 在新建项目点击Console applicaton&#xff0c;接着打上名称&#xff0c;默认设置…

jdbc工具类的定义和使用

DBUtils的定义 导入3个jar包 代码实现 public class DBUtils {//1.配置数据库连接信息&#xff08;MySQL&#xff09;//数据库驱动private static final String DRIVER "com.mysql.jdbc.Driver";//数据库名private static final String DATABASE "test_db&q…

Servlet的介绍与使用

Servlet简介 servlet是运行在服务器上的应用程序&#xff0c; 它的作用是实现前端与后台的数据交互。 Servlet生命周期 三个方法 init()&#xff1a;初始化 service()&#xff1a;处理客户端请求 destroy()&#xff1a;终止 工作原理 客户端向服务器发送一个http请求服务器…

python破解md5_python怎么使用md5加密解密

python采用hashlib这个标准库实现MD5加密解密。方法是:1、updata传数据;2、利用hexdigest进行16进制转换; update(arg)传入arg对象来更新hash的对象。必须注意的是,该方法只接受byte类型,否则会报错。这就是要在参数前添加b来转换类型的原因。 同时要注意,重复调用update…

分布式任务调度平台XXL-JOB的简单使用

推荐使用xxl2.2.0版本 参考地址: 分布式任务调度平台XXL-JOB xxl-job安装到本地打开项目工程对yml配置文件进行修改 主要修改数据库地址和告警邮件地址 将服务注册到xxl-job -如果在xxl里配置了accessToken 服务里就需要使用同样的Token 注册到xxl-job-admin之后打开xxl可视…

selenium获取页面数据入数据库

Selenium是一个用于Web应用程序测试的工具&#xff0c;但是也可以爬取页面中的数据。 开发环境是内网&#xff08;局域网&#xff09;&#xff0c;项目工程是web项目&#xff0c;jdk使用的1.8&#xff0c;tomcat使用的 8。 web项目&#xff1a; 启动时使用tomcat&#xff0c;…

ChatGPT 教我用 200 行代码写一个简版 Vue 框架 - OpenTiny

AI 是未来最好的老师 最近&#xff0c;我正在准备一份关于 Vue 基础的学习材料。期间我突发奇想&#xff1a;能否利用现在热门的 ChatGPT 帮我创建学习内容&#xff1f;其实 Vue 本身不难学&#xff0c;特别是基础用法&#xff0c;但是&#xff0c;如果你想深入掌握 Vue&#…

阿里云AliGenie开发天猫语音功能-入门篇

文章目录结构如下 登录应用开发平台 创建语音技能 云开发部署后端技能服务 语音技能测试 下线不必要的应用 一、登录应用开发平台 1.登录云开发平台。打开网址 https://workbench.aliyun.com/&#xff0c;使用阿里云账号登录&#xff0c;按照提示创建团队&#xff0c;点…

ESP8266对接天猫精灵-多路继电器控制

上面是我的微信和QQ群&#xff0c;欢迎新朋友的加入。 资源和烧录我就不管了&#xff0c;和https://blog.csdn.net/Jun626/article/details/109150006一模一样 把那个kaiguan的lua改一下代码 DEVICEID "19539" APIKEY "17aaa8a16" INPUTID "…

php对接AliGenie天猫精灵服务器控制智能硬件esp8266③ 渗入熟悉AliGenie 对接协议,揭开第三方云平台是如何让天猫精灵是发送消息到私有服务器的!

本系列博客学习由非官方人员 半颗心脏 潜心所力所写&#xff0c;仅仅做个人技术交流分享&#xff0c;不做任何商业用途。如有不对之处&#xff0c;请留言&#xff0c;本人及时更改。 1、 php对接AliGenie天猫精灵服务器控制智能硬件esp8266① 在阿里云购买搭建私有云服务器&…

智能家居领域小米,涂鸦,天猫精灵的 “中台之战”

深圳是跨境电商之都&#xff0c;仅一个华南城就云集了不少了全球排名前五十的亚马逊大卖家。总部不在深圳的跨境电商通常都会在深圳设立主抓供应链的分部。在今年这样疫情叠加外部环境不确定性的当下&#xff0c;大卖家们的日子按道理说不会好过&#xff0c;然而事实却大大出乎…

ESP8266-天猫精灵(智能家居)

本次更新与2018年10月2日 &#xff08;弊端&#xff1a;wifi的配置在程序里边&#xff0c;设备更换所连接的wifi&#xff0c;还需要重新烧录初始化程序&#xff09;——问题已解决&#xff0c;更新于博客最下方。 1&#xff1a;使用器材 天猫精灵、esp8266、LED(继电器) &am…

六级备考23天|CET-6|写作技巧1|开头段模版

目录 1 考前注意事项 2 真题参考 3 六级作文三段式 第一段 第二段 第三段 4 名言解释型作文 5 开头段的模版 why 型 6 选择型开头模版 7 国内学校/出国读书 8 团队精神和交流 9 作业 10 抽象意志品质类开头 ​ 11 信任的重要性​ 1 考前注意事项 定位错误 常识干扰 拼凑…

雅思英语作文计算机和历史,雅思考试|历史真题帮你搞定雅思写作3大高频话题-科技篇...

科技类 题目1 计算机让人们在家工作学习的利弊 Computers enable people to be able to work at home and children to study at home. Some people believe that it is convenient and cost-saving. Do you think the phenomenon positive or negative? 题目解读&#xff1a;…

六级备考21天|CET-6|写作技巧2|13:00~14:40

目录 【一】写作技巧1的作业 [1]Creativity [2]谚语&#xff1a;值得做的就值得做得好 [3]Star chasing 追星​ [4]team spirit&communication 团队精神和交流 [5]谚语&#xff1a;理解​ 【二】谚语重要性开头模版 [1]谚语&#xff1a;Understand 理解 【三】社会…