钉钉机器人Java实现

版权声明:转载记得宣传奥~。~ https://blog.csdn.net/c_ym_ww/article/details/85251874

获取自定义机器人webhook

  1. 钉钉机器人文档网址
  2. 钉钉里面新建群,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”
  3. 获取webhook,这个webhook是钉钉来识别消息要发送到哪个群的标识

消息类型及数据格式

本着要写成工具类的方法,所以把需要用到类型都写成实体类
  1. 文本类型

    TextRebootModel类
    @Data
    public class TextRebootModel {
        /**
         * 此消息类型为固定text
         */
        public String msgtype = "text";
    
        public ContentModel text;
    
        public AtMobiles at;
    }
    
    
    ContentModel类
    @Data
    public class ContentModel {
        /**
         * 消息内容
         */
        private String content;
    }
    
    
    AtMobiles类
    @Data
    public class AtMobiles {
    
        /**
         * 被@人的手机号
         * @return
         */
        private List<String> atMobiles;
    
        /**
         * @所有人时:true,否则为:false
         */
        private Boolean isAtAll;
    }
    
  2. MarkDown类型

    MarkDownRebootModel类
    @Data
    public class MarkDownRebootModel {
        /**
         * 此消息类型为固定markdown
         */
        public String msgtype = "markdown";
    
        public MarkDownModel markdown;
    
        public AtMobiles at;
    }
    
    MarkDownModel类
    @Data
    public class MarkDownModel {
        /**
         * 首屏会话透出的展示内容
         */
        private String title;
    
        /**
         * markdown格式的消息
         */
        private String text;
    }
    

钉钉机器人封装工具类方法

public class RebootUtil {
    /**
     * 组装 发送的信息
     *
     * @param isAt       是否需要 @所有人
     * @param msgContent 要发送信息的主体
     * @param telList    要 @人的电话号码,如果@单独的几个人,就传一个空list,而不是 null
     * @return
     */
    public static String setMessage(boolean isAt, String msgContent, List<String> telList) {

        TextRebootModel model = new TextRebootModel();
        AtMobiles atMobiles = new AtMobiles();
        atMobiles.setIsAtAll(isAt);
        atMobiles.setAtMobiles(telList);

        ContentModel contentModel = new ContentModel();
        contentModel.setContent(msgContent);

        model.setAt(atMobiles);
        model.setText(contentModel);

        String toMsg = JSON.toJSONString(model);

        return toMsg;
    }

    /**
     * 组装 发送的信息
     *
     * @param isAt       是否需要 @所有人
     * @param title      标题
     * @param msgContent 要发送信息的主体
     * @param telList    要 @人的电话号码,如果@单独的几个人,就传一个空list,而不是 null
     * @return
     */
    public static String setMarkDown(boolean isAt, String title, String msgContent, List<String> telList) {

        MarkDownRebootModel model = new MarkDownRebootModel();
        AtMobiles atMobiles = new AtMobiles();
        atMobiles.setIsAtAll(isAt);
        atMobiles.setAtMobiles(telList);

        MarkDownModel markDownModel = new MarkDownModel();
        markDownModel.setTitle(title);
        markDownModel.setText(msgContent);

        model.setAt(atMobiles);
        model.setMarkdown(markDownModel);

        String Message = JSON.toJSONString(model);

        return Message;
    }

    /**
     * post 请求,发送给哪一个机器人
     *
     * @param reboot  机器人的token
     * @param message 发送的消息
     * @return
     */
    public static String sendPost(String reboot, String message) {
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httppost = new HttpPost(reboot);
        httppost.addHeader("Content-Type", "application/json; charset=utf-8");

        String textMsg = message;
        StringEntity se = new StringEntity(textMsg, "utf-8");
        httppost.setEntity(se);
        String result = null;
        HttpResponse response = null;
        try {
            response = httpclient.execute(httppost);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                result = EntityUtils.toString(response.getEntity(), "utf-8");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    
    /**
     * 查错机器人
     * @param message 封装的消息
     * @return
     * @throws Exception
     */
    public static String sendErrorReboot(String message) throws Exception {
        return sendPost("钉钉机器的webhook", message);
    }
}

text类型的消息:
String text=RebootUtil.setMessage(true,"我就是我,  @1825718XXXX 是不一样的烟火",Arrays.asList(""));

markDown类型的消息:使用于字体加粗,超链接隐藏
String text=RebootUtil.setMarkDown(true,"杭州天气","#### 杭州天气  \n > 9度,@1825718XXXX 西北风1级,空气良89,相对温度73%\n\n > ![screenshot](http://i01.lw.aliimg.com/media/lALPBbCc1ZhJGIvNAkzNBLA_1200_588.png)\n  > ###### 10点20分发布 [天气](http://www.thinkpage.cn/)",Arrays.asList(""));

调用工具类,try-catch一下
RebootUtil.sendErrorReboot(text);

总结

​ 钉钉调用机器人还是比较简单的,在一些统计数据方面可以有效的集成开发。

​ 本文中的2个IDEA插件GsonFormat和Lombok还是挺方便的,详细安装方法可以查看文章

猜你喜欢

转载自blog.csdn.net/c_ym_ww/article/details/85251874