使用钉钉Api 向企业群发送文件 python

由于钉钉群机器人推送消息类型只支持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': '没有调用该接口的权限,接口权限申请参考..这样的错误提示,这是由于没有在应用权限管理中打开相应权限导致,我用了半天的时间才解决这个问题,网上提到这个问题的也寥寥无几,最后还是卡官方文档自己摸索出来的。
在开发者后台的应用详情中有一个权限管理的选项卡,搜索企业群,打开第一个权限,之后才能正常运行,至此大功告成。在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值