IVR Builder
The IVR (Interactive Voice Response) Builder lets you create multi-level call menus visually — no coding required. Callers hear prompts and press keys (or speak) to navigate to the right destination.
Opening the IVR Builder
Go to IVR Builder in the left navigation. You see a canvas with your existing IVR flows, or an empty state if none exist.
Creating a Flow
- Click New Flow
- Give it a name (e.g., "Main Menu", "After Hours")
- Click Save — the canvas opens with a single root Gather node
Node Types
The canvas is a directed graph of nodes. Each node type has a specific function:
| Node | Color | What It Does |
|---|---|---|
| Gather | Blue | Plays a prompt and waits for a key press (DTMF) or speech |
| Say | Grey | Plays a text-to-speech or audio message with no input expected |
| Route | Green | Forwards the call to an extension, hunt group, call queue, or external number |
| Voicemail | Purple | Sends the caller to a voicemail box |
| Hangup | Red | Ends the call |
| Schedule | Orange | Evaluates business hours / holiday calendar and branches accordingly |
| AI | Purple | Conversational AI node — handles open-ended voice conversations |
Building a Menu
Add a Gather Node
- Click + below any node on the canvas
- Select Gather
- Set the Prompt — either:
- Text-to-Speech: type the script (e.g., "Press 1 for support, press 2 for billing")
- Audio File: upload an MP3 or WAV file (spoken prompts)
- Set Digit Timeout — how long to wait for a key press after the prompt ends
- Set Max Digits — typically 1 for single-digit menus
Wire Options
After adding a Gather node, option slots appear for digits 0–9 (plus * and #). For each digit you want to handle:
- Click the + on that digit's output
- Add the target node (another Gather for sub-menus, a Route, Voicemail, etc.)
Unhandled digits: Any digit not wired either replays the prompt (default) or follows an explicit "invalid input" branch if you wire it.
Speech Recognition
The Gather node also supports speech recognition. Enable it by toggling Accept Speech. Common uses: "Say the name of the person you're trying to reach" followed by a Route node that does a contact name lookup.
Text-to-Speech Tips
- Keep prompts short — callers stop listening after ~8 seconds
- Say the option before the digit ("For support, press 1" not "Press 1 for support") — callers hang up before hearing all options
- Always include a "Press 0 to speak to an operator" escape hatch
Uploading Custom Audio
- On any Gather or Say node, click the Upload Audio tab
- Upload a WAV or MP3 file (max 10 MB)
- The file is stored in Azure Blob and served via Telnyx media URL
Requirements: WAV 8kHz/16kHz PCM or MP3 128kbps+. FLAC and other formats are not supported.
Schedule Node (Time-Based Branching)
The Schedule node lets your IVR behave differently based on time:
- Add a Schedule node
- Select the Business Hours profile to evaluate
- (Optional) Select a Holiday Calendar — holidays follow the holiday branch
- Wire the Open output to your main menu Gather node
- Wire the Closed output to an after-hours message or voicemail
AI Conversational Node
The AI node replaces a fixed menu with a free-form conversation powered by Azure OpenAI Realtime:
- Add an AI node (shown in purple)
- Write a System Prompt — tells the AI its role (e.g., "You are the receptionist for Acme MSP. Help callers with appointment scheduling and general questions. Escalate billing questions to a human.")
- Set Max Turns — the maximum back-and-forth exchanges before the call is handed off
- Define Intents — specific phrases or goals that transfer to a fixed destination:
- Intent: "billing" → Route to Billing Queue
- Intent: "emergency" → Route to On-Call Extension
- Wire a Fallback — where the call goes if AI can't resolve the intent within max turns
The AI node is billed based on Azure OpenAI usage. It requires AI features to be enabled for the org (Settings → AI → Accept Terms).
Assigning an IVR to a Phone Number
- Go to Phone Numbers
- Click the number you want to assign
- Set Inbound Route Type to IVR
- Select the flow from the dropdown
- Click Save
Testing an IVR
- Use the Preview button on the canvas to simulate navigation — it shows the path a caller would take for each digit sequence
- Call the number from a test phone and walk through every branch
- Check the Calls log for any calls that hit unexpected paths (look for calls that landed on Hangup or an unhandled digit)
Multi-Level Menus
Chain Gather nodes to create sub-menus. Example structure:
Root Gather → "Press 1 for Support, Press 2 for Sales"
├── 1 → Support Gather → "Press 1 for Tier 1, Press 2 for Tier 2"
│ ├── 1 → Route → Support Tier 1 Queue
│ └── 2 → Route → Support Tier 2 Queue
└── 2 → Route → Sales Hunt Group
There is no hard limit on nesting depth, but keep it to 3 levels maximum — deeper menus frustrate callers.