定时向钉钉群推送消息

本文涉及的产品
大数据开发治理平台DataWorks,Serverless资源组抵扣包300CU*H
简介: 由于数仓和实时任务繁多,当任务出问题时需要开发人员处理,需要每日定时向群里推送隔日值班人员信息,保障任务正常产出

1.概述

上文介绍了使用钉钉机器人推送离线和实时任务出错告警,值班人员信息推送使用DataWorks自动推送,但是DataWorks自动推送不能@指定人员,只能@all和不@,这里使用钉钉API,写代码定时向群里推送相应值班人员信息。

2.实现

1.创建钉钉机器人

1.在所要推送消息的钉钉群内创建自定义机器人

image.png

image.png

2.输入机器人名称,这里采用关键字,推送的内容中包含以下关键词均能成功推送消息,否则推送失败

image.png

3.保存好Webhook地址,代码就是向这个地址推送

image.png

2.Java代码

1.pom依赖导入

<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>dataworks</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.aliyun</groupId><artifactId>dataworks_public20200518</artifactId><version>4.3.9</version><scope>provided</scope></dependency><dependency><groupId>com.aliyun</groupId><artifactId>alibaba-dingtalk-service-sdk</artifactId><version>2.0.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><!--所有的编译都依照JDK1.8来搞--><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><!--注意:要和自己建的全类名一致。--><mainClass>cn.xxx.dataworks.DutyOnDataWorks</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build></project>

2.编写工具类,用于获取Webhook地址,日期,值班人姓名手机号、消息体等

packagecn.xxx.dataworks.utils;
importjava.text.ParseException;
importjava.text.SimpleDateFormat;
importjava.util.Calendar;
importjava.util.Date;
/*** 工具类*/publicclassUtils {
/*** 钉钉机器人WebHook* @return*/publicstaticStringgetWebHook(){
//正式机器人Webhook地址Stringurl="xxx";
returnurl;
    }
/*** 发送消息体* @return*/publicstaticStringgetContent() throwsParseException {
Stringtxt="DataWorks值班提醒:"+"\n"+"> "+getData()+"("+getWeekOfDate()+") "+"00:00开始 23:59结束"+"\n"+"> 值班表: 每日任务运维"+"\n"+"> 值班人员:"+getShiftPersonnel()
                ;
returntxt;
    }
/*** 获取当前日期是星期几+1,因为是当天发送明天的消息* @return 当前日期是星期几+1*/publicstaticStringgetWeekOfDate() {
//正常顺序String[] weekDays= { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
//星期+1顺序String[] weekDays2= { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日" };
Datedate=newDate(System.currentTimeMillis());
Calendarcal=Calendar.getInstance();
cal.setTime(date);
intw=cal.get(Calendar.DAY_OF_WEEK) -1;
if(w<0){
w=0;
        }
returnweekDays2[w];
    }
/*** 获取日期+1* @return*/publicstaticStringgetData(){
SimpleDateFormatformatter=newSimpleDateFormat("yyyy年MM月dd日");
Datedate=newDate(System.currentTimeMillis());
Calendarc=Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DAY_OF_MONTH,1);
Stringday1=formatter.format(c.getTime());
returnday1;
    }
/*** 获取值班人员名称(周一至周日)* @return 姓名*/publicstaticStringgetShiftPersonnel() {
StringweekOfDate=getWeekOfDate();
if("星期一".equals(weekOfDate)){
return"xxx";
        } elseif("星期二".equals(weekOfDate)){
return"xxx";
        } elseif("星期三".equals(weekOfDate)){
return"xxx";
        } elseif("星期四".equals(weekOfDate)){
return"xxx";
        } elseif("星期五".equals(weekOfDate)){
return"xxx";
        } elseif("星期六".equals(weekOfDate)){
return"xxx";
        } elseif("星期日".equals(weekOfDate)){
return"xxx";
        } else{
return"";
        }
    }
