钉钉创建单人群、双人群及钉钉自定义机器人的初步使用(附python3代码)


1. 前言

一些自动化的过比如我服务器上某个东西编译好了,我的某个服务挂掉了提醒我看一下,还有诸如代码有了新的提交和issue,Jenkins打包完成等等,之前大多是使用发邮件的方式,但是我使用邮件比较少,某些时候可能漏掉了,所以目前测试了一下钉钉自定义机器人,感觉挺不错的,建一个单人群,结合shell+python,将编译过程、服务监听、打包等耗时操作等一些需要提醒的内容发送给钉钉单人群里面就可以了。

2. 建单人群、两个人的群

在手机上使用面对面建群的方式进行建群,然后就可以创建只有一个人的群:

在这里插入图片描述

建两个人的群也是类似方式,建完单人群之后就可以随意拉人了,拉一个人进来就是双人群。

3. 添加群机器人-自定义

一些天气、疫情相关的机器人可以在手机上直接通过群设置->智能群助手添加->添加机器人的方式添加,但是我们这里使用的自定义机器人只能在电脑端的钉钉上操作。

在这里插入图片描述

4. 获取Webhook及安全设置

添加自定义机器人时会有一个设置页面,添加完后也可以在机器人的设置页面查看如下设置。

在这里插入图片描述

安全设置一般使用加签即可,自定义关键词和IP地址有点麻烦,使用加签方式根据当前unix时间戳计算相关密钥进行签名即可,计算方式说明文档中也有python和java代码的示例。

5. python3代码个人模板

通过外部传参的方式传递webhook和消息内容,这样更加灵活一些,后续有需求的化再添加发送消息的格式和@的人也做一下区分(注意别忘记加密钥,说明文档中为This is secret,别忘记这个位置要换):

import base64
import hashlib
import hmac
import json
import sys
import time
import urllib

import requests


def sign():
    timestamp = str(round(time.time() * 1000))
    secret = sys.argv[2]
    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_res = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    print(timestamp)
    print(sign_res)
    return timestamp, sign_res


def send_ding_tolk_message():
    # 请求的URL,WebHook地址
    webhook = sys.argv[1]
    header = {
        "Content-Type": "application/json",
        "Charset": "UTF-8"
    }

    text = sys.argv[3]
    message = {
        "msgtype": "text",
        "text": {
            "content": text
        },
        "at": {
            "isAtAll": True
        }
    }
    message_json = json.dumps(message)

    # 计算签名密钥并修改url
    timestamp, sign_res = sign()
    webhook += "&timestamp=" + timestamp + "&sign=" + sign_res
    print(webhook)
    # 发送请求并打印
    info = requests.post(url=webhook, data=message_json, headers=header)
    print(info.text)


def usage():
    if len(sys.argv) == 4:
        print(sys.argv[1], sys.argv[2], sys.argv[3])
        send_ding_tolk_message()
    else:
        print("外部传参错误;用法: 'python3 %s WebHook地址 加签的密钥 消息内容';示例:\"python3 dingtolk_rebot.py "
              "\"https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx\" \"xxxx\" \"你好\"\"\n" % (sys.argv[0]))
        sys.exit(-1)


if __name__ == "__main__":
    usage()

使用方式(加签后需要添加密钥):

在这里插入图片描述

python3 dingtolk_robot.py "Webhook" "密钥" "中午吃了吗"

6. 添加计划任务

如果有服务器的话则还可以添加执行命令到计划任务中定时执行。

在/etc/cron.d下创建dingtalk文件,然后比如写入如下内容:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
40 8 * * *   root   python3 /root/work/dingtalk_robot.py "webhook" "签名密钥" "早,记得吃早饭啊"
30 11 * * *   root   python3 /root/work/dingtalk_robot.py "webhook" "签名密钥" "中午好,记得吃午饭啊"
30 17 * * *   root   python3 /root/work/dingtalk_robot.py "webhook" "签名密钥" "下午好,记得吃晚饭啊"
30 22 * * *   root   python3 /root/work/dingtalk_robot.py "webhook" "签名密钥" "晚安,做个好梦"
40 15 * * *   root   python3 /root/work/dingtalk_robot.py "webhook" "签名密钥" "计划任务测试"
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