精华内容
下载资源
问答
  • 钉钉自定义机器人开发

    万次阅读 2020-10-22 09:40:03
    关于钉钉自定义机器人的开发流程,其官网有全面的解释,就不作赘述,我仅说明一下我发信的问题。章节地址如下: https://ding-doc.dingtalk.com/document#/org-dev-guide/qf2nxq 测试机器人发送消息 其官网中...

    前言 

    关于钉钉自定义机器人的开发流程,其官网有全面的解释,就不作赘述。章节地址如下:

    https://ding-doc.dingtalk.com/document#/org-dev-guide/qf2nxq

    本篇博客主要目的就是补充一下前端通过AJAX()发送请求数据的方法,对curl发送消息的方式进行整理。

     

    测试机器人发送消息

    其官网中详细介绍了三种测试发送消息的方法,分别是curl 、Java程序、PHP程序。在SDK环境配置章节(SDK请求示例)中对Python程序、.NET程序发送消息的方法也有简要的说明。

    上述方法都需要添加对应的依赖,添加SDK环境配置章节(SDK请求示例)地址如下:https://ding-doc.dingtalk.com/doc#/faquestions/vzbp02

    其中,curl的请求方式似乎并没有用,我尝试过修改但都没有成功,希望有请求成功的大佬发表一下看法。

     

    AJAX测试发送消息

    前端通过AJAX发送钉钉消息的方式在官网中并没有提及,因此,写本篇博客补充一下。

    需要说明,该方法需要浏览器是跨域的,不然会报错。完整的HTML页面代码如下。

    <!DOCTYPE html>
    <html>
    <head>
        <title>ajax发送钉钉消息</title>
    	<script src="https://s3.pstatp.com/cdn/expire-1-M/jquery/3.3.1/jquery.min.js"></script>
    	<script>
    		$(function(){
    			console.log("=== start ===");
    			$.ajax({
    				url:'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx',
    				type:"POST",
    				beforeSend:function (xhr){
    					xhr.setRequestHeader('Content-Type', 'application/json');
    				},
    				data:JSON.stringify({"msgtype": "text","text": {"content": "Hello World! ---大话家"}}), 
    				success:function (res){
    					console.log("=== success ===");
    					console.log(res); 
    				},
    				error:function (err){
    					console.log("=== error ===");
    					console.log(err); 
    				}
    			});
    		});
    		console.log("=== end ===");
    </script>
    </head>
    <body>
    <h1>钉钉机器人消息发送中。。。</h1>
    </body>
    </html>

     

    展开全文
  • 钉钉自定义机器人

    万次阅读 2019-06-02 14:22:57
    项目中需要设置服务报警提醒的功能,就选择了钉钉群的自定义机器人,来实现这个功能。钉钉支持多种语言,本篇demo主要是使用Java 一,开启钉钉机器人功能 选择自定义机器人 开启自定义机器人功能,获取...

          项目中需要设置服务报警提醒的功能,就选择了钉钉群的自定义机器人,来实现这个功能。钉钉支持多种语言,本篇demo主要是使用Java

    一,开启钉钉机器人功能

    选择自定义机器人

    开启自定义机器人功能,获取webhook链接

    可以点击设置说明,查看钉钉自定义机器人文档。

    二,如何使用钉钉自定义机器人

    使用群自定义机器人支持两种方式,第一种是下载SDK,直接使用client来调用;第二种是直接调用钉钉提供的http接口,发起post请求,获取机器人提醒,本篇主要学习的是http调用接口方式,主要思路如下。

     1.开启机器人之后,会获取一个webhook链接:

    https://oapi.dingtalk.com/robot/send?access_token=XXXXXXX

    2.查看钉钉自定义机器人的官方文档,调用相关接口即可。

    自定义机器人官网文档:https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq

    3.使用自定义机器人

     (1)发送http请求

    获取到webhook地址之后,用户可以向这个地址发送 http请求,即可实现向群组发送消息。

    注意,发起post请求后,必须将自符编码设置为UTF-8。

    (2)消息类型

        当前自定义机器人支持文本(text),链接(link),markdown(markdown),ActionCard,FeedCard消息类型,我们可以根据自己的业务场景来使用不同的方式。

    (3)自定义接人发送消息时候,可以通过手机号,指定被@人的列表,即可设置@所有人,也可以指定@某个人。

    三,使用demo

       1.baseDingEntity

    public abstract class DingBaseVo {
    
        public String msgtype;
    }
    

    2.text方法

    @Data
    @NoArgsConstructor
    public class DingTextVo extends DingBaseVo {
    
    
        private Map text;
        private Map at;
    
        @Builder
        public DingTextVo(String content, Boolean atAll, String mobiles) {
            msgtype = "text";
            text = new HashMap();
            HashMap contentMap = new HashMap();
            contentMap.put("content", content);
            text = contentMap;
            at = new HashMap();
            if (StringUtils.isNotEmpty(mobiles)) {
                String[] mobileArray = mobiles.split(",");
                HashMap atMap = new HashMap();
                atMap.put("atMobiles", mobileArray);
                atMap.put("isAtAll", atAll);
                at = atMap;
            }
        }
    }
    

    3.link方式

    @Data
    @NoArgsConstructor
    public class DingLinkVo extends DingBaseVo {
    
        private HashMap link;
        
        @Builder
        public DingLinkVo(String messageUrl, String picUrl, String title, String text) {
            this.msgtype = "link";
            this.link = new HashMap();
            link.put("messageUrl", messageUrl);
            link.put("picUrl", picUrl);
            link.put("title", title);
            link.put("text", text);
        }
    }

    4.测试调用

     /**
         * link方式
         *
         */
        public void linkNotice(DingLinkVo dingLinkVo) {
    
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<DingLinkVo> responseResult = restTemplate.postForEntity(webHook_token, dingLinkVo, DingLinkVo.class);
            if (responseResult.getStatusCode() != HttpStatus.OK) {
                logger.info("钉钉发送失败,信息是:{}", responseResult);
            }
        }
    
        /**
         * text方式
         *
         */
        public void textNotice(DingBaseVo baseVo) {
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<DingTextVo> responseResult = restTemplate.postForEntity(webHook_token, baseVo, DingTextVo.class);
            if (responseResult.getStatusCode() != HttpStatus.OK) {
                logger.info("钉钉通知发送失败,信息是:{}", responseResult);
            }
        }

    5. 测试用例

     @Test
        public void testTextDing() {
            String content = "今天是个好日子,心想的事儿都能成~";
            Boolean atAll = false;
            String mobiles = "11111111111";
            DingTextVo textVo = DingTextVo.builder().content(content).atAll(atAll).mobiles(mobiles).build();
    
            logger.info("结果是:{}", JsonUtil.toJson(textVo));
            dingTalkNotice.textNotice(textVo);
        }
    
    
        @Test
        public void testLinkDing() {
    
            String messageUrl = "https://www.dingtalk.com/";
            String picUrl = "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1802563968,897623865&fm=26&gp=0.jpg";
            String title = "时代的火车向前开";
            String text = "这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林“";
    
            DingLinkVo dingLinkVo = DingLinkVo.builder().messageUrl(messageUrl).picUrl(picUrl).title(title).text(text)
                    .build();
            logger.info("testLinkDing 参数是:{}", JsonUtil.toJson(dingLinkVo));
            dingTalkNotice.linkNotice(dingLinkVo);
        }

     

    四,其他demo小例子

     @Test
        public void linkNotice() {
    
            HashMap message = new HashMap();
            message.put("msgtype", "link");
    
            HashMap map = new HashMap();
            map.put("messageUrl", "https://www.dingtalk.com/");
            map.put("picUrl", "https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1802563968,897623865&fm=26&gp=0.jpg");
            map.put("title", "时代的火车向前开");
            map.put("text", "这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林“");
            message.put("link", map);
            String jsonMessage = JsonUtil.toJson(message);
            logger.info("Ding请求参数是:{}", jsonMessage);
    
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<Map> responseResult = restTemplate.postForEntity(dingApiUrl, message, Map.class);
            if (responseResult.getStatusCode() != org.springframework.http.HttpStatus.OK) {
                logger.info("error");
            }
        }

     httpClient方法访

    参考博客:https://blog.csdn.net/bc_aptx4869/article/details/80860358

     /**
         * httpClient方式调用
         */
        @Test
        public void testDingWarning() {
            HashMap contentMap = new HashMap();
            contentMap.put("content", "我是钉钉小可爱");
    
            HashMap param = new HashMap();
            param.put("msgtype", "text");
            param.put("text", contentMap);
    
            HttpClient httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(dingApiUrl);
            httpPost.addHeader("Content-Type", "application/json; charset=utf-8");
            String resultParam = JSONObject.toJSONString(param);
            StringEntity se = new StringEntity(resultParam, "utf-8");
            httpPost.setEntity(se);
    
            try {
                HttpResponse response = httpClient.execute(httpPost);
                logger.info("返回值是:{}", response);
                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                    String result = EntityUtils.toString(response.getEntity(), "utf-8");
                    logger.info("错误信息是:{}", result);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

     小结:

           钉钉自定义机器人,主要是为了服务器警报或者业务使用的,十分的方便。除了这个机器人了,最近看钉钉的官方文档,还有一些其他的功能机器人,比如天气预报,考勤提醒等挺好玩的,接下来继续研究下别的。

    展开全文
  • 一、钉钉群自定义机器人介绍钉钉群机器人是钉钉群的一个高级扩展功能,然而使用起来却非常简单,只有注册一个钉钉账号即可,就可以将第三方服务的信息聚合到钉钉群中,实现信息的自动化同步,例如:通过聚合Github、...

    一、钉钉群自定义机器人介绍

    钉钉群机器人是钉钉群的一个高级扩展功能,然而使用起来却非常简单,只有注册一个钉钉账号即可,就可以将第三方服务的信息聚合到钉钉群中,实现信息的自动化同步,例如:通过聚合Github、Gitlab等源码管理服务,实现源码更新同步;通过聚合Trello、JIRA等项目协调服务,实现项目信息同步;同事,支持Webhook协议的自定义接入,支持更多可能性,例如:将运维报警提醒、自动化测试的结果报告提醒、工作、生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日…)等等的提醒,通过自定义机器人聚合到钉钉中。

    目前自定义机器人支持文本(text)、链接(link)、markdown三种消息格式、五种消息类型,详细信息请参考自定义机器人官方文档

    二、安装使用

    这么好用的功能,只要在群中添加好机器人,得到Webhoo地址,在命令行终端马上就可以一睹为快:

    curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \

    -H 'Content-Type: application/json' \

    -d '

    {"msgtype": "text",

    "text": {

    "content": "我就是我, 是不一样的烟火"

    }

    }'

    由于各种消息调用,官方只提供Java语言的封装,平时使用Python比较多,为了更方便平时自动化项目的使用,周末花了点时间用Python语言对各种消息类型进行了一一封装,代码已开源在GitHub上,同时也上传了PyPI。

    1、项目源码地址如下:DingtalkChatbot

    2、安装命令如下:

    pip install DingtalkChatbot

    3、支持功能如下:

    - 支持Text消息;

    - 支持Link消息;

    - 支持Markdown消息;

    - 支持ActionCard消息;

    - 支持消息发送失败时自动通知;

    - 支持Python2、Python3;

    三、各消息类型使用示例

    from dingtalkchatbot.chatbot import DingtalkChatbot

    # WebHook地址

    webhook = 'https://oapi.dingtalk.com/robot/send?access_token=这里填写自己钉钉群自定义机器人的token'

    # 初始化机器人小丁

    xiaoding = DtalkChatbot(webhook)

    # [email protected]

    xiaoding.send_text(msg='我就是小丁,小丁就是我!', is_at_all=True)

    # [email protected]

    at_mobiles = ['这里填写需要提醒的用户的手机号码,字符串或数字都可以']

    xiaoding.send_text(msg='我就是小丁,小丁就是我!', at_mobiles=at_mobiles)

    # Link消息

    xiaoding.send_link(title='万万没想到,某小璐竟然...', text='故事是这样子的...', message_url='http://www.kwongwah.com.my/?p=454748", pic_url="https://pbs.twimg.com/media/CEwj7EDWgAE5eIF.jpg')

    # [email protected]

    xiaoding.send_markdown(title='氧气文字', text='#### 广州天气\n'

    '> 9度,西北风1级,空气良89,相对温度73%\n\n'

    '> ![美景](http://www.sinaimg.cn/dy/slidenews/5_img/2013_28/453_28488_469248.jpg)\n'

    '> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n',

    is_at_all=True)

    # [email protected]

    xiaoding.send_markdown(title='氧气文字', text='#### 广州天气 @用户手机号\n'

    '> 9度,西北风1级,空气良89,相对温度73%\n\n'

    '> ![美景](http://www.sinaimg.cn/dy/slidenews/5_img/2013_28/453_28488_469248.jpg)\n'

    '> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n',

    at_mobiles=at_mobiles)

    # FeedCard消息类型

    feedlink1 = FeedLink(title="氧气美女", message_url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")

    feedlink2 = FeedLink(title="氧眼美女", message_url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")

    feedlink3 = FeedLink(title="氧神美女", message_url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")

    links = [feedlink1.get_data(), feedlink2.get_data(), feedlink3.get_data()]

    xiaoding.send_feed_card(links)

    # ActionCard整体跳转消息类型

    btns1 = [{"title": "查看详情", "actionURL": "https://www.dingtalk.com/"}]

    actioncard1 = ActionCard(title='万万没想到,竟然...',

    text='![选择](http://www.songshan.es/wp-content/uploads/2016/01/Yin-Yang.png) \n### 故事是这样子的...',

    btns=btns1,

    btn_orientation=1,

    hide_avatar=1)

    xiaoding.send_action_card(actioncard1)

    # ActionCard独立跳转消息类型(双选项)

    btns2 = [{"title": "支持", "actionURL": "https://www.dingtalk.com/"}, {"title": "反对", "actionURL": "http://www.back china.com/news/2018/01/11/537468.html"}]

    actioncard2 = ActionCard(title='万万没想到,竟然...',

    text='![选择](http://www.songshan.es/wp-content/uploads/2016/01/Yin-Yang.png) \n### 故事是这样子的...',

    btns=btns2,

    btn_orientation=1,

    hide_avatar=1)

    xiaoding.send_action_card(actioncard2)

    # ActionCard独立跳转消息类型(列表选项)

    btns3 = [{"title": "支持", "actionURL": "https://www.dingtalk.com/"}, {"title": "中立", "actionURL": "https://www.dingtalk.com/"}, {"title": "反对", "actionURL": "https://www.dingtalk.com/"}]

    actioncard3 = ActionCard(title='万万没想到,竟然...',

    text='![选择](http://www.songshan.es/wp-content/uploads/2016/01/Yin-Yang.png) \n### 故事是这样子的...',

    btns=btns3,

    btn_orientation=1,

    hide_avatar=1)

    xiaoding.send_action_card(actioncard3)

    更多使用场景,尽情展开想象吧…

    以上这篇钉钉群自定义机器人消息Python封装的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    展开全文
  • 纯文本查看 复制代码# -*- coding: utf-8 -*-import requestsimport jsonimport time#下面是解密用到的模块import hmacimport hashlibimport base64import urllib.parsedef qianming(): #钉钉开启自定义机器人的...

    [Python] 纯文本查看 复制代码# -*- coding: utf-8 -*-

    import requests

    import json

    import time

    #下面是解密用到的模块

    import hmac

    import hashlib

    import base64

    import urllib.parse

    def qianming(): #钉钉开启自定义机器人的安全设置,签名验算

    timestamp = str(round(time.time() * 1000))

    secret = '?????????????????????????????????????' #填你的秘钥

    secret_enc = secret.encode('utf-8')

    string_to_sign = '{}\n{}'.format(timestamp, secret)

    string_to_sign_enc = string_to_sign.encode('utf-8')

    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()

    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

    url = '????????????????????????????????????????????' #填你的webhook

    webhook = "{}×tamp={}&sign={}".format(url,timestamp,sign)

    return webhook #组合解密完的链接

    def gou():

    req = requests.get('https://v1.alapi.cn/api/dog?format=text')

    return req.text #生成舔狗日记

    def tianqi():

    req = requests.get('http://wthrcdn.etouch.cn/weather_mini?citykey=101210805').text #这个101210805是城市代码

    data = json.loads(req)

    qihou = data['data']['forecast'][0]['type'] #筛选只要,当天天气,,,,用于舔狗日记的晴。这些

    return qihou #生成天气

    def dingmessage():

    sj = time.strftime('%H:%M:%S',time.localtime(time.time())) #发布时间

    day = time.strftime('%m月%d日 %H:%M',time.localtime(time.time())) #舔狗日记的时间

    if day[0] == '0': #让月保留一位,更好看吧。

    day = day[1:]

    qihou = tianqi() #调用天气

    tiangou = gou() #调用舔狗

    # 请求的URL,WebHook地址

    webhook = qianming() #用上面解密完的链接

    #构建请求头部

    header = {

    "Content-Type": "application/json",

    "Charset": "UTF-8"

    }

    message = {

    "msgtype": "markdown",

    "markdown": {

    "title":"营养快线",

    "text": "#### {} {} \n> {}\n> ![screenshot](https://api.ixiaowai.cn/api/api.php/{})\n> ###### {}发布 [我愿做一辈子舔狗](https://www.baidu.com/) \n".format(day,qihou,tiangou,time.time(),sj)

    }, #后面的那个time.time是放这的,是为了防止图片重复,接口里写了,重复的话可以在后面随机加任意字符,就直接用time了

    "at": { #设置要不要@人,我没弄,这个删了也可以。

    "atMobiles": [

    ],

    "isAtAll": False

    }

    }

    #对请求的数据进行json封装

    message_json = json.dumps(message)

    #发送请求

    info = requests.post(url=webhook,data=message_json,headers=header)

    print(info.text) #打印返回,errmsg是ok就是发送成功。否则是失败,这个我也不知道、

    if __name__=="__main__":

    while 1:

    dingmessage()

    time.sleep(1200) #你无聊可以写成软件,然后开机运行,然后每隔20分钟就发送一次。

    展开全文
  • 参考:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq点击头像,进入机器人管理 python代码:import timeimport hmacimport hashlibimport base64import urllib.parseimport jsonimport requeststimestamp =...
  • 1.添加自定义机器人2.编写python代码请求钉钉机器人所给的webhook钉钉自定义机器人官方文档安全方式使用加签的方式:第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 ...
  • 一、钉钉群自定义机器人介绍 钉钉群机器人是钉钉群的一个高级扩展功能,然而使用起来却非常简单,只有注册一个钉钉账号即可,就可以将第三方服务的信息聚合到钉钉群中,实现信息的自动化同步,例如:通过聚合Github...
  • 前言:由于公司使用钉钉,之前告警都是使用邮箱,但是这种协同效率比较低,所以调用钉钉机器人来实现实时告警。创建机器人:创建钉钉群,然后添加群机器人。python代码如下:#1、导包import jsonimport requests#2、...
  • 钉钉自定义机器人使用 如何获取自定义机器人地址,请参考钉钉开放平台,该文档中详细介绍了如何获取自定义机器人以及使用方法.根据该文档,用C#写了一个使用自定义机器人的示例程序. 我之所以想使用钉钉的自定义机器人,...
  • 主要介绍了Python调用钉钉自定义机器人的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • DDRobot - 钉钉自定义机器人消息推送
  • C#实现钉钉自定义机器人消息推送

    千次阅读 2019-01-02 19:53:55
    一、钉钉自定义机器人 钉钉自定义机器人官方文档地址 钉钉自定义机器人是在钉钉群中部署的机器人之一,可以通过自定义聊天内容实时通知群内用户。在开发工作中可以起到服务器安全提醒、部署提醒、操作提醒等作用。...
  • 全新版本——7.00新游记即将更新,DOTA2...斯拉达:冥界亚龙:谜团:自定义原创机器人:程序员、编剧,还有疯狂科学家的福音!现在使用全新的脚本API可以打造属于自己的Dota机器人。将自己的机器人上传到创意工坊让...
  • 钉钉自定义机器人webhook

    千次阅读 2018-10-11 23:50:00
    这篇博文主要讲的是如何进行自定义定时发送一些text类的消息的自定义机器人。添加过程不细讲了。 首先我们需要拿到一个Hook地址,就是你在添加自定义机器人的时候有个,如图: 然后开始编写我们的脚本,我比较...
  • 钉钉自定义机器人发送消息SDK 当需要将系统的一些预警等信息推送到钉钉群时,我们可以通过开启自定义机器人来通过API接口推送钉钉消息。 使用说明 当前自定义机器人支持文本 (text)、链接 (link)、markdown(markdown...
  • 全新版本——7.00新游记即将更新,DOTA2...斯拉达:冥界亚龙:谜团:自定义原创机器人:程序员、编剧,还有疯狂科学家的福音!现在使用全新的脚本API可以打造属于自己的Dota机器人。将自己的机器人上传到创意工坊让...
  • DingTalk Bot是阿里钉钉自定义机器人的Ruby库
  • 获取自定义机器人webhook 步骤一,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像。 步骤二,完成必要的安全设置(至少选择一种),勾选 我已...
  • 虽然钉钉别的功能很鸡肋,但是机器人这个功能还是让人眼前一亮,属于比较极客的功能,它可以将第三方服务的信息聚合到钉钉群中,实现信息的自动化同步,例如:通过聚合Github、Gitlab等源码管理...
  • 钉钉机器人使用 文章目录钉钉机器人使用1 创建一个群组2 进入机器人管理3 进入自定义机器人 1 创建一个群组 2 进入机器人管理 3 进入自定义机器人
  • 钉钉有自定义机器人功能,开发者可以选择机器人类型(心知天气、代码托管平台,JIRA等),也可以自定义通过Webhook接入自定义服务的机器人,本篇文章介绍的就是通过Webhook发送通知的机器人 二 添加机器人 点击...
  • using System; using System.Collections.Generic; using System.Linq; using UtilsCore.Result; namespace UtilsCore { /// <... /// 钉钉自定义机器人 /// </summary> public class Di...
  • 通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群 接入自定义机器人很简单,大概以下几步 点击群设置选择智能群助手 点击添加机器人最右边按钮选择自定义 点击添加后设置机器人对应属性 下面会详细...
  • 钉钉自定义机器人-后台开发

    万次阅读 2018-08-04 22:49:18
    钉钉自定义机器人-后台开发,我们通过配置就好了,方便操作!下面实例是22点22分发送不同的消息。 官方文档:https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&amp;amp;amp;articleId=106438&amp;...
  • ", "title": "自定义机器人", "picUrl": "", "messageUrl": "https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.Rqyvqo&treeId=257&articleId=105735&docType=1" } } res = dingding_robot(data) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,550
精华内容 620
关键字:

自定义机器人