Pourquoi auto-héberger votre support client
Les solutions SaaS de support client ont un modèle économique simple : vous payez par agent et par canal, et vos données de clients sont stockées sur leurs serveurs. Pour une agence web ou une PME, cela représente rapidement plusieurs centaines de dirhams par mois dès que l'équipe dépasse deux ou trois personnes. Chatwoot inverse ce calcul : vous déployez la plateforme sur votre propre VPS, vous invitez autant d'agents que nécessaire, et vous connectez tous vos canaux sans frais supplémentaires. Vos échanges clients restent sur votre infrastructure — un argument de poids pour la conformité RGPD, la confiance client et la souveraineté des données.
Ce que vous obtenez avec un Chatwoot auto-hébergé
- Boîte de réception partagée omnicanale : livechat, e-mail, WhatsApp, Telegram, Facebook Messenger et Twitter/X DMs dans un seul tableau de bord.
- Widget livechat intégrable : une façade personnalisable à ajouter à n'importe quel site web avec deux lignes de JavaScript.
- Réponses prédéfinies et règles d'automatisation : affectation automatique, réponse de premier contact et routage par langue ou mot-clé.
- Collaboration d'équipe : notes internes, affectation de conversations, mentions et files d'attente d'équipe visibles par tous les agents.
- CRM intégré : profils des contacts avec historique des conversations, attributs personnalisés et étiquettes.
- API REST et webhooks : intégration avec n8n, Activepieces ou votre propre backend.
- Licence MIT — pas de tarification par agent, pas de données envoyées vers un tiers, souveraineté totale.
Prérequis
Chatwoot tourne avec une stack Ruby on Rails + Sidekiq + PostgreSQL 15 + Redis 7, soit quatre conteneurs Docker. Prévoyez un VPS avec au minimum 2 Go de RAM (4 Go recommandés pour des équipes de plus de 10 agents). Ubuntu 24.04 avec Docker est le chemin le plus rapide. Côté réseau, préparez un sous-domaine — support.votre-domaine.com par exemple — et un reverse proxy (Nginx ou Caddy) pour activer le HTTPS. Chatwoot exige un FRONTEND_URL en HTTPS pour que les redirections OAuth, les liens dans les e-mails et le script du widget livechat fonctionnent correctement.
Avant de démarrer, vérifiez que Docker Compose v2 est installé (docker compose version) : Chatwoot v4 utilise la syntaxe docker compose (avec espace) et non l'ancienne commande docker-compose.
Déployer Chatwoot sur un VPS en 6 étapes
Déploiement en un clic depuis la marketplace ServOrbit
Ouvrez votre panneau de contrôle ServOrbit, allez dans Marketplace → Collaboration et productivité → Chatwoot, puis cliquez sur Déployer. Docker récupère
chatwoot/chatwoot:latestet démarre quatre conteneurs : PostgreSQL, Redis, le serveur web Rails et le worker Sidekiq. Au premier démarrage, la migration de la base de données s'exécute automatiquement — attendez 60 à 90 secondes avant que l'interface soit disponible.Si vous préférez une installation manuelle, clonez le fichier
docker-compose.ymlofficiel depuis le dépôt Chatwoot, copiez.env.exampleen.env, renseignezSECRET_KEY_BASE(générez-le avecopenssl rand -hex 64) et lancez :docker compose up -d docker compose exec rails bundle exec rails db:chatwoot_prepareCréer le compte administrateur
Rendez-vous sur
http://<votre-ip-vps>:3000. Chatwoot affiche un assistant de première configuration : saisissez votre nom, votre adresse e-mail et un mot de passe fort. Ce compte devient le super-administrateur. Vous pourrez ensuite inviter des agents supplémentaires et créer des équipes depuis le panneau Paramètres.Si la page reste blanche après 90 secondes, vérifiez les logs du conteneur web :
docker compose logs web --tail=50. Une erreurSECRET_KEY_BASE not setouPG::ConnectionBadindique un problème de configuration dans.env.Configurer le FRONTEND_URL et activer HTTPS
Pointez votre domaine vers le VPS (enregistrement A → IP du VPS). Installez Caddy (
apt install -y caddy) et créez/etc/caddy/Caddyfile:support.votre-domaine.com { reverse_proxy localhost:3000 }. Rechargez Caddy (systemctl reload caddy). Mettez ensuiteFRONTEND_URL=https://support.votre-domaine.comdans votre fichier.envet redémarrez le conteneur web :docker compose restart web. Chatwoot utilise cette URL pour les redirections OAuth, les liens dans les e-mails et le script du widget.Activez aussi
FORCE_SSL=truedans.envpour que Rails redirige automatiquement les connexions HTTP vers HTTPS et émette les cookiesSecure.Ajouter votre première boîte de réception
Dans Chatwoot, allez dans Paramètres → Boîtes de réception → Ajouter une boîte. Choisissez Site web pour le livechat, E-mail pour les échanges SMTP/IMAP, ou un canal de messagerie comme WhatsApp Cloud API ou Telegram. Pour le livechat, copiez le snippet JavaScript généré et collez-le dans le
<head>de votre site. Les visiteurs voient immédiatement la bulle de chat.Inviter les agents et configurer l'automatisation
Allez dans Paramètres → Agents et envoyez des invitations par e-mail. Dans Paramètres → Automatisation, créez des règles pour affecter automatiquement les conversations (par exemple, WhatsApp → équipe commerciale, e-mail → facturation) et envoyer des messages de premier contact en dehors des heures d'ouverture. Le worker Sidekiq prend en charge toutes les tâches asynchrones : envoi d'e-mails, déclenchement de webhooks et notifications push.
Connecter WhatsApp Business (optionnel)
Créez une application Meta for Developers et activez l'API WhatsApp Business Cloud. Dans Chatwoot → Paramètres → Boîtes de réception → Ajouter → WhatsApp, saisissez votre numéro de téléphone WhatsApp Business, l'ID du compte WhatsApp Business, le token d'accès et le token de vérification Webhook. Les messages WhatsApp entrants apparaissent désormais dans la boîte de réception partagée aux côtés du livechat et des e-mails.
Configurez les réponses prédéfinies (Paramètres → Réponses prédéfinies) dès le premier jour : saisissement du contact, confirmation de commande, délais de traitement. Vos agents gagnent plusieurs minutes par conversation — et la cohérence de ton est assurée quelle que soit la personne qui répond. Combinez avec les règles d'automatisation pour envoyer automatiquement la réponse de premier contact la nuit et les week-ends.
Gestion des boîtes de réception multiples
Chatwoot permet de centraliser plusieurs canaux dans une seule interface. Chaque canal crée une boîte de réception indépendante, visible dans la barre latérale et assignable à une équipe dédiée.
E-mail (SMTP/IMAP) : dans Paramètres → Boîtes de réception → E-mail, saisissez votre adresse entrante et les identifiants IMAP. Chatwoot interroge la boîte toutes les deux minutes et crée une conversation par fil. Les réponses partent via SMTP en conservant le même fil.
Twitter/X DMs : connectez un compte via l'API Twitter v2 (clé API + secret + token d'accès). Les messages directs entrants apparaissent en temps réel via webhook. Note : l'accès à l'API Twitter v2 nécessite un abonnement développeur Basic ou supérieur.
Téléphone et WebRTC : Chatwoot v4.17 a migré son intégration d'appels vidéo de Dyte vers Cloudflare RealtimeKit. Si vous utilisez les appels vidéo, reconfigurez l'intégration dans Paramètres → Intégrations → Cloudflare Calls et renseignez votre App ID et App Token.
API channel : pour les intégrations personnalisées (chatbot, CRM maison), créez une boîte de réception de type API. Elle expose un endpoint REST pour recevoir les messages et vous renvoyez les réponses via POST /api/v1/accounts/{id}/conversations/{conv_id}/messages. C'est la porte d'entrée pour brancher n'importe quelle source externe.
Intégrations Chatwoot : webhooks, Slack, API REST
Chatwoot offre plusieurs niveaux d'intégration pour s'insérer dans votre stack existante.
Webhooks : dans Paramètres → Intégrations → Webhooks, ajoutez l'URL de votre endpoint. Chatwoot déclenche un événement JSON à chaque conversation créée, message reçu ou statut changé. Utile pour synchroniser les tickets vers un CRM, déclencher un workflow n8n ou enregistrer les conversations dans votre base.
Notifications Slack : connectez un workspace Slack via OAuth dans Paramètres → Intégrations → Slack. Les nouvelles conversations et mentions envoyées dans Chatwoot génèrent une notification dans le canal Slack de votre choix. Vos agents ne ratent aucun message même hors de l'interface.
API REST : toutes les ressources Chatwoot (conversations, contacts, messages, équipes, étiquettes) sont exposées par une API REST v1 documentée à /swagger. Authentification par token (user_access_token ou clé API d'agent). Cas d'usage courants : import de contacts depuis un CRM, rapport des conversations résolues, mise à jour automatique des attributs de contact.
Zapier / Make (ex-Integromat) : Chatwoot dispose de connecteurs natifs sur Zapier et Make pour déclencher des actions sans code. Exemple : nouvelle conversation Chatwoot → créer une opportunité dans votre CRM → notifier l'équipe commerciale par e-mail.
Mettre à jour Chatwoot
Les mises à jour mineures (patch releases comme v4.17.0 → v4.17.1) sont sans risque et contiennent souvent des correctifs de sécurité : planifiez-les dans les 48 heures suivant leur publication.
Pour une mise à jour de patch :
docker compose pull
docker compose down
docker compose up -d
docker compose exec rails bundle exec rails db:migrateVérifiez ensuite les logs (docker compose logs web --tail=30) et testez l'envoi d'un message sur chaque canal.
Pour une mise à jour majeure (v3 → v4), la procédure est plus délicate : v4 introduit des migrations de schéma PostgreSQL bloquantes (tables mentions et conversation_participants restructurées). Ne faites jamais docker compose pull && docker compose up -d sans sauvegarde préalable sur une version majeure.
Bonne pratique : épinglez toujours une version précise dans docker-compose.yml (chatwoot/chatwoot:v4.17.1 plutôt que latest) afin de contrôler exactement ce qui tourne en production et d'éviter les mises à jour silencieuses.
Migrer de Chatwoot v3 vers v4
Chatwoot v4, sorti en juin 2026, introduit la nouvelle interface « Nova UI » et plusieurs migrations de schéma PostgreSQL bloquantes. Une montée de version à chaud depuis v3 casse systématiquement l'instance si elle est faite sans préparation — c'est le sujet de l'issue officielle #12088, qui recense les cas les plus courants.
La raison principale de la casse : v4 renomme la table mentions et restructure la table conversation_participants. Un docker compose pull && docker compose up -d sans sauvegarde préalable lance les migrations automatiquement ; si une migration échoue à mi-chemin (timeout, contrainte de FK non satisfaite), la base se retrouve dans un état intermédiaire et Chatwoot ne démarre plus.
En pratique, trois catégories d'instances sont à risque : celles qui tournent en v3 avec un volume de conversations supérieur à 50 000 (les migrations de masse sont lentes et peuvent dépasser le timeout Rails de 30 s), celles qui ont des colonnes personnalisées non documentées dans la table contacts, et celles qui utilisent Sidekiq Pro (supprimé de la Community Edition en v4 — les jobs en attente au moment de la mise à jour sont perdus).
Procédure de migration v3 → v4
Sauvegarder la base et les volumes
Avant toute manipulation, sauvegardez l'état complet :
docker compose exec postgres pg_dumpall -U postgres > /tmp/chatwoot-v3-dump-$(date +%F).sql. Copiez également les volumes Docker liés à PostgreSQL et à Rails Storage. Cette sauvegarde est votre seul filet : en cas de migration échouée, la restauration est la seule sortie propre.Passer le tag de l'image à v4
Dans votre
docker-compose.yml, remplacezchatwoot/chatwoot:latestparchatwoot/chatwoot:v4.17.1(ou la dernière patch release v4). Évitezlatesten production : ce tag suit le HEAD et peut introduire des régressions sans avertissement. Vérifiez le changelog de chaque version sur le dépôt GitHub avant de cibler un tag.Exécuter les migrations manuellement
Plutôt que de laisser Rails lancer les migrations au démarrage du conteneur web, lancez-les explicitement et en avant-plan pour surveiller leur avancement :
docker compose run --rm web bundle exec rails db:migrate. En cas d'erreur, le message est visible immédiatement — il identifie la migration fautive et vous permet de la corriger ou de la sauter avecdb:migrate:up VERSION=...avant de relancer.Démarrer et vérifier
Une fois les migrations terminées sans erreur, démarrez la stack :
docker compose up -d. Connectez-vous à l'interface Nova UI et vérifiez que les boîtes de réception, les contacts et les conversations existants sont présents. Testez l'envoi et la réception d'un message sur chaque canal connecté. Si Sidekiq affiche des jobs en erreur, consultez l'interface Sidekiq Web (montée sur/sidekiqsi activée) pour les rejouer.
Dépannage : erreurs courantes
Sidekiq workers bloqués. Si les e-mails sortants ne partent plus ou si les webhooks ne se déclenchent plus, Sidekiq est probablement en attente ou ses workers sont épuisés. Vérifiez via l'interface Sidekiq Web (/sidekiq) ou les logs : docker compose logs sidekiq --tail=50. La cause la plus fréquente est une file mailers saturée. Redémarrez le worker : docker compose restart sidekiq. Si le problème persiste, vérifiez la connexion Redis (docker compose exec redis redis-cli ping doit répondre PONG).
Redis connection refused. Si Rails et Sidekiq ne démarrent pas avec Redis::CannotConnectError, le conteneur Redis n'est pas prêt. Vérifiez son état : docker compose ps redis. Un conteneur en Restarting indique un problème de volume ou de permission. Supprimez le volume Redis et relancez si les données Redis sont transitoires (les jobs en attente seront perdus).
ActionCable WebSocket non connecté. Le widget livechat affiche « connexion perdue » ou les agents ne reçoivent pas les messages en temps réel. Cause probable : le reverse proxy ne passe pas les headers WebSocket. Avec Nginx, ajoutez dans votre block location :
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";Avec Caddy, la configuration reverse_proxy localhost:3000 gère automatiquement les WebSockets.
Migration bloquée à mi-chemin. Si rails db:migrate s'arrête en erreur, n'essayez pas de relancer immédiatement. Identifiez la migration fautive dans le message d'erreur, corrigez-la manuellement ou sautez-la (rails db:migrate:up VERSION=<timestamp>), puis rejouez. En dernier recours, restaurez la sauvegarde prise avant la migration.
Chatwoot vs Crisp vs Intercom : quel outil pour quelle situation
Faites défiler le tableau
| Critère | Chatwoot (self-hosted) | Crisp | Intercom |
|---|---|---|---|
| Modèle de prix | Gratuit (infra VPS) | Gratuit limité, puis ~25 €/mois | À partir de ~74 $/agent/mois |
| Hébergement | Sur votre VPS | SaaS uniquement | SaaS uniquement |
| Données clients | Sur votre infrastructure | Serveurs Crisp | Serveurs Intercom |
| RGPD / souveraineté | Total — aucun tiers | DPA disponible | DPA disponible |
| Canaux supportés | Livechat, e-mail, WhatsApp, Telegram, FB, Twitter/X, API | Livechat, e-mail, Messenger | Livechat, e-mail, SMS, WhatsApp (plan élevé) |
| Aucun plafond d'agents | Oui | Non (limité par plan) | Non (facturation par agent) |
| Automatisation | Règles natives + API | Règles natives | Workflows avancés |
| Complexité de déploiement | Moyenne (Docker requis) | Aucune | Aucune |
La documentation officielle
Pour la configuration avancée (SMTP, LDAP SSO, stockage S3, multi-comptes) et les options propres à Chatwoot, référez-vous à la documentation officielle Chatwoot self-hosted. Ce guide couvre la mise en ligne sur VPS ; la doc éditeur reste la référence pour les réglages fins et les mises à jour majeures.