场景:定期将号码标记信息以文件形式返回给不同的供应商群组。那么,对于本地文件(图片或excel、csv等),如何实现自动发送到特定群组?本文将通过Python+钉钉小程序实现该功能。

目录

1.创建钉钉小程序并配置相关权限参数

1.1 创建小程序

1.2 权限/参数配置

2.获取指定群聊的chatid

 3.编写Python脚本

1.创建钉钉小程序并配置相关权限参数

1.1 创建小程序

一般于公司而言,需要先获取钉钉后台开发的sit环境权限,小程序开发测试完成后,同步到生产环境(专员)操作,并开通相关权限。

登录钉钉开放平台:钉钉开放平台

小程序创建步骤:应用开发-->企业内部开发-->创建应用-->小程序

python 向钉钉群发送图片 怎样往钉钉群里发图片_Python

创建完成后进入小程序,配置相关权限/参数。

1.2 权限/参数配置

主要配置开发管理和权限管理。(这一步走了很多坑,好多文档并没有讲清楚)

(1)开发管理:配置服务器出口IP(即白名单)。

python 向钉钉群发送图片 怎样往钉钉群里发图片_钉钉_02

有两种方式获取本地IP:

        1)命令行输入:

curl ifconfig.me

        2)打开网页即可看到

http://myip.fireflysoft.net/

(2) 权限管理

需要配置的几个权限如下:

python 向钉钉群发送图片 怎样往钉钉群里发图片_python 向钉钉群发送图片_03

python 向钉钉群发送图片 怎样往钉钉群里发图片_json_04

  

2.获取指定群聊的chatid

chatid就是群聊(群组)的唯一标识,是不会变化的,要向特定群聊发文件,必须有chatid。

chaidid的获取从这个官方连接调:

API Explorer

 步骤:填写corpid(填写你自己的),其他默认false

python 向钉钉群发送图片 怎样往钉钉群里发图片_json_05

corpid在后台首页信息可以看到:  

python 向钉钉群发送图片 怎样往钉钉群里发图片_群组_06

点击发起调用-->扫描二维码选择相应群聊-->发起调用,即可获得chatid 

注:第一次发起调用并扫描二维码后,手机端会弹出“扫码授权提示”,点击确定即可;

python 向钉钉群发送图片 怎样往钉钉群里发图片_Python_07


 3.编写Python脚本

Appkey/Appsecret 在小程序应用信息里可以看到,chatid在步骤2中已详细说明。

python 向钉钉群发送图片 怎样往钉钉群里发图片_json_08

完整代码如下,填写对应的信息即可: 

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()

 要向多个群组发文件,写个循环即可。需要代码的私聊。