Contact Sales

All fields are required

Advanced communications from the source. | SignalWire

Call Flow Builder (Beta): A Low-Code Application Builder

Build an easily customizable IVR with unrivaled simplicity

What is Call Flow Builder?

SignalWire’s Call Flow Builder is an intuitive visual builder, designed to reduce technical friction for developers of all skill levels. Call Flow Builder equips inexperienced designers with a simple, low-code, drag-and-drop solution for introducing programmable logic into their voice applications. It also offers veteran developers an environment for rapid prototyping and robust iteration using SWML, the SignalWire Markup Language.

To demonstrate Call Flow Builder’s ease of development, follow the steps outlined in this post to design and deploy a simple yet extensible Interactive Voice Response system (IVR) from scratch, within just a few minutes. To get started, you need a SignalWire Space and a verified phone number.

If you would prefer to follow along with a video format, you can watch the recent SignalWire in Seconds episode.

Creating a New Call Flow

To begin, visit the Call Flow Builder tab of your SignalWire Space. Select Add New to generate a new call flow. After choosing a title, click Save. The call flow canvas will unfurl to reveal your very first module, Handle Call: the starting point for every call flow within the builder.

Answering Calls and Gathering Input

For this example, we’ll begin with Answer Call. Drag and drop Answer Call from the left-hand module menu to add it to your canvas, or simply click on it. Hover your cursor over the upper portion of your newly added module, and make a note of the blue highlight that appears on top of it.

Then, using a long press on the green node at the bottom of Handle Call, connect the dotted line that forms to the upper portion of Answer Call. As a result, your flow will automatically accept incoming calls to the SignalWire phone number that you’ll later associate with this script.

The next steps in building an IVR involve presenting the caller with options, gathering the caller input, and forwarding the caller to their desired destination. The Gather Input module simplifies this process by bundling the ability to play an audio file or text-to-speech with switch logic, and an ability to prompt the caller for a voice response, a selection of digits, or both.

The Unknown and No Input nodes provide convenient pathways to error handling, along with a setting for specifying the input timeout.

Recording and Forwarding Calls

To aid in QA/QC activities or to provide admins with an added tool for troubleshooting, you can implement the Start Call Recording module. Adding a Beep alerts the caller to the fact that a recording has begun, and setting custom Terminators allows the caller to end a recording at any time.

You must alert customers to the fact that live call recordings are taking place. To do this, you can incorporate a standalone Play Audio or TTS module into the call flow. SignalWire supports a number of text-to-speech languages, genders, and voices - all customizable within the module itself.

The primary function of many business-related IVR systems is to route customer inquiries to the relevant departments of a company. With the Forward to Phone module, you can transfer inbound callers to both traditional PSTN numbers and telephony SIP endpoints.

Telephone numbers entered into the To field must be in E.164 format, while SIP endpoints must be prefixed using sip:. If you employ teams of customer service agents, you can add a mixture of numbers and endpoints within a single module, ringing them simultaneously or sequentially. You can set a Default Timeout for the entire module, or alter timeouts individually.

Extending Call Flow Builder Functionality Using SWML

Call Flow Builder enables developers to extend the functionality of their IVR with SWML. To assist agents with keeping an accurate record of who’s phoning in, you can enter the SWML variable %{call.from} into the Default From field of the Forward to Phone module. Doing so will enable your flow to pass the Caller ID of the original inbound call leg straight through to the subsequent receiver.

Another concern for developing an IVR is efficiently routing high-value customers to specific account executives. Instead of subjecting the customer to another lengthy prompt-and-gather, you can leverage the Conditions module to forward them instantly to their desired destination.

Modifying the previously mentioned variable with an equality operator, %{call.from}==, for instance, enables you to specify which numbers or endpoints should be transferred directly to an account executive.

Handling Errors

When designing an IVR, it's customary to handle unexpected caller behavior using a loop that returns said caller back to the gather function. In the Call Flow Builder, you can achieve this same functionality using the Decision grouping of modules.

The Set Variables module allows you to create a variable unique to your call flow in the Key field. Name your variable something like “attempt” to represent the caller’s attempted input. Entering the SWML syntax %{attempt}+1 into the Value field enables you to increment your variable by one whenever the gather times out, or whenever there’s an unknown input.

Using the Conditions module, you can employ %{attempt}>1 to disconnect the call after two failed attempts to gather input from the caller.

To enhance user experience, a small audio file can be played after the first failed attempt, signaling to the caller that something went wrong. Using the Play Audio or TTS module, your call flow can fetch the configured HTTPS URL of an MP3 or WAV file.

Alternatively, employing the ring parameter of SWML’s play method, you can playback a chosen country’s ringtone to the caller.

Concluding Your Call Flow

By integrating various modules such as Stop Call Recording, Voicemail Recording, and Hang Up Call, you can tie off loose error-handling nodes toward the end of your call flow.

When you’ve finished designing your call flow, click the Deploy button on the top of your canvas. Finally, visit your chosen phone number settings in your SignalWire Space, select Call Flow from the Handle Calls Using dropdown, select the title of the flow from the When a Call Comes In dropdown, choose a Version of your build, and Save.

Now that your IVR is deployed, you can test it out by calling your chosen phone number. Call Flow Builder is currently in Beta, and all assets are subject to change before the final release. As the platform continues to evolve, look forward to exciting additions, such as AI Agent integration, making IVR interactions even more efficient and user-friendly.

Whether you’re a novice developer or a veteran of software-defined telecom, SignalWire's Call Flow Builder opens up endless possibilities for creating powerful and personalized voice call experiences. If you have any issues as you get started, open a ticket, or ask us about it in our Slack community!

Related Articles