企業微信機器人並實現發送消息的功能(文本消息,圖片消息,圖文消息)

小夥伴們,好久不見,之前一直忙需求,好久沒寫博客了,企業微信於今年六月底新增了羣機器人消息接口,雖然這個機器人的功能還不是很完善,但是總體來說呢跟企業微信發送應用消息差不多,企業微信發送應用消息在這

我寫的博客呢,除非是涉及到項目隱私的部分沒公開,但是基本上博客中涉及的代碼我都有貼出來,小夥伴自行參考,一起加油!

1.首先呢,可以參考企業微信開發文檔:https://work.weixin.qq.com/api/doc#90000/90136/91770

2.其次呢,可以在羣裏創建羣機器人,目前好像都可以創建機器人 圖立馬安排上來

3.話不多說哈,上代碼!

a.首先呢,是接口調用:


 @GetMapping(value = "testApi4")
    public void testBosRoBot() throws Exception {
        QiRobotVo vo = new QiRobotVo();
        //機器人地址
        vo.setWebhookAddress("替換成你的機器人地址");
        //1.第一種情況:發送文本消息
        vo.setContent("我發送的消息是:文本消息");
        List<String> memberList = new ArrayList<>();
        memberList.add("TangHuiHong");
        memberList.add("@all");
        vo.setMemberList(memberList);
        vo.setMsgType("text");

        //2.第二種情況,發送圖片消息
//        vo.setMsgType("image");
//        vo.setSavePath("C:/uploadImage/a.png");

        //3.第三種情況,發送機器人消息
//        vo.setMsgType("news");
//        vo.setTitle("中秋節禮品領取");
//        vo.setDescription("今年中秋節公司有豪禮相送");
//        vo.setUrl("URL");
//        vo.setImageUrl("http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png");
        weiTemplateService.testSendNews(vo);

    }

b.其次呢,是業務邏輯層代碼的編輯

 @Override
    public void testSendNews(QiRobotVo vo) throws Exception {
        List<String> memberList = vo.getMemberList();
        String jsonData = "";
        String mobileList = "";
        String strMember = "";
        if (vo.getMsgType().equals("text")) {
            if (!Strings.isNullOrEmpty(vo.getMobileList())) {
                mobileList = vo.getMobileList();
            } else {
                mobileList = "";
            }
            for (int i = 0; i < memberList.size(); i++) {
                if (i == memberList.size() - 1) {
                    strMember += "\"" + memberList.get(i) + "\"";
                } else {
                    strMember += "\"" + memberList.get(i) + "\"" + ",";
                }
            }
            String[] members = new String[memberList.size()];
            for (int i = 0; i < memberList.size(); i++) {
                members[i] = memberList.get(i);
            }
            jsonData = "{\n" +
                    "\t\"msgtype\": \"" + vo.getMsgType() + "\",\n" +
                    "    \"text\": {\n" +
                    "        \"content\": \"" + vo.getContent() + "\",\n" +
                    "        \"mentioned_list\":[" + strMember + "],\n" +
                    "        \"mentioned_mobile_list\":[\"" + mobileList + "\"]\n" +
                    "    }\n" +
                    "}";

        } else if (vo.getMsgType().equals("image")) {
            //圖片base64加密的值
            vo.setImageBase64Value(ImageUtil.getImageStr(vo.getSavePath()));
            //圖片md5加密的值
            vo.setImageMd5Value(DigestUtils.md5Hex(new FileInputStream(vo.getSavePath())));
            jsonData = "{\n" +
                    "    \"msgtype\": \"" + vo.getMsgType() + "\",\n" +
                    "    \"image\": {\n" +
                    "        \"base64\": \"" + vo.getImageBase64Value() + "\",\n" +
                    "        \"md5\": \"" + vo.getImageMd5Value() + "\"\n" +
                    "    }\n" +
                    "}";
        } else if (vo.getMsgType().equals("news")) {
            //圖文消息
            vo.setTitle(!Strings.isNullOrEmpty(vo.getTitle()) ? vo.getTitle() : "");
            jsonData = "{\n" +
                    "    \"msgtype\": \"" + vo.getMsgType() + "\",\n" +
                    "    \"news\": {\n" +
                    "       \"articles\" : [\n" +
                    "           {\n" +
                    "               \"title\" : \"" + vo.getTitle() + "\",\n" +
                    "               \"description\" : \"" + vo.getDescription() + "\",\n" +
                    "               \"url\" : \"" + vo.getUrl() + "\",\n" +
                    "               \"picurl\" : \"" + vo.getImageUrl() + "\"\n" +
                    "           }\n" +
                    "        ]\n" +
                    "    }\n" +
                    "}";
        }
        JSONObject jsonObject = SendRequest.sendPost(vo.getWebhookAddress(), jsonData);
    }

c.我將當中涉及到的類都貼出來   QiRobotVo

/**
 * 給企業微信機器人發送消息
 * @Author: tanghh18
 * @Date: 2019/7/5 14:53
 */
public @Data
class QiRobotVo {
    /**
     * 機器人id
     */
     private String robotId;
    /**
     * 機器人名字
     */
    private String robotName;
    /**
     * 當前機器人的webhook地址
     */
    private String webhookAddress;


    /**
     * 消息類型
     */
    private String msgType;

    /**
     * 富文本框裏面的內容
     */
    private String content;
    /**
     * 涉及的人員
     */
    private List<String> memberList;
    /**
     * 電話
     */
    private String mobileList;
    /**
     * 圖片地址
     */
    private String imageUrl;

    /**
     * base64編碼後的值
     */
    private String imageBase64Value;

    /**
     * 圖片md5加密後的值
     */
    private String imageMd5Value;

    /**
     * 發送消息的標題
     */
    private String title;
    /**
     * 發送圖文消息的描述信息
     */
    private String description;
    /**
     * 圖片url地址集合
     */
    private List<String> imageUrlList;
    /**
     * 圖片打開的地址
     */
    private String url;

    /**
     * 消息內容集合
     */
    private List<String> contentList;
    /**
     * 圖片路徑
     */
    private String savePath;
}

d.將圖片地址轉化成base64編碼

 /**
     * 根據圖片地址轉換爲base64編碼字符串
     * @param imgFile
     * @return
     */
    public static String getImageStr(String imgFile) {
        InputStream inputStream = null;
        byte[] data = null;
        try {
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 加密
        Base64.Encoder encoder = Base64.getEncoder();
        return encoder.encodeToString(data);
    }

e.sendRequest

 public static JSONObject sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        JSONObject jsonObject = null;
        String result = "";
        try {
            URL realUrl = new URL(url);
            // 打開和URL之間的連接
            URLConnection conn = realUrl.openConnection();
            // 發送POST請求必須設置如下兩行
            conn.setDoOutput(true);
            conn.setDoInput(true);
//            conn.addRequestProperty("Cookie", "stay_login=1 smid=DumpWzWQSaLmKlFY1PgAtURdV_u3W3beoei96zsXkdSABwjVCRrnnNBsnH1wGWI0-VIflgvMaZAfli9H2NGtJg id=EtEWf1XZRLIwk1770NZN047804");//設置獲取的cookie
            // 獲取URLConnection對象對應的輸出流(設置請求編碼爲UTF-8)
            out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
            // 發送請求參數
            out.print(param);
            // flush輸出流的緩衝
            out.flush();
            // 獲取請求返回數據(設置返回數據編碼爲UTF-8)
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            jsonObject = JSONObject.parseObject(result);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

        return jsonObject;
    }

完成了,最後呢給小夥伴們看一下效果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章