Feishu Voice TTS
Overview
把文本转换为语音(edge-tts),再转码为飞书可用的 Opus(OGG 容器),调用飞书开放平台“先上传文件再发 audio 消息”的标准流程发送,避免“直接发文件被降级成文本”。
Quick Start
执行脚本:
CODEBLOCK0
参数:
- 1.
text(必填)要播报的文本 - INLINECODE1 (必填,可用环境变量替代)飞书用户 open_id
- INLINECODE2 (可选)edge-tts 音色,默认 INLINECODE3
环境变量(可选,优先级高于配置文件):
- - INLINECODE4
- INLINECODE5
- INLINECODE6
- INLINECODE7
Workflow
按以下顺序执行,不要跳步:
- 1. 文本转语音:
edge-tts 生成 mp3 - 转码:
ffmpeg 转为 audio/ogg(opus 编码,16k 单声道) - 获取 tenant token:飞书 INLINECODE11
- 上传语音文件:飞书
/im/v1/files,拿 INLINECODE13 - 发送 audio 消息:飞书
/im/v1/messages,msg_type=audio + INLINECODE16
成功时脚本输出:
CODEBLOCK1
Requirements
- -
ffmpeg 可用 - INLINECODE18 可用(脚本自动尝试以下入口):
-
edge-tts
-
~/Library/Python/3.14/bin/edge-tts
-
python3 -m edge_tts
- - 本机存在 OpenClaw 配置: INLINECODE22
- 默认读取: INLINECODE23
Failure Handling
- - 缺少依赖:按报错安装(例如
python3 -m pip install --user edge-tts) - 飞书 API 失败:脚本会直接输出原始 JSON 错误,按
code/msg 排查 - 被降级成文本:确认发送的是
msg_type=audio 且 content 里是上传后的 INLINECODE28
scripts/
- -
scripts/send_feishu_voice.sh:完整自动化脚本(TTS + 转码 + 上传 + 发送)
Feishu Voice TTS
概述
将文本转换为语音(edge-tts),再转码为飞书可用的 Opus(OGG 容器),调用飞书开放平台“先上传文件再发 audio 消息”的标准流程发送,避免“直接发文件被降级成文本”。
快速开始
执行脚本:
bash
skills/feishu-voice-tts/scripts/sendfeishuvoice.sh 用户你好,这是一条语音消息 useropenid
参数:
- 1. text(必填)要播报的文本
- openid(必填,可用环境变量替代)飞书用户 openid
- voice(可选)edge-tts 音色,默认 zh-CN-YunxiNeural
环境变量(可选,优先级高于配置文件):
- - FEISHUAPPID
- FEISHUAPPSECRET
- FEISHUOPENID
- EDGETTSVOICE
工作流程
按以下顺序执行,不要跳步:
- 1. 文本转语音:edge-tts 生成 mp3
- 转码:ffmpeg 转为 audio/ogg(opus 编码,16k 单声道)
- 获取 tenant token:飞书 /auth/v3/tenantaccesstoken/internal
- 上传语音文件:飞书 /im/v1/files,获取 filekey
- 发送 audio 消息:飞书 /im/v1/messages,msgtype=audio + file_key
成功时脚本输出:
json
{success: true, messageid: ..., filekey: ...}
依赖要求
- - ffmpeg 可用
- edge-tts 可用(脚本自动尝试以下入口):
- edge-tts
- ~/Library/Python/3.14/bin/edge-tts
- python3 -m edge_tts
- - 本机存在 OpenClaw 配置:~/.openclaw/openclaw.json
- 默认读取:channels.feishu.accounts.feishu-main.appId/appSecret
失败处理
- - 缺少依赖:按报错安装(例如 python3 -m pip install --user edge-tts)
- 飞书 API 失败:脚本会直接输出原始 JSON 错误,按 code/msg 排查
- 被降级成文本:确认发送的是 msgtype=audio 且 content 里是上传后的 filekey
脚本目录
- - scripts/sendfeishuvoice.sh:完整自动化脚本(TTS + 转码 + 上传 + 发送)