

现在已经有大佬写了钉钉云盘操作(没错,这里点名表扬驿站大佬),只需要根据文档操作即可完成上传文件发送到群聊和用户。但是因为钉钉开发文档的更新,接口有了V1和V2而且各种文件的接口很混乱(媒体,在线,本地)所以没有特别全面,这里补充一下非上传在线文件的接口实现,基于驿站大佬的指令基础。


这里写了两个请求,一个获取dentryId,其实类同于文件id,但是如果用驿站大佬的发送文件指令,会新建一个副本,不是原文件(是的,这就是混乱),所以这里换了一个发送链接的接口做文件发送。可以直接新建python文件然后cv
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
def main(args):
pass
import json
import os
import requests
def send_online_url(access_token,unionId,spaceId,file_name,openConversationId):
url_ = "https://api.dingtalk.com/v1.0/convFile/conversations/files/links/send?unionId={}".format(unionId)
# url_ = "{}{}".format("https://api.dingtalk.com", url)
print(url_)
dentryId_list = get_dentryId(access_token,unionId,spaceId)["dentries"]
dentryId = [item["id"] for item in dentryId_list if file_name in item["name"].split('.')[0]][0]
body = {
"spaceId" : spaceId,
"dentryId" : dentryId,
"openConversationId" : openConversationId
}
headers = {
'Host': 'api.dingtalk.com',
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": access_token
}
responses = requests.post(url_, headers=headers, json=body)
json_data = responses.json()
code, message = json_data.get("code", None), json_data.get("message", None)
json_str = json.dumps(json_data, ensure_ascii=False)
assert code is None, "接口请求异常,响应值 - {},url - {}".format(json_str, url_)
return json_data
def get_dentryId(access_token,unionId,spaceId,):
url_ = "https://api.dingtalk.com//v1.0/storage/spaces/{}/dentries".format(spaceId)
# url_ = "{}{}".format("https://api.dingtalk.com", url)
print(url_)
body = {
"parentId" : 0,
"unionId" : unionId
}
headers = {
'Host': 'api.dingtalk.com',
"Content-Type": "application/json",
"x-acs-dingtalk-access-token": access_token
}
responses = requests.get(url_, headers=headers, json=body)
json_data = responses.json()
code, message = json_data.get("code", None), json_data.get("message", None)
json_str = json.dumps(json_data, ensure_ascii=False)
assert code is None, "接口请求异常,响应值 - {},url - {}".format(json_str, url_)
return json_data
这里稍微复杂了一点,不过你可以无视,直接照抄,基本逻辑是建立钉钉云盘连接(具体流程参考驿站大佬的文档)然后直接调用模块填参即可

填参说明(照抄版本)
access_token:dingtask_instance.get_access_token()#调用对象里的token
unionId:dingtask_instance.get_operator_id(50XXXX3855XXXX9000) #此处填入用户id,发送在线文件至群会话需要的参数这里也要用到
spaceId:24XXX29XXX5 #此处填入空间ID,获取逻辑参考文档
file_name:文件名 #文件全名,考虑到可能相似文件名这里写死了逻辑
openConversationId:dingtask_instance.get_openConversationId('chat57XXXXXec2bb9XXXXX1bfaXXXXXbd324') #群会话ID待解决问题
这里的parentId设置了也无效,问题未知,也就是说,处理不了两层文件夹下的文件,文档太乱啦!!!
欢迎大家指出问题提供优化意见哈~