IVR 编辑器

IVR Editor 是可视化 IVR 流程编辑器,支持拖拽式菜单设计、业务时间控制、TTS 语音合成和多级菜单。

1. 启用

[proxy]
addons = ["ivr-editor"]

数据库要求:自动创建 rustpbx_ivr_projects 和 rustpbx_ivr_version_history 表。支持 SQLite / MySQL / PostgreSQL。

2. 项目管理

2.1 创建项目

控制台 → IVR Editor → 新建项目:

  • 名称、描述
  • 状态:draft / published

2.2 版本管理

每次发布创建版本快照,支持回滚:

  • 查看版本历史
  • 一键回滚到历史版本

3. 可视化编辑

3.1 节点类型

节点说明参数
Menu菜单节点DTMF 选项映射
Play播放音频音频文件或 TTS 文本
Transfer转接分机/队列/外部号码
Queue排队队列名,支持 return_to_ivr
Voicemail语音信箱邮箱扩展号
Collect收集按键变量名、位数、超时
CollectExtension收集分机号转接到输入的分机
Webhook调用 HTTP APIURL、Headers
Hangup挂断可选拨放提示后挂断
Repeat重播当前菜单
IVR 编辑器——根菜单的 DTMF 按键、标签与逐键动作配置

编辑界面:左侧是菜单列表(根菜单 + 具名子菜单);右侧为选中菜单的欢迎语(音频文件或 TTS)、无效输入提示、超时/重试设置,以及每个 DTMF 按键一张可折叠卡片,包含标签与动作(Queue / Transfer / IVR / SIP URI / Realtime)。History 展示已发布版本并支持一键回滚;Save 保存草稿,Publish 正式生效。

3.2 编辑流程

  1. 拖拽节点到画布
  2. 连接节点(DTMF 按键 → 目标节点)
  3. 为每个节点配置参数
  4. 设置业务时间规则
  5. 预览和发布

3.3 业务时间

每个项目可配置:

配置说明示例
时区时间判断的时区Asia/Shanghai
工作日工作日期周一至周五
工作时间每日工作时段09:00-12:00, 13:00-18:00
休息时间午休等12:00-13:00
非工作时间动作休息/非工作日处理转语音信箱/播放提示后挂断

4. TTS 语音合成

4.1 内置 Edge TTS

使用 Microsoft Edge TTS(edge-cli 工具)合成语音:

支持 11 种语音:

语音 ID语言性别
zh-CN-XiaoxiaoNeural中文女
zh-CN-YunxiNeural中文男
en-US-JennyNeural英文女
en-US-GuyNeural英文男
ja-JP-NanamiNeural日文女
ko-KR-SunHiNeural韩文女
es-ES-ElviraNeural西班牙文女
fr-FR-DeniseNeural法文女
de-DE-KatjaNeural德文女

4.2 TTS 缓存

TTS 结果按 SHA-256(voice+text) 缓存到本地目录,避免重复合成。

4.3 手动 TTS

POST /console/ivr_editor/tts
Body: { "text": "欢迎致电", "voice": "zh-CN-XiaoxiaoNeural" }

4.4 音频上传

支持上传自定义 WAV/MP3 音频文件作为 IVR 提示音。

5. 发布流程

  1. 编辑完成后点击 发布
  2. 系统自动:
    • 构建 IVR TOML 配置
    • 生成所有 TTS 音频
    • 保存版本快照
    • 写入配置目录
  3. RustPBX 热加载新 IVR 配置

6. 配置

config/ivr_editor.toml:

sounds_dir = "config/sounds"
ivr_config_dir = "config/ivr"
tts_cache_dir = "config/tts_cache"

[default_voices]
zh = "zh-CN-XiaoxiaoNeural"
en = "en-US-JennyNeural"

7. API

操作端点
列出项目GET /console/ivr_editor
创建项目POST /console/ivr_editor
查看项目GET /console/ivr_editor/{id}
更新项目PATCH /console/ivr_editor/{id}
发布POST /console/ivr_editor/{id}/publish
版本历史GET /console/ivr_editor/{id}/versions
回滚POST /console/ivr_editor/{id}/versions/{vid}/rollback
TTS 合成POST /console/ivr_editor/tts
上传音频POST /console/ivr_editor/upload-sound