目标
让 AI 导师在飞书通道发送原生语音条(非 MP3 文件附件),实现像真人一样的语音交互体验。
核心发现
飞书原生语音条 = OGG + Opus 编码 + asVoice 参数
| 格式 | 显示效果 | 能否播放 |
|---|---|---|
| MP3 文件 | ❌ 文件附件 | ✅ 能播放 |
| WAV 文件 | ❌ 文件附件 | ✅ 能播放 |
| OGG (Opus) + asVoice | ✅ 原生语音条 | ✅ 能播放 |
完整管道
文字内容 → edge-tts (晓晓) → MP3 → ffmpeg → OGG (Opus) → message tool (asVoice:true) → 飞书语音条
分步说明
① TTS 生成(edge-tts)
edge-tts --voice zh-CN-XiaoxiaoNeural --text "要说的话" --write-media "output.mp3"
② 转码 OGG(ffmpeg)
ffmpeg -y -i output.mp3 -c:a opus -b:a 32k -strict -2 output.ogg
⚠️
libopusvsopus:家里/单位 ffmpeg 版本不同时编码器名可能不同,实际执行前用ffmpeg -encoders | findstr opus确认
③ 发送语音条(message tool)
message tool: action=send, filePath=output.ogg, asVoice=true
关键工具
| 工具 | 路径 | 用途 |
|---|---|---|
| ffmpeg | C:\Program Files\ffmpeg\ffmpeg.exe |
转码 WAV/MP3 → OGG |
| edge-tts | edge-tts (Python CLI) |
文本→语音(晓晓,自然女声) |
| whisper | whisper (Python CLI) |
语音→文字(收听飞书语音条) |
可用中文字音
edge-tts --list-voices | Select-String "zh-CN"
当前使用:zh-CN-XiaoxiaoNeural(最自然的普通话女声)
收听用户语音条
用户发送的飞书语音条 → 系统保存为 OGG 文件 → whisper 转写
whisper "输入.ogg" --model tiny --language zh --output_dir "输出目录"
⚠️ whisper 依赖 ffmpeg,必须将 ffmpeg.exe 放在 PATH 中。
文件管理
使用固定文件名 + 覆盖写入,避免临时文件堆积:
D:\temp\guotugongjuxiang\source\_posts\.workbuddy\tts_cache.mp3
D:\temp\guotugongjuxiang\source\_posts\.workbuddy\tts_cache.ogg
已知限制
| 问题 | 原因 | 状态 |
|---|---|---|
| 语音条不显示时长 | 飞书 API 需传 duration 参数,message 工具不支持 |
⚠️ 待解决 |
| whisper 需 ffmpeg | whisper 解码 OGG 依赖 ffmpeg | ✅ 已安装 |
测试记录
- 2026-06-20:首次打通,确认 OGG + asVoice = 原生语音条 ✅
- 2026-06-20:对比测试 MP3/WAV/OGG 三种格式,仅 OGG 成功 ✅
- 2026-06-20:晓晓语音质量获认可 ✅