钉钉自定义机器人

      项目中需要设置服务报警提醒的功能,就选择了钉钉群的自定义机器人,来实现这个功能。钉钉支持多种语言,本篇demo主要是使用Java

一,开启钉钉机器人功能

钉钉自定义机器人_第1张图片

选择自定义机器人

钉钉自定义机器人_第2张图片

开启自定义机器人功能,获取webhook链接

可以点击设置说明,查看钉钉自定义机器人文档。

钉钉自定义机器人_第3张图片

二,如何使用钉钉自定义机器人

使用群自定义机器人支持两种方式,第一种是下载SDK,直接使用client来调用;第二种是直接调用钉钉提供的http接口,发起post请求,获取机器人提醒,本篇主要学习的是http调用接口方式,主要思路如下。

 1.开启机器人之后,会获取一个webhook链接:

https://oapi.dingtalk.com/robot/send?access_token=XXXXXXX

2.查看钉钉自定义机器人的官方文档,调用相关接口即可。

自定义机器人官网文档:https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq

3.使用自定义机器人

 (1)发送http请求

获取到webhook地址之后,用户可以向这个地址发送 http请求,即可实现向群组发送消息。

注意,发起post请求后,必须将自符编码设置为UTF-8。

(2)消息类型

    当前自定义机器人支持文本(text),链接(link),markdown(markdown),ActionCard,FeedCard消息类型,我们可以根据自己的业务场景来使用不同的方式。

(3)自定义接人发送消息时候,可以通过手机号,指定被@人的列表,即可设置@所有人,也可以指定@某个人。

三,使用demo

   1.baseDingEntity

public abstract class DingBaseVo {

    public String msgtype;
}

2.text方法

@Data
@NoArgsConstructor
public class DingTextVo extends DingBaseVo {


    private Map text;
    private Map at;

    @Builder
    public DingTextVo(String content, Boolean atAll, String mobiles) {
        msgtype = "text";
        text = new HashMap();
        HashMap contentMap = new HashMap();
        contentMap.put("content", content);
        text = contentMap;
        at = new HashMap();
        if (StringUtils.isNotEmpty(mobiles)) {
            String[] mobileArray = mobiles.split(",");
            HashMap atMap = new HashMap();
            atMap.put("atMobiles", mobileArray);
            atMap.put("isAtAll", atAll);
            at = atMap;
        }
    }
}

3.link方式

@Data
@NoArgsConstructor
public class DingLinkVo extends DingBaseVo {

    private HashMap link;
    
    @Builder
    public DingLinkVo(String messageUrl, String picUrl, String title, String text) {
        this.msgtype = "link";
        this.link = new HashMap();
        link.put("messageUrl", messageUrl);
        link.put("picUrl", picUrl);
        link.put("title", title);
        link.put("text", text);
    }
}

4.测试调用

 /**
     * link方式
     *
     */
    public void linkNotice(DingLinkVo dingLinkVo) {

        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity responseResult = restTemplate.postForEntity(webHook_token, dingLinkVo, DingLinkVo.class);
        if (responseResult.getStatusCode() != HttpStatus.OK) {
            logger.info("钉钉发送失败,信息是:{}", responseResult);
        }
    }

    /**
     * text方式
     *
     */
    public void textNotice(DingBaseVo baseVo) {
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity responseResult = restTemplate.postForEntity(webHook_token, baseVo, DingTextVo.class);
        if (responseResult.getStatusCode() != HttpStatus.OK) {
            logger.info("钉钉通知发送失败,信息是:{}", responseResult);
        }
    }

5. 测试用例

 @Test
    public void testTextDing() {
        String content = "今天是个好日子,心想的事儿都能成~";
        Boolean atAll = false;
        String mobiles = "11111111111";
        DingTextVo textVo = DingTextVo.builder().content(content).atAll(atAll).mobiles(mobiles).build();

        logger.info("结果是:{}", JsonUtil.toJson(textVo));
        dingTalkNotice.textNotice(textVo);
    }


    @Test
    public void testLinkDing() {

        String messageUrl = "https://www.dingtalk.com/";
        String picUrl = "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1802563968,897623865&fm=26&gp=0.jpg";
        String title = "时代的火车向前开";
        String text = "这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林“";

        DingLinkVo dingLinkVo = DingLinkVo.builder().messageUrl(messageUrl).picUrl(picUrl).title(title).text(text)
                .build();
        logger.info("testLinkDing 参数是:{}", JsonUtil.toJson(dingLinkVo));
        dingTalkNotice.linkNotice(dingLinkVo);
    }

 钉钉自定义机器人_第4张图片

四,其他demo小例子

 @Test
    public void linkNotice() {

        HashMap message = new HashMap();
        message.put("msgtype", "link");

        HashMap map = new HashMap();
        map.put("messageUrl", "https://www.dingtalk.com/");
        map.put("picUrl", "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1802563968,897623865&fm=26&gp=0.jpg");
        map.put("title", "时代的火车向前开");
        map.put("text", "这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林“");
        message.put("link", map);
        String jsonMessage = JsonUtil.toJson(message);
        logger.info("Ding请求参数是:{}", jsonMessage);

        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity responseResult = restTemplate.postForEntity(dingApiUrl, message, Map.class);
        if (responseResult.getStatusCode() != org.springframework.http.HttpStatus.OK) {
            logger.info("error");
        }
    }

 httpClient方法访

参考博客:https://blog.csdn.net/bc_aptx4869/article/details/80860358

 /**
     * httpClient方式调用
     */
    @Test
    public void testDingWarning() {
        HashMap contentMap = new HashMap();
        contentMap.put("content", "我是钉钉小可爱");

        HashMap param = new HashMap();
        param.put("msgtype", "text");
        param.put("text", contentMap);

        HttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(dingApiUrl);
        httpPost.addHeader("Content-Type", "application/json; charset=utf-8");
        String resultParam = JSONObject.toJSONString(param);
        StringEntity se = new StringEntity(resultParam, "utf-8");
        httpPost.setEntity(se);

        try {
            HttpResponse response = httpClient.execute(httpPost);
            logger.info("返回值是:{}", response);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                String result = EntityUtils.toString(response.getEntity(), "utf-8");
                logger.info("错误信息是:{}", result);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 小结:

       钉钉自定义机器人,主要是为了服务器警报或者业务使用的,十分的方便。除了这个机器人了,最近看钉钉的官方文档,还有一些其他的功能机器人,比如天气预报,考勤提醒等挺好玩的,接下来继续研究下别的。

你可能感兴趣的:(---------【HTZX,I,love,you】)