现在,许多的消息会议,工作任务安排都不在是通过邮件呀,或者是使用口头表达的形式了,都是一些通讯软件进行分发,在工作中,也会有一些东西需要通过程序进行自动发送一些消息通知到指定的人,告诉他,你的,干活的干活!
现在钉钉被小学生差评之后,反而一些大人更喜欢用它来管理“孩子“们了,也就是通过钉钉消息通知,告诉同学们,这个东西有问题需要改了~
博主也在工作中给老师安排了一道,结果呢,百度上面呢,只有机器人,没有工作通知(老师就要通知),博主大大就拿着钉钉的开发平台文档,捣鼓了两天,终于是发出去一个比较OK的通知了
(效果图!)

看起来还是比较OK的哦,是吧!不多说废话了,出货了!
钉钉发送消息,第一步肯定是要获取到用户的token,不然我怎么去调用接口(除非钉钉不要你的token,但是是不可能的,发送消息,肯定要登录了,用户合法才行)代码示例如下

/*** 获取AccessToken* @return  AccessToken* @throws ApiException*/private String getAccessToken() throws ApiException {DefaultDingTalkClient client =new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");OapiGettokenRequest request = new OapiGettokenRequest();//Appkeyrequest.setAppkey(APP_KEY);//Appsecretrequest.setAppsecret(APP_SECRET);/*请求方式*/request.setHttpMethod("GET");OapiGettokenResponse response = client.execute(request);return response.getAccessToken();}

这里面有一个APPkey和APPsecret 这两个东西是企业管理钉钉账号里面的连个密钥,获取方式呢,可以看一下钉钉开发平台开发文档
好了,获取到token了,就可以进行发送消息了(发送消息代码如下)

@Overridepublic void sendNotification(String mobile,String park,String alarmCode,String severityDesc) throws ApiException {log.info("发送钉钉通知");String accessToken = getAccessToken();if(StringUtils.isBlank(mobile)){return;}//电话号码数组String[] split = mobile.split(",");for (String s : split) {DingTalkClient client2 = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get_by_mobile");OapiUserGetByMobileRequest req = new OapiUserGetByMobileRequest();req.setMobile(s);req.setHttpMethod("GET");OapiUserGetByMobileResponse rsp = client2.execute(req, accessToken);//获取到Urid就是在公司里要发送到那个人的idString urid = rsp.getUserid();DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();request.setUseridList(urid);request.setAgentId(AGENT_ID);request.setToAllUser(false);OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());msg.getOa().setMessageUrl(MESSAGE_URL);msg.getOa().setPcMessageUrl(PC_MESSAGE_URL);msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());msg.getOa().getHead().setText("text");msg.getOa().getHead().setBgcolor("FFBBBBBB");msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());msg.getOa().getBody().setContent("******");OapiMessageCorpconversationAsyncsendV2Request.Form formPark = new OapiMessageCorpconversationAsyncsendV2Request.Form();formPark.setKey(park);OapiMessageCorpconversationAsyncsendV2Request.Form formAlarmCode = new OapiMessageCorpconversationAsyncsendV2Request.Form();formAlarmCode.setKey("************");formAlarmCode.setValue(alarmCode);OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form();formSeverityDesc.setKey("************");formSeverityDesc.setValue(severityDesc);OapiMessageCorpconversationAsyncsendV2Request.Form formConner = new OapiMessageCorpconversationAsyncsendV2Request.Form();formConner.setKey("************");ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>();objects.add(formPark);objects.add(formSeverityDesc);objects.add(formAlarmCode);objects.add(formConner);msg.getOa().getBody().setForm(objects);msg.setMsgtype("oa");request.setMsg(msg);log.info("获取发送通知消息体和获取发送通知人完成");OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request,accessToken);log.info("发送消息是否成功"+response.isSuccess());System.out.println(response.isSuccess());log.info("消息任务ID"+response.getTaskId());System.out.println(response.getTaskId());}}

这上面的代码中都有注释,可以看到很清楚,博主在开发的时候唯有困了的就是设置那个消息体也就是这个

    OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());msg.getOa().setMessageUrl(MESSAGE_URL);msg.getOa().setPcMessageUrl(PC_MESSAGE_URL);msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());msg.getOa().getHead().setText("text");msg.getOa().getHead().setBgcolor("FFBBBBBB");msg.getOa().setBody(new OapiMessageCorpconversationAsyncsendV2Request.Body());msg.getOa().getBody().setContent("******");OapiMessageCorpconversationAsyncsendV2Request.Form formPark = new OapiMessageCorpconversationAsyncsendV2Request.Form();formPark.setKey(park);OapiMessageCorpconversationAsyncsendV2Request.Form formAlarmCode = new OapiMessageCorpconversationAsyncsendV2Request.Form();formAlarmCode.setKey("************");formAlarmCode.setValue(alarmCode);OapiMessageCorpconversationAsyncsendV2Request.Form formSeverityDesc = new OapiMessageCorpconversationAsyncsendV2Request.Form();formSeverityDesc.setKey("************");formSeverityDesc.setValue(severityDesc);OapiMessageCorpconversationAsyncsendV2Request.Form formConner = new OapiMessageCorpconversationAsyncsendV2Request.Form();formConner.setKey("************");ArrayList<OapiMessageCorpconversationAsyncsendV2Request.Form> objects = new ArrayList<>();objects.add(formPark);objects.add(formSeverityDesc);objects.add(formAlarmCode);objects.add(formConner);msg.getOa().getBody().setForm(objects);msg.setMsgtype("oa");

