釘釘機(jī)器人DEMO


@Slf4j
public class DingTalkUtilDemo {

    /**
     * 釘釘群設(shè)置 webhook, 支持重置
     */
    private static final String ACCESS_TOKEN = "XXXXXX";
    private static final String secret = "XXXXX";

    /**
     * 消息類(lèi)型
     */
    private static final String MSG_TYPE_TEXT = "text";
    private static final String MSG_TYPE_LINK = "link";
    private static final String MSG_TYPE_MARKDOWN = "markdown";
    private static final String MSG_TYPE_ACTION_CARD = "actionCard";
    private static final String MSG_TYPE_FEED_CARD = "feedCard";

    /**
     * 客戶(hù)端實(shí)例
     */
    public static DingTalkClient client = new DefaultDingTalkClient(ACCESS_TOKEN);


    /**
     * 初始化簽名
     * @throws Exception 所有異常
     */
    private static void init() throws Exception{
        Long timestamp = System.currentTimeMillis();

        String stringToSign = timestamp + "\n" + secret;
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
        String sign = URLEncoder.encode(new String(cn.hutool.core.codec.Base64.encode(signData)),"UTF-8");

        client = new DefaultDingTalkClient(ACCESS_TOKEN+"&sign=" + sign + "&timestamp=" + timestamp);
    }




    /**
     * @description: 官方演示示例
     *      title 是消息列表下透出的標(biāo)題
     *      text 是進(jìn)入群后看到的消息內(nèi)容
     */
    public static void sdkDemoJava() throws Exception{

        init();



        DingTalkClient client = DingTalkUtilDemo.client;
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype("text");
        OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
        text.setContent("測(cè)試文本消息");
        request.setText(text);
        OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
        at.setAtMobiles(Arrays.asList("13261303345"));
        request.setAt(at);

        request.setMsgtype("link");
        OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
        link.setMessageUrl("https://www.dingtalk.com/");
        link.setPicUrl("");
        link.setTitle("時(shí)代的火車(chē)向前開(kāi)");
        link.setText("這個(gè)即將發(fā)布的新版本,創(chuàng)始人陳航(花名“無(wú)招”)稱(chēng)它為“紅樹(shù)林”。\n" +
                "而在此之前,每當(dāng)面臨重大升級(jí),產(chǎn)品經(jīng)理們都會(huì)取一個(gè)應(yīng)景的代號(hào),這一次,為什么是“紅樹(shù)林");
        request.setLink(link);

        request.setMsgtype("markdown");
        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
        markdown.setTitle("杭州天氣");
        markdown.setText("#### 杭州天氣 @156xxxx8827\n" +
                "> 9度,西北風(fēng)1級(jí),空氣良89,相對(duì)溫度73%\n\n" +
                "> ![screenshot](https://gw.alipayobjects.com/zos/skylark-tools/public/files/84111bbeba74743d2771ed4f062d1f25.png)\n"  +
                "> ###### 10點(diǎn)20分發(fā)布 [天氣](http://www.thinkpage.cn/) \n");
        request.setMarkdown(markdown);
        try {
            client.execute(request);
        } catch (ApiException e) {
            log.error("[ApiException]: 消息發(fā)送演示示例, 異常捕獲{}", e.getMessage());
        }
    }

    /**
     * @description: 發(fā)送普通文本消息
     * @param content   文本消息
     * @param mobileList    指定@ 聯(lián)系人
     * @param isAtAll       是否@ 全部聯(lián)系人
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * 
     * 
     */
    public static OapiRobotSendResponse sendMessageByText(String content, List<String> mobileList, boolean isAtAll) {

        OapiRobotSendResponse response = new OapiRobotSendResponse();

        try {
            init();

            //參數(shù)    參數(shù)類(lèi)型    必須  說(shuō)明
            //msgtype   String  是   消息類(lèi)型,此時(shí)固定為:text
            //content   String  是   消息內(nèi)容
            //atMobiles Array   否   被@人的手機(jī)號(hào)(在content里添加@人的手機(jī)號(hào))
            //isAtAll   bool    否   @所有人時(shí):true,否則為:false
            OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
            text.setContent(content);
            OapiRobotSendRequest request = new OapiRobotSendRequest();
            if (!CollectionUtils.isEmpty(mobileList)) {
                // 發(fā)送消息并@ 以下手機(jī)號(hào)聯(lián)系人
                OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
                at.setAtMobiles(mobileList);
                at.setIsAtAll(isAtAll);
                request.setAt(at);
            }
            request.setMsgtype(DingTalkUtilDemo.MSG_TYPE_TEXT);
            request.setText(text);


            response = DingTalkUtilDemo.client.execute(request);
        } catch (Exception e) {
            log.error("[發(fā)送普通文本消息]: 發(fā)送消息失敗, 異常捕獲{}", e.getMessage());
        }
        return response;
    }

