场景:定期将号码标记信息以文件形式返回给不同的供应商群组。那么,对于本地文件(图片或excel、csv等),如何实现自动发送到特定群组?本文将通过Python+钉钉小程序实现该功能。
目录
1.创建钉钉小程序并配置相关权限参数
1.1 创建小程序
1.2 权限/参数配置
2.获取指定群聊的chatid
3.编写Python脚本
1.创建钉钉小程序并配置相关权限参数
1.1 创建小程序
一般于公司而言,需要先获取钉钉后台开发的sit环境权限,小程序开发测试完成后,同步到生产环境(专员)操作,并开通相关权限。
登录钉钉开放平台:钉钉开放平台
小程序创建步骤:应用开发-->企业内部开发-->创建应用-->小程序
创建完成后进入小程序,配置相关权限/参数。
1.2 权限/参数配置
主要配置开发管理和权限管理。(这一步走了很多坑,好多文档并没有讲清楚)
(1)开发管理:配置服务器出口IP(即白名单)。
有两种方式获取本地IP:
1)命令行输入:
curl ifconfig.me
2)打开网页即可看到
http://myip.fireflysoft.net/
(2) 权限管理
需要配置的几个权限如下:
2.获取指定群聊的chatid
chatid就是群聊(群组)的唯一标识,是不会变化的,要向特定群聊发文件,必须有chatid。
chaidid的获取从这个官方连接调:
API Explorer
步骤:填写corpid(填写你自己的),其他默认false
corpid在后台首页信息可以看到:
点击发起调用-->扫描二维码选择相应群聊-->发起调用,即可获得chatid
注:第一次发起调用并扫描二维码后,手机端会弹出“扫码授权提示”,点击确定即可;
3.编写Python脚本
Appkey/Appsecret 在小程序应用信息里可以看到,chatid在步骤2中已详细说明。
完整代码如下,填写对应的信息即可:
import requests
import json# 1.获取接口凭证
def getAccess_token():# 从小程序应用信息处获取appkey = 'dinge**' appsecret = 'e-ters2bAFUfLn_**' url = 'https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s' % (appkey, appsecret)headers = {'Content-Type': "application/x-www-form-urlencoded"}data = {'appkey': appkey,'appsecret': appsecret}r = requests.request('GET', url, data=data, headers=headers)access_token = r.json()["access_token"]return access_token# 2.获取Midia_id
def getMedia_id():access_token = getAccess_token() # 本地文件的绝对路径path = r'C:\Users\**'url = r'https://oapi.dingtalk.com/media/upload?access_token=%s&type=file' % access_tokenfiles = {'media': open(path, 'rb')}data = {'access_token': access_token,'type': 'file'}response = requests.post(url, files=files, data=data)json = response.json()return json["media_id"]# 3.文件发送
def SendFile():access_token = getAccess_token()media_id = getMedia_id()# 获取群聊Idchatid = 'chat1ee**' url = 'https://oapi.dingtalk.com/chat/send?access_token=' + access_tokenheader = {'Content-Type': 'application/json'}data = {'access_token': access_token,'chatid': chatid,'msg': {'msgtype': 'file','file': {'media_id': media_id}}}r = requests.request('POST', url, data=json.dumps(data), headers=header)print(r.json())SendFile()
要向多个群组发文件,写个循环即可。需要代码的私聊。