把 AI 的文字回复一键转成语音消息发到飞书群:每条回复卡片底部有「🔊 语音总结」按钮,点一下,机器人把这条回复精简成口语、合成语音气泡发到当前话题。
行为要点
- 按需触发:默认不自动生成,想听才点,避免每条回复都附带一大段语音。
- 先精简、再合成:点击后模型先把原回复压成几句口语(去掉代码、路径、链接等不适合朗读的内容),听到的是「讲人话」的总结,不是照念原文。
- 有权限门:只有对该机器人有「对话 / 操作」权限的成员能点,其他人点击收到「需要授权」提示。
- 每条只生成一次:多人点击也不会刷屏。
语音是可选高级功能:需先配置一个 TTS 引擎,未配置时回复卡片不显示该按钮。
配置引擎
用独立命令 botmux voice 交互式配置(特意不与 botmux setup 混在一起)。配置写入全局 ~/.botmux/config.json 的 voice 块,botmux restart 后生效。支持两类引擎,按身份二选一。
字节租户:SAMI(语音合成大模型)
- 在公司语音能力平台申请「语音合成(大模型)」能力(botmux 只做合成,不需要语音识别),拿到 appkey、AccessKey、SecretKey 三样;提示 Namespace 未开通 / 无路由时走内部 Oncall 找语音(Speech)团队开通。
botmux voice→ 选 SAMI → 依次粘贴 accessKey / secretKey / appkey →botmux restart。
音色默认「灿灿」(zh_female_cancan_mars_bigtts),配置时可改成其它音色 id;服务端点已内置无需填写。SecretKey 只在本机签名换取临时 token,不外发。
外部用户:OpenAI 兼容引擎
接任意兼容 OpenAI 语音接口的 TTS 服务(OpenAI 官方或自建如 Kokoro-FastAPI、openedai-speech):
- baseUrl:官方
https://api.openai.com/v1,自建填自己的(如http://127.0.0.1:8880/v1); - apiKey:服务密钥,自建无鉴权可留空;
- model:官方
tts-1,自建按服务文档(如kokoro); - 音色(voice)可选,OpenAI 默认
alloy。
botmux voice → 选 OpenAI 兼容 → 填 baseUrl / apiKey / model → botmux restart。
系统依赖
合成产物要编码成飞书语音气泡用的 opus 格式,依赖系统 opus-tools(提供 opusenc)。跑 botmux voice 时自动检测,未装会询问并帮装(沿用 tmux 的包管理器 + sudo 逻辑);手动安装:
sudo apt-get install -y opus-tools # Debian / Ubuntu
brew install opus-tools # macOS管理命令
botmux voice # 配置(交互式)
botmux voice status # 查看当前配置(凭证自动打码)
botmux voice disable # 关闭语音(移除配置,按钮随之消失)配置文件参考
直接编辑 ~/.botmux/config.json 的 voice 块:
// 字节租户(SAMI)
{
"voice": {
"engine": "sami",
"speaker": "zh_female_cancan_mars_bigtts", // 可选,默认灿灿
"sami": { "accessKey": "...", "secretKey": "...", "appkey": "..." }
}
}
// 外部用户(OpenAI 兼容)
{
"voice": {
"engine": "openai",
"speaker": "alloy", // 可选
"openai": { "baseUrl": "https://api.openai.com/v1", "apiKey": "...", "model": "tts-1" }
}
}支持按机器人覆盖:在 bots.json 某个机器人对象里放同样的 voice 块,会逐字段盖在全局配置之上(多 bot 共用一套或各配各的都行,见 bots-json)。
关联
- 语音按钮挂在回复卡片底部,卡片与流式输出见 cards
botmux voice属于 CLI 命令族,完整命令表见 cli-commands- 全局 / 按 bot 的配置层次与 bots.json 字段总览见 env