#Python 项目:实现功能——使用钉钉“自定义”机器人在群中发送文字消息

 (目前还是新手,程序难免有废话代码,请大家耐心看__比心)

第一步:创建群聊机器人,参考官方手册

官方链接:自定义机器人的创建和安装 - 钉钉开放平台

此步骤可以得到两个关键参数:

Webhook(机器人的通信网址):https://oapi.dingtalk.com/robot/send?############(如这样)

secret(加签未解密密钥):SECe2######################30    #密钥,机器人安全设置页面,加签一栏下面显示的SECe开头的字符串。

第二步:计算时间戳,解算secret密钥

这里也使用官方提供的代码(我自己加了些备注)

此步骤可以得到两个关键参数,并合成最终的webhook(带时间戳和密钥的机器人的通信网址):

timestamp(时间戳)

sign(解密后的密钥)

webhook(机器人的通信网址)

#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)    #显示解密过的密钥(如需要查看请删除#号)
webhook = "{}&timestamp={}&sign={}".format(webhook,timestamp,sign) #{}分别代表{通讯网址}和{时间戳}和{密钥}

第三步:编码交互内容

在content中输入文本内容即可

headers = {'Content-Type': 'application/json;charset=utf-8'}
data = {
    "msgtype": "text",
    "text": {
        "content": "需要发送至群中的内容"
    },
    "at": {
        "isAtAll": True    #是否@所有人,True是,False否
    }
}
resp = requests.post(webhook, 
                     data=json.dumps(data).encode("utf-8"), 
                     headers=headers,
                    )
print (resp.json())

完整代码展示(这部分内容是根据我自己的需求加入了交互部分)

#字符提示:
#qm是输入的群名
#my是每个群加签的密钥
#wz网址是每个机器人的后台网址
#nr是发到群中的文字内容
#sy是否需要at所有人

#导入依赖库
import requests,json
#签名计算依赖的库
import time,hmac,hashlib,base64,urllib.parse

#给操作者的提示
print("提示:\"此操作小程序,目前仅支持联动一群、二群、和测试群,请悉知\"\n\n")
qm = input("第一步:###请您选择要发通知的群号###\n\n群名包含一下内容(输入时不用加引号):\n\n\"1:一群\"    \"2:二群\"    \"3:测试群\"\n请输入群号:")
print("")
if qm == "1" or qm == "2" or qm == "3":
    if qm == "1":
        my = "此处输入一群的未解密密钥"
        wz = "此处输入一群的网址"
    if qm == "2":
        my = "此处输入二群的未解密密钥"
        wz = "此处输入二群的网"
    if qm == "3":
        my = "此处输入测试群的未解密密钥"
        wz = "此处输入测试群的网址"
else:
    print("输入错误,程序结束")
    exit()

#先将密钥解析得到时间戳(timestamp)以及签名值(sign)
timestamp = str(round(time.time() * 1000))

secret = my
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))

webhook = "{}&timestamp={}&sign={}".format(wz,timestamp,sign) #{}分别代表wz和my
nr = input("第二步:###输入文本内容###\n①此输入的内容会直接发至群中,建议现在测试群测试。\n②文本内容如需换行请在段尾输入\"\ n\"中间无空格。\n\n")
nr = "\"" + nr + "\""
sy = input("第三步:###是否需要@所有人?###  1:是  2:否\n")
if sy == "1":
    sy = "True"
elif sy == "2":
    sy = "Flase"
headers = {'Content-Type': 'application/json;charset=utf-8'}
data = {
    "msgtype": "text",
    "text": {
        "content": eval(nr)   #eval()计算在字符串中的有效Python表达式,并返回一个对象
    },
    "at": {
        "isAtAll": sy
    }
}
resp = requests.post(webhook, 
                     data=json.dumps(data).encode("utf-8"), 
                     headers=headers,
                    )
print (resp.json())

实现效果展示:

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用钉钉自带的机器人API和Python的requests库来实现监控钉钉群中@机器人消息,并根据@他的消息进行回复。 首先,你需要在钉钉群中添加一个自定义机器人,并获取机器人的Webhook地址。 然后,你可以使用如下代码来监控钉钉群中消息: ```python import requests webhook_url = "机器人的Webhook地址" def get_msg(): url = "https://oapi.dingtalk.com/robot/.../conversation/asyncsend_v2" response = requests.post(url, json={ "robot_id": "机器人ID", "conversation_id": "群聊ID", "action_id": "消息ID", "message_tag": "AT", }) msg = response.json()["result"]["message"] return msg if __name__ == '__main__': while True: msg = get_msg() if msg: print(msg) ``` 上面的代码中,`get_msg()` 函数会不断地向钉钉机器人发送请求,获取最新的@他的消息,如果有消息则会返回消息内容。 接着,你可以使用如下代码来进行回复: ```python import requests webhook_url = "机器人的Webhook地址" def send_msg(content): url = f"{webhook_url}" response = requests.post(url, json={ "msgtype": "text", "text": { "content": content }, "at": { "isAtAll": False } }) if response.status_code == 200: print("发送成功") else: print("发送失败") if __name__ == '__main__': send_msg("你好,我是机器人") ``` 上面的代码中,`send_msg()` 函数可以向钉钉机器人发送消息,并在群聊中@机器人实现自动回复。 最后,你可以将上面的代码整合起来,实现监控钉钉群中@机器人消息,并根据消息内容进行回复的功能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值