IVR Editor

IVR Editor is a visual IVR flow editor that supports drag-and-drop menu design, business hours control, TTS voice synthesis, and multi-level menus.

1. Enable

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

Database requirements: automatically creates rustpbx_ivr_projects and rustpbx_ivr_version_history tables. Supports SQLite / MySQL / PostgreSQL.

2. Project Management

2.1 Create a Project

Console → IVR Editor → New Project:

  • Name, description
  • Status: draft / published

2.2 Version Management

Each publish creates a version snapshot with rollback support:

  • View version history
  • One-click rollback to a previous version

3. Visual Editing

3.1 Node Types

NodeDescriptionParameters
MenuMenu nodeDTMF option mapping
PlayPlay audioAudio file or TTS text
TransferTransferExtension / queue / external number
QueueQueueQueue name, supports return_to_ivr
VoicemailVoicemailMailbox extension number
CollectCollect digitsVariable name, digit count, timeout
CollectExtensionCollect extensionTransfer to the entered extension
WebhookCall HTTP APIURL, Headers
HangupHang upOptionally play prompt then hang up
RepeatReplay current menu

3.2 Editing Flow

  1. Drag nodes onto the canvas
  2. Connect nodes (DTMF key → target node)
  3. Configure parameters for each node
  4. Set business hours rules
  5. Preview and publish

3.3 Business Hours

Each project can configure:

SettingDescriptionExample
TimezoneTimezone for time evaluationAsia/Shanghai
WorkdaysWorking daysMonday to Friday
Work hoursDaily working time slots09:00-12:00, 13:00-18:00
Break timeLunch break, etc.12:00-13:00
Off-hours actionHandling for breaks / non-workdaysTransfer to voicemail / play prompt then hang up

4. TTS Voice Synthesis

4.1 Built-in Edge TTS

Uses Microsoft Edge TTS (edge-cli tool) for voice synthesis:

Supports 11 voices:

Voice IDLanguageGender
zh-CN-XiaoxiaoNeuralChineseFemale
zh-CN-YunxiNeuralChineseMale
en-US-JennyNeuralEnglishFemale
en-US-GuyNeuralEnglishMale
ja-JP-NanamiNeuralJapaneseFemale
ko-KR-SunHiNeuralKoreanFemale
es-ES-ElviraNeuralSpanishFemale
fr-FR-DeniseNeuralFrenchFemale
de-DE-KatjaNeuralGermanFemale

4.2 TTS Cache

TTS results are cached to a local directory by SHA-256(voice+text) to avoid redundant synthesis.

4.3 Manual TTS

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

4.4 Audio Upload

Supports uploading custom WAV/MP3 audio files as IVR prompts.

5. Publish Flow

  1. Click Publish after editing
  2. The system automatically:
    • Builds IVR TOML configuration
    • Generates all TTS audio
    • Saves version snapshot
    • Writes to the configuration directory
  3. RustPBX hot-reloads the new IVR configuration

6. Configuration

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

OperationEndpoint
List projectsGET /console/ivr_editor
Create projectPOST /console/ivr_editor
View projectGET /console/ivr_editor/{id}
Update projectPATCH /console/ivr_editor/{id}
PublishPOST /console/ivr_editor/{id}/publish
Version historyGET /console/ivr_editor/{id}/versions
RollbackPOST /console/ivr_editor/{id}/versions/{vid}/rollback
TTS synthesisPOST /console/ivr_editor/tts
Upload audioPOST /console/ivr_editor/upload-sound