Tutorial

Self-Hosted Chatwoot dengan WhatsApp Integration: Setup Lengkap dari Nol

Self-Hosted Chatwoot dengan WhatsApp Integration: Setup Lengkap dari Nol

Gw self-host Chatwoot buat support system di salah satu project client — toko online dengan 200-300 tiket per bulan. Selama 6 bulan terakhir, WhatsApp channel jadi yang paling aktif karena mayoritas pelanggan di Indonesia lebih nyaman chat dibanding email atau form. Dan honestly? Setup-nya gak sesulit yang lo bayangin.

Artikel ini breakdown step-by-step dari instalasi, konfigurasi WhatsApp integration, setup automation campaign via API, sampe cost comparison dengan alternatif kayak Zendesk atau Freshdesk.

Kenapa Chatwoot?

Chatwoot adalah open-source customer engagement platform — alternatif self-hosted buat Zendesk, Freshdesk, atau Intercom. Beberapa alasan kenapa gw pilih Chatwoot:

  • 100% self-hosted — data pelanggan lo di server lo sendiri. Gak ada data yang lewat third-party support platform
  • WhatsApp integration — support WhatsApp Cloud API (Meta) dan WhatsApp Business API via 3rd party provider
  • Multi-channel �� Email, Website live chat, Facebook Messenger, Twitter DM, Telegram, semuanya dalam satu dashboard
  • Campaign & automation — Drip campaign, auto-reply, assignment rules tanpa perlu coding (tapi bisa di-extend via API)
  • Biaya �� dibanding Zendesk yang $55/agent/bulan, Chatwoot Cuma bayar VPS + WhatsApp API usage

Prerequisites

Yang lo butuhin sebelum mulai:

  • VPS dengan minimal 2GB RAM (recommended 4GB) — gw pake VPS 4GB sebulan ~$12
  • Docker dan Docker Compose terinstall
  • Domain untuk Chatwoot (misal: support.toolkuy.com)
  • WhatsApp Business Account — daftar di Facebook Business Suite
  • Meta Developer Account untuk WhatsApp Cloud API

Step 1: Deploy Chatwoot dengan Docker

Chatwoot punya official Docker Compose setup. Ikutin cara resmi dari repo mereka atau pake versi yang udah gw modif buat production:

# Clone repo
git clone https://github.com/chatwoot/chatwoot
cd chatwoot

# Copy env example
cp .env.example .env

# Generate secret keys
echo "SECRET_KEY_BASE=$(openssl rand -hex 64)" >> .env
echo "FRONTEND_URL=https://support.toolkuy.com" >> .env
echo "POSTGRES_PASSWORD=$(openssl rand -hex 32)" >> .env
echo "REDIS_PASSWORD=$(openssl rand -hex 32)" >> .env

# Setup docker-compose.production.yaml
docker compose -f docker-compose.production.yaml up -d

# Setup database
docker compose -f docker-compose.production.yaml run --rm rails bundle exec rails db:setup

# Create admin user
docker compose -f docker-compose.production.yaml run --rm rails   bundle exec rails runner "Account.first.administrators.create!(name: 'Admin', email: '[email protected]', password: 'your-secure-password')"

Pro tip: pasang di belakang reverse proxy (Nginx/Caddy) dengan HTTPS. Gw pake Caddy — auto SSL, config simpel:

# Caddyfile
support.toolkuy.com {
    reverse_proxy localhost:3000
}

Step 2: Setup WhatsApp Integration

Ini bagian yang paling tricky. Chatwoot support WhatsApp integration via dua metode:

Opsi A: WhatsApp Cloud API (Meta) — Gratis, Tapi Approval

Ini opsi resmi dari Meta. Lo daftar WhatsApp Business Account, verifikasi business, lalu setup webhook ke Chatwoot:

# Di Chatwoot Settings > Inboxes > WhatsApp Cloud API
# Lo perlu:
# - Phone Number ID (dari Meta Business Suite)
# - WhatsApp Business Account ID
# - Permanent Access Token (bikin di Meta Developer Console)

# Webhook URL:
# https://support.toolkuy.com/webhooks/whatsapp/{inbox_id}
# Verify token: set di Chatwoot sama di Meta Developer Console

Kelebihan: gratis, resmi dari Meta, gak perlu third-party. Kekurangan: butuh WhatsApp Business Account yang terverifikasi — di Indonesia prosesnya bisa 1-2 minggu tergantung dokumen bisnis.

Opsi B: 3rd Party Provider (WATI / WANotifier)

Kalau approval Meta terlalu lama atau lo butuh multiple numbers di satu akun, pake third-party provider. Chatwoot support beberapa provider termasuk WANotifier yang paling gampang setup-nya:

# WANotifier setup:
# 1. Daftar di wanotifier.com, hubungkan nomor WhatsApp lo via QR
# 2. Dapetin API key dari dashboard WANotifier
# 3. Di Chatwoot: Settings > Inboxes > WANotifier
# 4. Masukin API key + Webhook URL

