Channels
SupportBot is channel-agnostic: messages from every channel connected to Chatwoot flow through the same bot pipeline. The web widget comes ready with the installation; WhatsApp and Instagram are added through Chatwoot configuration — no code changes.
How It Works
Each channel is an "inbox" in Chatwoot. Whatever channel a message arrives from, it reaches the AI through the bot bridge, and the bot's reply goes back on the same channel. Human handoff (bot can't resolve → hand to agent) works identically across channels.
Bot replies are plain text (no markdown) — a perfect match for how WhatsApp/Instagram render messages.
Web Widget
Created automatically during installation (the "Web Sohbet" inbox). For adding it to your site and styling it: Site Widget.
WhatsApp (Cloud API)
No environment variables needed; everything happens in Chatwoot:
- Get WhatsApp Cloud API access in Meta Business (phone number ID + permanent token).
- Chatwoot → Inboxes → Add Inbox → WhatsApp → choose "WhatsApp Cloud"; enter the phone number ID, Business account ID, and token.
- For Meta's webhook verification, register the callback URL and verify token that Chatwoot provides in the Meta panel.
- Done — bot binding is automatic (see below).
Instagram / Messenger
Requires a Meta app identity, written once into .env:
Create an app at developers.facebook.com (Instagram Graph API + Messenger permissions).
Fill in the relevant variables in
infra/.env:- For Messenger:
FB_APP_ID,FB_APP_SECRET,FB_VERIFY_TOKEN - For Instagram:
INSTAGRAM_APP_ID,INSTAGRAM_APP_SECRET,INSTAGRAM_VERIFY_TOKEN
- For Messenger:
Restart Chatwoot:
cd infra docker compose up -d chatwoot chatwoot-sidekiqChatwoot's Instagram/Messenger inbox options become available.
Connect the account via Chatwoot → Add Inbox → Instagram (or Messenger).
Binding the Bot to Channels
When you add a new inbox, you never bind the bot by hand:
On the next
docker compose up, the provisioning job automatically binds the bot to every inbox in the account.To bind immediately without waiting:
docker compose up -d --no-deps init-chatwoot-provision
To keep exceptions (e.g. a VIP line handled only by human agents): list the inbox ids in the BOT_BIND_EXCLUDE_INBOX_IDS variable in infra/.env, comma-separated (e.g. 3,5). The bot won't bind to those inboxes, and an inbox whose bot you removed in the Chatwoot UI won't be re-bound.
Troubleshooting
| Symptom | Check |
|---|---|
| WhatsApp messages arrive but the bot doesn't reply | Make sure the inbox is bound to the bot (provisioning command above); watch the flow in Panel → Webhook Events. |
| Instagram inbox option not visible | Are the INSTAGRAM_* variables filled, and were chatwoot + chatwoot-sidekiq restarted? |
| Meta webhook verification fails | Is the callback URL reachable via chat.<your-domain>, and does the verify token match exactly? |