语音总结
把 AI 的文字回复一键转成语音消息发到飞书群。每条回复卡片底部会出现一个「🔊 语音总结」按钮,点一下,机器人就把这条回复精简成口语、合成语音气泡发到当前话题。
- 按需触发:默认不自动生成,想听才点——避免每条回复都附带一大段语音。
- 先精简、再合成:点击后模型会把原回复压成几句口语(去掉代码、路径、链接等不适合朗读的内容),所以听到的是「讲人话」的总结,而不是把原文照念。
- 有权限门:只有对该机器人有「对话 / 操作」权限的成员能点;其他人点击会收到「需要授权」的提示。
- 每条只生成一次:同一条回复的语音只会生成一次,多人点击也不会刷屏。
语音是可选的高级功能:需要先配置一个语音合成(TTS)引擎;没配置时回复卡片不显示这个按钮。
配置语音引擎
用独立命令 botmux voice 交互式配置(特意不和 botmux setup 混在一起)。配置写入全局 ~/.botmux/config.json 的 voice 块,botmux restart 后生效。
支持四类引擎,按你的凭证和服务选择:
字节租户:SAMI(语音合成大模型)
字节内部用户直接用公司的语音合成大模型(SAMI),音色自然、无需自建服务。
① 申请凭证(一次性)
- 在公司语音能力平台申请「语音合成(大模型)」能力(botmux 只做合成,不需要语音识别)。
- 拿到三样东西:appkey、AccessKey、SecretKey。
- 若提示 Namespace 未开通 / 无路由,走内部 Oncall 找语音(Speech)团队在运维中心开通。
申请入口请在内部平台搜索「语音合成大模型 / SAMI」,或直接咨询语音团队。
② 配置
音色默认用「灿灿」,可在配置时改成其它音色 id。服务端点已内置,无需填写。SecretKey 只在本机签名换取临时 token,不外发。
外部用户:OpenAI 兼容引擎
外部 / 开源用户接任意兼容 OpenAI 语音接口的 TTS 服务——可以是 OpenAI 官方,也可以是自建(如 Kokoro-FastAPI、openedai-speech 等)。
① 准备一个 TTS 服务,拿到三项:
- baseUrl:服务地址。OpenAI 官方是
https://api.openai.com/v1;自建填你自己的(如http://127.0.0.1:8880/v1)。 - apiKey:服务密钥(自建若无鉴权可留空)。
- model:模型名。OpenAI 是
tts-1;自建按服务文档(如kokoro)。
② 配置
音色(voice)可选:OpenAI 默认 alloy,自建按服务支持的音色填。
MiniMax(海螺语音)
有 MiniMax 开放平台 API key 的用户可直接用官方 T2A v2 语音合成,无需自建服务。
① 准备凭证
- 在 MiniMax 开放平台开通语音合成(T2A)能力,拿到一个 API key。
- 确认接入区域:国内账号一般选「国内」(
api.minimaxi.com);海外账号选「国际」(api.minimax.io)。key 与区域要匹配,配错会报鉴权失败。
② 配置
模型默认 speech-2.8-hd,音色默认 female-shaonv,二者都可在配置时或配置文件里覆盖。若默认音色在你的账号下不可用(不同区域 / 模型开放的音色可能不同),按 MiniMax 控制台列出的系统音色 id 填一个即可。
火山引擎 / 豆包 V3
运行 botmux voice,选择 [4],再明确选择 standard 或 agent-plan,输入该模式的专用 API key。默认音色为 zh_female_vv_uranus_bigtts,语速为 1。有效的正数语速在请求时限制到 0.5 至 2。
普通按量账户的全局配置示例:
在 bots.json 的某个机器人条目中加入以下 voice,可改用 Agent Plan 专用账户:
必须显式设置 engine 和 mode。standard 使用 /api/v3/tts/unidirectional,agent-plan 使用 /api/v3/plan/tts/unidirectional,两者固定使用 openspeech.bytedance.com 和资源 seed-tts-2.0。不要填写聊天服务的地址或旧版 app ID。占位 key 需替换为实际凭证,不会自动读取同名环境变量。
切换 mode 时必须同时提供新 key,不能继承另一模式的全局 key。同一 mode 可继承 key,机器人也可只覆盖 speaker 或 rate。"volcengine": null 或显式空 key 禁用该账户的继承。缺失或非法 mode 会使配置不可用,不会改走普通付费端点。请求失败不重试、不跟随重定向,也不切换端点;套餐计费由供应商决定。
botmux voice status 只显示新账户 key 是否设置。交互式保存任何 TTS 引擎都会保留原有 voice.asr。火山引擎返回 24 kHz、单声道、16 位 PCM,飞书语音仍需下述 Opus 编码器。
合成会缓存整个响应,正常 HTTP 结束后才返回音频,不提供流式播放。默认 60 秒超时覆盖响应头和读体;收到完成记录后连接仍不结束也会超时。客户端限制为 16 MiB 响应、8 MiB PCM 和 10000 条 JSON 记录。截断、非法数据、完成帧携带非空音频或超限都会报错,不发送部分音频。
系统依赖
合成产物要编码成飞书语音气泡用的 opus 格式,依赖系统的 opus-tools(提供 opusenc)。跑 botmux voice 配置时会自动检测,没装会询问并帮你装好(沿用和 tmux 一致的包管理器 + sudo 逻辑)。也可手动安装:
管理命令
配置文件参考
直接编辑 ~/.botmux/config.json 的 voice 块也可以:
支持按机器人覆盖:在 bots.json 某个机器人对象里放同样的 voice 块,会逐字段盖在全局配置之上(多个机器人共用一套、或各配各的都行)。
