© 2026 方可乐 版权所有
方可乐AI Growth
首页关于我成长圈面试咨询
探索成长圈
内容专栏/公开文章/OpenClaw
OpenClaw

离谱!朋友一晚上没搞定在飞书中让OpenClaw回复语音消息,我的龙虾一小时搞定了

今天有一个朋友找我帮忙解决一个问题,他想要让龙虾能在飞书中给他发语音消息。 但是不管是龙虾自己解决还是用Claude code 辅助,都没有搞定这个问题,所以找我看看有没有什么“黑科技”。 我凭借靠谱的龙虾脑子和过往的处理经验, 一小时就给

发布于 2026/03/234 分钟阅读

今天有一个朋友找我帮忙解决一个问题,他想要让龙虾能在飞书中给他发语音消息。

但是不管是龙虾自己解决还是用Claude code 辅助,都没有搞定这个问题,所以找我看看有没有什么“黑科技”。

我凭借靠谱的龙虾脑子和过往的处理经验, 一小时就给搞定了。

说出来你可能觉得夸张,但看完这篇你就知道差在哪了。

第一轮:WAV + asVoice → 收到灰色文件图标

第一轮我的龙虾选择的方案是用Python wave库生成1kHz正弦波WAV文件,用message工具的 filePath + asVoice 发送。

结果:收到的是灰色文件图标,不是语音条。

原因: asVoice 参数飞书插件根本不认识,当普通文件处理了。

第二轮:OGG/Opus + asVoice → 还是附件

第二轮为了生成ogg格式的音频,装了ffmpeg,用gTTS生成MP3,再转成.ogg(Opus),发了两次,asVoice依然不生效。

排查发现:

  • asVoice只在Telegram/Discord/BlueBubbles文档里,飞书插件源码里没有任何处理逻辑

  • .wav格式不在插件识别的音频扩展名里,被当成stream类型文件

第三轮:改飞书插件源码 → 改错地方了

第三轮让龙虾继续排查,发现飞书插件发送audio类型消息时,content是 JSON.stringify({file_key}) , 没有duration字段 ,这是语音消息无法正确显示的根本原因。

操作:改了media.ts源码,加了duration字段和ffprobe探测时长函数,重启网关。

结果:日志里没有任何调试输出

原因:OpenClaw运行时加载的是 dist/ 下编译后的JS文件,不是 src/ 下的TS源码 改源码没用,方向就错了。

第四轮:直接调飞书API → 成功

一把搞定,我发现根本不需要碰插件! 直接用Python调飞书开放API:

  1. POST /auth/v3/tenant_access_token 获取token

  2. POST /im/v1/files 上传音频(file_type=opus,duration在form data)

  3. POST /im/v1/messages 发送(msg_type=audio,content包含file_key + duration)

结果:飞书显示成真正的语音播放条,可拖动进度条!

我朋友踩的坑

说到这里,你可能也好奇 ——我朋友是怎么搞了一晚上的? 他的用法我也挺无奈的,他采用的是 第三方API中转平台 + glm5模型。 这个组合有什么问题? 实测有这些问题。

  • 反应慢 :请求动不动就卡住

  • 经常死机卡住 :用着用着就无响应了

  • 方案方向不对 :给出来的解决思路本身就是错的

一晚上都在跟中转平台搏斗,完全没往"直接调官方API"这个方向想。

而我一小时找到方向,靠的不是运气 ——是经验。 知道什么方案靠谱,什么方案大概率是坑。

沉淀成原则

搞完之后我给自己定了条规矩: 以后所有通用产出(Skill、脚本)必须:

  • 不硬编码凭证、账号名、用户ID

  • 所有特定值通过环境变量或参数传入

  • 文档只描述通用逻辑

信息泄露风险、账号依赖问题,必须在源头杜绝。

说白了 很多人用AI编程和龙虾这种智能体干活, 不是输给AI,是输给自己踩的坑。

方向不对,努力白费。

第三方平台、中转API,这些看起来"省事"的东西,关键时刻会让你多走一整晚的弯路。

而掌握正确方法的人,一小时就够了。