---
title: "Deploy Evolution API 2.3 + Typebot 3.19 + Chatwoot 4.19"
description: "WhatsApp bot first, human second: Evolution API + Typebot + Chatwoot"
category: "Bots"
url: https://railway.com/deploy/evolution-api-23-typebot-319-chatwoot-41
---

# Deploy Evolution API 2.3 + Typebot 3.19 + Chatwoot 4.19

WhatsApp bot first, human second: Evolution API + Typebot + Chatwoot

**[Deploy Evolution API 2.3 + Typebot 3.19 + Chatwoot 4.19 on Railway](https://railway.com/template/evolution-api-23-typebot-319-chatwoot-41)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/evolution-api-23-typebot-319-chatwoot-41/manifest.json

- **Creator:** My Projects
- **Category:** Bots

## Template content

### Typebot Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### typebot-viewer https://cdn.jsdelivr.net/gh/selfhst/icons/svg/typebot.svg

- **Image:** baptistearno/typebot-viewer:3.19
- **Start command:** `/bin/sh -c "export S3_ENDPOINT=${S3_ENDPOINT#https://} && exec ./viewer-entrypoint.sh"`
- **Health check:** /api/healthz
- **Public domain:** Yes

### Chatwoot Redis https://devicons.railway.app/i/redis.svg

- **Image:** redis:8.2.11-alpine
- **Start command:** `/bin/sh -c "exec redis-server --requirepass $REDIS_PASSWORD --appendonly yes --dir /data"`

### Typebot Redis https://devicons.railway.app/i/redis.svg

- **Image:** redis:8.10
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --appendonly yes --dir $RAILWAY_VOLUME_MOUNT_PATH"`

### mailpit https://cdn.jsdelivr.net/gh/selfhst/icons/svg/mailpit.svg

- **Image:** axllent/mailpit:v1.33
- **Health check:** /livez
- **Public domain:** Yes

### Chatwoot Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** pgvector/pgvector:0.8.7-pg16

### Evolution Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### Evolution API https://avatars.githubusercontent.com/u/136080052?v=4

- **Image:** evoapicloud/evolution-api:v2.3.7
- **Health check:** /
- **Public domain:** Yes

### Evolution Redis https://devicons.railway.app/i/redis.svg

- **Image:** redis:8.10
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --appendonly yes --maxmemory-policy noeviction --dir $RAILWAY_VOLUME_MOUNT_PATH"`

### typebot-builder https://cdn.jsdelivr.net/gh/selfhst/icons/svg/typebot.svg

- **Image:** baptistearno/typebot-builder:3.19
- **Start command:** `/bin/sh -c "export S3_ENDPOINT=${S3_ENDPOINT#https://} && exec ./builder-entrypoint.sh"`
- **Health check:** /signin
- **Public domain:** Yes

### files https://cdn.jsdelivr.net/gh/selfhst/icons/svg/rclone.svg

- **Image:** rclone/rclone:1.75.2
- **Start command:** `/bin/sh -c "echo ok | rclone rcat :s3:$BUCKET/public/healthz && exec rclone serve http :s3:$BUCKET/public --addr :$PORT --baseurl /public --read-only --disable-dir-list --disable-zip"`
- **Health check:** /public/healthz
- **Public domain:** Yes

### Chatwoot https://cdn.jsdelivr.net/gh/selfhst/icons/svg/chatwoot.svg

- **Image:** chatwoot/chatwoot:v4.19.1-ce
- **Start command:** `/bin/sh -c "printenv CHATWOOT_RUN_SH > /tmp/run.sh && exec sh /tmp/run.sh"`
- **Health check:** /api
- **Public domain:** Yes

## Buckets

- **Bucket**

## Documentation

# Deploy and Host Evolution API + Typebot + Chatwoot on Railway

Evolution API + Typebot + Chatwoot is WhatsApp support where a bot answers first and a person takes over. Evolution API connects a WhatsApp number by scanning a QR code, with no Meta Business approval. Typebot runs your no-code flow, and Chatwoot is the team inbox where agents see every message, including the bot's answers. When an agent replies, the bot pauses for that contact.

## About Hosting Evolution API + Typebot + Chatwoot

Evolution API is a Node.js service that keeps WhatsApp sessions open and exposes them as a REST API with a web manager. On one instance it runs both integrations: incoming messages start or continue a Typebot flow through the Typebot viewer, every message and every bot answer is pushed into a Chatwoot inbox, and agent replies come back through the inbox webhook. Typebot is a builder and a viewer (Next.js) with Postgres, Redis and a bucket; Chatwoot is Rails with Sidekiq, pgvector Postgres and Redis.

This template deploys all three on Railway's private network, each app with its own PostgreSQL and Redis (12 services and a bucket). The Chatwoot admin and its API token are created at deploy time, and the Typebot viewer URL and Chatwoot URL, account id and token are filled in as variables on Evolution API.

## Common Use Cases

- A WhatsApp bot that answers FAQs and collects details, with a human taking over in a shared inbox
- Order status or booking flows built in Typebot, escalated to agents in Chatwoot
- Lead qualification on WhatsApp before a sales agent replies
- Agents seeing the full bot conversation before they answer

## Dependencies for Evolution API + Typebot + Chatwoot Hosting

- PostgreSQL (three: Evolution API, Typebot, and pgvector Postgres for Chatwoot)
- Redis (three: one per app)
- A Railway Bucket for media used in Typebot flows

### Deployment Dependencies

- Evolution API: https://github.com/evolution-foundation/evolution-api (docs https://doc.evolution-api.com)
- Typebot: https://github.com/baptisteArno/typebot.io (docs https://docs.typebot.io)
- Chatwoot: https://github.com/chatwoot/chatwoot (docs https://www.chatwoot.com/docs)

### Implementation Details

**What you set:** `ADMIN_EMAIL` on `Chatwoot` and on `typebot-builder` (your logins).

**After deploy:**

1. Sign in to Chatwoot with `ADMIN_EMAIL` and the generated `ADMIN_PASSWORD`. Sign in to `typebot-builder` with its `ADMIN_EMAIL`; the code arrives in the `mailpit` page (user `admin`, `MAILPIT_PASSWORD`).
2. Build and publish a flow in Typebot and copy its public ID.
3. From the `Evolution API` variables copy `AUTHENTICATION_API_KEY`, `CHATWOOT_URL`, `CHATWOOT_TOKEN` and `TYPEBOT_URL`, and create an instance linked to Chatwoot:

```
POST https:///instance/create   (header apikey: )
{"instanceName":"support-x7k2q9","integration":"WHATSAPP-BAILEYS","qrcode":true,
 "chatwootAccountId":"1","chatwootToken":"","chatwootUrl":"",
 "chatwootSignMsg":true,"chatwootReopenConversation":true,"chatwootAutoCreate":true}
```

4. Pair the number: scan the QR code in `https:///manager`, or call `GET /instance/connect/?number=` and enter the pairing code in WhatsApp (Linked devices).
5. Attach the flow:

```
POST https:///typebot/create/support-x7k2q9
{"enabled":true,"url":"","typebot":"","triggerType":"keyword",
 "triggerOperator":"equals","triggerValue":"hi","expire":1440,"keywordFinish":"#stop",
 "delayMessage":1000,"listeningFromMe":false,"stopBotFromMe":true,"keepOpen":false,"debounceTime":3}
```

   Or use the manager's **Integrations → Chatwoot** (Auto create on) and **Integrations → Typebot** (Stop bot from me on).

**Bot and human:** bot answers appear in the Chatwoot conversation. An agent reply pauses the contact's bot session (`stopBotFromMe`). The bot resumes after `POST /typebot/changeStatus/` with `status` `opened`, or `expire` minutes after the last agent reply (`0` = never). Resolving a conversation in Chatwoot does not resume it.

**This template:**

- Pins Evolution API 2.3.7 (newer images need a license activation), Typebot 3.19 and Chatwoot 4.19.1 CE
- Turns on only the Typebot (`latest` chat API) and Chatwoot integrations in Evolution API
- Creates the Chatwoot admin and API token at deploy time and closes the public onboarding page
- Limits Typebot sign-up to `ADMIN_EMAIL`, with sign-in codes caught by password-protected Mailpit
- Gives each app its own PostgreSQL and Redis; all databases are private
- Stores WhatsApp sessions in PostgreSQL so restarts don't log your number out

**Security notes:** Evolution API 2.3.7's `/chatwoot/webhook/` has no API-key check, so use hard-to-guess instance names. The built-in `EVOLUTION` test channel's `/webhook/evolution` has no API-key check either, so production bots belong on `WHATSAPP-BAILEYS` instances. The Typebot viewer and `files` are public by design (they serve published bots).

**Notes:** Don't change `SECRET_KEY_BASE`, `ACTIVE_RECORD_ENCRYPTION_*` or Typebot's `ENCRYPTION_SECRET` after the first deploy. WhatsApp may ban numbers that send bulk or unsolicited messages. Evolution API, Typebot and Chatwoot are not affiliated with WhatsApp or Meta.

## Why Deploy Evolution API + Typebot + Chatwoot on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Evolution API + Typebot + Chatwoot on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.


## Similar templates

- [Telegram JavaScript Bot](https://railway.com/deploy/5lRkWa) — A template for Telegram bot in JavaScript using grammY
- [Cobalt Tools [Updated Oct ’26]](https://railway.com/deploy/cobalt) — Cobalt Tools [Oct ’26] (Media Downloader, Converter & Automation) Self Host
- [Telegram Gateway](https://railway.com/deploy/railway-telegram-gateway) — Multi-bot Telegram webhook gateway with WebSocket event streaming

Open this page in a browser: https://railway.com/deploy/evolution-api-23-typebot-319-chatwoot-41
