java通过钉钉机器人发消息

钉钉自定义机器人使用 加签的配置 发送消息

注意:内部群才可以创建自定义机器人
钉钉网址-自定义机器人创建

1、获得的钉钉配置信息workhook和secret

//url路径
    private String URL = "https://oapi.dingtalk.com/robot/send?access_token=08ebaa04f98f7faacbacd80fa879463d85cdccdd6cef184ef01bb5a8b6ae6f6c";
//加签密钥
    private String DINGDING_SECRET = "SEC27596efd776991b2f6786270fa59552459f64612b17adf377295669361af3fae";


2、配置加签

配置路径

    private String getSign() {
        Long timestamp = System.currentTimeMillis();
        String stringToSign = timestamp + "\n" + DINGDING_SECRET;
        Mac mac = null;
        String sign = null;
        try {
            mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(DINGDING_SECRET.getBytes("UTF-8"), "HmacSHA256"));
            byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
            sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
        } catch (Exception e) {
            throw new IllegalArgumentException("加签处理有误");
        }

        return "×tamp=" + timestamp + "&sign=" + sign;
    }

3、按照钉钉要求整理json数据结构

如果phone为null则发送普通消息,不为空则发送给特定的人

   private JSONObject buildDingDingMessage(String phone, String message) {
        //2、按要求配置参数格式
        JSONObject json = new JSONObject();
        json.put("msgtype", "text");
        json.put("text", new JSONObject() {{
            put("content", message);
        }});
        if (!UtilString.isBlank(phone)) {
            ArrayList<String> list = new ArrayList<>();
            list.add(phone);
            json.put("at", new JSONObject() {{
                put("atMobiles", list.toArray());
            }});
        }
        return json;
    }
    @Override
    public void doSendMessage(String phone, String message) {
        //1、检查数据
        if (UtilString.isBlank(message)) {
            throw new IllegalArgumentException("请输入钉钉服务机器人要输出的信息");
        }

        //2、配置钉钉信息
        JSONObject  json = buildDingDingMessage(phone, message);

        //3、请求
        String url = URL + getSign();
        String responseText = HttpClient.textBody(url)
                .json(json.toJSONString())
                .connectTimeout(60)
                .readTimeout(5 * 60)
                .writeTimeout(5 * 60)
                .asString();
//无错则不发送日志消息
        JSONObject responseJson = JSON.parseObject(responseText);
        if (!responseJson.getString("errmsg").equals("ok")) {
            log.error(responseJson.getString("errmsg"));
        }
    }

你可能感兴趣的:(java,钉钉,机器人)