This guide walks you through running Chatwoot Custom on your own machine, creating a web widget inbox, and wiring up the ElevenLabs voice agent so visitors can start voice conversations from the chat widget.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/jAtInn71/chatwoot-costom/llms.txt
Use this file to discover all available pages before exploring further.
You need an ElevenLabs account with a Conversational AI agent to use the voice features. The chat widget works without one — voice is optional.
Prerequisites
Before you start, make sure you have:- Docker Desktop installed and running — docker.com
- Git to clone the repository
- 8 GB RAM free (the Vite widget bundle is large)
- 10 GB free disk space for the image and volumes
Setup
Copy the environment template
Copy Open
Generate a Paste the output into
.env.example to .env and fill in the required values:.env in a text editor and set at minimum:| Variable | What to put |
|---|---|
FRONTEND_URL | http://localhost:3000 for local testing, or your public domain |
SECRET_KEY_BASE | A long random string — generate one (see below) |
POSTGRES_PASSWORD | A strong password for the database |
REDIS_PASSWORD | A strong password for Redis; also update REDIS_URL to match |
SECRET_KEY_BASE:.env.Pull the pre-built image or build locally
Option A — Pre-built image (fastest)Pull the image from Docker Hub so Compose can use it without building:The You can also pass a custom agent ID, voice ID, agent name, and image tag:The build takes 5–15 minutes depending on your machine. If it exits with code 139 (SIGSEGV), the build ran out of memory.
docker-compose.yaml already references jatin4002/chatwoot-custom:latest, so no further changes are needed.Option B — Build locallyIf you want to modify the code or bake in a specific ElevenLabs agent ID at build time, run the build script instead:When building locally, update the
image: line in docker-compose.yaml under rails and sidekiq to chatwoot-custom:latest and remove any build: block.Open the dashboard and create your admin account
Wait about 60 seconds for Rails to run migrations, then open:The first visit shows an account-setup screen. Create your admin user and log in.
Create a web widget inbox
In the Chatwoot dashboard:
- Go to Settings → Inboxes → Add Inbox
- Choose Website
- Enter a name and your website URL
- Complete the wizard
Enable the voice agent
Still on the inbox’s Configuration tab:
- Scroll to the Voice Agent section
- Toggle Enable Voice Agent on
- Set Provider to
elevenlabs - Leave API Key blank if your ElevenLabs agent is set to Public access; paste the key only for Private agents
- Paste your Agent ID — copy it from the ElevenLabs dashboard URL:
Use the
agent_XXXXXXXportion only - Click Save Voice Agent Settings
Next steps
- Embed the widget — copy the script from Settings → Inboxes → your inbox → Configuration and paste it before
</body>on your website - Tail the logs —
docker compose logs -f railsshows Rails output in real time - Restart after config changes —
docker compose restart railspicks up changes without a full rebuild
Troubleshooting
| Symptom | Fix |
|---|---|
| Call button doesn’t appear | Toggle off → save → toggle on → save. Then close and reopen the widget bubble. |
| Call connects then drops in ~3 s | ElevenLabs free-tier quota (~15 min/month) is exhausted. Check usage at elevenlabs.io/app/usage. |
missing_permissions: convai_write in logs | Your ElevenLabs API key needs “ElevenAgents → Write” permission. Edit the key in the ElevenLabs dashboard. |
| Voice transcript not appearing | Run docker compose logs rails and search for voice_transcript. A 500 error will include the details. |