跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 机器人发送文件到钉钉群

Python 脚本通过钉钉开放平台接口实现文件上传及群消息推送。流程包含获取 access_token、上传文件获取 mediaId、调用企业机器人接口发送文件消息。需注意文件名编码限制及机器人类型选择(自定义机器人不支持文件推送)。

月亮邮递员发布于 2026/4/10更新于 2026/9/1077 浏览

Python 发送文件到群聊

本文提供往钉钉群中用机器人推送文件消息的具体代码案例。

一、上传文件获取 mediaId

def upload_dingtalk_media(access_token, file_path, media_type="file"):
    """
    上传文件到钉钉,返回 media_id
    :param access_token: 钉钉 access_token
    :param file_path: 本地文件路径
    :param media_type: image / voice / video / file
    :return: media_id or None
    """
    url = "https://oapi.dingtalk.com/media/upload"
    # MIME 类型映射
    mime_map = {
        '.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
        '.xls': 'application/vnd.ms-excel',
        '.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        '.doc': 'application/msword',
        '.pdf': 'application/pdf',
        '.txt': 'text/plain',
        '.png': 'image/png',
        '.jpg': 'image/jpeg',
        '.jpeg': 'image/jpeg',
        '.gif': 'image/gif',
        '.amr': 'audio/amr',
        '.mp4': 'video/mp4'
    }
    ext = os.path.splitext(file_path.lower())[1]
    mime_type = mime_map.get(ext, 'application/octet-stream')
    # 关键:只取文件名,不含路径 filename = os.path.basename(file_path)
    filename = os.path.basename(file_path)
    with open(file_path, )  f:
        files = {: (filename, f, mime_type)}
    data = {: media_type}
    params = {: access_token}
    response = requests.post(url, params=params, data=data, files=files)
    result = response.json()
    (, result)
     result[] == :
         result[]
    :
        (.(result[]))
         
'rb'
as
'media'
'type'
'access_token'
print
"响应:"
if
"errcode"
0
return
"media_id"
else
print
"上传失败:{}"
format
'errmsg'
return
None

注意事项:文件名最好不包含中文及其他特殊字符,建议全英文,否则会上传失败(错误码 40035)。

二、获取群信息、机器人信息及发送文件

因自定义机器人不支持推送文件,需使用企业机器人。

def dingding_CWGX_getToken():
    url = "https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s" % ("dingpwshwcfdszttvrsy", "T**********H")
    requestData = {'appKey': 'ding**********sy', 'appsecret': 'T9**********H'}
    try:
        response = requests.get(url, timeout=30)
        if response.status_code == 200:
            str_res = response.text
            token = json.loads(str_res).get('access_token')
            return token
    except Exception as e:
        rpa.logger.error(traceback.format_exc())
        return ''

def dingding_robot_send_file(file_path, access_token, mediaId):
    """
    推送钉钉群消息,返回 processQueryKey
    :param access_token: 钉钉 access_token
    :param file_path: 本地文件路径
    :return: processQueryKey or None
    """
    if not access_token:
        access_token = dingding_CWGX_getToken()
    if not mediaId:
        mediaId = upload_dingtalk_media(access_token, file_path)
    
    url = "https://api.dingtalk.com/v1.0/robot/groupMessages/send"
    headers = {"x-acs-dingtalk-access-token": access_token, "Content-Type": "application/json"}
    postdata = {
        "msgParam": "{\"mediaId\":\"{}\",\"fileName\":\"表格.xlsx\",\"fileType\":\"xlsx\"}".format(mediaId),
        "msgKey": "sampleFile",
        "robotCode": "ding**********sy",
        "openConversationId": "cid+**********=="
    }
    try:
        print(postdata)
        result = requests.post(url, headers=headers, data=json.dumps(postdata), timeout=30)
        print(result.text)
        if result["processQueryKey"]:
            return result["processQueryKey"]
        else:
            print("发送失败:{}".format(result['errmsg']))
            return None
    except Exception as e:
        rpa.logger.error(traceback.format_exc())
        return '失败'

注意事项:robotCode 在钉钉应用中创建的机器人中获取,openConversationId 可通过官方文档 chooseChat 接口获取。

目录

  1. Python 发送文件到群聊
  2. 一、上传文件获取 mediaId
  3. 二、获取群信息、机器人信息及发送文件

更多推荐文章

查看全部
  • 《Agent Runtime 工程化》第一章 Agent Runtime 全景:1.7 验收标准
  • Vue 组件 Prop 验证与枚举值最佳实践
  • SimVLA: 一种简单的机器人操作 VLA 基线模型
  • 前端如何实现“记住密码”功能
  • TCP TIME_WAIT 状态的作用与服务器端状态过多的原因
  • Kafka 核心原理与架构深度解析
  • Windows 系统安装 RabbitMQ 完整指南
  • Git 审计与合规最佳实践
  • OpenClaw 实战:WSL2 环境下使用 Python 调用摄像头
  • GitHub 日榜项目精选 (2026-02-28)
  • OpenClaw 开源项目实战:打造专属 AI 伴侣与图像生成
  • 基于 LangChain 的 LLM Agent 快速入门与实战
  • 利用大模型工具高效生成 PPT 演示文稿的方法与实践
  • Vue 项目国际化配置指南:i18n 实战
  • 二分查找算法详解与实战题解
  • AI 数据标注平台的选型与实践:效率提升背后的技术逻辑
  • Cursor Agent Skills 实战:打造专属前端 AI 助手
  • GitHub Copilot 实战:AI 编程助手提升开发效率指南
  • Python IDE 集成本地 DocsGPT 助手实战指南
  • C++ Qt 网络编程实战:UDP、TCP 与 HTTP 应用

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online