Skip to main content

Build and adapt Answer content using voice blocks

Are you ready to build voice conversations in your bot? While there are some differences between how messaging and voice content work in Ada, you'll notice that there are a lot of similarities between the two.

Understand how messaging and voice content are organized in the dashboard

When navigating the dashboard, there are a few ways you can look for Answers that have either messaging or voice content that chatters can currently interact with.

View messaging and voice content in an Answer

In bots that have Voice enabled, each Answer has its content in two tabs: Messaging and Phone. Under each tab, you can turn the Answer on or off for either modality, and you can tweak the content for that specific channel. If an Answer only has messaging or voice content, you can quickly copy that content into the other modality and then start tailoring it for a better customer experience.

This system where you have related content split into messaging and phone versions gives you the flexibility to both quickly adapt your existing workflows in messaging to Voice, while also tailoring the customer experience where you need to. You can customize an Answer to have modality-specific content, while having the same training and links with other Answers in both modalities. You can also make Answers specific to only messaging or voice and not the other.

Find Answers that have live messaging or voice content

In the Answers view, you can see at a glance which Answers have live messaging or voice content. You can also search for Answers that have either type of content live.

Spot Answers that have live messaging or voice content using icons

Each Answer has a speech bubble icon beside it that indicates the type of messaging it currently has live:

IconContent type
No live content
Only live messaging content
Only live voice content
Both live messaging and voice content

Search for Answers that have live messaging or voice content

In the search bar in the Answers view, you can search for Answers based on the live content they have:

  • <settings:live:true> for Answers that have live messaging content

  • <settings:live_voice:true> for Answers that have live voice content

Both of these search terms will also return Answers that have both live messaging and voice content.

Learn about how blocks work in voice

Once you're ready to build and adapt Answer content for voice, you should understand that some blocks work differently between messaging and voice.

When you're adapting Answer content from one modality to another, it is possible to copy an unsupported block temporarily so you can adapt the content more easily into a supported block. It's important to note that you can't save the Answer if either modality contains unsupported blocks.

Messaging blockVoice block
Different name onlyText messageSpeak
CaptureAsk for
No differences

Shuffle Message

Quick Replies

List Option




HTTP Request

Answer Utilities

Track Event

Zendesk Ticketing

Simple Apps

Messaging only






Date Picker


Sign In/Out

Widget Apps

Not supported
Voice onlyNot supported

Send SMS

Transfer Phone Call

End Phone Call

Smart Capture

Use Quick Replies and List Option blocks for voice conversations

In voice conversations, time is of the essence. In messaging, you might be able to send chatters long lists of options to choose from, but in voice, having a long list of options read out can make callers feel overwhelmed. How can you adapt your existing Answer flows to make them more voice-friendly?

There are two ways to do this:

  • Quick Replies blocks: Allow callers to choose from either a list of options, or to ask for something else.

  • List Option blocks: Allow callers to choose from a list of options.

When you have a Quick Replies block at the end of an Answer, your bot will always read out the entire list of quick replies to callers. Callers can interrupt that list at any time to select one of the options, or they can say something else to trigger a different Answer.

Adapt List Option blocks for voice conversations

When you're using List Option blocks to allow callers to find their paths through your Answer flows, there are two additional options you can use:

  • Only read out options if capture is unsuccessful

    When you enable this option, your bot only asks the question (e.g., "Which state are you in?") without then reading out all the options ("Alabama, Alaska, Arizona..."). That way, not only does your bot save the caller some time, but the experience mimics a human conversation. If the caller responds with something unexpected (e.g,. "Ontario"), then your bot will read out the possible options.

  • Options contain a date or time

    Dates and times can be tricky for voice models to parse. This option enables a specialized model for date and times, which captures those values much better than our default model.

Additionally, if you need your bot to read out a long list of options, you can encourage callers to interrupt by saying something like "Call out your account type when you hear it."

