机器人发送文件到钉钉群

python发送文件到群聊

本文用具记录往钉钉群中用机器人推送文件消息,钉钉文档已经很全面了,本文只做具体案例展示

一、上传文件获取mediaId

defupload_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)withopen(file_path,'rb')as f: files ={'media':(filename, f, mime_type)# key 是 'media',filename 是纯文件名} data ={'type': media_type } params ={'access_token': access_token }# 不要手动设置 headers response = requests.post( url, params=params, data=data, files=files # 不要加 headers={'Content-Type': ...}) result = response.json()print("响应:", result)if result["errcode"]==0:return result["media_id"]else:print("上传失败: {}".format(result['errmsg']))returnNone

注意事项文件名字要不包含中文、其他字符,最好是全英文的,否则会上传失败{‘errcode’: 40035, ‘errmsg’: ‘缺少参数 media’}

二、获取群信息、机器人信息,因自定义机器人不支持推送文件,所以使用企业机器人

defdingding_CWGX_getToken(): url ="https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s"%("dingpwshwcfdszttvrsy","T**********H") requestData ={'appKey':'ding**********sy','appsecret':'T9**********H'}try:# print(requestData) # {"errcode":40035,"errmsg":"缺少参数 corpid or appkey"} ,data=requestData 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_ro bot_send_file(file_path,access_token,mediaId):""" 推送钉钉群消息,返回 processQueryKey :param access_token: 钉钉 access_token :param file_path: 本地文件路径 :return: processQueryKey or None """ifnot access_token: access_token = dingding_CWGX_getToken()ifnot 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"}# 发送 file消息 postdata ={"msgParam":"{\"mediaId\":\"{}\",\"fileName\":\"表格.xlsx\",\"fileType\":\"xlsx\"}".format(mediaId),"msgKey":"sampleFile","robotCode":"ding**********sy","openConversationId":"cid+**********=="}try:print(postdata) result = requests.post(postUrl,headers=headers,data=json.dumps(postdata),timeout=30)print(result.text)if result["processQueryKey"]:return result["processQueryKey"]else:print("发送失败: {}".format(result['errmsg']))returnNoneexcept Exception as e: rpa.logger.error(traceback.format_exc())# 报错日志return'失败'

注意事项robotCode钉钉应用中创建的机器人中获取,openConversationId获取方式chooseChat

完工

Read more

采摘机器人毕业设计实战:从机械控制到感知决策的全栈实现

最近在指导几位同学完成采摘机器人相关的毕业设计,发现大家普遍在从理论到实践的转化过程中遇到不少共性问题。比如算法在电脑上跑得好好的,一上实机就各种延迟、丢帧;机械臂的运动规划和视觉感知像是两个独立的系统,难以协同;还有系统集成后调试困难,牵一发而动全身。结合这些实际痛点,我梳理了一套基于ROS 2和STM32的全栈实现方案,希望能为正在或即将进行类似毕设的同学提供一个清晰、可复现的参考路径。 1. 毕业设计常见痛点深度剖析 在开始技术选型之前,我们先明确要解决哪些核心问题。很多同学的毕设停留在仿真或单个模块演示阶段,难以形成完整的闭环系统,主要痛点集中在以下几个方面: 1. 算法与执行器严重脱节:这是最常见的问题。同学们往往在Jupyter Notebook或OpenCV的窗口中完成了漂亮的果实识别,识别框画得精准,但识别结果如何转换成机械臂末端执行器的空间坐标?这个坐标转换涉及相机标定、手眼标定、坐标系变换等一系列步骤,任何一个环节出错都会导致“看得见但抓不着”。更复杂的是,视觉算法输出的频率(如10Hz)与底层电机控制频率(可能高达100Hz)不匹配,如果没有良好的中间层进

本地AI电话机器人-将手机电话通话声音通过udp传输到局域网的Python脚本

本地AI电话机器人-将手机电话通话声音通过udp传输到局域网的Python脚本

将手机电话通话声音通过udp传输到局域网的Python脚本 --本地AI电话机器人 * 一、前言 上一篇:手机转SIP-手机做中继网关-落地线路对接软交换呼叫中心下一篇:刷抖音/看电子书-如何让手机自动上下翻页和左右翻页 前面我们通过两个篇章《手机SIM卡通话中随时插入录音语音片段(Android方案)》《手机SIM卡通话中随时插入录音语音片段(Windows方案)》,阐述了【手机打电话过程中,随机插播预录语音片段】的功能和根据对方手机按下DTMF按键,播放不同IVR应答语音片段给对方手机的能力。 在AI电话沟通时,由于手机性能和算力的局限性,通常AI交互的模型和算法无法部署到手机上。这样的话就需要将拦截到的手机通话的声音数据,通过网络(局域网或互联网)将语音包传输给AI算力服务器。由其对语音进行ASR识别和语义理解,并生成最终的应答TTS语音,反馈回手机注入到电话通话中。 当前市面上主流的实时语音流的传输方式主要有两种: 1)SIP/WebRTC协议及配套的RTP/RTCP语音数据传输。 2)直接将语音数据以udp广播或组播的方式分发给局域网内多个设备。 前面我们

ABB 机器人虚拟示教器基础操作教程

ABB 机器人虚拟示教器基础操作教程

一、基础操作界面与模式 1. 操作模式切换 * 手动模式:用于编程、调试和手动操作 自动模式:用于程序自动运行(需满足安全条件) 2. 动作模式选择(手动模式下) * 单轴模式:单独控制每个关节轴(1-6轴) * 优点:最直观,与坐标系无关 * 用途:调整机器人姿态,避免奇异点 * 线性模式:TCP沿直线运动 * 重定位模式:TCP位置不变,只改变工具姿态 点击示教器左上角 进入菜单栏 3. 坐标系选择(线性/重定位模式下) 四个可选坐标系: * 大地坐标系:机器人安装的基础坐标系 * 基座坐标系:机器人底座中心为原点(多数基本选择) * 工件坐标系:用户自定义的工作平面 * 工具坐标系:以工具末端为原点 二、三大核心数据设置 1. 工具数据(tooldata) 定义:描述工具(

论文笔记DiT:Scalable Diffusion Models with Transformers(含transformer的可扩展扩散模型 )

论文笔记DiT:Scalable Diffusion Models with Transformers(含transformer的可扩展扩散模型 )

Abstract:     论文的核心思想非常直接:用一个标准的 Transformer 架构替换掉扩散模型中常用的 U-Net 主干网络,并证明这种新架构(称为 DiT, Diffusion Transformer)具有出色的可扩展性(Scalability)。 Background & Motivation:     在论文发表前,Transformer 已经在自然语言处理(BERT, GPT)和计算机视觉(ViT)等领域取得了巨大成功,成为了一种“统一”的架构。然而,在图像生成领域,特别是扩散模型中,大家仍然普遍使用 U-Net。U-Net 因其多尺度特征融合和卷积的局部归纳偏置而被广泛采用。     在深度学习中,一个好的架构应该具备良好的“可扩展性”——即投入更多的计算资源(更大的模型、更多的数据),性能应该会持续稳定地提升。ViT 已经证明了 Transformer 在视觉识别任务上具有这种特性。作者们希望验证 DiT 是否也具备这种优良特性,为未来的生成模型发展指明一条清晰的路径。