IVR.md - edlentz/Nimbus GitHub Wiki

In FreePBX, an IVR (Interactive Voice Response) is a menu system that allows callers to interact with your phone system via DTMF input (pressing keys on their phone). IVRs are used to automate call routing without needing a human operator.


🧭 What an IVR Does

An IVR typically plays a greeting like:

"Thank you for calling ABC Company. Press 1 for Sales, 2 for Support, 3 to speak with an operator."

Based on what the caller presses, the IVR directs the call to:

  • A specific extension

  • A ring group

  • A queue

  • A voicemail

  • Another IVR (nested IVRs)


🛠️ How to Configure an IVR in FreePBX (Step-by-Step)

🔹 Step 1: Prepare Audio Recordings

  1. Go to Admin → System Recordings.

  2. Record or upload a greeting (WAV/MP3).

  3. Name and save the recording.

🎙️ You can record directly using an extension: dial *77 to record and *99 to listen.


🔹 Step 2: Create the IVR

  1. Go to Applications → IVR.

  2. Click Add IVR.

🧩 Basic IVR Settings

Field | Description -- | -- IVR Name | A label for your IVR (e.g., Main_Menu). Announcement | Select the system recording you made earlier. Timeout | How long (in seconds) to wait for input. Invalid/Timeout Retries | How many times to repeat if input is wrong or missing. Enable Direct Dial | Allows callers to dial an extension during the menu. Return to IVR | After sub-menu or action, return to this IVR. Useful for looping.

Click the "+" to add multiple options.


🔹 Step 4: Set the IVR as a Destination

Once your IVR is saved:

  • Go to Inbound Routes or Time Conditions

  • Choose your IVR as the destination under "Set Destination"

This makes the IVR play when someone calls your main number or during specific times.

🧱 Advanced IVR Features Nested IVRs: Build multiple levels (e.g., language selection → main menu).

Custom Destinations: Use custom dialplan logic.

Caller ID-based Routing: Route VIP callers to a different IVR.

Time Conditions: Route to different IVRs based on business hours.

🔐 Best Practices Keep options short and clear (avoid long menus).

Offer "0" for a live operator.

Use timeouts and retries wisely.

Record high-quality greetings.

Avoid too many nested levels (frustrates users).

⚠️ **GitHub.com Fallback** ⚠️