Skip to content

IVR skill

Provides phone forwarding capabilities.


Provides base capabilities for phone needed to build an IVR including forwarding calls to preconfigured extensions.


For the extensions configured in the Content section, the system will automatically generate specific intents for triggering forwarding to this extension. The _sales part represents the id of the extension so every extension gets its own intent.

intent example
@dispatch Can you forward my call please?
@operator_availability When is ... back?, When is ... available again?
@extension_{{}} Can you forward me to the Sales department?
@extensions A list of all extension intents

How to use

After having installed the IVR skill you can add extensions in the Content section and configure basic behaviour in the settings section of this skill.


The settings of this IVR can be used to: - disable dispatching; this is used for more complex bots where all dispatching behaviour is configured using the Flows skill - suggested extensions; to provide suggestions when people invoke the dispatch intent.

You can find the skill settings by going to the Skills section and click on the "IVR Skill" badge. In the skill details popup you can click on the "Configure" button.

IVR settings

Extensions Content

In the Content section you can add the extensions you want people to be dispatched to.

IVR extensions

Extensions exist of the following fields:

field purpose
Name The name of the extensions, like 'Sales department' or 'John Doe'
Number The phone number to use
Time plan Optionally a timeplan (see Timeplans skill) in which this extension is available
Email Optionally an email address, which when filled, will be used to send a note to when not available
Set tags Optionally tags to set when people ask to be dispatched to this extension
Synonyms Optionally synonyms to use for matching this extension

Notice that matching the right extension when people ask 'Please forward me to xyz please' is done from top to bottom. So the first extension that matches the criteria (name + synonyms) will be selected, ignoring the rest. So make to not have overlapping extensions.

Voice translation content

Working with voice requires optimizing text to be properly translated to speech. Sometimes the TTS API's don't pronounce a word like you want it to be pronounced. The platform provides a function to automatically adjust texts for customized pronounciation. Using this skill you can add voice translations using the cms. Go to the content section and choose "Voice translations".

Voice translations

You can also use speech markdown in the text to replace. This way you have even more tools to influence how something is pronounced.

How to extend

Use the Flows skill to define custom behaviour to your IVR. The relevant dialogs of this skill are available to be invoked or extended with Flows. If you don't want the base capabilities of this IVR skill without the dispatching part because you want to customize the dispatching behaviour, make sure to disable the dispatching in the skill settings.

How it works

The IVR skill includes three bubblescript files: | file | purpose | | ------ | ------ | | | Provides base dialogs and triggers | | | Provides dialogs and tasks needed for dispatching | | | Provides the dialogs for dialing |

The IVR skill will overwrite some of the base dialogs and intents to provide specific phone like behaviour. We want a phone bot to be less chatty and escalate sooner.

Overrides the following dialogs:

dialog description
main "Hi, you are talking to #{bot.title}
root invoke menu
menu "How can I help you?"
purpose "I can answer basic questions and forward you to the right person or department."
unknown invoke dispatch
unknown_dialog "Sorry?"
unknown_vague "Sorry?"
close stop
cancel reset
help invoke unknown
question invoke unknown
dontknow invoke unknown
wrong invoke unknown

It introduces the following new dialogs:

dialog description
operator_availability To invoke the opening hours intent, override this dialog if you want to provide specific opening hour information per extension for instance
event: "$no_input" invoke unknown when long silence
force_hangup Used by unknown to hangup after more than 3 tries
closing Intermediate step before closing to be able to say bye first

dialog description
dispatch To elicit the extension to dispatch to
dispatch_to_extension Redirects to the extension given in the extension variable
invoke dispatch

The dispatch dialog can be invoked whenever you want your user to choose an extension and then be forwarded to it. It will present the user (after a first try to match the user message) a predefined set of suggested extensions. These extensions can be configured in the skill settings.

Dispatching suggestions

However this dialog will only show the suggestions configured in the skill settings, all of the extensions will be triggered when uttered by the user. After matching an extension it invoke the dispatch_to_extension dialog for further dispatching.

extension = [name: "Sales", number: "+31615080195"]
invoke dispatch_to_extension

The dispatch_to_extension dialog can be invoked when you already know which extension to forward to (extension variable is filled by one of the extensions out of the content/extensions.yaml file).

When the given extension is either not available due to its timetable or due to not picking up the phone, it will explain the extension is not available and optionally asks to leave a message (when the Notes skill is installed).

dialog description
dial To actually dial and forward the call, which should be used through dispatch whenever it involves an extension
dial_number = '+31615080195'
invoke dial

The dial dialog will forward the call to this number.