通知神器——java调用钉钉群自定义机器人----Jay

news2024/10/7 13:26:20

其中webhook非常重要,下文详述。点击设置说明可以看相关使用文档,文档链接见本文末尾         

创建群自定义机器人

其中webhook非常重要,下文详述。点击设置说明可以看相关使用文档,文档链接见本文末尾

使用HTTP POST请求发送消息

直接向上文所述的webhook链接发送POST请求已达到自定义机器人向群内发消息的功能

按照文档中所属的参数格式直接向链接发送请求即可,我使用Postman发送请求如下:

 效果如下:

发送其他格式(如:链接消息、markdown、ActionCard)的消息效果如下:

确定你需要哪种消息了吗?如果需要使用,通过这种方式来实现,组织参数还是挺麻烦的,不过我们可以使用sdk来简化操作

使用sdk调用自定义机器人

钉钉服务端API SDK下载

 public static void main(String[] args) throws ApiException {
    final String serverUrl =
        "https://oapi.dingtalk.com/robot/send?access_token=*******************************************************";

    DingTalkClient client = new DefaultDingTalkClient(serverUrl);
    OapiRobotSendRequest request = new OapiRobotSendRequest();

    At at = new At();
    at.setIsAtAll("true");
    request.setAt(at);
		
   // 若上一步isAtAll没有设置true,则根据此处设置的手机号来@指定人
    List<String> mobiles = new ArrayList<>();
    mobiles.add("166********");
    at.setAtMobiles(mobiles);

    // 以下是设置各种消息格式的方法
    sentText(request);
    //    sendLink(request);
    //    sendMarkdown(request);
    //    sendActionCard(request);
    //    sendFeedCard(request);

    OapiRobotSendResponse response = client.execute(request);
    System.out.println(response.getErrmsg());
  }

text文本消息

  public static void sentText(OapiRobotSendRequest request) {
    Text text = new Text();
    text.setContent("sdk demo");

    request.setMsgtype("text");
    request.setText(text);
  }

link链接消息

  public static void sendLink(OapiRobotSendRequest request) {
    Link link = new Link();
    link.setTitle("好消息!好消息!");
    link.setText("本群与百度成功达成合作关系,今后大家有什么不懂的可以直接百度搜索,不用再群里提问浪费时间啦!");
    link.setMessageUrl("https://www.baidu.com");
    link.setPicUrl("http://www.baidu.com/img/bd_logo1.png");

    request.setMsgtype("link");
    request.setLink(link);
  }

markdown消息

  public static void sendMarkdown(OapiRobotSendRequest request) {
    Markdown markdown = new Markdown();
    markdown.setTitle("好消息!好消息!");
    markdown.setText(
        "#### 杭州天气 @156xxxx8827\n> 9度,西北风1级,空气良89,相对温度73%\n\n"
            + "> ![screenshot](https://img2018.cnblogs.com/blog/1775867/201908/1775867-20190823214506246-1471056011.png)\n"
            + "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n");
    
    request.setMsgtype("markdown");
    request.setMarkdown(markdown);
  }

ActionCard消息

  public static void sendActionCard(OapiRobotSendRequest request) {
    Actioncard actioncard = new Actioncard();
    actioncard.setTitle("乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身");
    actioncard.setText(
        "![screenshot](@lADOpwk3K80C0M0FoA) \n"
            + " ### 乔布斯 20 年前想打造的苹果咖啡厅  Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划");
    actioncard.setHideAvatar("0");
    actioncard.setBtnOrientation("1");
    //    actioncard.setSingleTitle("阅读全文");
    //    actioncard.setSingleURL("https://www.baidu.com/");
    List<Btns> btns = new ArrayList<>();
    Btns btn0 = new Btns();
    btn0.setTitle("内容不错");
    btn0.setActionURL("https://www.qq.com/");
    btns.add(btn0);

    Btns btn1 = new Btns();
    btn1.setTitle("不感兴趣");
    btn1.setActionURL("https://www.baidu.com/");
    btns.add(btn1);

    actioncard.setBtns(btns);
    request.setMsgtype("actionCard");
    request.setActionCard(actioncard);
  }

FeedCard消息

类似公众号头条、次条消息

 public static void sendFeedCard(OapiRobotSendRequest request) {
    Feedcard feedcard = new Feedcard();
    List<Links> linksList = new ArrayList<>();

    Links links0 = new Links();
    links0.setTitle("时代的火车向前开1");
    links0.setMessageURL(
        "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI");
    links0.setPicURL("https://www.dingtalk.com/");
    linksList.add(links0);

    Links links1 = new Links();
    links1.setTitle("时代的火车向前开2");
    links1.setMessageURL(
        "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI");
    links1.setPicURL("https://www.dingtalk.com/");
    linksList.add(links1);

    feedcard.setLinks(linksList);

    request.setMsgtype("feedCard");
    request.setFeedCard(feedcard);
  }

