场景:定期将号码标记信息以文件形式返回给不同的供应商群组。那么,对于本地文件(图片或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)打开网页即可看到
(2) 权限管理
需要配置的几个权限如下:
2.获取指定群聊的chatid
chatid就是群聊(群组)的唯一标识,是不会变化的,要向特定群聊发文件,必须有chatid。
chaidid的获取从这个官方连接调:
步骤:填写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_token
files = {'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()
# 获取群聊Id
chatid = 'chat1ee**'
url = 'https://oapi.dingtalk.com/chat/send?access_token=' + access_token
header = {
'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()
要向多个群组发文件,写个循环即可。需要代码的私聊。