python-调用钉钉官方开放平台sdk向钉钉群中推送钉钉机器人消息

本文详细介绍了如何配置和使用钉钉自定义机器人,包括添加机器人、设置安全策略(如自定义关键词、加签和IP白名单)以及通过Python SDK发送消息。此外,还提供了SDK下载和引用的步骤,以及一个简单的Python代码示例,用于向钉钉群发送消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.自定义机器人接入

1.1打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择机器人管理

1.2添加自定义机器人

1.3在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像

完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成。

完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:

2.引用钉钉sdk

2.1下载地址:

2.2选择python3版本-点击下载

2.3下载将sdk文件放在自己的工程中,在python文件中引用api

3.实现


1.自定义机器人接入

钉钉官方链接:https://ding-doc.dingtalk.com/document/app/custom-robot-access

1.1打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择机器人管理

1.2添加自定义机器人

1.3在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像

屏幕快照 2019-10-25 下午1.50.45.png

  1. 完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成

    目前有3种安全设置方式,请根据需要选择一种:

    • 自定义关键词:最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。

      例如添加了一个自定义关键词:监控报警,则这个机器人所发送的消息,必须包含监控报警这个词,才能发送成功。

    • 加签

      1. timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。

        参数

        说明

        timestamp

        当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时。

        secret

        密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串。

        签名计算示例代码(Java)

        import javax.crypto.Mac;
        import javax.crypto.spec.SecretKeySpec;
        import org.apache.commons.codec.binary.Base64;
        import java.net.URLEncoder;
        
        public class Test {
            public static void main(String[] args) throws Exception {
                Long timestamp = System.currentTimeMillis();
                String secret = "this is secret";
        
                String stringToSign = timestamp + "\n" + secret;
                Mac mac = Mac.getInstance("HmacSHA256");
                mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
                byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
                String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
                System.out.println(sign);
            }
        
        }

        签名计算代码示例(Python)

        #python 3.8 
        import time
        import hmac
        import hashlib
        import base64
        import urllib.parse
        
        timestamp = str(round(time.time() * 1000))
        secret = 'this is 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))
        print(timestamp)
        print(sign)
      2. 把 timestamp和第一步得到的签名值拼接到URL中。

        https://oapi.dingtalk.com/robot/send?access_token=XXXXXX&timestamp=XXX&sign=XXX

        参数

        说明

        timestamp

        第一步使用到的时间戳。

        sign

        第一步得到的签名值。

    • IP地址(段):设定后,只有来自IP地址范围内的请求才会被正常处理。支持两种设置方式:IP地址和IP地址段,暂不支持IPv6地址白名单,格式如下。

      格式

      说明

      1.1.1.1

      开发者的出口公网IP地址(非局域网地址)

      1.1.1.0/24

      用CIDR表示的一个网段

      image.png
  2. 完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:

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

总结以上官方文档

安全设置中选择以下设置(至少选择一个设置)

1.自定义关键词:在发送消息时,发送的内容就要包含关键词才能发送成功,

2.加签:一种加密方式,将加签值通过以上的方法得到的签名值和timestamp拼接到URL(Webhook)中

3.ip地址(段):设置后,只有来自IP地址范围内的请求才会被正常处理

 

2.引用钉钉sdk

2.1下载地址:

https://ding-doc.dingtalk.com/document/resourcedownload/download-server-sdk

2.2选择python3版本-点击下载

2.3下载将sdk文件放在自己的工程中,在python文件中引用api

官方示例:

import dingtalk.api
request = dingtalk.api.OapiGettokenRequest("https://oapi.dingtalk.com/user/get")
request.userid="userid1"
response = request.getResponse()
print(response)

3.实现

# -*- coding: utf-8 -*-
"""
Created on Thu Jan 21 11:04:09 2021

@author: Admin
"""

import time
import hmac
import hashlib
import base64
import urllib.parse
#引用钉钉API
import dingtalk.api

#发送消息
def SendMessage():
    #时间戳
    timestamp = str(round(time.time() * 1000))
    #钉钉加签
    secret = 'SEC****'
    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))
    print(timestamp)
    print(sign)
    #钉钉机器人中的Webhook+sign+timestamp
    webhook ='https://oapi.dingtalk.com/robot/send?access_token=******&timestamp={0}&sign={1}'.format(timestamp,sign)
    #实例钉钉接口的OapiRobotSendRequest
    request = dingtalk.api.OapiRobotSendRequest(webhook)
    #需要发送的文字内容
    content_txt = "我就是我, 是不一样的烟火"
    #设置msgtype为text类型 
    #根据官方文档还可设置其他类型:link类型 markdown类型 整体跳转ActionCard类型 FeedCard类型
    request.msgtype = 'text'
    #引入需要发送的内容
    request.text = {
        "content": content_txt
    }
    #atMobiles:钉钉群中所对应的成员手机号
    #isAtAll:当设置为True时,发送消息时@所有人
    request.at = {
            "atMobiles":["13*****4538"],
            "isAtAll": True
        }
    #发送消息
    response = request.getResponse()
    print(response)

if __name__ == '__main__':
    #程序运行时调用方法
    SendMessage()
    

效果:

该代码只是简单的一个钉钉机器人消息推送,还可再继续改造引用到运用到其他项目做异常消息推送

参考文档:钉钉开发文档https://ding-doc.dingtalk.com/document/app/custom-robot-access

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值