demo~~

package com.macro.mall.controller;
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 java.util.Arrays;
//————————————————

public class DingDIngTest {



    public static void main(String[] args) throws ApiException {
       
        // 根据机器人的token获取DingTalkClient
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?access_token=???");

        // 创建请求对象
        OapiRobotSendRequest request = new OapiRobotSendRequest();

        // 文本消息
        request.setMsgtype("text");
        request.setText("1123");
        OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
        // 注意内容中要包含你设置的关键词!
        text.setContent("你好:song");
        request.setText(text);

        // 添加联系方式对象
        OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
        at.setAtMobiles(Arrays.asList("46549618"));
        at.setIsAtAll(true);// @All
        request.setAt(at);

        // 发送
        OapiRobotSendResponse response = client.execute(request);
        System.out.println(response.isSuccess());

    }

}

 demo~~

<dependency>
    <groupId>com.ganshane.specs</groupId>
    <artifactId>dingtalk-sdk</artifactId>
    <version>20210115</version>
</dependency>
<dependency>
    <groupId>com.carrotsearch.thirdparty</groupId>
    <artifactId>simple-xml-safe</artifactId>
    <version>2.7.1</version>
</dependency>
package com.macro.mall.controller;


import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.macro.mall.common.exception.ApiException;
import lombok.SneakyThrows;

import java.util.ArrayList;
import java.util.List;

public class DingDing {


    @SneakyThrows
    public static void main(String[] args) throws ApiException {
        final String serverUrl =
                "https://oapi.dingtalk.com/robot/send?access_token=???";

        DingTalkClient client = new DefaultDingTalkClient(serverUrl);
        OapiRobotSendRequest request = new OapiRobotSendRequest();

        OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
        at.setIsAtAll(true);
        request.setAt(at);

        // 若上一步isAtAll没有设置true,则根据此处设置的手机号来@指定人
        List<String> mobiles = new ArrayList<>();
     
        at.setAtMobiles(mobiles);

        // 以下是设置各种消息格式的方法
        sentText(request);
        sendLink(request);
            sendMarkdown(request);
            sendActionCard(request);
            sendFeedCard(request);

        OapiRobotSendResponse response = client.execute(request);
        System.out.println(response.getErrmsg());
    }

    public static void sentText(OapiRobotSendRequest request) {
        OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
        text.setContent("你好: 123");

        request.setMsgtype("text");
        request.setText(text);
    }

    public static void sendLink(OapiRobotSendRequest request) {
        OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
        link.setTitle("好消息!好消息!");
        link.setText("你好:本群与百度成功达成合作关系,今后大家有什么不懂的可以直接百度搜索,不用再群里提问浪费时间啦!");
        link.setMessageUrl("https://www.baidu.com");
        link.setPicUrl("http://www.baidu.com/img/bd_logo1.png");

        request.setMsgtype("link");
        request.setLink(link);
    }

    public static void sendMarkdown(OapiRobotSendRequest request) {
        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
        markdown.setTitle("好消息!好消息!");
        markdown.setText(
                "你好: #### 杭州天气 @156xxxx8827\n> 9度,西北风1级,空气良89,相对温度73%\n\n"
                        + "> ![screenshot](https://img2018.cnblogs.com/blog/1775867/201908/1775867-20190823214506246-1471056011.png)\n"
                        + "> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n");

        request.setMsgtype("markdown");
        request.setMarkdown(markdown);
    }


    public static void sendActionCard(OapiRobotSendRequest request) {
        OapiRobotSendRequest.Actioncard actioncard = new OapiRobotSendRequest.Actioncard();
        actioncard.setTitle("乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身");
        actioncard.setText(
                "你好: ![screenshot](@lADOpwk3K80C0M0FoA) \n"
                        + " ### 乔布斯 20 年前想打造的苹果咖啡厅  Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划");
        actioncard.setHideAvatar("0");
        actioncard.setBtnOrientation("1");
        //    actioncard.setSingleTitle("阅读全文");
        //    actioncard.setSingleURL("https://www.baidu.com/");
        List<OapiRobotSendRequest.Btns> btns = new ArrayList<>();
        OapiRobotSendRequest.Btns btn0 = new OapiRobotSendRequest.Btns();
        btn0.setTitle("内容不错");
        btn0.setActionURL("https://www.qq.com/");
        btns.add(btn0);

        OapiRobotSendRequest.Btns btn1 = new OapiRobotSendRequest.Btns();
        btn1.setTitle("不感兴趣");
        btn1.setActionURL("https://www.baidu.com/");
        btns.add(btn1);

        actioncard.setBtns(btns);
        request.setMsgtype("actionCard");
        request.setActionCard(actioncard);
    }