Remember, list options lack flexibility; they can only direct callers to the options you give them. Answer training is a lot more flexible than list option phrases are! To provide an open-ended main menu experience, consider relying on Ada's ability to match caller input to trained Answers by using Quick Replies blocks instead where you can.

If you try using a List Option block and find that it's having difficulty picking out the options your callers select, you can use a Smart Capture block instead. However, note that the Smart Capture block is less customizable; for example, it always reads out the available options.

Capture caller information in voice conversations

It can be tricky getting callers' information over the phone. Think about how much easier it would be for a friend to text you a long order number instead of reading it out to you! To set your callers up for success, there are a few different ways you can ask them to give you information in voice.

Learn about how metavariables work in voice

Before we start talking about gathering information from your callers over the phone, it might help to talk about the information Ada collects automatically. In messaging conversations, Ada can collect chatter information from their browser. But with voice conversations, there's no browser to collect information with.

As a result, voice conversation metavariables are limited to events that occurred during the conversation, and information that it can gather about the caller's phone number. This isn't a perfect system; for example, it assumes you're in the same location as where your phone number is registered, so if you have a Montreal phone number but are calling from Toronto, it will think you're calling from Montreal.

Here's a comparison of the metavariables between messaging and voice:


Capture additional caller information

When you're capturing information using the Ask block (the voice equivalent of the Capture block in messaging), it's important to think about the most accurate way of getting that information from the caller, and to communicate clearly what you want them to do.

There are four ways you can validate caller information. For all of them, make sure you mention the input you're expecting so the caller knows what to do, along with any other guidelines they might need.

Data typeInput methodsExample prompt
TextSpeak or send an SMS messageUsing a complete date, such as January 1, 2001, please say your date of birth.
NumberDialpadUsing your dialpad, please enter the 9-digit number after S M, followed by the pound key.
Phone numberDialpadPlease use your dialpad to enter the 10-digit phone number associated with your account, followed by the pound key.
Yes or NoSpeakThe phone number you entered was 636-555-3226. Is that correct? Please say yes or no.

When callers are entering numbers into the dialpad, they can use the # key to indicate that they're done. Otherwise, your bot assumes they're done five seconds after the last digit the caller entered.

Capture caller information via SMS

Getting a caller to send you an SMS is a great way to make sure you can accurately capture information that's difficult to dictate, like email addresses. Before you do this, make sure you follow the guidelines for using SMS in your bot in the Send SMS messages to callers section of this topic.

To capture information via SMS, put a Send SMS block into your Answer, directly followed by an Ask for block. Here's an example:

When you do this, your bot knows to save the caller's SMS response in the variable you specify in your Ask for block.

Use the Smart Capture block to intelligently capture callers' responses

In some cases, voice bots can struggle to accurately pick out responses from what callers say. You might find that your bot saves a whole phrase and says something like "hello, my name is Rob" instead of "hello, Rob," or that it has trouble accurately understanding the difference between a "b" or "p" when you're trying to capture a booking reference number.

To increase the chances that your bot can accurately understand how to pick relevant information out of what the caller says, you can use the Smart Capture block, which sends the caller's response to an external language processing service to help understand what they said and save a more accurate output.

When you use the Smart Capture block, your bot becomes better at picking out information from the caller's response. When a caller says something like "'a,' as in 'apple,'" it's able to pick out the correct letter, and if they ask the bot to repeat something, it's smart enough to repeat it rather than try to parse their question as a response.

The Smart Capture block only proceeds when the caller has verified that what it captured is correct; if it isn't, it tries again. Alternatively, if the caller wants to exit the capture state, they can ask an unrelated question to do something else.

