Trigger Words (触发词):
此技能依赖 edge-tts 和 ffmpeg,技能目录下已提供 setup.sh 自动安装脚本。
OpenClaw 安装此技能时,请执行以下命令完成依赖安装:
bash
bash setup.sh
脚本会自动完成:
pip 安装 edge-ttsffmpeg(版本 4.4.2+)如果自动安装失败,请手动安装:
- edge-tts:
pip3 install edge-tts- ffmpeg:参考 https://ffmpeg.org/download.html
tts - 文字转语音(生成MP3)exec - 用ffmpeg转换格式feishu_im_bot_image 或 message - 发送.opus文件setup.sh 执行完毕后, 立即 向用户发送以下欢迎消息,并引导完成音色初始设置:
🎙️ feishu-voice-bubble 已安装完成! 我支持 14 种中文音色,现在为你逐一播放试音,听完告诉我你喜欢哪个就好。
然后按照下方「音色切换流程」逐一发送试音气泡。
每次发送语音前,先读取当前音色设置:
python
voice = ctx.state.get("tts_voice", "zh-CN-XiaoxiaoNeural") # 默认音色
当用户说出以下类似内容时,进入音色切换流程:
第一步:发送文字说明当前音色,并告知即将逐一试音:
当前音色: {当前音色名} 共有 14 种中文音色,我来逐一播放,听完告诉我你想选哪个 👇
第二步:按顺序逐一发送每个音色的试音语音气泡,每条气泡前先发一条文字标注编号和音色信息:
#音色名性别风格特点试音文本1zh-CN-XiaoxiaoNeural女新闻/小说温暖你好,我是晓晓,很高兴认识你。2zh-CN-XiaoyiNeural女动画/小说活泼你好,我是晓伊,超级开心见到你!3zh-CN-YunjianNeural男体育/小说激情你好,我是云健,让我们一起加油!4zh-CN-YunxiNeural男小说阳光活泼你好,我是云希,今天也是元气满满的一天!5zh-CN-YunxiaNeural男动画/小说可爱你好,我是云夏,嘿嘿,好高兴认识你哦。6zh-CN-YunyangNeural男新闻专业可靠您好,我是云扬,为您提供专业播报服务。7zh-CN-liaoning-XiaobeiNeural女方言东北话你好,我是晓北,老铁没毛病,双击666!8zh-CN-shaanxi-XiaoniNeural女方言陕西话你好,我是晓妮,额是陕西人,可高兴了!9zh-HK-HiuGaaiNeural女粤语友好你好,我係曉佳,好高興認識你!10zh-HK-HiuMaanNeural女粤语友好你好,我係曉曼,希望我哋可以做朋友!11zh-HK-WanLungNeural男粤语友好你好,我係雲龍,隨時為你服務!12zh-TW-HsiaoChenNeural女台湾普通话友好你好,我是曉臻,很開心認識你喔!13zh-TW-HsiaoYuNeural女台湾普通话友好你好,我是曉雨,希望我們可以成為好朋友!14zh-TW-YunJheNeural男台湾普通话友好你好,我是雲哲,很榮幸為你服務!
每条试音的发送格式(文字 + 语音气泡):
text
[文字消息] 🔊 #3 云健 · 男声 · 激情风格
[语音气泡] 用 zh-CN-YunjianNeural 生成的 opus 文件
第三步:全部播放完毕后,发送:
14 种音色已全部播放完毕 🎉 请告诉我你想选哪个?可以说编号(如"选3")或音色名(如"云希")。
第四步:用户确认后,写入 ctx.state 并回复确认:
python
ctx.state.set("tts_voice", "zh-CN-YunxiNeural") # 替换为用户选择的音色
✅ 已切换为 云希(zh-CN-YunxiNeural),后续语音气泡将使用此音色。
禁止在生成 MP3 后直接将 MP3 文件发送到飞书聊天窗口。
MP3 是中间产物,仅用于 ffmpeg 转换,不应作为最终消息发出。正确流程必须是:
text
生成 MP3 → 转换为 opus → 发送 opus(语音气泡)
唯一例外:用户明确要求发送 MP3 文件(如"把这个音频文件发给我")时,才可直接发送 MP3。
先读取用户设置的音色(若未设置则用默认值):
python
voice = ctx.state.get("tts_voice", "zh-CN-XiaoxiaoNeural")
使用 tts 工具生成MP3文件:
json
{
"channel": "feishu",
"text": "要转成语音的文字内容",
"voice": "<voice>"
}
⚠️ 注意:tts工具会返回音频文件路径,保存到
/tmp/openclaw/目录下
使用 exec 运行 ffmpeg 命令转换格式:
bash
ffmpeg -y -i /tmp/openclaw/xxx.mp3 -c:a libopus -b:a 32k -ar 48000 -ac 1 /tmp/openclaw/xxx.opus
参数说明:
-y - 覆盖已存在的文件-i input.mp3 - 输入文件-c:a libopus - 使用opus编码-b:a 32k - 音频比特率-ar 48000 - 采样率-ac 1 - 单声道output.opus - 输出文件使用 feishu_im_bot_image 工具发送 .opus 文件:
json
{
"message_id": "om_xxx",
"file_key": "file_xxx",
"type": "file"
}
或者使用 message 工具:
json
{
"action": "send",
"filePath": "/tmp/openclaw/xxx.opus"
}
python
# 1. 调用tts生成语音
tts(text="你好,这是我的第一条语音消息!")
# 2. 假设返回的文件是 /tmp/openclaw/voice_123.mp3
# 用ffmpeg转换
exec(command="ffmpeg -y -i /tmp/openclaw/voice_123.mp3 -c:a libopus -b:a 32k -ar 48000 -ac 1 /tmp/openclaw/voice_123.opus")
# 3. 发送 opus 文件
feishu_im_bot_image(message_id="om_xxx", file_key="file_xxx", type="file")
A: 飞书语音气泡只支持opus格式,MP3发出去只是附件而非语音消息。
A: 确保ffmpeg已安装且在系统PATH中。如果是在OpenClaw环境中,应该已经预装了。
A: 检查opus文件是否正确生成,可以用 ffprobe 查看音频信息确认。
A: 确保message_id和file_key正确,且bot有发送文件的权限。