Biaya WANotifier: ~$5-15/bulan tergantung volume. Lebih cepet setup-nya — cukup scan QR Code dari WhatsApp Web, gak perlu verifikasi business.

Step 3: Configurasi Automation & Assignment

Tim support lo perlu workflow yang bener. Gw setup beberapa automation rules buat handle tiket secara otomatis:

Canned Responses (Template Balasan Cepat)

Buat template buat pertanyaan yang sering muncul:

# Via Chatwoot Settings > Canned Responses
!status: "Halo! Terima kasih sudah menghubungi kami. 
Pesanan dengan nomor {{order_id}} sedang dalam proses. 
Estimasi pengiriman: 2-3 hari kerja."

!resi: "Berikut nomor resi pesanan Anda: {{tracking_number}}. 
Cek status di: https://cekresi.com/{{courier}}/{{tracking_number}}"

Auto-assignment Rules

Rules yang solusi yang umum dipake di production:

  • Tiket dengan keyword "bayar", "transfer", "pembayaran" → auto-assign ke agent finance team
  • Tiket dari pelanggan dengan >5 order → assign ke senior agent
  • Jam 22:00-06:00 → auto-reply "Kami akan balas besok pagi" + mark as pending

Campaign & Drip Messages

Chatwoot punya campaign feature. Gw setup campaign follow-up otomatis setelah tiket selesai:

# Campaign content (one-off, 24 jam setelah tiket selesai):
"Halo {{contact_name}}! 👋
Kami lihat tiket Anda tentang {{ticket_topic}} sudah selesai.
Mohon kasih rating ya — feedback Anda bantu kami improve layanan.
Balas 'OK' untuk rating 5 ⭐ atau 'NGOMONG' untuk kirim pesan langsung ke support."

Cost Comparison: Chatwoot vs Zendesk

KomponenChatwoot (Self-Hosted)Zendesk Suite
Biaya bulananVPS ~$12 + WhatsApp ~$5 = $17$55/agent × 3 agent = $165
Setup awal1-2 jam (IT skill needed)Instant (SaaS)
Data ownership100% di VPS loDi server Zendesk
CustomizationFull (open source)Terbatas plan
WhatsApp channelAda (via Cloud API / 3rd party)Bayar tambahan
MaintenanceLo urus sendiri (update, backup, monitoring)Zendesk handle

Buat tim support 3 orang, Chatwoot hemat ~$148/bulan — hampir 90% lebih murah. Tapi ada tradeoff: lo musti siap handle maintenance sendiri. Update Chatwoot tiap bulan, backup database, monitor disk usage.

Backup Strategy

Jangan lupa backup — data support pelanggan adalah aset kritis:

#!/bin/bash
# backup-chatwoot.sh — Jalanin daily via cron + sync ke S3

BACKUP_DIR="/var/backups/chatwoot"
mkdir -p $BACKUP_DIR

# Backup PostgreSQL
docker compose -f docker-compose.production.yaml   exec -T postgres pg_dump -U postgres chatwoot_production   | gzip > $BACKUP_DIR/chatwoot-db-$(date +%Y%m%d).sql.gz

# Backup Redis
docker compose -f docker-compose.production.yaml   exec -T redis redis-cli SAVE
docker cp chatwoot-redis-1:/data/dump.rdb   $BACKUP_DIR/chatwoot-redis-$(date +%Y%m%d).rdb

# Upload ke S3-compatible storage
s3cmd sync $BACKUP_DIR/ s3://chatwoot-backups/

# Hapus backup lebih dari 30 hari
find $BACKUP_DIR -mtime +30 -delete

Monitoring & Performance

Chatwoot di VPS 4GB dengan 3 concurrent agents dan ~10K conversations/bulan: idle ~400MB RAM, CPU <5%. Load naik pas jam kerja (08:00-17:00) ke 20-30% CPU. Gw pasang monitoring dengan Plausible + Uptime Kuma buat track kalo Chatwoot down atau slow.

Notifikasi penting: disk usage. Chatwoot nyimpen attachment (gambar, file) di Redis/S3 — pastiin lo purge attachment lama tiap minggu atau pake S3-compatible storage biar disk VPS gak penuh.

Kesimpulan

Self-host Chatwoot cocok buat: bisnis dengan >100 tiket/bulan, concern privacy, dan punya in-house DevOps skill (atau lo sendiri mau belajar). Kalau cuma 10-20 tiket per bulan — mending pake WhatsApp Business langsung + Google Spreadsheet. Lebih simple, zero maintenance.

Buat yang mau explore self-hosted tools lain, cek juga SearXNG buat privacy search engine atau Vaultwarden buat password manager — semua bisa di-VPS dengan modal yang sama.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.