    public static void sendFeedCard(OapiRobotSendRequest request) {
        OapiRobotSendRequest.Feedcard feedcard = new OapiRobotSendRequest.Feedcard();
        List<OapiRobotSendRequest.Links> linksList = new ArrayList<>();

        OapiRobotSendRequest.Links links0 = new OapiRobotSendRequest.Links();
        links0.setTitle("你好:时代的火车向前开1");
        links0.setMessageURL(
                "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI");
        links0.setPicURL("https://www.dingtalk.com/");
        linksList.add(links0);

        OapiRobotSendRequest.Links links1 = new OapiRobotSendRequest.Links();
        links1.setTitle("时代的火车向前开2");
        links1.setMessageURL(
                "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI");
        links1.setPicURL("https://www.dingtalk.com/");
        linksList.add(links1);

        feedcard.setLinks(linksList);

        request.setMsgtype("feedCard");
        request.setFeedCard(feedcard);
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何从linux社区下载和合入内核patch?

参考 git - How do I get a linux kernel patch set from the mailing list? - Unix & Linux Stack Exchangehttps://unix.stackexchange.com/questions/80519/how-do-i-get-a-linux-kernel-patch-set-from-the-mailing-list 方法 发现使用b4这个工具非常合适。 下面是…

【MySQL】数据库的查询语言DQL

目录 前言&#xff1a; 一.基本查询 1.1查询多个字段 1.2设置别名 1.3去除字段中重复的值 二.条件查询 2.1条件的种类 2.1.1比较运算符 2.1.2逻辑运算符 三.结尾 前言&#xff1a; 在前面讲完了如何增删改数据表中的记录后&#xff0c;那么如何使用这些数据就成了另一…

chatgpt赋能python:Python如何加断点

Python如何加断点 什么是断点 在程序执行时&#xff0c;开发人员可以设置断点&#xff0c;使得程序在断点处暂停执行&#xff0c;从而方便调试程序。当程序停在断点处时&#xff0c;可以查看变量的值、执行语句等&#xff0c;以找出程序中的错误。 Python加断点的方法 在Py…

chatgpt赋能python:Python中的元组及其自身的特性说明

Python 中的元组及其自身的特性说明 在 Python 中&#xff0c;元组是一组有序的值&#xff0c;可以存储各种不同类型的数据。与列表不同的是&#xff0c;元组是不可变的&#xff0c;一旦创建就不能修改。由于元组不可更改&#xff0c;因此它们的值在创建后是固定的。 由于元组…

C语言之预处理那点事

文章目录 一、程序的翻译和执行环境二、预定义符号的介绍1.预定义符号2.#define3.宏和函数的比较4.条件编译 总结 在C语言中&#xff0c;曾出现各种各样新的标准&#xff0c;有的昙花一现&#xff0c;有的则源远流传。我们这篇来看流传下来的&#xff0c;简化开发者编程和提升性…

FFmpeg音视频处理工具介绍及应用

1 FFmpeg介绍 FFmpeg项目由 Fabrice Bellard在2000年创立。到目前为止&#xff0c;FFmpeg项目的开发者仍然与VLC、MPV、dav1d、x264等多媒体开源项目有着广泛的重叠。Ffmpeg&#xff08;FastForward Mpeg&#xff09;是一款遵循GPL的开源软件&#xff0c;在音视频处理方面表现…

算法刷题-数组-移除元素

27. 移除元素 力扣题目链接 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需…

chatgpt赋能python:Python如何编写优化SEO的软件

Python如何编写优化SEO的软件 作为一种功能强大且易于学习的编程语言&#xff0c;Python已经成为广泛使用的开发工具之一&#xff0c;其用户群体涵盖从初学者到专业开发人员。然而&#xff0c;在Python编写SEO相关软件时&#xff0c;开发人员需要遵循一些最佳实践&#xff0c;…

chatgpt赋能python:Python中如何加空格

Python中如何加空格 Python是一门广泛应用于科学计算、数据分析、人工智能、Web开发等领域的高级编程语言。在Python编程过程中&#xff0c;经常需要使用到空格&#xff0c;以实现程序的格式化和美观&#xff0c;同时也有助于提高代码的可读性和可维护性。本文主要介绍Python中…

人工蜂群算法(Artificial Bee Colony (ABC) Algorithm,附简单案例及详细matlab源码)

作者&#xff1a;非妃是公主 专栏&#xff1a;《智能优化算法》 博客地址&#xff1a;https://blog.csdn.net/myf_666 个性签&#xff1a;顺境不惰&#xff0c;逆境不馁&#xff0c;以心制境&#xff0c;万事可成。——曾国藩 文章目录 专栏推荐一、人工蜂群算法二、伪代码三…

前端vue地图定位并测算当前定位离目标位置距离

前端vue地图定位并测算当前定位离目标位置距离, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?id12974 效果图如下: # #### 使用方法 使用方法 <!-- // 腾讯地图key注册地址&#xff08;针对H5端&#xff0c;manifest.json中web配置&…

【力扣刷题 | 第六天】

目录 前言&#xff1a; 344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; 541. 反转字符串 II - 力扣&#xff08;LeetCode&#xff09; 今天我们进入字符串章节的刷题旅程&#xff0c;希望各位小伙伴可以和我一起坚持下去&#xff0c;一起征服力扣&#xff01; 前言…

chatgpt赋能python:Python如何删除列表中的重复数据

Python如何删除列表中的重复数据 介绍 Python是一种高级编程语言&#xff0c;可用于开发各种类型的应用程序&#xff0c;包括网站&#xff0c;桌面应用程序&#xff0c;数据分析和机器学习。在Python编程中&#xff0c;经常需要对列表中的数据进行操作。有时候&#xff0c;我…

【读书笔记】《蛤蟆先生去看心理医生》- [英] 罗伯特·戴博德

文章目录 第一章 整个人都不太好第二章 挚友前来相助第三章 初见咨询师第四章 抑郁的原因第五章 成长的寓言第六章 探索童年第七章 愤怒的表现第八章 意外访客第九章 秘密协议第十章 午餐聚会第十一章 蛤蟆先生的选择第十二章 说出人生故事第十三章 人生坐标与心理游戏第十四章…

动态规划II (42、53、64、70、72)

CP42 接雨水 题目描述&#xff1a; 学习记录&#xff1a; 虽然脑子里第一个蹦出双指针&#xff0c;但是题目是动态规划&#xff0c;两个混着想&#xff0c;啥也没想出来...不会 1.动态规划&#xff1a;太牛了吧&#xff0c;这个不是从整体去考虑每一块该怎么填&#xff0c;而…

Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差(C++)

Baumer工业相机堡盟工业相机如何使用BGAPISDK的相机图像时间戳计算运行时间以及时间差&#xff08;C&#xff09; Baumer工业相机Baumer工业相机BGAPI SDK和图像时间戳的技术背景Baumer工业相机使用BGAPISDK控制相机数据流的方式1.引用合适的类文件2.使用BGAPISDK获取时间戳的方…

动态规划I (45、55、62、63)

按顺序刷确实效率太低了&#xff0c;今天开始要按顺序的同时也按标题来了&#xff0c;全面加油&#xff01;这种应该以后会更多直接总结题解了&#xff0c;自我学习用&#xff0c;全靠大佬&#xff0c;贴贴&#xff01;&#xff01;含45、55、62、63 CP55 跳跃游戏 题目描述&…

【浅谈DBA职业生涯---误操作篇】

&#x1f448;【上一篇】 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 【下一篇】&#x1f449; &#x1f53b;【&#x1f4a3; 话题引入&#xff1a;请列举你在从事 DBA 生涯中,最难以忘怀的一次误操作】 &#x1f6a9; 该话题覆盖…

MapReduce共享单车练习

MapReduce 本机运行 文章目录 MapReduce 本机运行✅前置工作1. 配置JDK2. 创建Java项目3. 导入所需JAR包 编程实现以下题目1. 统计各个月份共享单车使用的总数2. 统计不同天气情况下共享单车使用的总数3. 统计每个季度共享单车使用的总数4. 统计每个月份的注册数量5. 统计每天1…

【Docker】docker部署前Springboot-vue后端分离项目实战

文章目录 docker 安装jdkdocker 安装mysql通过Docker命令进入Mysql容器内部初始化数据sqlDbx连接查看构建后端镜像查看构建的后端镜像运行后端镜像 docker 安装nginx docker 安装jdk https://jackwei.blog.csdn.net/article/details/110227719 docker search openjdk:8 docke…