精华内容
下载资源
问答
  • LABVIEW通过CRUL钉钉机器人信息推送
  • 主要介绍了SpringBoot实现钉钉机器人消息推送的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 钉钉机器人工具类

    2021-03-09 23:36:31
    工作经常用到钉钉的机器人通知,写了几次机器人的工具类,不过忘记记录了,要重新写有点麻烦,这里把钉钉机器人的工具代码贴出来,后续再次用的时候直接查看。经常用到的地方:应用内存在异常情况报警,应用内任务...

    工作经常用到钉钉的机器人通知,写了几次机器人的工具类,不过忘记记录了,

    要重新写有点麻烦,这里把钉钉机器人的工具代码贴出来,后续再次用的时候直接查看。经常用到的地方:应用内存在异常情况报警,应用内任务运行状况通知...

    支持普通钉钉消息发送

    支持ActionCard消息发送

    4997d276e05f

    image.png

    import java.util.List;

    import com.google.common.collect.Lists;

    import lombok.Data;

    import lombok.Getter;

    import lombok.extern.slf4j.Slf4j;

    import org.springframework.http.ResponseEntity;

    import org.springframework.web.client.RestTemplate;

    /**

    * @author : aihe

    * 使用场景:

    * 功能描述:自定义机器人接入:https://developers.dingtalk.com/document/app/custom-robot-access/title-zob-eyu-qse

    */

    @Slf4j

    public class RobotUtils {

    private static RestTemplate restTemplate = new RestTemplate();

    public static void main(String[] args) {

    sendTextMsg(SupportRobotEnum.CESHI.url

    , "测试内容发送"

    , Lists.newArrayList("xxx")

    );

    sendActionCardMsg(SupportRobotEnum.CESHI.url

    , "测试内容标题",

    "测试内容"

    , true

    , Lists.newArrayList(

    //RobotBtn.buildBtn("同意去百度", "http://www.baidu.com"),

    RobotBtn.buildBtn("同意去QQ", "http://www.qq.com")

    )

    );

    }

    /**

    * {

    * "msgtype": "text",

    * "text": {

    * "content": "我就是我, @150XXXXXXXX 是不一样的烟火"

    * },

    * "at": {

    * "atMobiles": [

    * "150XXXXXXXX"

    * ],

    * "isAtAll": false

    * }

    * }

    */

    public static void sendTextMsg(String url, String content, List atPerson) {

    RobotMsg robotMsg = new RobotMsg();

    robotMsg.setMsgtype("text");

    RobotAt robotAt = new RobotAt();

    robotAt.setAtAll(false);

    if (atPerson != null && atPerson.size() > 0) {

    robotAt.setAtMobiles(atPerson);

    }

    robotMsg.setAt(robotAt);

    RobotText robotText = new RobotText();

    robotText.setContent(content);

    robotMsg.setText(robotText);

    ResponseEntity responseEntity = restTemplate.postForEntity(url, robotMsg, String.class);

    System.out.println(responseEntity.getBody());

    }

    /**

    * @param url 机器人地址

    * @param title actionCard标题

    * @param text 缩略内容

    * @param vertical 按钮方向

    * @param btns 按钮内容

    */

    public static void sendActionCardMsg(String url, String title, String text, Boolean vertical, List btns) {

    RobotMsg robotMsg = new RobotMsg();

    robotMsg.setMsgtype("actionCard");

    RobotAt robotAt = new RobotAt();

    robotAt.setAtAll(false);

    RobotActionCard robotActionCard

    = new RobotActionCard();

    robotActionCard.setTitle(title);

    robotActionCard.setText(text);

    robotActionCard.setBtnOrientation((vertical == null || vertical) ? "0" : "1");

    robotActionCard.setBtns(btns);

    robotMsg.setActionCard(robotActionCard);

    ResponseEntity responseEntity = restTemplate.postForEntity(url, robotMsg, String.class);

    System.out.println(responseEntity.getBody());

    }

    public enum SupportRobotEnum {

    /**

    * 测试机器人群

    */

    CESHI("测试机器人群","");

    @Getter

    private String desc;

    @Getter

    private String url;

    SupportRobotEnum(String desc, String url) {

    this.desc = desc;

    this.url = url;

    }

    }

    @Data

    public static class RobotAt {

    public List atMobiles;

    public boolean isAtAll;

    }

    @Data

    public static class RobotMsg {

    public String msgtype;

    public RobotAt at;

    /**

    * 普通文字消息类型消息

    */

    public RobotText text;

    /**

    * actionCard类型消息时支持

    */

    public RobotActionCard actionCard;

    }

    @Data

    public static class RobotText {

    public String content;

    }

    @Data

    public static class RobotActionCard {

    public String title;

    public String text;

    public String hideAvatar;

    public String btnOrientation;

    public List btns;

    }

    @Data

    public static class RobotBtn {

    public String title;

    public String actionURL;

    public static RobotBtn buildBtn(String title, String actionUrl) {

    RobotBtn robotBtn = new RobotBtn();

    robotBtn.setActionURL(actionUrl);

    robotBtn.setTitle(title);

    return robotBtn;

    }

    }

    }

    展开全文
  • 一、前言废话不多的实现简单的钉钉机器人。我们分为下面几个步骤来逐步讲解。1.钉钉机器人的类型2.如何打造一个最最简单的钉钉机器人二、钉钉机器人的类型常用的钉钉机器人有两种,1、通知类型的机器人:适合在群内...

    一、前言

    废话不多的实现简单的钉钉机器人。我们分为下面几个步骤来逐步讲解。
    1.钉钉机器人的类型
    2.如何打造一个最最简单的钉钉机器人

    二、钉钉机器人的类型

    常用的钉钉机器人有两种,
    1、通知类型的机器人:适合在群内进行一些通知,推荐消息等内容。
    2、可以回复消息的机器人:能够回复@机器人的消息,机器人会将响应内容发送到群里。
    本次,我们分别讲解两种机器人是如何实现的

    三、打造一个最简单的通知类型钉钉机器人

    首先用通知类型的机器人为例子。1. 打开一个你想创建机器人的钉钉群。2.在右边栏选择更多选项,点击群助手的打开:

    957cecc3615d4b0e026f3c35fafb5783.png
    然后选择添加机器人

    369c07d026ebd59bca51329a473f82d6.png

    选择自定义机器人

    06587e58a382f025a3dab411fc9e9a74.png

    然后需要注意!在这个配置页面中。
    安全设置我们选择【自定义关键词】
    只要每次发送的消息带有该自定义关键词,消息就能成功发送。接下来选择同意并完成。

    752447b7ef6289630d4bab651dc9469d.png

    拷贝标记出来的完整链接【Webhook】,然后选择完成

    8197177f0f8b2496b0b77aea42b8beff.png
    钉钉机器人的配置就完成了。

    3.第三步开始开始写代码:
    直接上发起的示例代码:
    apiurl 就是获取的完整链接【Webhook】

    jsonString是发起的请求内容,json格式示例如下:

    {

    "msgtype": "text", //钉钉的发送样式

    "text": {

    "content": "我就是我, 是不一样的烟火@156xxxx8827" //发送到群中的内容

    },

    "at": { //需要消息@对应人的手机号

    "atMobiles": [

    "156xxxx8827",

    "189xxxx8325"

    ],

    "isAtAll": false //如果需要@所有人 这个值设置为true

    }

    }

    下面就是发送代码:

    ///

    /// 以Post方式发送请求

    ///

    /// 请求的URL

    /// 请求的json参数

    /// 请求头的key-value字典

    public static string PostDingDing(string jsonString, string apiurl = null, Dictionary headers = null)

    {

    if (apiurl == null)

    {

    apiurl = AppSettings.WebHook;//机器人的webhook

    }

    WebRequest request = WebRequest.Create(@apiurl);

    request.Method = "POST";

    request.ContentType = "application/json";

    if (headers != null)

    {

    foreach (var keyValue in headers)

    {

    if (keyValue.Key == "Content-Type")

    {

    request.ContentType = keyValue.Value;

    continue;

    }

    request.Headers.Add(keyValue.Key, keyValue.Value);

    }

    }

    if (String.IsNullOrEmpty(jsonString))

    {

    request.ContentLength = 0;

    }

    else

    {

    byte[] bs = Encoding.UTF8.GetBytes(jsonString);

    request.ContentLength = bs.Length;

    Stream newStream = request.GetRequestStream();

    newStream.Write(bs, 0, bs.Length);

    newStream.Close();

    }

    WebResponse response = request.GetResponse();

    Stream stream = response.GetResponseStream();

    Encoding encode = Encoding.UTF8;

    StreamReader reader = new StreamReader(stream, encode);

    string resultJson = reader.ReadToEnd();

    return resultJson;

    }

    好了,我们的钉钉机器人消息就发起成功了,如下图:

    b77940b007417e7cda9c8dfe51242e4c.png

    四、打造一个最简单的自动回复机器人

    自动回复消息的机器人,能够回复@机器人的消息,机器人会将响应内容发送到群里。
    该功能能够直接在钉钉中就实现简单的数据查询与交互。
    接下来我们实现一个简单的自动回复机器人的例子。1. 首先需要登陆钉钉开发者后台,创建一个机器人。
    登录钉钉开发者后台,
    选择应用开发-企业内部开发-机器人,点击创建机器人。

    59f67c5679ec9533bf0178217a9f776c.png

    2.选择创建机器人:

    12829784873b59cb2cbb7823ec3716ff.png
    选择应用类型是机器人,想一个机器人的名称等等,然后直接点击【确定创建】,机器人就创建好了。

    3.机器人简易配置:

    18ad578ee86f8dbdd8ee5241149dcbaa.png

    参数描述
    服务器出口IP填写本企业服务器的公网IP
    消息接收地址填写一个公网可访问的本企业HTTPS服务地址,用于接收POST过来的消息

    只用配置如上两个参数。一个简单的机器人配置就完成了。

    4.后端代码配置:
    机器人配好了,但是目前还是调试模式,正式上线前,可以在测试群进行调试。

    112c04c05c56d600decc4d5b8e2a50ce.png

    在测试群中,新增一个刚刚建好的机器人,保存好Webhook

    fe57c906cec1d946d4e28179d666adc0.png

    5.接下来是代码了:
    首先构建一个接收类

    public class dingRotBotDto

    {

    public string msgtype { get; set; }

    public dingText text { get; set; }

    public string msgId { get; set; }

    public string createAt { get; set; }

    public string conversationType { get; set; }

    public string conversationId { get; set; }

    public string conversationTitle { get; set; }

    public string senderId { get; set; }

    public string senderNick { get; set; }

    public string senderCorpId { get; set; }

    public string senderStaffId { get; set; }

    public string chatbotUserId { get; set; }

    public List atUsers { get; set; }

    }

    public class dingText

    {

    public string content { get; set; }

    }

    public class dingUser

    {

    public string dingtalkId { get; set; }

    public string staffId { get; set; }

    }

    参数是否必填类型描述
    msgtypeString目前只支持text
    contentString消息文本
    msgIdString加密的消息ID
    createAtString消息的时间戳,单位ms
    conversationTypeString1-单聊、2-群聊
    conversationIdString加密的会话ID
    conversationTitleString会话标题(群聊时才有)
    senderIdString加密的发送者ID
    senderNickString发送者昵称
    senderCorpIdString发送者当前群的企业corpId(企业内部群有)
    senderStaffIdString发送者在企业内的userid(企业内部群有)
    chatbotUserIdString加密的机器人ID
    atUsersArray被@人的信息dingtalkId: 加密的发送者IDstaffId: 发送者在企业内的userid(企业内部群有)

    然后构建一个返回消息类:

    public class DingDingMessage

    {

    public DingDingMessage()

    {

    this.at = new At();

    this.text = new Text();

    this.markdown = new MarkDown();

    }

    public string msgtype { set; get; }//消息类型

    public Text text { set; get; }//text类型

    public MarkDown markdown { set; get; }//markdown类型

    public At at { set; get; }//@

    }

    参数是否必填类型描述
    msgtypeStringtext
    contentString消息文本
    atMobilesArray被@人的手机号
    isAtAllBoolean@所有人是true,否则为false

    现在开始写一个接收钉钉机器人消息的方法:

    [HttpPost("GetDingRoBot")]

    public async TaskGetDingRoBot([FromBody] dingRotBotDto input)

    {

    var phone=await _fuluDing.GetUserPhone(input.senderStaffId);//获取发送人的电话,回复消息的时候可以@对应的发送人。

    if (input.text.content.Contains("[XXXX]"))///input.text.content就是接受到的消息, 可以通过改字段进行消息过滤

    {

    var s = input.text.content.Split(']')[1];

    var text=await todo...;//调用自己的方法,返回需要回复的消息

    SendMessage(text, phone); //发送回复的消息

    }

    else

    {

    await SendMessage("请输入正确的命令:[流水上账查询]XXXX", phone);

    }

    return Ok(ResponseResult.Execute("0", null, $"发送成功"));

    }

    public SendMessage(string text,string atMobiles)//发送消息

    {

    DingDingMessage message = new DingDingMessage();

    message.msgtype = "text";

    message.text.content = text;

    message.at.atMobiles.Add(atMobiles);

    String data = JsonConvert.SerializeObject(message);//Json将对象序列化

    var json = await _client.PostAsync("xxxxx", new StringContent(data, Encoding.UTF8, "application/json"));//post 发起一个请求到 配置该机器人群的 Webhook 地址xxxxx

    }

    fe57c906cec1d946d4e28179d666adc0.png

    这样 ,一个可以回复消息的机器人就配置好了。我们可以试一试。

    84601cb73e07ba1b1930113c72311823.png

    6.上线:

    好了,当我们一切弄好就可以正式上线了

    9574d2355bd58fd51cf9fc129b28f274.png

    只要我们点击管理页面的上线。机器人就正式上线了。文章的最后,顺带分享下几个踩坑问题
    1.发起的消息中一定要带上【自定义关键词】的内容,不然发起不成功。
    2.钉钉机器人发送消息有限制,1min最多20条,超过的无法发送,钉钉会进行限流一段时间。

    展开全文
  • PHP调用钉钉机器人

    2020-12-22 12:43:53
    采用php代码调用钉钉机器人,只在工作日发送一些提醒一、添加自定义机器人方法您好,群主/群管理员可以在电脑端通过如下的路径添加自定义机器人:步骤一:【电脑钉钉 】-【群聊】-【群设置】-【智能群助手】-【添加...

    采用php代码调用钉钉机器人,只在工作日发送一些提醒

    一、添加自定义机器人方法

    您好,群主/群管理员可以在电脑端通过如下的路径添加自定义机器人:

    步骤一:【电脑钉钉 】-【群聊】-【群设置】-【智能群助手】-【添加更多】-【添加机器人】-【自定义】-【添加】,编辑机器人名称和选择添加的群组。完成必要的安全设置(至少选择一种),勾选 我已阅读并同意《自定义机器人服务及免责条款》,点击“完成”即可。

    步骤二:复制出机器人的Webhook地址(格式如下截图),可用于向这个群发送消息。并点击【完成】,自定义机器人就添加成功了。

    【温馨提示】:

    1、若关闭【仅群主和群成员可管理】,群成员也是可以添加机器人

    2、出于对于群信息的安全,安全设置必须要选择一项。

    3、由于目前自定义机器人需要进行安全配置,需要在电脑端添加。手机端不支持添加自定义机器人哦。

    4、如果设置或者自定义机器人遇到问题可以查看下开发平台文档中心里关于机器人的介绍,更多的技术求助,可登录开发者后台(https://open-dev.dingtalk.com/)查看相关知识。开发平台文档中心:https://open.dingtalk.com/

    二、代码:

    /**

    * 钉钉相关接口和curl接口

    */

    class DingDing

    {

    const HOST = "https://oapi.dingtalk.com";

    public static function sendTxt($token, $content, $isAtAll = true)

    {

    $url = self::HOST . "/robot/send?access_token=$token";

    $data = array(

    'msgtype' => 'text',

    'text' => array( 'content' => $content ),

    'at' => array(

    'atMobiles' => array(),

    'isAtAll' => $isAtAll,

    ),

    );

    $ret = self::reqDing($url, $data);

    return $ret;

    }

    /**

    * 发起http请求,post为true用POST方式,false为GET方式请求

    */

    public static function reqDing($url, $postData, $post = true)

    {

    if (is_array($postData)) {

    $postData = json_encode($postData);

    }

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    if($post) {

    curl_setopt($ch, CURLOPT_POST, 1);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

    }

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);

    curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json;charset=utf-8' ));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    $data = curl_exec($ch);

    curl_close($ch);

    $data = empty($data) ? array() : json_decode($data, true);

    return $data;

    }

    public static function getHoliday1($date = '')

    {

    $holidayUrl = 'http://api.k780.com/?app=life.workday&date=%s&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json';

    if($date === '') {

    $date = date('Ymd', time());

    }

    $url = sprintf($holidayUrl, $date);

    $judgeHolidayRet = self::reqDing($url, []);

    $worknm = $judgeHolidayRet['result']['worknm'];

    if(!isset($judgeHolidayRet['result']['worknm'])) {

    return false;

    }

    if($worknm == '工作日') {

    return 'yes';

    }

    return 'no';

    }

    public static function getHoliday2($date = '')

    {

    $holidayUrl = 'http://timor.tech/api/holiday/info/%s';

    if($date === '') {

    $date = date('Y-m-d', time());

    }

    $url = sprintf($holidayUrl, $date);

    $judgeHolidayRet = self::reqDing($url, [], false);

    $worknm = $judgeHolidayRet['type']['type'];

    if(!isset($judgeHolidayRet['type']['type'])) {

    return false;

    }

    if(($worknm == 0) || ($worknm == 3)) {

    return 'yes';

    }

    return 'no';

    }

    /**

    * 判断当天是否为工作日

    *

    public static function judgeWorkDay()

    {

    $ret1 = self::getHoliday1();

    if($ret1 == 'yes') {

    return 'yes';

    } elseif($ret1 == 'no') {

    return 'no';

    }

    return self::getHoliday2();

    }

    }

    三、git地址:https://github.com/A07110517/dingding-request

    展开全文
  • outgoing钉钉机器人实现

    千次阅读 2020-07-16 15:08:39
    钉钉提供的内网穿透-https://ding-doc.dingtalk.com/doc#/kn6zg7/hb7000(有了它就可以模拟一个真实域名,可以指定端口) 我使用的是python3.7,线上环境是python2.7.5,实际并无太大影响 # -*- coding: UTF-8 -*- ...

    本地测试与线上环境可以做到最大相同,需要:
    钉钉提供的内网穿透-https://ding-doc.dingtalk.com/doc#/kn6zg7/hb7000(有了它就可以模拟一个真实域名,可以指定端口)
    我使用的是python3.7,线上环境是python2.7.5,实际并无太大影响

    # -*- coding: UTF-8 -*-
    from flask import Flask, request, jsonify
    import json
    import os
    import hmac
    import hashlib
    import base64
    import time
    import requests
    # ast包可以将字符串转换为有效字典
    import ast
    import re
    import json
    
    
    lgoin_session = requests.session()
    wiki_url = 'https://*'
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
    header_wiki = {
        'referfer': 'https://*',
        'user-agent': user_agent
    }
    
    app = Flask(__name__)# Flask构造函数使用当前模块(__name __)的名称作为参数。
    # route()函数是一个装饰器,它告诉应用程序哪个URL应该调用相关的函数。
    @app.route('/data', methods=['GET', 'POST'])
    def index():
    # 获取headers数据
        headers_data = request.headers
    # 获取body数据
        body_data = request.get_json()
        
        wiki_sl = wiki(headers_data,body_data)
        wiki_sl.run()
    
        return ''
    
    class wiki:
    
        def __init__(self,ss,bb):
            self.username='******'
            self.password='******'
            self.post_sign=''
            self.post_time=''
            self.post_man=''
            self.post_msg=''
            self.send_msg=''
            self.time_now=''
            self.count_sing=''
            self.message=''
            self.senddata={}
            self.headers_data=ss
            self.body_data=bb
    
        def getPost(self): # 这个方法是为了把需要的数据剥离出来
            # post_sign=self.post_sign
            # post_time=self.post_time
            # post_man=self.post_man
            # post_msg=self.post_msg
            self.post_sign = self.headers_data
            self.post_sign = self.headers_data['Sign'].lstrip()
            self.post_time = self.headers_data['Timestamp'].lstrip()
            self.post_man = self.body_data['senderNick'].lstrip()
            self.post_msg = self.body_data['text']['content'].strip()
    
        def initKey(self):	# 这个方法是用来提供钉钉验证的时间戳和sign
            self.time_now = str(round(time.time()) * 1000)
            app_secret = '钉钉开放平台机器人基础信息的AppSecret'
    
            app_secret_enc = app_secret.encode('utf-8')
            string_to_sign = '{}\n{}'.format(self.post_time, app_secret)
            string_to_sign_enc = string_to_sign.encode('utf-8')
            hmac_code = hmac.new(app_secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
            self.count_sing = base64.b64encode(hmac_code).decode('utf-8')
    
        def login_wiki(self):	# 这个方法是用来登录内网的wiki进行查询,并把我需要的数据剥离出来
            post_data = {
                'os_username': self.username,
                'os_password': self.password,
                'login': '登陆',
                'os_destination': '/ pages / viewpage.action?pageId = 6620637os_destination: /pages/viewpage.action?pageId=6620637'
            }
    		# 使用requests的session数据进行post登陆
            response_wiki = lgoin_session.post(wiki_url, headers=header_wiki, data=post_data)
    
            search_url = 'https://*' + self.post_msg + '*'
            
            search_html = lgoin_session.get(search_url, headers=header_wiki)
            search_dictionary = ast.literal_eval(search_html.text)
            list = search_dictionary['results']
    
            if list == []:
                file_nothing = '没有查询到任何东西哦~'
                self.senddata = file_nothing
            else :
                for key_list in list:
                    list_word = key_list['title']
                    word_cear = '[标题]:' + re.sub('@|end|hl', '', list_word)
    
                    list_bodytext = key_list['bodyTextHighlights']
                    bodytext_cear ='[内容]:' + re.sub('@|end|hl', '', list_bodytext)
    
                    list_url = key_list['url']
                    url_generate ='[链接]:' + 'https://*/' + list_url
    
                    send_data = str(word_cear)+'\n'+str(bodytext_cear)+'\n'+str(url_generate)
                    file_op = open('./data.txt','a')
                    file_wr = file_op.write(send_data+'\n\n')
                    file_opr = open('./data.txt','r')
                    file_read = file_opr.read()
                    
                    self.senddata= file_read # {'[标题]': word_cear, '[内容]': bodytext_cear, '[链接]': url_generate}
    
        def selectMsg(self):	# 这个方法为发送给钉钉的信息进行选择
            if self.post_msg == '':
                self.send_msg = '为空,无法查询'
                self.sendText()
            else:
                self.send_msg = self.senddata
                self.sendText()
    
    
        def sendText(self):		# 这个方法是钉钉机器人文档提供的文本模板,at不生效,不清楚为什么
            self.message = {
                "msgtype": "text",
                "text": {
                    "content": self.send_msg
                },
                "at": {
                    "atMobiles": [self.post_man],
                    "isAtAll": False
                }
            }
            # print(message)
    
        def sData(self):	# 进行验证判断,并发送机器人回复
            hook_token = '*'
            if (abs(int(float(self.post_time)) - int(float(self.time_now))) < 3600000 and self.post_sign == self.count_sing):
                webhook = 'https://oapi.dingtalk.com/robot/send?access_token=' + hook_token + '&timestamp=' + self.time_now + '&sign=' + self.count_sing
                header = {
                    "Content-Type": "application/json",
                    "Charset": "UTF-8"
                }
                message_json = json.dumps(self.message)
    
                info = requests.post(url=webhook, headers=header, data=message_json)
                os.remove('./data.txt')
                # print(json.loads(info.text))
            else:
                print("Warning:Not DingDing's post")
    
    
        def run(self):  # 方法启动顺序
            self.getPost()
            self.initKey()
            self.login_wiki()
            self.selectMsg()
            self.sendText()
            self.sData()
    
    if __name__ == '__main__':
    
        app.run(port=***, debug=True)
    

    遇到了很多坑,还好学到了很多。

    展开全文
  • console.log(res) }).catch((err)=>{ console.log(err) }) } async function start() { data={ 'msgtype': 'markdown', 'markdown': { "title": "钉钉测试", "text": "京东签到" } } await sendNotify(data);...
  • 先建个钉钉群,并加好机器人此时,机器人已经添加完毕,接下来编写我们连接机器人小哥的代码import com.alibaba.fastjson.JSON;import com.google.common.collect.Lists;import com.google.common.collect.Maps;...
  • 根据webHook 我们可以看出,通过机器人发送钉钉消息,实际上就是一个http请求,事实上,所有的http请求都是一样的,先是浏览器根据域名解析ip,然后浏览器与web服务建立tcp连接,就是“著名”的tcp的三次握手,然后...
  • Python调用钉钉机器人发送消息

    千次阅读 2020-08-18 17:06:58
    一、添加钉钉机器人 步骤一,登录钉钉,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”,完成后会生成Webhook地址 步骤...
  • python接入钉钉机器人

    千次阅读 2019-11-27 23:46:52
    因为业务需求,需要使用python脚本接入钉钉,实现每天爬虫运行完毕之后发送消息到钉钉群。 首先是添加自定义机器人 在钉钉上选择需要发送消息的群,选择群机器人-添加机器人-自定义机器人-添加,如下图: 完成必要...
  • 使用python调用钉钉机器人

    千次阅读 2019-05-18 19:56:18
    钉钉添加方法参考技术手册https://open-doc.dingtalk.com/microapp/serverapi2/qf2nxq 此代码为发送连接 import json import requests import sys def send_msg(url): headers = {'Content-Type': 'application/...
  • 一 建立机器人步骤 进入群设置->点击智能群助手->点击添加机器人 点击添加机器人->点击自定义->点击添加 重点牢记(秘钥、Webhook地址、access_access_token代码中会用到,需保存好):填写...
  • /** *钉钉机器人工具类 */ public class DingDingUtil { //通过钉钉机器人发送消息到钉钉群中 public static void sendVal(String url,String context)throws Exception{ HashMap,String> headermap = new HashMap...
  • 钉钉机器人自动发送信息 一、先创建一个钉钉群(拉人就行) 二、 添加机器人 需要记住两个重要信息: 1 加签 2 webhook 三、java代码 import cn.hutool.http.HttpRequest; import ...
  • 机器人设置过程参考钉钉开发文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq 下载自己使用语言对应的SDK文件:https://ding-doc.dingtalk.com/doc#/faquestions/vzbp02,我下载的是python3,下载之后...
  • [Python钉钉Outgoing机器人初步研究 再上一段连接,后续所有过程都是在大佬的思路下进行的,代码也是从大佬这里复制的,只是稍微改动的一部分,大家可以在联调通过能实现交互之后再去自己开发后台逻辑。但是因为大佬...
  • 钉钉自定义Outgoing机器人开发

    千次阅读 2020-11-09 00:13:30
    用户在群里@钉钉机器人,开发者服务器处理后,将@消息推送到群中的流程涉及到三个角色:钉钉客户端、钉钉服务器、开发者服务器 三者交互时序图如下: 注意,当前机器人尚不支持应答机制 (该机制指的是群里成员在...
  • aardio 钉钉机器人范例

    2021-09-14 17:38:51
    aardio 钉钉机器人 企业内部机器人(@机器人 可进行交互) import wsock.tcp.simpleHttpServer; import console; var server = wsock.tcp.simpleHttpServer("127.0.0.1",8080); console.setTitle("web服务器已...
  • 最近随着项目规模的扩大,用户的增加,需要有一个内部钉钉服务群,然后有一个智能客服机器人对一些常见的问题进行一个答疑。类似于这样: 网上找了半天,似乎没有什么结果 然后晚上抽空研究了一下,发现是在这个...
  • 最近疫情比较严重,很多...虽然钉钉别的功能很鸡肋,但是机器人这个功能还是让人眼前一亮,属于比较极客的功能,它可以将第三方服务的信息聚合到钉钉群中,实现信息的自动化同步,例如:通过聚合Github、Gitlab等...
  • 钉钉常用的两种机器人开发

    千次阅读 2020-08-04 17:01:54
    1.很弱的机器人,只能向群里主动推送消息,没法根据用户的...# 钉钉机器人生成时间戳和签名验证 def get_sign(secret="SEC9f46e354d4834add3b755f72d61f32e09c464115971344442e3497193bb2621e"): timestamp = str(r.
  • 一、钉钉机器人官方说明:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.karFPe&amp;amp;treeId=257&amp;amp;articleId=105735&amp;amp;docType=1 可以用于多种场景的消息推送...
  • 钉钉机器人是钉钉群的一个高级扩展功能,但使用起来却非常简单,只需要注册一个钉钉账号,就可以将第三方服务信息聚合到钉钉群中,实现信息的自动同步。 常见的使用场景: 1、聚合Github、Gitlab等源码管理服务,...
  • JAVA 实现钉钉机器人预警推送功能

    千次阅读 2019-07-19 23:36:56
    JAVA 实现钉钉机器人预警推送功能
  • 钉钉自定义机器人-后台开发

    万次阅读 2018-08-04 22:49:18
    钉钉自定义机器人-后台开发,我们通过配置就好了,方便操作!下面实例是22点22分发送不同的消息。 官方文档:https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&amp;amp;amp;articleId=106438&amp;...
  • 废话不多的实现简单的钉钉机器人。我们分为下面几个步骤来逐步讲解。 1.钉钉机器人的类型 2.如何打造一个最最简单的钉钉机器人 二、钉钉机器人的类型 常用的钉钉机器人有两种, 1、通知类型的机器人:适合在群内进行...
  • 钉钉有自定义机器人功能,开发者可以选择机器人类型(心知天气、代码托管平台,JIRA等),也可以自定义通过Webhook接入自定义服务的机器人,本篇文章介绍的就是通过Webhook发送通知的机器人 二 添加机器人 点击...
  • java接入钉钉机器人,进行风险报警

    千次阅读 2019-09-12 09:23:54
    public static void sendDingTalkRisk(Integer sbszid,Long bbh) throws IOException { HttpClient httpClient= HttpClients.createDefault(); HttpPost httpPost=new HttpPost("https://oapi.dingtalk.com...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 692
精华内容 276
关键字:

钉钉机器人交互