    /**
     * @description: 發(fā)送link 類(lèi)型消息
     * @param title 消息標(biāo)題
     * @param text  消息內(nèi)容
     * @param messageUrl     點(diǎn)擊消息后跳轉(zhuǎn)的url
     * @param picUrl    插入圖片的url
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * 
     * 
     */
    public static OapiRobotSendResponse sendMessageByLink(String title, String text, String messageUrl, String picUrl) throws Exception{
        init();
        /*if (!DataValidUtil.checkNotEmpty(title, text, messageUrl)) {
            return null;
        }*/
        //參數(shù)    參數(shù)類(lèi)型    必須  說(shuō)明
        //msgtype   String  是   消息類(lèi)型,此時(shí)固定為:link
        //title String  是   消息標(biāo)題
        //text  String  是   消息內(nèi)容。如果太長(zhǎng)只會(huì)部分展示
        //messageUrl    String  是   點(diǎn)擊消息跳轉(zhuǎn)的URL
        //picUrl    String  否   圖片URL
        OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
        link.setTitle(title);
        link.setText(text);
        link.setMessageUrl(messageUrl);
        link.setPicUrl(picUrl);

        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(DingTalkUtilDemo.MSG_TYPE_LINK);
        request.setLink(link);

        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = DingTalkUtilDemo.client.execute(request);
        } catch (ApiException e) {
            log.error("[發(fā)送link 類(lèi)型消息]: 發(fā)送消息失敗, 異常捕獲{}", e.getMessage());
        }
        return response;
    }


    /**
     * @description: 發(fā)送Markdown 編輯格式的消息
     * @param title 標(biāo)題
     * @param markdownText  支持markdown 編輯格式的文本信息
     * @param mobileList    消息@ 聯(lián)系人
     * @param isAtAll   是否@ 全部
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * 
     * 
     */
    public static OapiRobotSendResponse sendMessageByMarkdown(String title, String markdownText, List<String> mobileList, boolean isAtAll) throws Exception{
        init();
        /*if (!DataValidUtil.checkNotEmpty(title, markdownText)) {
            return null;
        }*/
        //參數(shù)    類(lèi)型  必選  說(shuō)明
        //msgtype   String  是   此消息類(lèi)型為固定markdown
        //title String  是   首屏?xí)捦赋龅恼故緝?nèi)容
        //text  String  是   markdown格式的消息
        //atMobiles Array   否   被@人的手機(jī)號(hào)(在text內(nèi)容里要有@手機(jī)號(hào))
        //isAtAll   bool    否   @所有人時(shí):true,否則為:false
        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
        markdown.setTitle(title);
        markdown.setText(markdownText);

        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(DingTalkUtilDemo.MSG_TYPE_MARKDOWN);
        request.setMarkdown(markdown);
        if (!CollectionUtils.isEmpty(mobileList)) {
            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
            at.setIsAtAll(isAtAll);
            at.setAtMobiles(mobileList);
            request.setAt(at);
        }

        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = DingTalkUtilDemo.client.execute(request);
        } catch (ApiException e) {
            log.error("[發(fā)送link 類(lèi)型消息]: 發(fā)送消息失敗, 異常捕獲{}", e.getMessage());
        }
        return response;
    }

    /**
     * @description: 整體跳轉(zhuǎn)ActionCard類(lèi)型的消息發(fā)送
     * @param title 消息標(biāo)題, 會(huì)話消息會(huì)展示標(biāo)題
     * @param markdownText  markdown格式的消息
     * @param singleTitle   單個(gè)按鈕的標(biāo)題
     * @param singleURL 單個(gè)按鈕的跳轉(zhuǎn)鏈接
     * @param btnOrientation    是否橫向排列(true 橫向排列, false 縱向排列)
     * @param hideAvatar    是否隱藏發(fā)消息者頭像(true 隱藏頭像, false 不隱藏)
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * 
     * 
     */
    public static OapiRobotSendResponse sendMessageByActionCardSingle(String title, String markdownText, String singleTitle, String singleURL, boolean btnOrientation, boolean hideAvatar) throws Exception{
        init();
        /*if (!DataValidUtil.checkNotEmpty(title, markdownText)) {
            return null;
        }*/
        //參數(shù)    類(lèi)型  必選  說(shuō)明
        //    msgtype   string  true    此消息類(lèi)型為固定actionCard
        //    title string  true    首屏?xí)捦赋龅恼故緝?nèi)容
        //    text  string  true    markdown格式的消息
        //    singleTitle   string  true    單個(gè)按鈕的方案。(設(shè)置此項(xiàng)和singleURL后btns無(wú)效)
        //    singleURL string  true    點(diǎn)擊singleTitle按鈕觸發(fā)的URL
        //    btnOrientation    string  false   0-按鈕豎直排列,1-按鈕橫向排列
        //    hideAvatar    string  false   0-正常發(fā)消息者頭像,1-隱藏發(fā)消息者頭像
        OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard();
        actionCard.setTitle(title);
        actionCard.setText(markdownText);
        actionCard.setSingleTitle(singleTitle);
        actionCard.setSingleURL(singleURL);
        // 此處默認(rèn)為0
        actionCard.setBtnOrientation(btnOrientation ? "1" : "0");
        // 此處默認(rèn)為0
        actionCard.setHideAvatar(hideAvatar ? "1" : "0");

        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(DingTalkUtilDemo.MSG_TYPE_ACTION_CARD);
        request.setActionCard(actionCard);
        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = DingTalkUtilDemo.client.execute(request);
        } catch (ApiException e) {
            log.error("[發(fā)送ActionCard 類(lèi)型消息]: 整體跳轉(zhuǎn)ActionCard類(lèi)型的發(fā)送消息失敗, 異常捕獲{}", e.getMessage());
        }
        return response;
    }

    /**
     * @description: 獨(dú)立跳轉(zhuǎn)ActionCard類(lèi)型 消息發(fā)送
     * @param title 標(biāo)題
     * @param markdownText  文本
     * @param btns  按鈕列表
     * @param btnOrientation    是否橫向排列(true 橫向排列, false 縱向排列)
     * @param hideAvatar    是否隱藏發(fā)消息者頭像(true 隱藏頭像, false 不隱藏)
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * 
     * 
     */
    public static OapiRobotSendResponse sendMessageByActionCardMulti(String title, String markdownText, List<OapiRobotSendRequest.Btns> btns, boolean btnOrientation, boolean hideAvatar) throws Exception{
        init();
        /*if (!DataValidUtil.checkNotEmpty(title, markdownText) || CollectionUtils.isEmpty(btns)) {
            return null;
        }*/
        //參數(shù)    類(lèi)型  必選  說(shuō)明
        //msgtype   string  true    此消息類(lèi)型為固定actionCard
        //title string  true    首屏?xí)捦赋龅恼故緝?nèi)容
        //text  string  true    markdown格式的消息
        //btns  array   true    按鈕的信息:title-按鈕方案,actionURL-點(diǎn)擊按鈕觸發(fā)的URL
        //btnOrientation    string  false   0-按鈕豎直排列,1-按鈕橫向排列
        //hideAvatar    string  false   0-正常發(fā)消息者頭像,1-隱藏發(fā)消息者頭像
        OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard();
        actionCard.setTitle(title);
        actionCard.setText(markdownText);
        // 此處默認(rèn)為0
        actionCard.setBtnOrientation(btnOrientation ? "1" : "0");
        // 此處默認(rèn)為0
        actionCard.setHideAvatar(hideAvatar ? "1" : "0");

        actionCard.setBtns(btns);

        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(DingTalkUtilDemo.MSG_TYPE_ACTION_CARD);
        request.setActionCard(actionCard);
        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = DingTalkUtilDemo.client.execute(request);
        } catch (ApiException e) {
            log.error("[發(fā)送ActionCard 類(lèi)型消息]: 獨(dú)立跳轉(zhuǎn)ActionCard類(lèi)型發(fā)送消息失敗, 異常捕獲{}", e.getMessage());
        }
        return response;
    }

    /**
     * @description: 發(fā)送FeedCard類(lèi)型消息
     * @param links
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * 
     * 
     */
    public static OapiRobotSendResponse sendMessageByFeedCard(List<OapiRobotSendRequest.Links> links) throws Exception{
        init();
        if (CollectionUtils.isEmpty(links)) {
            return null;
        }

        //msgtype   string  true    此消息類(lèi)型為固定feedCard
        //title string  true    單條信息文本
        //messageURL    string  true    點(diǎn)擊單條信息到跳轉(zhuǎn)鏈接
        //picURL    string  true    單條信息后面圖片的URL
        OapiRobotSendRequest.Feedcard feedcard = new  OapiRobotSendRequest.Feedcard();
        feedcard.setLinks(links);
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(DingTalkUtilDemo.MSG_TYPE_FEED_CARD);
        request.setFeedCard(feedcard);
        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = DingTalkUtilDemo.client.execute(request);
        } catch (ApiException e) {
            log.error("[發(fā)送ActionCard 類(lèi)型消息]: 獨(dú)立跳轉(zhuǎn)ActionCard類(lèi)型發(fā)送消息失敗, 異常捕獲{}", e.getMessage());
        }
        return response;
    }

    public static void main(String args[]) {
        //sdkDemoJava();
    }
}



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容