Nowadays, forms are evolving into conversational flows that go beyond answers: they seek empathy, clarity, and results.
In this context, ChatFunnels become powerful tools: they collect data, guide the user, and naturally turn interactions into useful information.
But how can you design them without overwhelming the user or compromising their privacy? In this article, you’ll discover:
- How to structure your ChatFunnels with one question per step, friendly language, and clear goals.
- Why using
>>>as contextual help outperforms traditional placeholders in usability.
In the end, you’ll understand how to capture relevant data and prepare the user for a smooth transition to an assistant (human or AI) that’s effective and respectful.

Key UX principles
- Clear goal and one use per flow: define what you want to achieve and design the funnel for that use case, in simple linear steps. Chatbots work best with linear flows with few branches; when users deviate, the experience gets worse.
- One question per step: helps with comprehension and reduces errors. This pattern (“one thing per page”) is a well-established recommendation in government design systems.
- Minimize data: collect only what’s necessary for the declared purpose (principle of minimization and Data Protection by Default under GDPR). By default, design for the minimum volume, scope, retention time, and accessibility of data.
- Transparency and expectations: explain up front what you’re going to ask and why, and how long it will take. Order questions from general to specific.
Hints with >>> instead of placeholders
In our ChatFunnel we don’t use placeholders; we use >>> to show a short, clear, visible hint before the field. Good “hint text” practices:
- Use it only if it adds clarity, keep it short, and without links.
- The hint doesn’t disappear when typing, unlike placeholders, which increase memory load and errors. It’s better to keep the hint outside the field.

Choosing the right input type
- Select/Options when the list of answers is known (reduces typing and errors). Users like to tap options for common inputs.
- Text/Number/Email/Phone when the data is open, provide examples using
>>>. If you use masks (phone), adapt them to the country so you don’t block the user.
Ready-to-copy pattern
You can see this pattern in action by clicking the Joinchat button
- step: 0
name: menu
content: Let’s check out a series of *Hints* instead of placeholders when collecting user data in Chat Funnels.
options:
- option: 0
type: goto
text: ✉️ Email
value: 3
- option: 1
type: goto
text: 📅 Date and time
value: 1
- option: 2
type: goto
text: 📱 Phone/WhatsApp
value: 4
- option: 3
type: goto
text: 👤 First and Last Name
value: 5
- option: 4
type: goto
text: 📍 Address
value: 7
- step: 1
name: date
content: |-
What date do you prefer?
>>>
YYYY-MM-DD _(e.g. 2025-09-30)_
options:
- option: 0
type: goto
text: ''
value: 2
input: text
- step: 2
name: time
content: |-
At what time?
>>>
HH:MM in 24h _(e.g. 15:30)_
options:
- option: 0
type: goto
text: ''
value: 0
input: text
- step: 3
name: email
content: |-
What’s your email?
>>>
e.g. name@company.com
options:
- option: 0
type: goto
text: ''
value: 0
input: email
- step: 4
name: phone
content: |-
Your WhatsApp number with country code
>>>
e.g. 134612345678
options:
- option: 0
type: goto
text: ''
value: 0
input: phone
- step: 5
name: name
content: |-
Can you tell me your name?
>>>
Enter your first name
options:
- option: 0
type: goto
text: ''
value: 6
input: text
- step: 6
name: lastname
content: |-
Please enter your last name
>>>
Enter your last name
options:
- option: 0
type: goto
text: ''
value: 0
input: text
- step: 7
name: street
content: |-
Please provide your address
>>>
e.g. Kansas City Ave. 123
options:
- option: 0
type: goto
text: ''
value: 8
input: text
- step: 8
name: city
content: |-
What city do you live in?
>>>
e.g. New York
options:
- option: 0
type: goto
text: ''
value: 9
input: text
- step: 9
name: state
content: |-
Tell me your state
>>>
e.g. California
options:
- option: 0
type: goto
text: ''
value: 10
input: text
- step: 10
name: postalcode
content: |-
Please enter your ZIP code
>>>
e.g. 90210
options:
- option: 0
type: goto
text: ''
value: 0
input: number