在工作小组群,当我们每周需提醒群内成员写周报,提醒群内成员开周会点时候,为了更方便,我们可以在企微群内设置一个机器人来提醒大家。
我们先要在群内添加一个机器人️
右击群聊天 --> 点击"添加群机器人"
一定要保存好webhook地址。
代码可以直接放在一些在运行的项目中,比如内部使用的工具的代码中。
/**
* xxx提醒
* @return
*/
//提醒时间
@Scheduled(cron = "0 0 19 ? * MON")
public boolean remindTask(){
String url = "(此处为webhook地址)";
ArrayList<String> mobiles = new ArrayList<>();
mobiles.add("134xxxxxxxx");
mobiles.add("180xxxxxxxx");
....(群内成员电话号码)
JSONObject object_text = new JSONObject();
JSONObject object = new JSONObject();
object_text.put("content", "提醒语句:我来提醒大家xxx");
object_text.put("mentioned_mobile_list", mobiles);
object.put("msgtype", "text");
object.put("text", object_text);
String httpRes = HttpUtils.getProxydoPost(url, object, null);
if (!StringUtils.isEmpty(httpRes) && JSON.parseObject(httpRes).getInteger("errcode") == 0) {
return true;
}
return false;
}
如果说我们需要一周提醒一个人,比如开周会,需要群内成员轮流主持,那我们可以这样做。
/**
* 周会记录者提醒
* @return
*/
public static int getDaysBetween() {
DateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
try {
Date star = dft.parse("2021-10-19");//开始时间
Date today=dft.parse(dft.format(new Date()));//当前时间
Long starTime=star.getTime();
Long endTime=today.getTime();
Long num=endTime-starTime;//时间戳相差的毫秒数
//System.out.println("相差天数为:"+num/24/60/60/1000);//除以一天的毫秒数
return (int) (num/24/60/60/1000);
} catch (ParseException e) {
e.printStackTrace();
}
return 1;
}
//提醒时间
@Scheduled(cron = "0 0 17 ? * TUE")
public static boolean mettingsRemind2(){
String url = "(此处为webhook地址)";
ArrayList<String> mobiles = new ArrayList<>();
mobiles.add("137xxxxxxxx");
mobiles.add("139xxxxxxxx");
mobiles.add("131xxxxxxxx");
mobiles.add("134xxxxxxxx");
mobiles.add("180xxxxxxxx");
mobiles.add("132xxxxxxxx");
mobiles.add("130xxxxxxxx");
mobiles.add("181xxxxxxxxx");
int weeks = getDaysBetween()/7;
String phone = mobiles.get(weeks%mobiles.size());
JSONObject object_text = new JSONObject();
JSONObject object = new JSONObject();
object_text.put("content", "本周周会记录者:");
object_text.put("mentioned_mobile_list", phone);
object.put("msgtype", "text");
object.put("text", object_text);
String httpRes = HttpUtils.getProxydoPost(url, object, null);
if (!StringUtils.isEmpty(httpRes) && JSON.parseObject(httpRes).getInteger("errcode") == 0) {
return true;
}
return false;
}
提醒时间可以参考Cron表达式
Cron表达式举例
0 30 15 * * WED *
为每周三的15:30点触发,其中第一位0代表秒,30代表分钟,15代表时(24时计时法),WED为周三
*/5 * * * * * *
表示每5秒触发一次
0 0 2 1 * * *
表示在每月的1日的凌晨2点触发
`0 0 10,14,16 * * * *`
表示在每天上午10点,下午2点,4点触发
更多cron表达式说明,可参考https://cloud.tencent.com/document/product/583/9708#cron-.E8.A1.A8.E8.BE.BE.E5.BC.8F