> For the complete documentation index, see [llms.txt](https://docs.borndigital.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.borndigital.ai/digital-agent/conversation-flow/nodes-explained/answer-node.md).

# ANSWER node

Use the Answer node when you need a response from the customer: it waits for the input, recognises the intent and decides where the conversation goes.

The Answer node stops the conversation and waits for the customer. When the customer writes or says something, the node recognises the **intent** – what the customer wants – and continues to the node connected to that intent. If no intent fits, or the customer stays silent, the **fallback** takes over.

The editor has four tabs:

* **Entities** – tools and variables that run before or after the customer's input.
* **Intents** – the intents the node recognises and where each one leads.
* **Configuration** – timeouts, listening features, chat features, widgets and what happens when the customer hangs up.
* **Fallback** – what the agent says and where it goes when it cannot continue normally.

A new node with no intents opens on **Configuration**; otherwise it opens on **Intents**.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FgC4jDXMFCOEh97uZ00Hh%2Fnodes2-ans-intents.png?alt=media&amp;token=8da820ba-71bc-47d1-9121-4e91551d8787" alt="The Intents tab of the Answer node"><figcaption><p>The Intents tab with one intent of each type</p></figcaption></figure>

***

## Intents

Click **Add intent** and choose how the intent is recognised. Use **Search** to find an intent by name in a busy node.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FkXbB870rE4h1I1lrXyxD%2Fnodes2-ans-add-intent.png?alt=media&amp;token=0e5fb8b5-e2ee-4aa9-b6a7-617d74afa39d" alt="The Add intent menu"><figcaption><p>Intent types</p></figcaption></figure>

| Type                | Recognises the intent by…                                                                |
| ------------------- | ---------------------------------------------------------------------------------------- |
| **Dynamic buttons** | Chat buttons generated from a variable, based on the conversation so far.                |
| **Keywords**        | Specific words or phrases in the customer's message, for example "refund" or "cancel".   |
| **Condition**       | An expression over variables, for example the order status or the time of day.           |
| **AI**              | A large language model that understands the meaning, even when the phrasing is indirect. |
| **Training set**    | Example sentences (sub-intents) the NLU model is trained on.                             |

Intents of the same type are grouped in one section. Click an intent to expand it, drag the handle to reorder intents, or tick checkboxes to copy intents to another node or delete them.

Every intent has:

* **Next** – the node the conversation continues to when this intent is recognised.
* **Reuse utterance** – passes the customer's message on, so the next Answer node evaluates the same message instead of waiting for a new one. Useful for decision trees: the first node recognises the general topic, the next one the details.
* **Chat button** (Keywords, AI and Training set intents) – shows the intent as a button in the chat. Set its **Label**, an optional **Icon** or **Icon URL**, and the style – **Primary** or **Secondary**. Clicking the button sends its label as the customer's message.

{% hint style="info" %}
The intents are evaluated in this order: chat buttons first, then Keywords, Condition and AI intents in the order they appear in the node, then the Training set. The first match wins – drag intents to set their priority.
{% endhint %}

### Keywords

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FGEpAVbhCdaB7SJTsha3n%2Fnodes2-ans-keywords.png?alt=media&amp;token=ef665b39-61e6-41ed-b964-2575a8090a9f" alt="A Keywords intent"><figcaption><p>A Keywords intent shown as a chat button</p></figcaption></figure>

* **Keywords** – type a keyword and press **Enter**. The intent matches when any of the keywords appears in the message. Keywords are regular expressions, so `refund|money back` or `^yes$` also work.
* **Case sensitive** – match upper and lower case exactly. Off by default.
* **Use pre-processed utterance** – match against the pre-processed (normalised) message instead of the raw text.

### Condition

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FQa3oBwHEvPaBkHfC4FVs%2Fnodes2-ans-condition.png?alt=media&amp;token=d21e2eb8-97c1-4015-a5f8-cf3923113881" alt="A Condition intent"><figcaption><p>A Condition intent</p></figcaption></figure>

* **Label (Optional)** – a name that helps you find the intent.
* **Value** – a Python-style expression, for example `customer_type == 'VIP'`. The intent matches when the expression is true. Insert variables with `{` or the `{x}` icon.

### AI

AI intents let a large language model decide which intent the message belongs to – for example that "my bill didn't come again" means *invoice not sent*.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2F5bLnoXky5TnW9oktRHVQ%2Fnodes2-ans-ai-intent.png?alt=media&amp;token=de2fd5bb-4512-4e44-9959-e850a544f141" alt="An AI intent"><figcaption><p>An AI intent</p></figcaption></figure>

* **Name** – the name the model returns when this intent matches. Use a clear, unique name such as `PAYMENT_DUE_DATE`.
* **Meaning** – one sentence that describes the intent.
* **Description** – optional details and examples that help the model decide.

Click the gear icon next to the **AI** section title to open the **Intent recognition prompt**. It applies to all AI intents in the node.

<div align="left"><figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FIpBKKJiy1Luf57llLPgt%2Fnodes-ans-ai-prompt.png?alt=media&amp;token=32dae682-ed48-4fbb-ae39-0ec615442611" alt="The Intent recognition prompt" width="360"><figcaption><p>Intent recognition prompt</p></figcaption></figure></div>

* **Provider** and **Language Model** – the model used for recognition. For an on-premise provider, also fill in **Endpoint** and **API Key**.
* **Temperature** – how creative the model is (0–2). GPT-5 and GPT-6 models use a fixed value.
* **Reasoning** – **Effort** and **Summary**, for reasoning models only.
* **Behavior**, **Text before list of intents** and **Text after list of intents** – the prompt around the list of your intents. The defaults work for most cases.
* **User** – what the model classifies, by default `{current_utterance}` – the customer's last message.
* **Timeout** – how long to wait for the model: **0.5s**, **1s**, **3s** (default), **5s**, **10s** or **Custom**.

### Training set

Training set intents are recognised by the NLU model trained on your example sentences.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FCIfrUrECgaEcKRQVVGMz%2Fnodes2-ans-training-set.png?alt=media&amp;token=4a9bab22-cfd2-40f5-88a1-78b189d108d9" alt="A Training set intent"><figcaption><p>A Training set intent with two sub-intents</p></figcaption></figure>

An intent consists of **sub-intents** – for example *invoice missing* and *wrong amount* both belong to the intent *invoice*. Each sub-intent should have 5–15 example sentences (utterances). The table shows each sub-intent's **Name**, **Utterances**, and the **Required** and **Forbidden** patterns.

Click **Add** to add sub-intents:

* **Add intent from library** – reuse an intent from the Born Digital intent library.
* **Add chit-chat intents** – small-talk intents such as greetings, if available for the project language.
* **Search or add intent** – pick a sub-intent from this project, or type a new name and press **Enter** to create it.
* **Required in answer** / **Forbidden in answer** – regular expressions the message must or must not contain, for example to reject *"yes, but I don't want it"* in a *yes* intent. They act as a safety net on top of the NLU model.

Select sub-intents and click **Manage** to edit their utterances in the training set designer. Training set intents can also run their own **Tools** and **Variables** when they are recognised.

### Dynamic buttons

Choose a **Variable** that contains the buttons to show. Use it when the buttons depend on the conversation, for example a list of the customer's orders. When dynamic buttons are set, the chat buttons of individual intents are not shown.

***

## Entities

Use the **Entities** tab to extract information from the customer's message or prepare data around it – for example a date, an amount or a phone number.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FGcoaItAnH9e6ieVF2qoG%2Fnodes2-ans-entities.png?alt=media&amp;token=dc93baaf-0ce7-4912-a29f-3ce1845c5dd8" alt="The Entities tab"><figcaption><p>The Entities tab</p></figcaption></figure>

* **Before input** – runs when the conversation reaches the node, before it waits for the customer.
* **After input** – runs when the customer's message arrives, before the intents are evaluated, so intents and conditions can use the results.

Each part has **Tools** – smart functions such as *Date extractor*, *Phone number extractor* or *Full name* – and **Variables**. The message the customer just sent is available as `current_utterance`. See [The node editor](/digital-agent/conversation-flow/nodes-explained.md#the-node-editor) and the [Function node](/digital-agent/conversation-flow/nodes-explained/function-node.md) for how the tool and variable editors work.

{% hint style="info" %}
Learn more about the available tools at <https://smart.borndigital.ai/>.
{% endhint %}

***

## Configuration

The settings on this tab apply only to this Answer node.

### Timing

How the timers, interruptions and keypad input work together on a call is explained in [Listening and timing](/digital-agent/voice/listening-and-timing.md).

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FZ0c7LiKfxR9wmo3tU1Vg%2Fnodes2-ans-config-timing.png?alt=media&amp;token=854ca307-74f0-4e8a-9134-497b0bb687f8" alt="Timing settings"><figcaption><p>Timing settings</p></figcaption></figure>

**Voicebot**

| Setting                                           | Default | What it does                                                                                                                             |
| ------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **No input timeout**                              | 15 s    | How long the agent waits for the customer to start speaking. Then the **No input** fallback is triggered.                                |
| **Max listening time (> no input timeout, in s)** | 20 s    | The longest the customer can speak. Then the **Shut up** fallback is triggered. Must be longer than the no input timeout.                |
| **Continuous transcription**                      | Off     | Waits for longer pauses before processing the speech, so the customer can stop to think. Recommended for open questions.                 |
| **Transcription end after (ms)**                  | 1800    | The pause after which the transcription is finished and sent for processing.                                                             |
| **Speech interrupt buffer (ms)**                  | 0       | Lets the customer interrupt the agent only during the last part of its message, this many milliseconds before it ends. `0` turns it off. |
| **Interrupt anytime**                             | Off     | The customer's speech stops the agent's playback at any time. Has no effect when a speech interrupt buffer is set.                       |

**Chatbot**

Turn the switch to **Active** and set **No input timeout** (default 15 s) to trigger the **No input** fallback when the chat customer does not reply in time.

### Listening features

Optional features for voice conversations.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FJZjPQWGQrnjdkuyIKlMY%2Fnodes2-ans-config-listening-chat.png?alt=media&amp;token=0e08d95e-8e90-495a-a81a-3031050d6fb9" alt="Listening and chat features"><figcaption><p>Listening features and Chat features</p></figcaption></figure>

* **Language detection** – detects the language the customer speaks. The result is stored in the variables `detected_language` (for example `de`), `detected_language_code`, `detected_language_confidence` and `detected_language_utterance`. Detection only stores the language – to act on it, add a Condition intent such as `detected_language == "de"` that leads to a [Transfer node](/digital-agent/conversation-flow/nodes-explained/transfer-node.md) with the German project. Language detection can slightly delay the agent's reply.
* **Processing of DTMF signals** – lets the customer answer with the phone keypad.
  * **DTMF signals length** – how many digits you expect, for example `10` for a 10-digit order ID. With `1`, the agent continues after the first key press, so for a choice from 1 to 10 set `2`. `0` means no fixed length.
  * **DTMF timeout (s)** – how long the agent waits for the next key press. Default 3 s.
  * **DTMF signal silences agent** – a key press stops the agent's current message.

### Chat features

Optional features for chat conversations.

* **Chat input field** – shows the text field in the chat. Turn it off when the customer should only choose from chat buttons.
* **File upload** – lets the customer upload a file.
  * **Upload timeout** – how long to wait for the upload, in seconds. Default 15.
  * **Maximum uploaded file size** – in MB. Default 10.

### Widget

Show a [widget](/digital-agent/advanced-functions/widgets.md) – such as a form, a star rating or an NPS survey – to collect the customer's input in the chat.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2F3J3lBmJQlUp8NglTLguI%2Fnodes2-ans-config-widget.png?alt=media&amp;token=652d7fd8-9b55-428e-b044-3e8ed52a7dee" alt="Widget settings"><figcaption><p>Widget settings</p></figcaption></figure>

* **Configuration** – the widget definition in JSON.
* **Configuration (Legacy)** – the older YAML definition, kept for existing projects.

See [Widgets](/digital-agent/advanced-functions/widgets.md) for the available widgets and examples.

### Conversation ends

Where the conversation goes when the customer hangs up or leaves while the agent is waiting in this node. It is on by default. If you don't choose a node, the flow uses an End node called `END_HANGUP` – the editor creates it the first time and reuses it for every Answer node.

***

## Fallback

The fallback is a safety net for the moments when the agent cannot continue normally – the customer is silent, the speech could not be transcribed, or no intent matched.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FHNrVFX64V11lojj1aa0v%2Fnodes2-ans-fallback.png?alt=media&amp;token=b68d0c12-fe66-4aa5-8174-85bd492c6063" alt="The Fallback tab"><figcaption><p>One fallback for all situations</p></figcaption></figure>

By default, one **General** fallback handles every situation:

* **Message counter** – how many times the agent asks again before it gives up.
* **First message** – said the first time, for example *"Sorry, I didn't catch that. Could you repeat it?"*
* **Repeated message** – said every next time, for example *"I still don't understand. Could you rephrase your question?"*

Turn on **Split** above a message to write separate text for chat and speech.

After a fallback message, the node waits for the customer again. When the counter is used up, the conversation continues to the node in **Next** at the bottom of the editor.

| Message counter | What happens                                                                   |
| --------------- | ------------------------------------------------------------------------------ |
| **0**           | The conversation goes straight to **Next**.                                    |
| **1**           | 1st fallback: *First message*. 2nd fallback: **Next**.                         |
| **2**           | 1st fallback: *First message*. 2nd: *Repeated message*. 3rd: **Next**.         |
| **n**           | 1st fallback: *First message*. 2nd to n-th: *Repeated message*. Then **Next**. |

### Split signals

Turn on **Split signals** to handle each situation separately – each with its own counter, messages and **Next** node.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FZ8LRYWEOWO5bqjLOmHRL%2Fnodes2-ans-fallback-split.png?alt=media&amp;token=a55938d1-c3f3-4540-9b40-d0c9834ba5c3" alt="Fallback with split signals"><figcaption><p>Fallback with split signals</p></figcaption></figure>

| Signal             | When it happens                                                                           | Channel                  |
| ------------------ | ----------------------------------------------------------------------------------------- | ------------------------ |
| **Not recognized** | No intent is recognised.                                                                  | Chat and voice           |
| **No input**       | The customer says nothing within the no input timeout (or, in chat, the chatbot timeout). | Voice, chat with timeout |
| **Not understood** | The agent received a message but could not understand it.                                 | Chat and voice           |
| **No match**       | The speech could not be transcribed into words, for example because of background noise.  | Voice                    |
| **Shut up**        | The customer speaks longer than the maximum listening time.                               | Voice                    |

{% hint style="info" %}
In a chatbot, **No match** and **Shut up** never happen – they come from speech-to-text.
{% endhint %}

### Global counter

The counter normally counts fallbacks in this node only and starts again in the next Answer node. With three questions and a counter of 2, the customer can hit a fallback up to six times before reaching a human.

Turn on **Global counter** to count fallbacks across all Answer nodes that use it instead. You can apply it to **this node only** or to **all** Answer nodes in the project at once.

***

## Next

**Next** at the bottom of the editor is where the conversation goes when the fallback counter is used up – for example a [Redirect node](/digital-agent/conversation-flow/nodes-explained/redirect-node.md) to a human agent.

<figure><img src="https://4261467870-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F6iQTvxgRZRwPS1NgIGEb%2Fuploads%2FZE7Tptct7DQ86X6TcKCR%2Fnodes-ans-footer-more.png?alt=media&amp;token=53eebb99-3fe5-4c6d-b4cc-7153810ebc99" alt="Reuse utterance and Dynamic"><figcaption><p>More options next to Next</p></figcaption></figure>

Click **⋯** next to it for two more options:

* **Reuse utterance** – passes the message that caused the fallback on to the next Answer node, which evaluates it instead of waiting for a new message.
* **Dynamic** – takes the next node's name from a variable.

{% hint style="warning" %}
With **Reuse utterance**, a speech-to-text signal (`no_input`, `no_match`, `shut_up`) and an empty message are passed on as well.
{% endhint %}
