java中推送异常消息到钉钉群
- 实现在Java项目运行中出现异常信息及时推送到钉钉群,或推送其他通知类信息;
主要工具包:
package pers.niaonao.dingtalkrobot.util;import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest ;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;import java.util.Arrays;
import java.util.List;/*** @className: RobotHelperUtil* @description: 机器人工具类* 每个机器人每分钟最多发送20条* 限制6 个机器人/群* @author: niaonao* @date: 2019/7/6**/
@Slf4j
public class RobotHelperUtil {/*** 钉钉群设置 webhook, 支持重置*/private static final String ACCESS_TOKEN = "https://oapi.dingtalk.com/robot/send?access_token=36ba0cc82d41d3c6aaef7d2c09c9f14de0727069edbc498b5c9d88edb72db227";/*** 消息类型*/private static final String MSG_TYPE_TEXT = "text";private static final String MSG_TYPE_LINK = "link";private static final String MSG_TYPE_MARKDOWN = "markdown";private static final String MSG_TYPE_ACTION_CARD = "actionCard";private static final String MSG_TYPE_FEED_CARD = "feedCard";/*** 客户端实例*/public static DingTalkClient client = new DefaultDingTalkClient(ACCESS_TOKEN);/*** @description: 官方演示示例* title 是消息列表下透出的标题* text 是进入群后看到的消息内容** @author: niaonao* @date: 2019/7/6*/public static void sdkDemoJava() {DingTalkClient client = RobotHelperUtil.client;OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype("text");OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();text.setContent("测试文本消息");request.setText(text);OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();at.setAtMobiles(Arrays.asList("13261303345"));request.setAt(at);request.setMsgtype("link");OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();link.setMessageUrl("https://www.dingtalk.com/");link.setPicUrl("");link.setTitle("时代的火车向前开");link.setText("这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林”。\n" +"而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是“红树林");request.setLink(link);request.setMsgtype("markdown");OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();markdown.setTitle("杭州天气");markdown.setText("#### 杭州天气 @156xxxx8827\n" +"> 9度,西北风1级,空气良89,相对温度73%\n\n" +"> ![screenshot](https://gw.alipayobjects.com/zos/skylark-tools/public/files/84111bbeba74743d2771ed4f062d1f25.png)\n" +"> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n");request.setMarkdown(markdown);try {client.execute(request);} catch (ApiException e) {log.error("[ApiException]: 消息发送演示示例, 异常捕获{}", e.getMessage());}}/*** @description: 发送普通文本消息* @param content 文本消息* @param mobileList 指定@ 联系人* @param isAtAll 是否@ 全部联系人* @return: com.dingtalk.api.response.OapiRobotSendResponse* @author: niaonao* @date: 2019/7/6*/public static OapiRobotSendResponse sendMessageByText(String content, List<String> mobileList, boolean isAtAll) {if (StringUtils.isEmpty(content)) {return null;}//参数 参数类型 必须 说明//msgtype String 是 消息类型,此时固定为:text//content String 是 消息内容//atMobiles Array 否 被@人的手机号(在content里添加@人的手机号)//isAtAll bool 否 @所有人时:true,否则为:falseOapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();text.setContent(content);OapiRobotSendRequest request = new OapiRobotSendRequest();if (!CollectionUtils.isEmpty(mobileList)) {// 发送消息并@ 以下手机号联系人OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();at.setAtMobiles(mobileList);at.setIsAtAll(isAtAll ? "true" : "false");request.setAt(at);}request.setMsgtype(RobotHelperUtil.MSG_TYPE_TEXT);request.setText(text);OapiRobotSendResponse response = new OapiRobotSendResponse();try {response = RobotHelperUtil.client.execute(request);} catch (ApiException e) {log.error("[发送普通文本消息]: 发送消息失败, 异常捕获{}", e.getMessage());}return response;}/*** @description: 发送link 类型消息* @param title 消息标题* @param text 消息内容* @param messageUrl 点击消息后跳转的url* @param picUrl 插入图片的url* @return: com.dingtalk.api.response.OapiRobotSendResponse* @author: niaonao* @date: 2019/7/6*/public static OapiRobotSendResponse sendMessageByLink(String title, String text, String messageUrl, String picUrl) {if (!DataValidUtil.checkNotEmpty(title, text, messageUrl)) {return null;}//参数 参数类型 必须 说明//msgtype String 是 消息类型,此时固定为:link//title String 是 消息标题//text String 是 消息内容。如果太长只会部分展示//messageUrl String 是 点击消息跳转的URL//picUrl String 否 图片URLOapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();link.setTitle(title);link.setText(text);link.setMessageUrl(messageUrl);link.setPicUrl(picUrl);OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype(RobotHelperUtil.MSG_TYPE_LINK);request.setLink(link);OapiRobotSendResponse response = new OapiRobotSendResponse();try {response = RobotHelperUtil.client.execute(request);} catch (ApiException e) {log.error("[发送link 类型消息]: 发送消息失败, 异常捕获{}", e.getMessage());}return response;}/*** @description: 发送Markdown 编辑格式的消息* @param title 标题* @param markdownText 支持markdown 编辑格式的文本信息* @param mobileList 消息@ 联系人* @param isAtAll 是否@ 全部* @return: com.dingtalk.api.response.OapiRobotSendResponse* @author: niaonao* @date: 2019/7/6*/public static OapiRobotSendResponse sendMessageByMarkdown(String title, String markdownText, List<String> mobileList, boolean isAtAll) {if (!DataValidUtil.checkNotEmpty(title, markdownText)) {return null;}//参数 类型 必选 说明//msgtype String 是 此消息类型为固定markdown//title String 是 首屏会话透出的展示内容//text String 是 markdown格式的消息//atMobiles Array 否 被@人的手机号(在text内容里要有@手机号)//isAtAll bool 否 @所有人时:true,否则为:falseOapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();markdown.setTitle(title);markdown.setText(markdownText);OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype(RobotHelperUtil.MSG_TYPE_MARKDOWN);request.setMarkdown(markdown);if (!CollectionUtils.isEmpty(mobileList)) {OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();at.setIsAtAll(isAtAll ? "true" : "false");at.setAtMobiles(mobileList);request.setAt(at);}OapiRobotSendResponse response = new OapiRobotSendResponse();try {response = RobotHelperUtil.client.execute(request);} catch (ApiException e) {log.error("[发送link 类型消息]: 发送消息失败, 异常捕获{}", e.getMessage());}return response;}/*** @description: 整体跳转ActionCard类型的消息发送* @param title 消息标题, 会话消息会展示标题* @param markdownText markdown格式的消息* @param singleTitle 单个按钮的标题* @param singleURL 单个按钮的跳转链接* @param btnOrientation 是否横向排列(true 横向排列, false 纵向排列)* @param hideAvatar 是否隐藏发消息者头像(true 隐藏头像, false 不隐藏)* @return: com.dingtalk.api.response.OapiRobotSendResponse* @author: niaonao* @date: 2019/7/6*/public static OapiRobotSendResponse sendMessageByActionCardSingle(String title, String markdownText, String singleTitle, String singleURL, boolean btnOrientation, boolean hideAvatar) {if (!DataValidUtil.checkNotEmpty(title, markdownText)) {return null;}//参数 类型 必选 说明// msgtype string true 此消息类型为固定actionCard// title string true 首屏会话透出的展示内容// text string true markdown格式的消息// singleTitle string true 单个按钮的方案。(设置此项和singleURL后btns无效)// singleURL string true 点击singleTitle按钮触发的URL// btnOrientation string false 0-按钮竖直排列,1-按钮横向排列// hideAvatar string false 0-正常发消息者头像,1-隐藏发消息者头像OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard();actionCard.setTitle(title);actionCard.setText(markdownText);actionCard.setSingleTitle(singleTitle);actionCard.setSingleURL(singleURL);// 此处默认为0actionCard.setBtnOrientation(btnOrientation ? "1" : "0");// 此处默认为0actionCard.setHideAvatar(hideAvatar ? "1" : "0");OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype(RobotHelperUtil.MSG_TYPE_ACTION_CARD);request.setActionCard(actionCard);OapiRobotSendResponse response = new OapiRobotSendResponse();try {response = RobotHelperUtil.client.execute(request);} catch (ApiException e) {log.error("[发送ActionCard 类型消息]: 整体跳转ActionCard类型的发送消息失败, 异常捕获{}", e.getMessage());}return response;}/*** @description: 独立跳转ActionCard类型 消息发送* @param title 标题* @param markdownText 文本* @param btns 按钮列表* @param btnOrientation 是否横向排列(true 横向排列, false 纵向排列)* @param hideAvatar 是否隐藏发消息者头像(true 隐藏头像, false 不隐藏)* @return: com.dingtalk.api.response.OapiRobotSendResponse* @author: niaonao* @date: 2019/7/6*/public static OapiRobotSendResponse sendMessageByActionCardMulti(String title, String markdownText, List<OapiRobotSendRequest.Btns> btns, boolean btnOrientation, boolean hideAvatar) {if (!DataValidUtil.checkNotEmpty(title, markdownText) || CollectionUtils.isEmpty(btns)) {return null;}//参数 类型 必选 说明//msgtype string true 此消息类型为固定actionCard//title string true 首屏会话透出的展示内容//text string true markdown格式的消息//btns array true 按钮的信息:title-按钮方案,actionURL-点击按钮触发的URL//btnOrientation string false 0-按钮竖直排列,1-按钮横向排列//hideAvatar string false 0-正常发消息者头像,1-隐藏发消息者头像OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard();actionCard.setTitle(title);actionCard.setText(markdownText);// 此处默认为0actionCard.setBtnOrientation(btnOrientation ? "1" : "0");// 此处默认为0actionCard.setHideAvatar(hideAvatar ? "1" : "0");actionCard.setBtns(btns);OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype(RobotHelperUtil.MSG_TYPE_ACTION_CARD);request.setActionCard(actionCard);OapiRobotSendResponse response = new OapiRobotSendResponse();try {response = RobotHelperUtil.client.execute(request);} catch (ApiException e) {log.error("[发送ActionCard 类型消息]: 独立跳转ActionCard类型发送消息失败, 异常捕获{}", e.getMessage());}return response;}/** * @description: 发送FeedCard类型消息* @param links* @return: com.dingtalk.api.response.OapiRobotSendResponse* @author: niaonao* @date: 2019/7/6*/public static OapiRobotSendResponse sendMessageByFeedCard(List<OapiRobotSendRequest.Links> links) {if (CollectionUtils.isEmpty(links)) {return null;}//msgtype string true 此消息类型为固定feedCard//title string true 单条信息文本//messageURL string true 点击单条信息到跳转链接//picURL string true 单条信息后面图片的URLOapiRobotSendRequest.Feedcard feedcard = new OapiRobotSendRequest.Feedcard();feedcard.setLinks(links);OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype(RobotHelperUtil.MSG_TYPE_FEED_CARD);request.setFeedCard(feedcard);OapiRobotSendResponse response = new OapiRobotSendResponse();try {response = RobotHelperUtil.client.execute(request);} catch (ApiException e) {log.error("[发送ActionCard 类型消息]: 独立跳转ActionCard类型发送消息失败, 异常捕获{}", e.getMessage());}return response;}/*public static void main(String args[]) {sdkDemoJava();}*/
}
- 需要下载钉钉sdk
- ACCESS_TOKEN 生成方法:
- 添加机器人后会自动生成ACCESS_TOKEN
OK,这就完了,可以去测试了,就是这么简单。
- 钉钉开放平台sdk下载
- github钉钉官方示例源码
- 钉钉官方参考文档
java中推送异常消息到钉钉群相关推荐
- java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...
我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...
- java推送微信消息换行_微信公众号开发被动回复用户消息,回复内容Content使用了\n换行符还是没有换行...
使用语言和框架:本人后端开发使用的Python的DRF(Django REST framework)框架 需求:在微信公众号开发时,需要实现自动回复,即被关注回复.收到消息回复.关键词回复 发现问题: ...
- java推送微信消息换行_微信公众平台开发教程之文本消息如何换行(第十二课)
上两节课介绍了微信公众平台开发工具类的开发,这节课呢就用到了,没有读前两节课程的读者建议看前两节课程,当然你可以可以去下载实例代码直接运行 . 使用"\n"换行 回复用户的文本消息 ...
- java推送叮叮消息,叮叮叮!请及时签收入门学习Java导航路线
原标题:叮叮叮!请及时签收入门学习Java导航路线 引言 想必有很多像我一样刚学习Java会有很迷茫的人吧,今天给小伙伴们整理了一些资料,有需要的小伙伴们可以私信我,顺便推荐一个免费学习的Qqun,里 ...
- java 实现钉钉机器人单人私聊推送钉钉消息(invalidParameter.robotCode.notExsit机器人不存在)
文章目录 1.创建机器人应用 2.开通机器人接口权限 3.一定要发布(否则无法调试调接口) 4.编写工具类 5.效果 常见问题异常:"code":"invalidPara ...
- java使用钉钉机器人应用向单人推送钉钉消息
java使用钉钉机器人应用推送钉钉消息工具类 首先在pom.xml文件中添加依赖,也可以到钉钉官网下载 <!-- 2021-10-19 钉钉对接机器人 --><dependency& ...
- java消息推送怎么实现_调用钉钉接口实现机器人推送消息
一.摘要 现实交易中为了能及时了解发明者量化机器人交易状态,有时候我们需要将机器人所执行的交易结果发送到微信.邮箱.短信等等.但每天上百条各种各样的信息,使得对这些信息已经不敏感,导致重要的信息不能及 ...
- java开发钉钉企业内部应用,免登授权+消息推送
1.申请账号登操作直接看文档去申请就ok了,管理员身份登录,创建微应用 地址:钉钉管理后台 - 钉钉统一身份认证 2.免登授权 CORP_ID :企业id,CORP_SECRET:企业秘钥,agent ...
- java推送到 钉钉用户_javaweb利用钉钉机器人向钉钉群推送消息(解决中文乱码)...
可以参考 官方文档:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.karFPe&treeId=257& ...
最新文章
- ACID+CAP+BASE+Transaction(事务)
- Le Chapitre VI
- 转一个后缀数组的简单总结:
- 在路由器与交换机之间添加ISA Server软路由与防火墙
- 对android中ActionBar中setDisplayHomeAsUpEnabled和setHomeButtonEnabled和setDisplayShowHomeEnabled方法的理解
- docker entrypoint入口文件详解
- 网际风全推数据接口_网际风数据接口飞狐交易师版简要说明.doc
- python 3d大数据可视化软件_5个最受欢迎的大数据可视化工具!
- 锂电池及其安全使用浅析《原创》
- vue lic在element-ui中使用阿里巴巴矢量图标库iconfont图标
- MySQL按时间点、时间段查询
- 基于以太网为基础的POE供电温湿度变送器解决方案
- android的otg功能,Android实现OTG功能
- 直击14号台风“灿都”最新消息!浙江多地停课停运,上海严阵以待!
- js统计字符串中大写字母与小写字母的总个数
- 漫画:什么是 “智能供应链” ?
- 4G+5G多卡聚合智能融合通信
- 如何使用 JS 破解轻量级滑块验证码
- 科目三上海浦东邮佳考场心酸历程
- 学习笔记-如何设计离线跑批系统