这里面的Msgtype是系统通知的类型,在钉钉开发文档中也有说明,可以参考

到这来,是不是就以为结束了,nonono,还有最重要的一个,消息通知发过去了,怎么保证进去的那个人就是合法的(也就是说,这个坑怎么知道是不是这个萝卜的!)
嘿嘿,不慌,钉钉有一个免密登录code,我们可以通过这个code获取到用户信息,同时通过网关或者拦截器这一类的东西,进行过滤用户请求,判断萝卜对不对!

 /**** 根据免密登录code获取用户信息* @param requestAuthCode 免密登录code* @throws ApiException*/@Overridepublic ResponseMessage getUserInfo(String requestAuthCode) throws ApiException {if(StringUtils.isBlank(requestAuthCode)){return ResponseMessage.error("免登录code不能为空");}String accessToken = getAccessToken();/*获取用户ID*/DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getuserinfo");OapiUserGetuserinfoRequest request = new OapiUserGetuserinfoRequest();request.setCode(requestAuthCode);request.setHttpMethod("GET");OapiUserGetuserinfoResponse response = client.execute(request, accessToken);String userId = response.getUserid();/*获取用户详细信息*/DingTalkClient getUserInfoClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");OapiUserGetRequest getUserInfoRequest = new OapiUserGetRequest();getUserInfoRequest.setUserid(userId);getUserInfoRequest.setHttpMethod("GET");OapiUserGetResponse execute = getUserInfoClient.execute(getUserInfoRequest, accessToken);/*手机号*/String mobile = execute.getMobile();/*用户名*/String name = execute.getName();/*员工工号*/String jobNumber = execute.getJobnumber();String redisValues = mobile+":"+name+":"+jobNumber;String md5Value = MD5.create().digestHex(redisValues);/*存放Redis*/try {redisTemplate.opsForValue().set(requestAuthCode, md5Value, 2, TimeUnit.HOURS);return ResponseMessage.ok(execute);}catch (Exception e){return ResponseMessage.error("token生产存储失败!");}}

看见没有,这个时候需要前台调用钉钉的免密登录接口,通过免密登录接口就能获取到code,把code发后台就能获取到钉钉用户的具体信息,可以将一些数据加密存入我们自己的token里面,用户每次将我们给他的token带回来,去rides中获取到token对比,如果存在,用户合法,如果token不存在获取过期了,提醒前台,用户需要重新登录!
对于拦截器的和网关的使用可以查看博主的博客SpringBoot拦截器配置与使用
SpringCloud组件4值zuul网关
好了,老师,交作业了,多谢同学梦的支持,如有不对的地方,欢迎指正!

