SDK package staple robot tool warning message

1 group robot

    (1) Introduction The
    support group chat within the group nails robot, a robot similar to QQ group, you can send weather, jokes that;
    nailing robot group supports custom robots, robots do allow developers to manage warning message notification;
    (2) limit

  • 6 Robot / each group, 20 message / min
  • It does not support answer mode, do only group message notification

    (3) message format
    supports plain text messages, links, news, markdown format ( note that only part of the syntax supported ) text, images and links to support FeedCard, ActionCard other news
    (4) official developer documentation
    https: //open-doc.dingtalk. com / microapp / serverapi3 / iydd5h

2 custom robot

2.1 Creating a robot

    Custom robot depends on the nail group, first create nail group (main group have permission to view access_token), webhook get information, send a request via the network, nails open platform response to the request to send warning messages to a specified group access_token of nails
    nail nail way to create group is in the chat page, click on the "+" to add another person to create a nail group.
Here Insert Picture Description

Figure 2-1. Nails Group created map

    After entering the base, open the settings, select group of robots, create a custom robot, a robot created to improve the basic information, the robot automatically push a welcome message to the nail base.
Here Insert Picture Description

Figure 2-2. Add a custom robot map

Here Insert Picture Description

Figure 2-3. Creating a custom robot map

Here Insert Picture Description

Figure 2-4. Welcome sonogram group robot

    View group robot, the robot can see a list of currently existing nail group, the robot can manage to add, remove, robots, robot edit an existing name, avatar; group which supports the robot to push and close the open message specified webhook reset function webhook. access_token that can be understood as identity, the identity of the designated group, also identifies the rights group robot has pushed the message.

Here Insert Picture Description

Figure 2-5 The group robot management page Figure

2.2 Postman send a message through the presentation webhook

    As used herein, the analog Postman request, as shown, plain text message transmission, the group will receive warning message staple robot.
Here Insert Picture Description

FIG 2-6. Postman plain text messages sent by webhook FIG.


Figure 2-7. Swarm robots to send messages successfully map

3 Create a project to introduce nail Android SDK

    Native development environment win10, nailing group has been created, and get to webhook, IDEA used with this unit, download the Java SDK

3.1 Maven project introduced SDK

    (1) Java SDK Download
    Download SDK: https://open-doc.dingtalk.com/microapp/faquestions/vzbp02 , official support for the following versions, as used herein Java SDK;

  • JAVA version
  • PHP version
  • .NET Edition
  • Python version
        unzip official directly lay the jar package, including source package

    (2) create Maven project introduced Jar
    Maven project introduced package to lay the jar: jar package native address: D: \ download \ dingtalk- sdk-java \ taobao-sdk-java-auto_1479188381469-20190704.jar

  • mvn command

    mvn install:install-file
    -Dfile=D:\download\dingtalk-sdk-java\taobao-sdk-java-auto_1479188381469-20190704.jar -DgroupId=com.dingtalk -DartifactId=com-dingtalk-api
    -Dversion=1.0.0 -Dpackaging=jar

  • Parameter Description

    -Dfile jar path where packets need to be included here jar package name D:. \ Downloads \ dingtalk-SDK-Java \ SDK-Java-taobao-auto_1479188381469-20190704.jar
    DgroupId when introducing the specified groupid jar, can be customized, here com.dingtalk
    -DartifactId artifactId specified when importing JAR, customize, where dingtalk-API-COM
    -Dversion version number specified JAR introduced, can be customized, here 1.0.0
    -Dpackaging specific file types, Since this package is in the form of jar, the jar is here to give