Here's how to use the Smart Capture block:

  1. On the Ada dashboard, go to Build > Answers and open the Answer you want to edit.

  2. From the block drawer, find the Smart Capture block and drag it into your Answer.

  3. Under Question, enter the question your bot will ask to prompt the caller to provide information.

  4. Under Capture Type, select the format you want to capture the data in, so your bot can better validate the caller's response.

    Depending on your selection, additional options to configure may appear:

    • If you selected Choose from a list as the capture type, the List options section appears. For each option the caller can choose from, click Add option and enter the value that they can choose.

      When callers encounter this block, your bot will read the entire list of available options to them before they make their selection. Unlike the List Option block, you can't choose to only read out the options if the capture is unsuccessful the first time.

    • For some capture types, you can specify how you want the caller's response to be formatted. When you select those capture types, the Output the captured information in a specific format toggle appears. You can toggle the setting on, then add instructions in the box that appears.

      You can specify a format using existing conventions (e.g., "MMMM/DD/YYYY"), or you can use plain language (e.g., "replace all spaces with underscores").

  5. Under Save Capture as Variable, select a variable to save the caller's response in.

  6. Choose to toggle the Skip capture if the variable already has a value setting on or off. That way, if the variable you chose already has a value associated with it, your bot won't ask the caller to provide that information again.

Minimize pauses while your bot performs backend actions

Some blocks, such as the HTTP Request, Set Variable, and Answer Utilities blocks, as well as any Action blocks, perform backend actions that take some time to complete. In some cases, this can cause pauses while Ada is performing that action, during which a caller might wonder if your bot had heard the last thing they said or become frustrated.

There are some things your bot does to minimize silence. Approximately two seconds after the caller speaks, if your bot needs more time to process, it plays one of a variety of messages like "okay" or "one moment" to fill the silence. If required, it plays additional similar messages every five seconds, to reassure the caller that the call is still active, until it has a response ready. However, there are some best practices you can follow to further minimize processing interruptions:

  • Immediately before blocks that perform backend actions, place one or more Speak blocks. That way, the backend actions can start processing while your bot reads the content in your Speak blocks, so the caller doesn't have to wait as long to get a response.

  • If you have a Capture block followed by multiple blocks that perform backend actions, put a Speak block directly after the Capture block to give your bot some more time to process.

  • If you can't avoid a long pause (for example, if you know the API call in your HTTP Request block normally takes a long time, or if you have multiple blocks with backend actions in a row), create more of a buffer with longer spoken messages like "I understand that you want to find out the balance for your Platinum Reward credit card. I can help with that."

With these strategies, you can fine-tune your bot make conversations that contain even complicated technical actions feel smooth and effortless for your callers.

Send SMS messages to callers

With the Send SMS block, you can send callers text messages. However, it's important to be aware of these caveats before putting SMS messages into your Answer flows:

  • Before sending any SMS messages to a caller, you have to collect their consent. Generally, you only have to do this once per conversation - once you have consent for one Answer flow, you don't have to ask for consent to send another SMS for another Answer flow.

    • This consent only applies to your ability to send an SMS to the caller; you can't also use this consent to add the caller's phone number to marketing lists or send them additional SMS messages for other purposes.

    • It's best to collect consent right before the first time you send them an SMS. If you do it at the beginning of the conversation, callers are more likely to say "no" because they haven't seen yet what your bot is capable of.

  • SMS only works for mobile devices. Always build an alternative path for people who are calling from landline phones, or people who don't give consent to receiving SMS messages.

For example, your bot can say, "Can I send text messages to the device you're calling from? Please respond by saying yes or no." That way, with one question, you're collecting consent and confirming that the caller's device can receive SMS messages. If they say "no" for whatever reason, the caller can go down your alternative path.

To send SMS messages using your bot, do the following:

  1. On the Ada dashboard, go to Build > Answers.

  2. Open the Answer you want to send an SMS from, then click the Phone tab.

  3. Drag and drop a Send SMS block into the Answer editor.

  4. Under Mobile Phone Number, select the variable to send the SMS to. This will probably be the default phone_number metavariable, which is the phone number the caller is calling from.

  5. Under Content, enter the content you want to send. You can't attach photos, but you can include links to attachments if you need to.

