Java利用钉钉机器人实现发送群消息

作者:共饮一杯无 时间:2021-06-28 23:37:33 

添加群机器人

可以查看这篇文章:添加机器人到钉钉群 使用命令行工具curl快速验证自定义机器人是否可以正常工作。可以使用如下命令,把对应的链接调整成对应群的webhook地址即可。

curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"嗨,我来啦"}}'

Java请求示例

设置如下方法进行消息通知

/**
    * 通知消息发送到群聊
    * @param webhook 钉钉机器人地址(配置机器人的webhook)
    * @param isAtAll 是否通知所有人
    * @param mobileList 通知具体人的手机号码列表
    * @param content 消息内容
    */
   public static void sendMsgToGroupChat(String webhook,boolean isAtAll,List<String> mobileList,String content){
       try {
           //组装请求内容
           String reqStr = buildReqStr(content, isAtAll, mobileList);
           //推送消息(http请求)
           String result = HttpUtil.post(webhook, reqStr);
           log.info("通知响应结果:{}",result);
       }catch (Exception e){
           log.error("webhook通知失败",e);
       }
   }

/**
    * 组装请求报文(Map封装)
    * @param content 通知内容
    * @param isAtAll 是否@所有人
    * @param mobileList 通知具体人的手机号码
    * @return
    */
   private static String buildReqStr(String content, boolean isAtAll, List mobileList) {

//消息内容
       Map contentMap = Maps.newHashMap();
       contentMap.put("content", content);

//通知人
       Map atMap = Maps.newHashMap();
       //1.是否通知所有人
       atMap.put("isAtAll", isAtAll);
       //2.通知具体人的手机号码列表
       atMap.put("atMobiles", mobileList);

Map reqMap = Maps.newHashMap();
       reqMap.put("msgtype", "text");
       reqMap.put("text", contentMap);
       reqMap.put("at", atMap);

return JSON.toJSONString(reqMap);

}

/**
    * 获取通知消息
    * @return
    */
   private static String getContent() {
       //钉钉机器人消息内容
       String content;
       //通过转码网站http://tool.chinaz.com/Tools/unicode.aspx
       // 选择中文转Unicode把钉钉表情转换成unicode编码,也可以直接用表情对应的中文设置
       String milkyTea = "过来请我喝奶茶[奶茶][流鼻血][流鼻血]\u005b\u6d41\u9f3b\u8840\u005d";
       String NEWLINE = "\n";
       StringBuffer sb = new StringBuffer();
       sb.append("小哥哥,你好!")
               .append(NEWLINE)
               .append(milkyTea);
       content = sb.toString();
       return content;
   }

通过main函数执行调用

public static void main(String[] args) throws ApiException {
       //把webhook设置成对应群的即可
       String webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxx";
       String content = getContent();
       ArrayList<String> mobileList = Lists.newArrayList();
sendMsgToGroupChat(webhook,false,mobileList,content);
   }

可以看到如下通知效果:

Java利用钉钉机器人实现发送群消息

添加通知人后效果如下:

Java利用钉钉机器人实现发送群消息

官方SDK请求示例

如果只是为了发起一个简单的消息通知上述动态配置后足够使用,要使用更多消息类型推荐使用官方SDK进行消息发送,毕竟官方进行了一层封装,使用起来会更方便些。

pom引入官方SDK

<dependency>
           <groupId>com.aliyun</groupId>
           <artifactId>alibaba-dingtalk-service-sdk</artifactId>
           <version>2.0.0</version>
       </dependency>

群消息通知方法

可以通过如下案例实现对应消息的通知。自定义机器人支持文本 (text)、链接 (link)、markdown(markdown)、ActionCard、FeedCard消息类型。

/**
    * 通知SDK消息发送到群聊
    * @param webhook 钉钉机器人地址(配置机器人的webhook)
    *
    */
   public static void sendMsgToGroupChatSDK(String webhook) throws ApiException {
       DingTalkClient client = new DefaultDingTalkClient(webhook);
       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("176xxx"));
       // isAtAll类型如果不为Boolean,请升级至最新SDK
       at.setIsAtAll(true);
       at.setAtUserIds(Arrays.asList("109929","32099"));
       request.setAt(at);

//md格式消息
       request.setMsgtype("markdown");
       OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
       markdown.setTitle("杭州天气");
       markdown.setText("#### 杭州天气 @156xxxx8827\n" +
               "> 9度,西北风1级,空气良89,相对温度73%\n\n" +
               "> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n"  +
               "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n");
       request.setMarkdown(markdown);

//链接
       request.setMsgtype("link");
       OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
       link.setMessageUrl("https://blog.csdn.net/qq_35427589");
       link.setPicUrl("");
       link.setTitle("时代的火车向前开");
       link.setText("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
       request.setLink(link);

OapiRobotSendResponse response = client.execute(request);
       log.info("执行结果回执{}",JSON.toJSONString(response));
   }

来源:https://juejin.cn/post/7138584705523253284

标签:Java,钉钉,机器人,群消息
0
投稿

猜你喜欢

  • C#使用Unity实现剪刀石头布游戏

    2023-03-01 06:30:18
  • Java并发包之CopyOnWriteArrayList类的深入讲解

    2022-10-06 09:15:21
  • 使用aop实现全局异常处理

    2021-06-13 12:47:35
  • Unity C#打包AssetBundle与场景详解

    2022-02-19 14:04:13
  • Android onClick方法与setOnClickListener方法对比

    2022-02-09 22:21:40
  • Java String转换时为null的解决方法

    2022-08-25 08:16:00
  • Java数据结构中堆的向下和向上调整解析

    2022-01-02 07:34:58
  • C#使用DLLImport调用外部DLL的方法

    2022-07-17 04:41:18
  • Java对象传递与返回的细节问题详析

    2023-04-07 16:42:50
  • spring boot中多线程开发的注意事项总结

    2022-03-14 19:20:07
  • SpringBoot中如何统一接口返回与全局异常处理详解

    2021-08-11 02:22:35
  • Java利用读写的方式实现音频播放代码实例

    2022-08-21 15:38:52
  • RxJava中多种场景的实现总结

    2023-01-09 05:39:02
  • mybatis中resultMap 标签的使用教程

    2022-01-15 11:19:42
  • 鉴权认证+aop+注解+过滤feign请求的实例

    2022-06-05 14:25:34
  • 生产消费者模式实现方式和线程安全问题代码示例

    2023-11-26 19:44:17
  • maven手动上传jar包示例及图文步骤过程

    2023-11-13 22:10:57
  • android 选项卡(TabHost)如何放置在屏幕的底部

    2023-07-09 21:19:59
  • Java基础学习之IO流应用案例详解

    2022-09-11 17:04:42
  • spring cloud 阿波罗 apollo 本地开发环境搭建过程

    2023-01-25 21:04:50
  • asp之家 软件编程 m.aspxhome.com