java对接钉钉发送消息通知相关推荐

  1. spring boot 整合钉钉机器人发送消息通知

    钉钉消息通知 主要用于系统预警.资源预警.重要消息通知,随时随地可以掌握重要信息 一.通知效果 1.文本通知 2.带链接的通知 3.makrdown格式 通知 4.ActionCard 通知 5.Fe ...

  2. 调用钉钉API发送消息通知给个人或部门 ,钉钉后台

    https://www.pianshen.com/article/22171673623/

  3. Java 利用钉钉机器人发送消息并艾特指定人

    钉钉机器人发送消息 1.引入钉钉机器人到钉钉群 2.利用群里钉钉机器人的webHook发送钉钉消息 根据webHook 我们可以看出,通过机器人发送钉钉消息,实际上就是一个http请求,事实上,所有的 ...

  4. 钉钉小程序生态5—钉钉群机器人消息通知和钉钉工作通知

    文章导航 钉钉小程序生态1-区分企业内部应用.第三方企业应用.第三方个人应用 钉钉小程序生态2-区分小程序和H5微应用 钉钉小程序生态3-钉钉扫码登录PC端网站 钉钉小程序生态4-钉钉小程序三方企业应 ...

  5. python 使用钉钉机器人发送消息至钉钉

    如果你在使用钉钉,并且经常需要发送某些消息到钉钉群中,例如在监控某些数据,当出现异常的时候,及时发送消息通知钉钉群:或者在完成某些操作,发送消息到钉钉群中,那么我们可以使用钉钉机器人,实现自动化信息同 ...

  6. 【钉钉机器人发送消息,集成SpringBoot】

    钉钉机器人发送消息,集成SpringBoot 使用教程 官方文档:自定义机器人接入 - 钉钉开放平台 需要下载电脑版钉钉 官网地址 1.创建 Ding 群 首先在钉钉软件里创建一个群聊,这个比较简单就 ...

  7. Python用钉钉机器人发送消息并艾特多人

    继续水文章.今天主要是吐槽一下钉钉的接口文档 前几天碰见个需求: 从jira接口查出每日未完成的任务 用钉钉机器人把任务发送到钉钉工作群里,并标注是谁的任务.任务标题 发送时,艾特对应的人员 给每个人 ...

  8. python调用钉钉API发送消息

    #!/usr/bin/env python # -*- coding: utf-8 -*- # 2017-8-20 钉钉API发送消息import urllib, urllib2 import req ...

  9. 钉钉机器人怎么设置自动回复_项目部署成功后触发钉钉机器人发送消息提醒——入门配置...

    钉钉建好一个群 打开群设置, 找到群机器人 添加一个你想要的机器人 可以使用自定义 自定义机器人可以自定义头像,名字,生成一个webhook(https post的请求地址) 到这里, 钉钉机器人设置 ...

最新文章

  1. 第一个jfinal的样例
  2. SAP CRM One order appointment duration table
  3. 从读大学到工作,我的这几年时光是如何度过的
  4. Linux下jdk配置环境变量
  5. Apache Benchmark(简称ab)压力测试安装与解释
  6. 普通地图的六大要素_地图的基本要素是什么 主要是哪三大要素
  7. spring多个AOP执行先后顺序(面试问题:怎么控制多个aop的执行循序)
  8. windows 下使用 virtualenv 创建虚拟环境
  9. Firefox 的使用(firefox 拓展应用程序)
  10. DMX512标准发送及代码整理
  11. linux 种子文件怎么打开,torrent是什么文件?用什么打开?
  12. 算法导论练习 3.1 Asymptotic notation
  13. 算法培训(一)---排序算法
  14. 牛顿法的收敛速度为何比梯度下降法快?
  15. nmap架构图_Nmap扫描教程之Nmap基础知识
  16. 虚拟贴图理论篇之Texture Filtering
  17. 【转】SCI论文写法攻略
  18. ERP咨询顾问必备的7种公关能力
  19. python实现用伏羲八卦对ASCII码进行加密
  20. json to go

热门文章

  1. 解决外网与内网或内网之间的通信,NAT穿透
  2. C++入门——Day5_分支语句和逻辑运算符
  3. JAVA+MySQL 图书馆借阅信息管理系统
  4. 【图像处理】初识计算机视觉
  5. Compact Multi-Signatures for Smaller Blockchains代码解析
  6. Android 性能优化之——高性能使用图片全面总结
  7. 外贸b2c网站建设!
  8. AI背景下的新零售行业商业模式
  9. jadx动态调试安卓apk
  10. 基于语音的疲劳度检测算法研究