> ## Documentation Index
> Fetch the complete documentation index at: https://docs.assistable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Collect and set flow values

> Extract information from a conversation, check it, and pass it to the next step.

An **Extraction** node asks the model to collect named values from conversation history. A **Variable** node assigns a value directly. Use them together when a later action needs structured inputs.

## Extract the information

1. Ask for the information in a Conversation node.
2. Add an Extraction node after that step.
3. Give each value a variable name, a type, and a description. For example: `caller_email`, String, “The email address the visitor gave for the appointment”.
4. Connect the extraction to a Logic node that checks whether required values are present.
5. Send missing information back to a question before running the external action.

The type guides the model's extraction. Runtime variables are stored as text; choosing Array or Object is not a guarantee that downstream nodes receive a typed JSON structure. For a simple workflow, extract individual fields and validate them before use.

## Set a value directly

Add a Variable node to assign a literal value such as `lead_status = qualified`, or compose text from existing values:

```text theme={null}
full_name = {{first_name}} {{last_name}}
```

Assignments use the current values. An unresolved variable can remain as a `{{placeholder}}`, so check upstream values before sending composed text to a customer or external API.

## Handle missing information

Unknown and placeholder-like extraction results are normalized to empty text. This makes an **is empty** branch useful, but it does not make an extracted email, phone number, date, or amount valid. Ask the visitor to confirm sensitive or consequential details.

Keep extraction on the main connected path when the next step needs its output. A background branch can finish later and is unsuitable for an immediate decision that depends on that value.

## Test the result

Test a clear answer, an omitted value, and an ambiguous answer. Use a temporary confirmation step or a safe test endpoint to inspect what the flow actually passed onward. Check the final CRM record if the flow writes one.

See [Logic](/v3/guides/flows/conditions), [variables](/v3/guides/flows/variables), and [Request nodes](/v3/guides/flows/api-requests).

## Extraction field reference

| Setting | Choices/default | Behavior |
| - | - | - |
| Variable name | Your chosen name; new rows start empty | Empty names are ignored. Use a unique substitution-compatible name such as `party_size`. |
| Type | String, Number, Boolean, Array, Object; new rows use String | Number and Boolean guide structured extraction with those types. The current extractor treats String, Array, and Object as string fields; it does not return typed arrays/objects. |
| Description | Free text | State what to extract, the source of truth, and how to handle ambiguity. |
| Add/delete extraction | Any configured rows | Each named result is written into flow variables. Collect related values together when they use the same conversation context. |

All results are stored as text. Numbers become text such as `3`; booleans become `true` or `false`. The extractor is instructed to use an empty string for an unknown String, `0` for an unknown Number, and `false` for an unknown Boolean. Null/missing returned values and placeholder-like answers such as `unknown`, `n/a`, `none`, or `<email>` become empty text. A Number or Boolean can therefore look populated even when the visitor never supplied it; confirm required answers instead of relying only on an empty check. The extractor requests all named fields, but that does not prove the customer provided them or that they pass your business validation.

## Variable assignment reference

A Variable node contains ordered **name → value** assignments. Values can be literals (`qualified`) or templates (`{{first_name}} {{last_name}}`). Each assignment can use values set earlier in the same node. Reusing a name overwrites its previous value. Empty names are ignored, and a missing referenced value remains a placeholder rather than becoming a validated answer.

Extraction and Variable nodes follow their connected continuation. Use an async edge only for work whose result is not required immediately; [execution behavior](/v3/guides/flows/execution) explains the difference.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.