Exotel Flow Builder
The Exotel Flow Builder is a visual, drag-and-drop tool for designing call flows without writing code. It provides a canvas where you arrange applets (building blocks), connect them with branches, and define how calls are handled from start to finish.
Accessing the Flow Builder​
- Log in to the Exotel Dashboard.
- Navigate to App Bazaar (or Call Flows) in the left sidebar.
- Click Create New Flow to start a new flow, or click on an existing flow to edit it.
The Flow Builder interface consists of:
| Component | Description |
|---|---|
| Canvas | The main workspace where you arrange applets |
| Applet palette | The library of available applets (left panel) |
| Configuration panel | Settings for the selected applet (right panel) |
| Toolbar | Save, publish, undo, redo, zoom controls |
| Connection lines | Visual links between applets showing call flow paths |
Available Applets​
Communication Applets​
| Applet | Purpose | Outputs |
|---|---|---|
| Greeting | Play an audio message to the caller | Single output (proceeds to next) |
| IVR Menu | Present options and route by DTMF keypress | One output per key + timeout + invalid |
| Connect | Route the call to one or more agents | Answered, no answer, busy |
| Voicemail | Record a message from the caller | Single output (after recording) |
| Transfer | Transfer the call to another flow | Single output |
| Hangup | End the call | No output (terminal) |
Notification Applets​
| Applet | Purpose | Outputs |
|---|---|---|
| SMS | Send an SMS to the caller or another number | Single output |
| Send an email notification | Single output |
Logic Applets​
| Applet | Purpose | Outputs |
|---|---|---|
| Passthru | Make an HTTP request to your server mid-call | Multiple outputs based on response |
| Business Hours | Check if current time is within schedule | Within hours, outside hours |
| Condition | Branch based on a variable or expression | True, false |
See: Voice v1 Applets
Building a Call Flow​
Step 1: Plan Your Flow​
Before using the builder, sketch your call flow on paper or a whiteboard:
Start → Greeting → IVR (Sales/Support/Billing)
Sales → Connect (Sales team) → No answer → Voicemail → Email
Support → Connect (Support team) → No answer → Queue → Overflow → Voicemail
Billing → Connect (Billing) → No answer → Voicemail
Step 2: Drag Applets onto the Canvas​
- From the Applet Palette on the left, drag each applet you need onto the canvas.
- Arrange them in a logical sequence from left to right (or top to bottom).
Step 3: Connect Applets​
- Hover over the output port of an applet (small circle on the right side).
- Click and drag a connection line to the input port of the next applet.
- For applets with multiple outputs (IVR, Connect), connect each output to the appropriate destination.
Step 4: Configure Each Applet​
Click on an applet to open its configuration panel:
Greeting Configuration:
- Audio source: Record, upload, or TTS
- Audio content: The message to play
IVR Menu Configuration:
- Prompt audio: The menu options
- Key mappings: Which key goes where
- Timeout: Seconds to wait for input
- Max retries: Times to repeat on invalid input
Connect Configuration:
- Agent numbers: Phone numbers to ring
- Ring strategy: Parallel, sequential, or round-robin
- Ring timeout: Seconds before moving to next output
- Recording: Enable or disable call recording
- Sticky agent: Enable or disable
- Queue: Enable with hold music and max wait time
Passthru Configuration:
- HTTP URL: Your server endpoint
- HTTP method: GET or POST
- Parameters: Data to send with the request
- Response handling: How to interpret the server response
Step 5: Test the Flow​
- Click Save to save your draft.
- Click Test (if available) or temporarily assign the flow to an ExoPhone.
- Call the ExoPhone from an external number.
- Navigate through each path to verify correct behavior.
Step 6: Publish​
- Click Publish to make the flow active.
- Assign the flow to your ExoPhone(s).
Changes to a published flow take effect immediately for all calls on the assigned ExoPhones. Test thoroughly before publishing, especially during business hours.
Advanced Flow Patterns​
Branching with Passthru​
Use the Passthru applet to implement dynamic routing based on external data:
Start → Passthru (POST to your CRM)
→ CRM returns "VIP" → Connect (VIP team)
→ CRM returns "Standard" → IVR (standard menu)
→ CRM returns "Blocked" → Greeting ("Sorry, this service is unavailable") → Hangup
The Passthru applet sends the caller's number to your server, which looks up the caller in your CRM and returns a routing decision.
Nested Flows with Transfer​
Break complex flows into smaller, reusable modules:
Main Flow:
Greeting → IVR
→ 1: Transfer (Sales Flow)
→ 2: Transfer (Support Flow)
→ 3: Transfer (Billing Flow)
Sales Flow:
Greeting (Sales welcome) → Connect (Sales team) → Voicemail
Support Flow:
Greeting (Support welcome) → Queue → Connect (Support team) → Voicemail
Billing Flow:
Greeting (Billing welcome) → Connect (Billing) → Voicemail
This keeps each flow simple and easy to maintain.
Error Handling​
Always design for failure scenarios:
Connect (Agent group)
→ Answered: Call connected
→ No Answer: Voicemail → Email → Hangup
→ Busy: Queue → Voicemail → Email → Hangup
→ Failed: Greeting ("We are experiencing issues. Please try again later.") → Hangup
Looping (Repeat IVR)​
To repeat an IVR menu after invalid input:
- From the Invalid and Timeout outputs of the IVR Menu, connect back to the same IVR Menu applet.
- Set a Max Retries limit to prevent infinite loops.
- After max retries, connect to a fallback (e.g., Connect to operator, Voicemail).
Flow Versioning​
Draft vs. Published​
| State | Description | Live Calls |
|---|---|---|
| Draft | Saved but not active | Not affected |
| Published | Active and handling calls | All incoming calls use this version |
Reverting Changes​
If a published flow has issues:
- Open the flow in the builder.
- Make corrections.
- Save and republish.
Before making significant changes to a production flow, clone it first. Work on the clone, test it with a test ExoPhone, and only publish to your main ExoPhone when verified.
Flow Templates​
Exotel provides pre-built flow templates for common scenarios:
| Template | Description |
|---|---|
| Basic IVR | Greeting + IVR Menu + Connect |
| Support Line | Greeting + IVR + Queue + Connect + Voicemail |
| After-Hours | Business Hours check + Live agents / Voicemail |
| Missed Call Callback | Auto-callback on missed calls |
| Survey | Outbound IVR with keypress collection |
Access templates from the Create New Flow dialog in App Bazaar.
Performance Considerations​
| Factor | Impact | Recommendation |
|---|---|---|
| Number of applets | More applets = more processing time | Keep flows under 15 applets |
| Passthru response time | Slow server = delayed routing | Keep Passthru responses under 2 seconds |
| Audio file size | Large files = longer load time | Keep greetings under 30 seconds |
| Nested transfers | Multiple transfers add latency | Limit to 2 levels of transfer |
Best Practices​
- Start simple -- Begin with a basic flow and add complexity incrementally.
- Name applets clearly -- Give each applet a descriptive name (e.g., "Sales IVR Menu", "Support Connect") for easy identification.
- Always have a terminal -- Every flow path must end with a Hangup, Voicemail, or Transfer. No path should lead to a dead end.
- Test every path -- Call your ExoPhone and test every IVR option, timeout, busy, and no-answer scenario.
- Use templates -- Start with a template and customize rather than building from scratch.
- Document your flows -- Maintain a document or diagram of your call flows for team reference.
- Clone before editing -- Clone production flows before making changes.
Troubleshooting​
| Issue | Cause | Solution |
|---|---|---|
| Flow will not publish | Validation errors | Check for unconnected applets or missing configurations |
| Call hangs after greeting | Next applet not connected | Wire the Greeting output to the next applet |
| IVR not responding to keys | Key mappings not configured | Verify each key is mapped to an applet |
| Passthru timeout | Server response too slow | Optimize server response time |
| Flow not assigned to ExoPhone | Forgot to assign | Go to ExoPhones and select the flow |