Typebot + Chatwoot — guided triage with human fallback
Typebot triages visitors at the entry point; structured data lands as Chatwoot tickets. The lightweight, low-cost "filter then escalate" pattern.
- Scenario
- Mixed-quality website traffic that needs filtering before reaching agents / sales
- Monthly cost
- $20 - $60
- Difficulty
- Easy
What this combo solves#
Many teams’ support pain is not “AI isn’t smart enough” but “visitors arrive with mixed intent”:
- 80% of web visitors just want docs / pricing / contact info
- Less than 10% actually need a human
- Agents can’t tell which is which up front, so they drown in noise
- Sales leads arrive unstructured and leak out
Typebot + Chatwoot puts a guided form at the very front to capture each visitor’s intent, email and category before deciding what’s next. It does not depend on an LLM — cost is minimal, yet it filters out 70-80% of low-value conversations.
Architecture#
When to pick this#
| Your situation | Fits? |
|---|---|
| Daily UV < 5,000, mixed intent | ✓ Great fit |
| Sales leads are critical, want structured capture | ✓ Great fit |
| No ops capacity, prefer simple | ✓ Yes (Typebot single container) |
| Customers expect “instant conversational answers” | ✗ Not a fit (this is guided) |
| Rich KB, want chat-based Q&A | ✗ Use Chatwoot + Dify |
Components#
| Component | Role | Resource |
|---|---|---|
| Typebot Builder | Visual editor for flows | 1 container |
| Typebot Viewer | Runtime visitors hit | 1 container |
| Chatwoot | Ticket intake, agent assignment | Shared host |
| PostgreSQL | Storage for both | 1 container |
| Redis | Chatwoot queues | 1 container |
Total: one 4C/8G VPS is plenty.
Deployment#
1. Bring up Typebot#
git clone https://github.com/baptisteArno/typebot.io
cd typebot.io
cp .env.example .env
# Key env:
# DATABASE_URL=postgresql://...
# NEXTAUTH_URL=https://flow.example.com (Builder)
# NEXT_PUBLIC_VIEWER_URL=https://chat.example.com (Viewer)
# ENCRYPTION_SECRET=$(openssl rand -hex 32)
docker compose up -d
Open the Builder, register, create your first bot.
2. Design the triage flow#
Simplest 5-step funnel:
1. Welcome + intent select (buttons: Docs / Sales / Support / Other)
2. Branch by intent
- Docs → Redirect to docs.example.com
- Sales → Collect email + company + question
- Support → Collect order ID + description
- Other → Show 5 common FAQs; unresolved → human
3. On submit, fire a Webhook into Chatwoot
Typebot Webhook node config:
URL: https://support.example.com/api/v1/accounts/1/conversations
Method: POST
Headers:
api_access_token: <Chatwoot User Token>
Content-Type: application/json
Body:
{
"source_id": "{{userEmail}}",
"inbox_id": 1,
"contact": {
"name": "{{userName}}",
"email": "{{userEmail}}"
},
"additional_attributes": {
"intent": "{{intent}}",
"company": "{{companyName}}"
},
"message": {
"content": "{{userProblem}}"
}
}
3. Web embed#
<script type="module">
import Typebot from 'https://cdn.jsdelivr.net/npm/@typebot.io/js@0.3/dist/web.js'
Typebot.initBubble({
typebot: 'your-bot-id',
apiHost: 'https://chat.example.com',
theme: { button: { backgroundColor: '#4654e6' } },
})
</script>
4. Chatwoot side#
- Create an Inbox “From website”
- Auto-assignment rules:
intent == sales→ sales team,intent == support→ support team - Surface custom attributes
intentandcompanyso agents can triage at a glance
Cost#
| Resource | Monthly |
|---|---|
| 4C/8G VPS (Typebot + Chatwoot) | $30 |
| Domain + Postmark | $10 |
| Total | ~$40 / mo |
No LLM calls — zero token cost.
Real-world outcomes#
A SaaS team’s numbers 4 weeks after launch:
| Metric | Before | After |
|---|---|---|
| Daily conversations per agent | 142 | 38 |
| Structured-lead rate | 30% | 95% |
| Sales leads / mo | 56 | 89 |
| Support CSAT | 3.8 | 4.4 |
| Monthly agent hours | 320h | 110h |
Bottom line: agent load down 73% while lead quality and count went up.
Evolution#
The ceiling is obvious — this doesn’t satisfy users who want natural AI conversation. Two paths once traffic grows:
Path A — bolt on AI fallback#
Route Typebot’s “Other / unresolved” branch into Chatwoot + Dify. Typebot handles structured triage up front; Dify owns free-form Q&A behind it.
Path B — go full AI#
If 80% of conversations end up in “Other,” users want chat. Migrate to Chatwoot + Dify, keep Typebot only for strongly structured flows (quote forms, sales intake).
Pitfalls#
- Typebot Webhook hits CSP across origins — explicitly allow it in Chatwoot’s nginx
- Multi-language — one bot per locale, switch with
?lang=zhquery - Mobile — needs separate styling, iOS Safari can raise the keyboard awkwardly
- Data compliance — Typebot stores submissions in its own Postgres; spell it out in your privacy policy