/*** 获取值班人员联系方式* @return 手机号码*/publicstaticStringgetPhoneNumber() {
StringshiftPersonnel=getShiftPersonnel();
if("xxx".equals(shiftPersonnel)){
return"xxx";
        } elseif("xxx".equals(shiftPersonnel)){
return"xxx";
        } elseif("xxx".equals(shiftPersonnel)){
return"xxx";
        } elseif("xxx".equals(shiftPersonnel)){
return"xxx";
        } elseif("xxx".equals(shiftPersonnel)){
return"xxx";
        } elseif("xxx".equals(shiftPersonnel)){
return"xxx";
        } else{
return"";
        }
    }
}

3.编写主类

packagecn.xxx.dataworks;
importcn.xxx.dataworks.utils.Utils;
importcom.dingtalk.api.DefaultDingTalkClient;
importcom.dingtalk.api.DingTalkClient;
importcom.dingtalk.api.request.OapiRobotSendRequest;
importcom.dingtalk.api.response.OapiRobotSendResponse;
importcom.taobao.api.ApiException;
importjava.text.ParseException;
importjava.util.Arrays;
publicclassDutyOnDataWorks {
publicstaticvoidmain(String[] args) throwsApiException, ParseException {
//获取钉钉机器人WebHookDingTalkClientclient=newDefaultDingTalkClient(Utils.getWebHook());
//创建请求OapiRobotSendRequestrequest=newOapiRobotSendRequest();
//消息类型,此时固定为:text。当前自定义机器人支持文本 (text)、链接 (link)、markdown(markdown)、ActionCard、FeedCard消息类型request.setMsgtype("text");
//指定消息内容OapiRobotSendRequest.Texttext=newOapiRobotSendRequest.Text();
text.setContent(Utils.getContent());
request.setText(text);
//被@人的手机号。在content里添加@人的手机号,且只有在群内的成员才可被@,非群内成员手机号会被脱敏。OapiRobotSendRequest.Atat=newOapiRobotSendRequest.At();
at.setAtMobiles(Arrays.asList(Utils.getPhoneNumber()));
// isAtAll类型如果不为Boolean,请升级至最新SDKat.setIsAtAll(false);
request.setAt(at);
//发送请求OapiRobotSendResponseexecute=client.execute(request);
    }
}

4.打成jar包,放到服务器设置定时运行,即可每日收到值班人员信息

image.png

3.总结

以上就是通过java代码实现向钉钉群推送消息的过程,DataWorks可以邮件推送,淡然代码也是可以实现的,这里就不做叙述了。

拜了个拜

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 课程目标 &nbsp;通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群 &nbsp;企业数据仓库开发人员 &nbsp;大数据平台开发人员 &nbsp;数据分析师 &nbsp;大数据运维人员 &nbsp;对于大数据平台、数据中台产品感兴趣的开发者
目录
相关文章
|
监控 安全 机器人
通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)
通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)
225 0
|
运维 监控 安全
Shell实现钉钉机器人定时消息通知
Shell实现钉钉机器人定时消息通知
270 0
|
机器人 Serverless 文件存储
极速搭建钉钉群定时天气播报
本场景主要演示了函数计算定时触发器遵循cron表达式定时触发函数的功能。
|
机器人 测试技术 Python
python操作钉钉机器人推送消息
python操作钉钉机器人推送消息
|
机器人 Linux 网络安全
利用GrayLog告警功能实现钉钉群机器人定时工作提醒
利用GrayLog告警功能实现钉钉群机器人定时工作提醒
379 0
利用GrayLog告警功能实现钉钉群机器人定时工作提醒
|
jenkins Java 持续交付
5❤️Jenkins从零到壹❤️ :集成DingTalk 插件实现构建推送消息到钉钉(JAVA 小虚竹)
5❤️Jenkins从零到壹❤️ :集成DingTalk 插件实现构建推送消息到钉钉(JAVA 小虚竹)
273 0
5❤️Jenkins从零到壹❤️ :集成DingTalk 插件实现构建推送消息到钉钉(JAVA 小虚竹)
|
存储 弹性计算 安全
成功案例-钉钉 | 学习笔记
快速学习 成功案例-钉钉
400 0
|
存储 弹性计算 安全
案例分享——钉钉|学习笔记
快速学习 案例分享——钉钉
373 0
|
存储 弹性计算 安全
案例分享——钉钉
rds数据库 阿里云为钉钉提供了安全性和整体服务的稳定性
案例分享——钉钉