IVR Menus
IVR (Interactive Voice Response) menus provide automated phone navigation. Callers press digits on their keypad to route their call.
Purpose
Use this module to:
- Build menu trees with digit-based options
- Play audio files, remote URLs, or text-to-speech greetings
- Configure timeouts and invalid-input handling
- Set failover destinations
Audio Sources
A menu must have exactly one audio source:
| Source | Description |
|---|---|
| Recording | Audio file uploaded to MinIO |
| Remote URL | External audio file URL |
| Text-to-Speech | Plain text rendered by Cloudonix TTS |
Option Destination Types
Each menu option routes to one of:
| Type | Description |
|---|---|
| Extension | A specific extension |
| Ring Group | A ring group |
| Conference Room | A conference room |
| IVR Menu | A sub-menu |
| Business Hours | A business hours schedule |
| AI Assistant | An AI assistant |
| AI Load Balancer | An AI load balancer |
Failover
After max_turns invalid inputs, the call routes to the failover destination. The failover supports the same destination types as options, plus hangup, except business hours.
Permissions
| Action | Owner | PBX Admin | PBX User | Reporter |
|---|---|---|---|---|
| View IVR menus | Yes | Yes | Yes | Yes |
| Create IVR menus | Yes | Yes | No | No |
| Update IVR menus | Yes | Yes | No | No |
| Delete IVR menus | Yes | Yes | No | No |
UI Workflow
Create an IVR Menu
- Navigate to IVR Menus in the sidebar
- Click Create IVR Menu
- Enter a name
- Choose an audio source (recording, URL, or TTS)
- Configure
max_timeout,inter_digit_timeout, andmax_turns - Add menu options with digit input and destinations
- Set a failover destination
- Save
Toggle Status
Use the status toggle to enable or disable a menu. Disabled menus are not used for routing.
Key Data Fields
ivr_menus Table
| Column | Type | Notes |
|---|---|---|
id | bigint | Primary key |
organization_id | FK | Tenant scope |
name | string | Menu name |
audio_file_path | string nullable | Audio URL or MinIO path |
tts_text | string nullable | TTS content (max 1000) |
tts_voice | string nullable | Voice identifier |
max_timeout | integer | Wait for first input (1-30s) |
inter_digit_timeout | integer | Between digits (1-30s) |
max_turns | integer | Replays on invalid input (1-9) |
failover_destination_type | enum | Where to route after max turns |
failover_destination_id | integer nullable | Target entity ID |
status | enum | active, inactive |
ivr_menu_options Table
| Column | Type | Notes |
|---|---|---|
ivr_menu_id | FK | Parent menu |
input_digits | string | DTMF digits (1-10 chars) |
description | string nullable | |
destination_type | enum | Target type |
destination_id | integer | Target entity ID |
priority | integer | Display order (1-20) |
Related API Endpoints
| Method | Endpoint | Purpose |
|---|---|---|
| GET | /v1/ivr-menus/voices | List available TTS voices |
| GET/POST/PUT/DELETE | /v1/ivr-menus[/{ivrMenu}] | Standard CRUD |
| PATCH | /v1/ivr-menus/{ivrMenu}/toggle-status | Toggle active status |
See the OPBX REST API reference for full schemas.
Related Modules
- Recordings — Audio file sources
- Phone Numbers — DIDs can route to IVR menus
- Ring Groups — IVR options can route to ring groups
- Business Hours — IVR options can route to business hours