机器人告警通知

文摘   职场   2022-04-28 17:00   江苏  


  1. 背景:

    1. 随着业务的发展,有些数据或逻辑会交由定时任务处理,开发会(在第二天)通过看日志或DB数据后再通知相关同学定时任务已跑,可以验收或继续做其它后续事情。

    2. 越多越多的公司内部工作交流开始使用钉钉飞书

    3. 告警邮件太多没人看、短信容易被淹没


  2. 缺点

    1. 业务方有时候会过来催,让开发看一下定时任务是否跑完

    2. 开发会被中断当前的思路,导致灵感丧失

    3. 翻日志查数据后发现正在处理,时间被浪费

    4. ……

  3. 好奇

    1. 想到曾经使用过 钉钉告警机器人;转换思路,基于当前公司使用飞书进行工作交流,查一下飞书是否有类似的功能,结论:


  4. 如何接入

    1. 确定需要通知的群组(通常来说包含需求提出人的群主)

    2. 通过群组->设置->创建机器人


    3. 在群组设置中心获取到webhook地址

    4. Hello World
      <!--step1: maven 引用 http; 项目中有就不用管这步了 --><dependency>    <groupId>cn.hutool</groupId>    <artifactId>hutool-all</artifactId>    <version>5.8.0.M2</version></dependency


       package xxx.api.model.vo;
      import java.io.Serializable;import java.util.Map;
      /** * * @Title: * @Package  * @Description: step2.参考消息休定义对象  * { * "msg_type":"text", * "content":{ *  "text":"this is test by siri" *   } * @author: siri * @date: * @version: V1.0 * /public class Robot implements Serializable { private String msg_type="text"; private Map<String,String> content;
      public Robot() { super(); }
      public Robot(Map<String, String> content) { super(); this.content = content; } //ignore setter getter}
      #step 3:增加一些配置,更灵活的控制:是否启用机器人、要at的同学robot: enable: true url: 上述获取到的webhook 地址(为了公司群组安全,我这里省略) at: 同学A,同学B
      // step4:在你业务代码块合理的地方 拼接提示文本,调用webhook地址发消息this.sendTipsByRobot("系统已向TMS完成LaneId删除位同步操作,请留意!!! ");
      private void sendTipsByRobot(String text){ Map<String,String> content = new HashMap<>(1<<1); content.put("text",this.at_append(ROBOT_AT)+text); Robot robot = new Robot(content); HttpUtil.post(ROBOT_URL, JSON.toJSONString(robot));}
      private String at_append(String users){ StringBuilder at = new StringBuilder(); for (String a : users.split(",")) { at.append("<at user_id=\"ou_").append(a).append("\">").append(a).append("</at>"); } return at.toString();}



  5. 成果展示



  6. 总结一下

    1. 每一个黎明的早上,你也想发一条消息通知业务方任务跑完了。

      跟着上面的步骤,一定可以模仿成功么?1000%可以

    2. 消息太长支持换行么?支持 \n \r之类的操作符


      {    "receive_id": "oc_xxx",    "content": " {\"text\":\"firstline \\n second line  \"}",    "msg_type": "text"}
    3. 可以支持@操作么?可以。参考如下


      <!-- @ 单个用户 --><at user_id="ou_xxx">名字</at> <!-- @ 所有人 --><at user_id="all">所有人</at>


    4. 支持更复杂的消息类型么,比如 邮件中的附件?支持

    5. 我(can)摊(kao)牌(lian)了(jie):


      P.S.  你以为我在教你做业务通知,举一反三,每日测试报告或其它想即时通知到同学的地方都可以哦!!!



晚霞程序员
一位需要不断学习的30+程序员……