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