当前位置:   article > 正文

工作随记-Java利用企业微信群机器人定时发送消息_java 企业微信群发机器人消息

java 企业微信群发机器人消息

hi,大家好,我是恰恰

阅读本文需要2分钟~

最近利用企业微信群机器人做的需求主要有

1.返奖率通知与告警:抽奖箱能抽出垃圾也能抽出大货,每隔5分钟查询一下这个返奖率,如果用户频繁抽出大货,这个抽奖箱的返奖率已经高出了阈值,那么我们就将其下架。

2.自动发送导表文件:关于运营每天都需要导表,我已俨然成为了一名导表侠,迫在眉睫我必须自我解放,所以可以利用机器人每天早上十点给运营们发送导表文件。

以自动发送导表文件为例 我需要把新注册的用户在平台消费大于等于50元的用户ID给到运营同学

开始写代码~

  • 新建一个类 把URL信息填充好
    1. /** 企业微信群上传文件url */
    2. public static final String UPLOAD_FILE_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=填你的机器人的key&type=file";
    3. /** 发送群消息url */
    4. public static final String SEND_MESSAGE_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=填你的机器人的key";

    1.先筛选出消费大于等于50元用户的List,组装数据保存到电脑D盘(EasyUtil是一个把List导出到本地的工具)

    1. List<NewRegistrationUser> collect = resultList.stream().filter(r -> r.getOpenBoxAmount() + r.getDirectPurAmount() >= 50).collect(Collectors.toList());
    2. List<Map<String, Object>> list = new ArrayList<>();
    3. for (int i = 0; i < collect.size(); i++) {
    4. LinkedHashMap<String, Object> map = new LinkedHashMap<>();
    5. NewRegistrationUser user = collect.get(i);
    6. map.put("用户ID ", user.getUserId());
    7. map.put("付费金额", user.getOpenBoxAmount()+user.getDirectPurAmount());
    8. list.add(map);
    9. }
    10. List<String> arrayList = new ArrayList(list.get(0).keySet());
    11. //表头信息
    12. String head =date+"消费大于等于50元名单";
    13. EasyUtil.easyUtil(arrayList, head, list);

 2.先将文件上传到企微的文件上传接口里去,使用hutool发送Post请求,他会返回一个media_id,

  1. String path = "D:\\导表\\" + head + ".xlsx";
  2. // 上传文件
  3. HashMap<String, Object> sendMap = new HashMap<>();
  4. sendMap.put("file", FileUtil.file(path));
  5. String result = cn.hutool.http.HttpUtil.post(UPLOAD_FILE_URL,sendMap);
  6. JSONObject jsonObject = JSON.parseObject(result);
  7. Integer errcode = Integer.valueOf(jsonObject.get("errcode").toString());

3.如果code返回0说明文件上传成功,进行下一步把文件推送到企微

  1. if (errcode.equals(0)) {
  2. // 推送消息
  3. String mediaid = (String) jsonObject.get("media_id");
  4. Map<String,Object> mediaMap = new HashMap<>();
  5. mediaMap.put("media_id",mediaid);
  6. Map<String,Object> msgMap = new HashMap<>();
  7. msgMap.put("msgtype","file");
  8. msgMap.put("file",mediaMap);
  9. cn.hutool.http.HttpUtil.post(SEND_MESSAGE_URL, JSON.toJSONString(paramMap));

4.再发送一句文字消息

  1. HashMap<String, Object> paramMap = new HashMap<>();
  2. HashMap<String, Object> aMap = new HashMap<>();
  3. String format = String.format("%s | %s | %d ", date, newRegistrationUser.size(), collect.size());
  4. aMap.put("content", "导表小助手来咯~"+"\n"+"时间 | 新注册人数 | 消费大于等于50人数 \n" + String.join("\n", format));
  5. msgMap.put("text",aMap);
  6. paramMap.put("msgtype", "text");
  7. paramMap.put("text", aMap);
  8. cn.hutool.http.HttpUtil.post(SEND_MESSAGE_URL, JSON.toJSONString(paramMap));
  9. }

效果就是这样的

5.如果是通知告警信息是个LIst就把文字组装成这样

  1. List<String> warnTexts = recordsList.stream().map(wi -> String.format("%s | %s | %d | %.2f%%", wi.getComboBoxId(), wi.getAdminUserName(),wi.getProfit(),wi.getProfitRate()).collect(Collectors.toList());
  2. HashMap<String, Object> paramMap = new HashMap<>();
  3. HashMap<String, Object> aMap = new HashMap<>();
  4. aMap.put("content", LocalDateTime.now() + "\n"+ "自动下架通知(请相关人员注意)~"+"\n" + "ID | 负责人 | 利润 | 利润率 \n" + String.join("\n", warnTexts));
  5. paramMap.put("msgtype", "text");
  6. paramMap.put("text", aMap);
  7. cn.hutool.http.HttpUtil.post(SEND_MESSAGE_URL, JSON.toJSONString(paramMap));

6.再写一个定时任务调一下咱们写的这个方法~就可以定时啦

  1. //每天上午10点执行任务
  2. @Scheduled(cron = "0 0 10 * * ?")
  3. public void NewUserAmount(){
  4. //拉取前一天的数据
  5. newUserAmountService.NewUserAmount(LocalDate.now().minusDays(1));
  6. }

 ok,能帮助到你的话,给我点个赞哦!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/178473
推荐阅读
相关标签
  

闽ICP备14008679号