
很多公司不知道企微有个会话存档功能——客户和员工的聊天记录包括文字、语音、视频、文件全部可以拉回来做合规审计。我们团队上周帮一个金融客户搭了质检系统语音转文字这一步踩了不少坑整理出来给大家参考。先确认会话存档能拉到什么会话存档不是默认开启的必须在企微管理后台「存档与审计」里单独开通并且必须告知员工。不开通的话API调用会直接报权限错误。拉会话记录用/wx-api/api/chatarchive/getChatData返回的消息结构里语音和视频类型不会直接给文件只会给mediaIdresp requests.post( f{BASE}/wx-api/api/chatarchive/getChatData, headersHEADERS, json{ startTime: int(time.time()) - 3600, # 时间范围Unix秒 endTime: int(time.time()), cursor: , # 分页游标 limit: 100 } ) # 返回的每条消息里 type 字段 # text → content 直接有文字 # image → mediaId图片 # voice → mediaId语音 voiceDuration秒 # video → mediaId视频 videoDuration # file → mediaId文件下载媒体文件走 CDN 拿mediaId不能直接下载要先调 CDN 接口media_id mdi_xxxxx # 从 getChatData 返回的 mediaId # 第一步获取临时下载凭证 ticket requests.post( f{BASE}/wx-api/api/cdn/getDownloadTicket, headersHEADERS, json{fileId: media_id} )[data][ticket] # 第二步用 ticket 下载文件 download requests.get( f{BASE}/wx-api/api/cdn/download, headersHEADERS, params{fileId: media_id, ticket: ticket}, streamTrue ) # 第三步保存到本地注意文件扩展名 file_type amr if msg_type voice else mp4 with open(fmedia/{media_id}.{file_type}, wb) as f: for chunk in download.iter_content(8192): f.write(chunk)语音转文字自己调 ASR 服务企微API不内置转写功能语音文件下载下来是 AMR 或 SILK 格式不能直接播放必须转成 WAV/MP3 后再调第三方语音识别。整个流程import subprocess, requests # 第一步用 ffmpeg 把 AMR 转成 WAV subprocess.run([ ffmpeg, -i, fmedia/{media_id}.amr, -ar, 16000, -ac, 1, # 16kHz单声道ASR通用格式 fmedia/{media_id}.wav ], checkTrue) # 第二步调 ASR 转写阿里云/腾讯云/Whisper都行 with open(fmedia/{media_id}.wav, rb) as audio: text call_asr_service(audio.read()) # 第三步存回质检数据库 db.save_transcript(chat_id, media_id, text)如果不想自己搭转写服务Eyun 平台提供了一个简化版的转写接口封装需要单独申请权限在开发文档里搜 chatarchive transcribe 就能找到。三个容易忽略的细节一、mediaId 有效期短。企微返回的mediaId只有72 小时有效拉完会话记录要立刻下载别存了 mediaId 过两周再取——到时候 ticket 都拿不到了。二、会话存档拉不到自己发的消息。我们做测试时一开始发现员工通过API发给客户的消息在存档里能拉到但员工自己手机手动发的也能拉到——这跟消息Webhook不同API发的消息Webhook收不到。存档是全量的只要是双方之间的消息都会存。三、视频文件体积大。视频消息可能几十MB/wx-api/api/cdn/download必须用streamTrue边下边写整个文件加载到内存里容易爆。质检归档的标准流程定时调chatarchive/getChatData拉增量会话用 cursor 游标避免漏拉遇到voice/video/image/file类型的消息调 CDN 接口下载媒体文件语音转文字、视频抽帧转文字可以调同一个 ASR转写结果和原始媒体文件一起存对象存储会话元数据存关系库给合规团队一个查询入口按时间/员工/客户关键词搜索聊天内容会话存档这块 API 文档相对冷门但做金融、电商合规的公司几乎都要碰。Eyun上的接口路径比企微原生的统一很多调起来省心不少。