Transfer phone calls

With the Transfer Call block, you can transfer the caller to a different phone number or SIP address. Most of the time, this means handing off the call to a human agent.

Note that the call transfer takes place when the Answer gets to the Transfer Phone Call block, so if you have any blocks below it in an Answer, your bot won't serve them to callers.

  1. On the Ada dashboard, go to Build > Answers.

  2. Open the Answer you want to put a call transfer in, then click the Phone tab.

  3. Drag and drop a Transfer Call block into the bottom of the Answer editor.

  4. Under Phone Number or SIP address, enter the phone number or SIP address, or insert the variable containing the phone number or full SIP address that you want to transfer the call to.

  5. If you entered a SIP address, the Include a User-to-User header when transferring to the SIP address checkbox appears. You can select it to provide additional information with the SIP transfer, so the human agent receiving the call has additional context, or to use when you're routing the call to the appropriate department or group.

    • In the Key fields that appear, enter names for the data fields you create.
    • In the Value fields, insert variables to dynamically insert information about the caller.
    • Click Add another row to add more key,value pairs to the transfer, or hover over a pair and click Delete to remove it.

    The user-to-user header that contains these key,value pairs shouldn't exceed 400 characters.

End phone calls

The End Phone Call block is a simple one - if you put it into an Answer, it disconnects the call. Generally, it's a good idea to let the caller be the one to end the call, but this block can be helpful at the end of your Answer flow if you confirm with the caller that they don't need any further assistance. For more information, see End Conversation.

Note that your bot ends the call when the Answer gets to the End Phone Call block, so if you have any blocks below it in an Answer, the caller won't hear them.

  1. On the Ada dashboard, go to Build > Answers.

  2. Open the Answer you want to end the call in, then click the Phone tab.

  3. Drag and drop an End Phone Call block into the bottom of the Answer editor.

Test your bot's voice content

While building out voice content, it's a good idea to test how your flows will sound to callers. You can test individual Answers, or call your bot so you can test the entire caller experience, starting at your greeting.

Test how an individual voice block sounds

Anytime a block contains content to read out, the top of the block has a Play icon you can click to hear how its content will sound to callers. You can use this button to double-check that the flow of a block's content sounds good, and if you're using SSML tags to adjust your bot's default sound, you can use it to fine-tune your adjustments. For more information, see Control how your bot pronounces content in voice conversations.

Test an individual Answer's voice content

Just like when you're creating text content, you can test an Answer to make sure that your voice content flows well and delivers information in a timely way, regardless of whether the Answer is live yet.


Location metavariables depend on the caller initiating the phone call, and don't work if Twilio calls them instead. As a result, if your Answer depends on metavariables being populated, you may have to hardcode them using a Set Variable block so you can test the Answer properly.

  1. At the bottom of the Answer you want to test, click Test Answer. A test chat window appears.

  2. At the top of the test chat window, click the Ada Web Chat dropdown and click Phone.

  3. Enter your phone number and click Call. Your bot calls you and serves you your Answer. From there, you can hang up, or continue navigating through other Answers.

Test your caller experience

You can test your bot by calling your Twilio number and navigating through your bot starting from the greeting, like a caller would. This is a great way of testing whether your bot is successfully recognizing spoken input and has both the training and Answer flows set up to respond to that input well.


Twilio doesn't have any way of knowing whether phone calls are coming from testers or customers. As a result, when you go through your bot's conversations or metrics, you can't easily filter out or exclude test calls. By contrast, when you test individual Answers, your bot always tags those conversations with Test User.

Additionally, this method only tests content that is currently live.

If you need to find your Twilio number, you can go into your Phone integration settings:

  1. On the Ada dashboard, go to Settings > Integrations.

  2. Under Channels Integrations, beside Phone, click Configure.

  3. Under Phone Number, your Twilio account's phone number is in the Main phone number field. Call that phone number to test your bot.

Have any questions? Contact your Ada team—or email us at .