由于钉钉群机器人推送消息类型只支持text,link,markdown等形式,因此我们需要使用钉钉的接口来实现媒体文件的发送。
获取身份验证参数
钉钉开放文档中可以看到我们上传媒体文件需要1个参数:access_token,这个token是俩小时变一次的,因此我们需要用代码去每次获取新的access_token。
在开发者平台创建一个H5应用,可以在详情里看到appkey和appsecret,用这两个把下面的参数填上
def getAccess_token():
# H5
appkey = '**********' # 管理员账号登录开发者平台,应用开发-创建应用-查看详情-appkey
appsecret = '***********' # 应用里的appsecret
url = 'https://oapi.dingtalk.com/gettoken?appkey=' + appkey + \
'&appsecret='+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
上传媒体文件
使用getAccess_token()获取token,然后上传媒体文件,path填本地文件的路径,最后返回media_id接下来发送时会用到
def getMedia_id():
access_token = getAccess_token() # 拿到接口凭证
print(access_token)
type = 'file'
path = '/Users/yao/Downloads/daily_report_logo.PNG' # 文件路径
url = 'https://oapi.dingtalk.com/media/upload?access_token=' + access_token# + '&type='+type
files = {'media': open(path, 'rb')}
data = {'access_token': access_token,
'type': type,
'media': path}
response = requests.post(url, files=files, data=data)
json = response.json()
return json["media_id"]
发送消息
def SendFile():
access_token = getAccess_token()
media_id = getMedia_id()
print(media_id)
chatid = 'chat608d13eb1ae754a640f06bc27185d56a' # 通过jsapi工具获取的群聊id
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())
可以发现,这里我们需要access_token、media_id、chatid这三个参数,前两个我们在前面都已经可以获得了,chatid需要我们再用以下步骤获取
获取chatid
进入JSAPI控制台手机钉钉扫码登录,然后在电脑执行v0.1.2中的biz.chat.chooseConversationByCorpId,手机会显示群聊选择页面,选择企业下的群聊,就可以在电脑页面上看到返回的chatid。
Corid可以在开发者后台的首页右侧看到,注意必须有该企业的开发权限
注意事项
看到这里,可能你已经在满心欢喜地执行SendFile()了,但是很可能你会遇到errcode': 60011, 'errmsg': '没有调用该接口的权限,接口权限申请参考..
这样的错误提示,这是由于没有在应用权限管理中打开相应权限导致,我用了半天的时间才解决这个问题,网上提到这个问题的也寥寥无几,最后还是卡官方文档自己摸索出来的。
在开发者后台的应用详情中有一个权限管理的选项卡,搜索企业群,打开第一个权限,之后才能正常运行,至此大功告成。