[Image dump outer link failure (img-GQS8mBgB-1562409744840) (https://raw.githubusercontent.com/niaonao/ImageIcon/master/IDEAProject/DingTalk/dingding008.png)]

FIG. 3-1. FIG items introduced SDK

    (3) configuration dependent, if the project does not automatically rely introduced, reload dependence can click reimport

Here Insert Picture Description

Figure 3-2. FIG dependency Reload

3.2 Packaging tools warning message
3.2.1 Tools Description

    Project successful introduction of SDK, SDK support by specifying a custom robot to send group messages in front of a group of instructions to send a robot to support multiple types of messages, also supports message with a link to jump, jump or pictures with links;
    tools to create client examples of end client needs to have the right webhook, is the figure set in the group management page Figure 2-5. swarm robots can view or reset the hook identity.

    /**
     * 钉钉群设置 webhook, 支持重置
     */
    private static final String ACCESS_TOKEN = "https://oapi.dingtalk.com/robot/send?access_token=36ba0cc82d41d3c6aaef7d2c09c9f14de0727069edbc498b5c9d88edb72db227";
    /**
     * 消息类型
     */
    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";
    /**
     * 客户端实例
     */
    public static DingTalkClient client = new DefaultDingTalkClient(ACCESS_TOKEN);

    I.e. the package util tools RobotHelperUtil.java, wherein the package has a test unit testing

Here Insert Picture Description

FIG. 3-3. FIG project structure

3.3.2 Test to send a message

    Here Test Method Unit Test sendMessageByMarkdown (), sendMessageByActionCardMulti (), sendMessageByFeedCard () method and the like, the robot will send the group message group, wherein the left side effects title method parameter (contact list page) revealed FIG message content, text It is the real message after entering the base.;

Here Insert Picture Description

Figure 3-4. FIG Unit Test method for transmitting messages

Here Insert Picture Description

FIG 3-5. SendMessageByMarkdown message has been sent successfully FIG.

    Support here to send a message of individual jump, jump to initialize the link comes with three buttons, arranged vertically default button. Click the button to jump to specify the link to view the details.
Here Insert Picture Description

FIG 3-6. SendMessageByActionCardMulti message has been sent successfully FIG.

    Link supports multiple message here sent three link initialization, specify the title and jump maps link; the first link effect is more prominent, this kinda fun.
Here Insert Picture Description

FIG 3-7. SendMessageByFeedCard message has been sent successfully FIG.

3.3 Source Project
  • Tools Code:
package pers.niaonao.dingtalkrobot.util;

import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest ;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;

/**
 * @className: RobotHelperUtil
 * @description: 机器人工具类
 *      每个机器人每分钟最多发送20条
 *      限制6 个机器人/群
 * @author: niaonao
 * @date: 2019/7/6
 **/
@Slf4j
public class RobotHelperUtil {

    /**
     * 钉钉群设置 webhook, 支持重置
     */
    private static final String ACCESS_TOKEN = "https://oapi.dingtalk.com/robot/send?access_token=36ba0cc82d41d3c6aaef7d2c09c9f14de0727069edbc498b5c9d88edb72db227";
    /**
     * 消息类型
     */
    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";

    /**
     * 客户端实例
     */
    public static DingTalkClient client = new DefaultDingTalkClient(ACCESS_TOKEN);

    /**
     * @description: 官方演示示例
     *      title 是消息列表下透出的标题
     *      text 是进入群后看到的消息内容
     *
     * @author: niaonao
     * @date: 2019/7/6
     */
    public static void sdkDemoJava() {
        DingTalkClient client = RobotHelperUtil.client;
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype("text");
        OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
        text.setContent("测试文本消息");
        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("时代的火车向前开");
        link.setText("这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林”。\n" +
                "而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是“红树林");
        request.setLink(link);

        request.setMsgtype("markdown");
        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
        markdown.setTitle("杭州天气");
        markdown.setText("#### 杭州天气 @156xxxx8827\n" +
                "> 9度,西北风1级,空气良89,相对温度73%\n\n" +
                "> ![screenshot](https://gw.alipayobjects.com/zos/skylark-tools/public/files/84111bbeba74743d2771ed4f062d1f25.png)\n"  +
                "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n");
        request.setMarkdown(markdown);
        try {
            client.execute(request);
        } catch (ApiException e) {
            log.error("[ApiException]: 消息发送演示示例, 异常捕获{}", e.getMessage());
        }
    }

    /**
     * @description: 发送普通文本消息
     * @param content   文本消息
     * @param mobileList    指定@ 联系人
     * @param isAtAll       是否@ 全部联系人
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * @author: niaonao
     * @date: 2019/7/6
     */
    public static OapiRobotSendResponse sendMessageByText(String content, List<String> mobileList, boolean isAtAll) {
        if (StringUtils.isEmpty(content)) {
            return null;
        }

        //参数    参数类型    必须  说明
        //msgtype   String  是   消息类型,此时固定为:text
        //content   String  是   消息内容
        //atMobiles Array   否   被@人的手机号(在content里添加@人的手机号)
        //isAtAll   bool    否   @所有人时:true,否则为:false
        OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
        text.setContent(content);
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        if (!CollectionUtils.isEmpty(mobileList)) {
            // 发送消息并@ 以下手机号联系人
            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
            at.setAtMobiles(mobileList);
            at.setIsAtAll(isAtAll ? "true" : "false");
            request.setAt(at);
        }
        request.setMsgtype(RobotHelperUtil.MSG_TYPE_TEXT);
        request.setText(text);

        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = RobotHelperUtil.client.execute(request);
        } catch (ApiException e) {
            log.error("[发送普通文本消息]: 发送消息失败, 异常捕获{}", e.getMessage());
        }
        return response;
    }

    /**
     * @description: 发送link 类型消息
     * @param title 消息标题
     * @param text  消息内容
     * @param messageUrl     点击消息后跳转的url
     * @param picUrl    插入图片的url
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * @author: niaonao
     * @date: 2019/7/6
     */
    public static OapiRobotSendResponse sendMessageByLink(String title, String text, String messageUrl, String picUrl) {
        if (!DataValidUtil.checkNotEmpty(title, text, messageUrl)) {
            return null;
        }
        //参数    参数类型    必须  说明
        //msgtype   String  是   消息类型,此时固定为:link
        //title String  是   消息标题
        //text  String  是   消息内容。如果太长只会部分展示
        //messageUrl    String  是   点击消息跳转的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(RobotHelperUtil.MSG_TYPE_LINK);
        request.setLink(link);

        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = RobotHelperUtil.client.execute(request);
        } catch (ApiException e) {
            log.error("[发送link 类型消息]: 发送消息失败, 异常捕获{}", e.getMessage());
        }
        return response;
    }


    /**
     * @description: 发送Markdown 编辑格式的消息
     * @param title 标题
     * @param markdownText  支持markdown 编辑格式的文本信息
     * @param mobileList    消息@ 联系人
     * @param isAtAll   是否@ 全部
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * @author: niaonao
     * @date: 2019/7/6
     */
    public static OapiRobotSendResponse sendMessageByMarkdown(String title, String markdownText, List<String> mobileList, boolean isAtAll) {
        if (!DataValidUtil.checkNotEmpty(title, markdownText)) {
            return null;
        }
        //参数    类型  必选  说明
        //msgtype   String  是   此消息类型为固定markdown
        //title String  是   首屏会话透出的展示内容
        //text  String  是   markdown格式的消息
        //atMobiles Array   否   被@人的手机号(在text内容里要有@手机号)
        //isAtAll   bool    否   @所有人时:true,否则为:false
        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
        markdown.setTitle(title);
        markdown.setText(markdownText);

        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(RobotHelperUtil.MSG_TYPE_MARKDOWN);
        request.setMarkdown(markdown);
        if (!CollectionUtils.isEmpty(mobileList)) {
            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
            at.setIsAtAll(isAtAll ? "true" : "false");
            at.setAtMobiles(mobileList);
            request.setAt(at);
        }

        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = RobotHelperUtil.client.execute(request);
        } catch (ApiException e) {
            log.error("[发送link 类型消息]: 发送消息失败, 异常捕获{}", e.getMessage());
        }
        return response;
    }

    /**
     * @description: 整体跳转ActionCard类型的消息发送
     * @param title 消息标题, 会话消息会展示标题
     * @param markdownText  markdown格式的消息
     * @param singleTitle   单个按钮的标题
     * @param singleURL 单个按钮的跳转链接
     * @param btnOrientation    是否横向排列(true 横向排列, false 纵向排列)
     * @param hideAvatar    是否隐藏发消息者头像(true 隐藏头像, false 不隐藏)
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * @author: niaonao
     * @date: 2019/7/6
     */
    public static OapiRobotSendResponse sendMessageByActionCardSingle(String title, String markdownText, String singleTitle, String singleURL, boolean btnOrientation, boolean hideAvatar) {
        if (!DataValidUtil.checkNotEmpty(title, markdownText)) {
            return null;
        }
        //参数    类型  必选  说明
        //    msgtype   string  true    此消息类型为固定actionCard
        //    title string  true    首屏会话透出的展示内容
        //    text  string  true    markdown格式的消息
        //    singleTitle   string  true    单个按钮的方案。(设置此项和singleURL后btns无效)
        //    singleURL string  true    点击singleTitle按钮触发的URL
        //    btnOrientation    string  false   0-按钮竖直排列,1-按钮横向排列
        //    hideAvatar    string  false   0-正常发消息者头像,1-隐藏发消息者头像
        OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard();
        actionCard.setTitle(title);
        actionCard.setText(markdownText);
        actionCard.setSingleTitle(singleTitle);
        actionCard.setSingleURL(singleURL);
        // 此处默认为0
        actionCard.setBtnOrientation(btnOrientation ? "1" : "0");
        // 此处默认为0
        actionCard.setHideAvatar(hideAvatar ? "1" : "0");

        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(RobotHelperUtil.MSG_TYPE_ACTION_CARD);
        request.setActionCard(actionCard);
        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = RobotHelperUtil.client.execute(request);
        } catch (ApiException e) {
            log.error("[发送ActionCard 类型消息]: 整体跳转ActionCard类型的发送消息失败, 异常捕获{}", e.getMessage());
        }
        return response;
    }

    /**
     * @description: 独立跳转ActionCard类型 消息发送
     * @param title 标题
     * @param markdownText  文本
     * @param btns  按钮列表
     * @param btnOrientation    是否横向排列(true 横向排列, false 纵向排列)
     * @param hideAvatar    是否隐藏发消息者头像(true 隐藏头像, false 不隐藏)
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * @author: niaonao
     * @date: 2019/7/6
     */
    public static OapiRobotSendResponse sendMessageByActionCardMulti(String title, String markdownText, List<OapiRobotSendRequest.Btns> btns, boolean btnOrientation, boolean hideAvatar) {
        if (!DataValidUtil.checkNotEmpty(title, markdownText) || CollectionUtils.isEmpty(btns)) {
            return null;
        }
        //参数    类型  必选  说明
        //msgtype   string  true    此消息类型为固定actionCard
        //title string  true    首屏会话透出的展示内容
        //text  string  true    markdown格式的消息
        //btns  array   true    按钮的信息:title-按钮方案,actionURL-点击按钮触发的URL
        //btnOrientation    string  false   0-按钮竖直排列,1-按钮横向排列
        //hideAvatar    string  false   0-正常发消息者头像,1-隐藏发消息者头像
        OapiRobotSendRequest.Actioncard actionCard = new OapiRobotSendRequest.Actioncard();
        actionCard.setTitle(title);
        actionCard.setText(markdownText);
        // 此处默认为0
        actionCard.setBtnOrientation(btnOrientation ? "1" : "0");
        // 此处默认为0
        actionCard.setHideAvatar(hideAvatar ? "1" : "0");

        actionCard.setBtns(btns);

        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(RobotHelperUtil.MSG_TYPE_ACTION_CARD);
        request.setActionCard(actionCard);
        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = RobotHelperUtil.client.execute(request);
        } catch (ApiException e) {
            log.error("[发送ActionCard 类型消息]: 独立跳转ActionCard类型发送消息失败, 异常捕获{}", e.getMessage());
        }
        return response;
    }

    /** 
     * @description: 发送FeedCard类型消息
     * @param links
     * @return: com.dingtalk.api.response.OapiRobotSendResponse
     * @author: niaonao
     * @date: 2019/7/6
     */
    public static OapiRobotSendResponse sendMessageByFeedCard(List<OapiRobotSendRequest.Links> links) {
        if (CollectionUtils.isEmpty(links)) {
            return null;
        }

        //msgtype   string  true    此消息类型为固定feedCard
        //title string  true    单条信息文本
        //messageURL    string  true    点击单条信息到跳转链接
        //picURL    string  true    单条信息后面图片的URL
        OapiRobotSendRequest.Feedcard feedcard = new  OapiRobotSendRequest.Feedcard();
        feedcard.setLinks(links);
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype(RobotHelperUtil.MSG_TYPE_FEED_CARD);
        request.setFeedCard(feedcard);
        OapiRobotSendResponse response = new OapiRobotSendResponse();
        try {
            response = RobotHelperUtil.client.execute(request);
        } catch (ApiException e) {
            log.error("[发送ActionCard 类型消息]: 独立跳转ActionCard类型发送消息失败, 异常捕获{}", e.getMessage());
        }
        return response;
    }

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

Guess you like

Origin www.cnblogs.com/niaonao/p/11145065.html