📥 Question Node (Capture Input)¶
Purpose¶
The Question node (also called "Capture Input") asks the customer a question and saves their answer into a variable. This variable can then be used in later nodes — in messages, conditions, email bodies, or API calls.
Business Scenario¶
Use the Question node when you need to:
- Collect customer information — name, email, phone number, company name
- Gather lead details for follow-up by your sales team
- Capture preferences — product interest, appointment date, budget range
- Build forms — chain multiple Question nodes to create a multi-step form
Configuration¶
| Field | Description |
|---|---|
| Question | The message sent to the customer asking for input (e.g., "What's your name?") |
| Save as Variable | The variable name where the answer is stored. Uses {{variable_name}} format. Must be lowercase letters, numbers, and underscores. |
| Input Type | Validates the customer's response format |
| Required | Whether the customer must answer (or can skip after a few tries) |
| Validation Pattern | Advanced: a regex the answer must match |
| Variable Scope | How long the variable is remembered |
| Node Title | Internal name (visible only to you) |
Input Types¶
| Type | Description | Validation at runtime |
|---|---|---|
| Text | Any free-form text | Accepted as-is |
| Number | Numeric values only | Digits with optional decimal point and minus sign |
| Phone | Phone number format | Optional +, 7–15 digits; spaces and dashes are tolerated |
| Email address format | Standard [email protected] shape |
|
| Choice List (Select) | Customer picks from a predefined list | Reply must match one of your options (case-insensitive — the saved value is canonicalised to your exact option text) |
Choice List
When Input Type is Select, an extra field appears where you enter one option per line. These are shown to the customer as a tappable WhatsApp list. The selected value is saved to the variable.
What Happens on Invalid Input¶
The assistant validates every answer against the input type (and your regex, if set). An invalid answer gets a retry prompt. After 3 invalid attempts, the customer is shown a recovery menu instead of being stuck in a loop:
| Recovery option | Shown when | What it does |
|---|---|---|
| Try Again | Always | Re-asks the question with a fresh attempt counter |
| Skip This Field | Only if the field is not required | Leaves the variable empty and moves to the next node |
| Talk to Human | Always | Hands the conversation off to a live agent (see Human Handoff) |
Variable Scope¶
| Scope | Description |
|---|---|
| Conversation | The variable resets every time a new conversation starts. Best for temporary data like menu selections. |
| Contact | The variable persists across all conversations with this customer. Best for name, email, and other permanent data. |
Contact scope is not active yet
The Contact scope can be selected in the designer, but the runtime currently stores all captured variables per conversation. Cross-conversation persistence is planned — until then, treat every variable as Conversation-scoped.
Properties¶
| Property | Type | Required | Default | Description |
|---|---|---|---|---|
title |
Text | No | "" |
Internal node name |
prompt |
Text | Yes | "" |
The question shown to the customer |
variableName |
Text | Yes | input |
Variable name (lowercase, underscores) |
inputType |
Select | Yes | text |
Expected input format |
required |
Boolean | No | true |
Whether the customer must answer |
options |
List | Only if type = select | — | Choice options (one per line) |
validationRegex |
Text | No | — | Regex pattern the answer must match |
scope |
Select | Yes | conversation |
Variable persistence |
label |
Text | No | — | Optional display label |
Inputs¶
| Handle | Type | Description |
|---|---|---|
| Top (↑) | Target | Receives a connection from any preceding node |
Outputs¶
| Handle | Type | Description |
|---|---|---|
| Bottom (↓) | Continue | Connects to the next node (runs after the customer answers) |
Connection Rules¶
- ✅ Can receive connections from any node type
- ✅ Can connect to any node type
- ✅ Commonly followed by another Question (form chain), a Condition, or a confirmation Message
- ⚠️ No outgoing connection means the conversation stops after the answer (dead end warning)
Example Flow Diagram¶
Lead Capture Form¶
flowchart TD
A["📋 Menu"] -->|"Get a Quote"| B["📥 Ask Name<br/><em>What's your name?</em><br/>→ {{name}}"]
B --> C["📥 Ask Email<br/><em>What's your email?</em><br/>→ {{email}}"]
C --> D["📥 Ask Phone<br/><em>What's your phone number?</em><br/>→ {{phone}}"]
D --> E["💬 Confirmation<br/><em>Thanks {{name}}! We'll contact you at {{email}}.</em>"]
E --> F["✉️ Send Email<br/><em>New lead: {{name}}</em>"]
style B fill:#cffafe,stroke:#22d3ee,stroke-width:2px
style C fill:#cffafe,stroke:#22d3ee,stroke-width:2px
style D fill:#cffafe,stroke:#22d3ee,stroke-width:2px
style E fill:#dbeafe,stroke:#60a5fa,stroke-width:2px
style F fill:#ccfbf1,stroke:#2dd4bf,stroke-width:2px
Using Captured Variables¶
Any later node that renders text — Message bodies, Menu text, Question prompts, Send Email subject/body, Document/Image captions — can include {{variable_name}} and it is replaced with the captured value when the message is sent.
- An undefined variable renders as an empty string — the raw
{{...}}token is never shown to the customer. - Whitespace inside the braces is tolerated:
{{ name }}works the same as{{name}}.
Built-in Variables¶
These are always available without a Question node:
| Variable | Value |
|---|---|
{{customerName}} |
The customer's WhatsApp profile name |
{{customerPhone}} |
The customer's phone number |
{{tenantName}} |
Your business name |
{{timestamp}} |
The current date/time |
{{conversationId}} |
Internal conversation reference (useful in emails to agents) |
Best Practices¶
Use descriptive variable names —
customer_nameis better thaninput1.Set the right input type — this adds validation and improves the customer experience (e.g., phone keyboards appear for phone type).
Use Contact scope for permanent data — name, email, and phone should persist across conversations.
Use Conversation scope for temporary data — menu selections, quote quantities, etc.
Keep questions short and clear — "What's your email?" is better than "Could you please provide us with your email address so we can get back to you?"
Follow up with a confirmation — show the customer what you captured.
Common Mistakes¶
| Mistake | What Happens | Fix |
|---|---|---|
| Variable name with spaces or capitals | Validation error | Use lowercase with underscores: customer_name |
| Forgetting to connect to next node | Dead end — conversation stops | Connect to a Message, Menu, or next Question |
Using {{variable}} before it's captured |
The placeholder renders as empty text (e.g. "Thanks !") | Make sure the Question node appears before any node that uses its variable |
| Select type with no options listed | Customer sees an empty list | Add at least one option |
Related Nodes¶
- 💬 Message — Use after a Question to confirm the captured value
- 🔀 Condition — Check the captured value to branch the flow
- ✉️ Send Email — Include captured variables in email notifications
- ⚡ API Action — Send captured data to an external system
- 📋 Menu — Often precedes a Question (e.g., "Get a Quote" → capture details)