飞书语音消息发送技能
将文本转换为语音消息发送到飞书,支持在飞书聊天窗口直接播放。
功能特性
- ✅ TTS 文字转语音(使用 zhipu-tts)
- ✅ 自动转换为 opus 格式(飞书要求)
- ✅ 读取音频时长
- ✅ 上传到飞书服务器
- ✅ 发送可播放的语音消息
- ✅ 支持多种声音和语速
前置要求
环境变量
# 飞书配置
export FEISHU_APP_ID="cli_xxx" # 飞书应用 ID
export FEISHU_APP_SECRET="your_secret" # 飞书应用密钥
export FEISHU_RECEIVER="ou_xxx" # 接收者 Open ID(可选,默认从上下文获取)
# 智谱 AI 配置(用于 TTS)
export ZHIPU_API_KEY="your_zhipu_key" # 智谱 API 密钥
必需工具
ffmpeg- 音频格式转换ffprobe- 读取音频信息jq- JSON 处理
依赖技能
zhipu-tts- 文字转语音
使用方法
基本用法
# 发送语音消息
bash scripts/send_voice.sh "你好,这是一条语音消息"
高级选项
# 指定声音和语速
bash scripts/send_voice.sh "你好" tongtong 1.2
# 可用声音:
# - tongtong (彤彤) - 默认女声,平衡音色
# - chuichui (锤锤) - 男声,深沉音色
# - xiaochen (小陈) - 年轻声音
# 语速范围:0.5 - 2.0(默认 1.0)
脚本说明
send_voice.sh
主脚本,完整的语音消息发送流程。
用法:
bash scripts/send_voice.sh <文本> [声音] [语速]
参数:
文本(必需): 要转换为语音的文字声音(可选): tongtong, chuichui, xiaochen(默认:tongtong)语速(可选): 0.5-2.0(默认:1.0)
环境变量:
FEISHU_APP_ID: 飞书应用 IDFEISHU_APP_SECRET: 飞书应用密钥FEISHU_RECEIVER: 接收者 Open ID(可选)
流程说明
- TTS 生成: 使用 zhipu-tts 生成 WAV 格式音频
- 格式转换: 使用 ffmpeg 转换为 opus 格式
- 读取时长: 使用 ffprobe 获取音频时长(秒)
- 上传文件: 上传到飞书,指定
file_type=opus和duration - 发送消息: 发送
msg_type=audio消息
技术细节
音频格式要求
飞书语音消息要求:
- 格式: opus (OGG 容器)
- 编码: libopus
- 比特率: 24k
- 采样率: 24000 Hz
- 声道: 单声道
Duration 参数
关键: 必须在上传时提供 duration 参数(整数秒),否则时长显示为 0。
# 正确的上传方式
curl -X POST "https://open.feishu.cn/open-apis/im/v1/files" \
-F "file=@voice.opus" \
-F "file_type=opus" \
-F "duration=6" # ← 关键参数
API 端点
| 端点 | 用途 |
|---|---|
/auth/v3/tenant_access_token/internal | 获取访问令牌 |
/im/v1/files | 上传文件 |
/im/v1/messages | 发送消息 |
故障排查
语音没有时长
问题: 发送的语音消息时长显示为 0
解决: 确保在上传时传递了 duration 参数(整数秒)
# 获取时长(四舍五入)
DURATION=$(ffprobe -v error -show_entries format=duration \
-of default=noprint_wrappers=1:nokey=1 voice.opus | awk '{printf "%.0f", $1}')
# 上传时带上 duration
curl ... -F "duration=$DURATION"
无法播放
问题: 语音消息无法播放
可能原因:
- 格式不是 opus
file_type参数错误- 文件损坏
解决:
# 检查格式
ffprobe voice.opus
# 重新转换
ffmpeg -i input.wav -c:a libopus -b:a 24k voice.opus
API 权限错误
问题: 上传时返回权限错误
解决: 确保飞书应用有以下权限:
im:messageim:message:send_as_bot
完整示例
# 设置环境变量
export FEISHU_APP_ID="your_app_id_here"
export FEISHU_APP_SECRET="your_app_secret_here"
export ZHIPU_API_KEY="your_zhipu_key_here"
# 发送语音
bash /root/.openclaw/workspace/skills/feishu-voice/scripts/send_voice.sh \
"你好,这是一条测试语音消息。"
注意事项
- 时长限制: 智谱 TTS 单次最多 1024 字符
- 整数时长: duration 必须是整数(四舍五入)
- opus 格式: 飞书只接受 opus 格式的音频消息
- 文件清理: 临时文件会自动清理
相关技能
zhipu-tts: 文字转语音zhipu-asr: 语音转文字