• 实现在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中推送异常消息到钉钉群相关推荐

  1. java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...

    我们在做小程序开发时,消息推送是不可避免的.今天就来教大家如何实现小程序消息推送的后台和前台开发.源码会在文章末尾贴出来. 其实我之前有写过一篇:<springboot实现微信消息推送,java ...

  2. java推送微信消息换行_微信公众号开发被动回复用户消息,回复内容Content使用了\n换行符还是没有换行...

    使用语言和框架:本人后端开发使用的Python的DRF(Django REST framework)框架 需求:在微信公众号开发时,需要实现自动回复,即被关注回复.收到消息回复.关键词回复 发现问题: ...

  3. java推送微信消息换行_微信公众平台开发教程之文本消息如何换行(第十二课)

    上两节课介绍了微信公众平台开发工具类的开发,这节课呢就用到了,没有读前两节课程的读者建议看前两节课程,当然你可以可以去下载实例代码直接运行 . 使用"\n"换行 回复用户的文本消息 ...

  4. java推送叮叮消息,叮叮叮!请及时签收入门学习Java导航路线

    原标题:叮叮叮!请及时签收入门学习Java导航路线 引言 想必有很多像我一样刚学习Java会有很迷茫的人吧,今天给小伙伴们整理了一些资料,有需要的小伙伴们可以私信我,顺便推荐一个免费学习的Qqun,里 ...

  5. java 实现钉钉机器人单人私聊推送钉钉消息(invalidParameter.robotCode.notExsit机器人不存在)

    文章目录 1.创建机器人应用 2.开通机器人接口权限 3.一定要发布(否则无法调试调接口) 4.编写工具类 5.效果 常见问题异常:"code":"invalidPara ...

  6. java使用钉钉机器人应用向单人推送钉钉消息

    java使用钉钉机器人应用推送钉钉消息工具类 首先在pom.xml文件中添加依赖,也可以到钉钉官网下载 <!-- 2021-10-19 钉钉对接机器人 --><dependency& ...

  7. java消息推送怎么实现_调用钉钉接口实现机器人推送消息

    一.摘要 现实交易中为了能及时了解发明者量化机器人交易状态,有时候我们需要将机器人所执行的交易结果发送到微信.邮箱.短信等等.但每天上百条各种各样的信息,使得对这些信息已经不敏感,导致重要的信息不能及 ...

  8. java开发钉钉企业内部应用,免登授权+消息推送

    1.申请账号登操作直接看文档去申请就ok了,管理员身份登录,创建微应用 地址:钉钉管理后台 - 钉钉统一身份认证 2.免登授权 CORP_ID :企业id,CORP_SECRET:企业秘钥,agent ...

  9. java推送到 钉钉用户_javaweb利用钉钉机器人向钉钉群推送消息(解决中文乱码)...

    可以参考 官方文档:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.karFPe&treeId=257& ...

最新文章

  1. ACID+CAP+BASE+Transaction(事务)
  2. Le Chapitre VI
  3. 转一个后缀数组的简单总结:
  4. 在路由器与交换机之间添加ISA Server软路由与防火墙
  5. 对android中ActionBar中setDisplayHomeAsUpEnabled和setHomeButtonEnabled和setDisplayShowHomeEnabled方法的理解
  6. docker entrypoint入口文件详解
  7. 网际风全推数据接口_网际风数据接口飞狐交易师版简要说明.doc
  8. python 3d大数据可视化软件_5个最受欢迎的大数据可视化工具!
  9. 锂电池及其安全使用浅析《原创》
  10. vue lic在element-ui中使用阿里巴巴矢量图标库iconfont图标
  11. MySQL按时间点、时间段查询
  12. 基于以太网为基础的POE供电温湿度变送器解决方案
  13. android的otg功能,Android实现OTG功能
  14. 直击14号台风“灿都”最新消息!浙江多地停课停运,上海严阵以待!
  15. js统计字符串中大写字母与小写字母的总个数
  16. 漫画:什么是 “智能供应链” ?
  17. 4G+5G多卡聚合智能融合通信
  18. 如何使用 JS 破解轻量级滑块验证码
  19. 科目三上海浦东邮佳考场心酸历程
  20. 学习笔记-如何设计离线跑批系统

热门文章

  1. Node npm升级
  2. wordpress图像大小_8个WordPress插件来创建令人敬畏的图像效果
  3. 详解WinRar的自解压路径及命令
  4. 【转】关于log4j.additivity的说明
  5. logback的additivity=false 与root关系
  6. 20条最最常用的Linux命令讲解
  7. csdn 涨粉攻略 方案设计(含代码)
  8. 运行ORB-SLAM2
  9. 时间转成bcd码java_Linux时间戳转换成BCD码(转载)
  10. 20计算机考研,推荐哪些学校?