Chatwoot auto-alojado: plataforma de servicio al cliente con IA
Qué cubre este artículo
- Qué es Chatwoot: servicio al cliente open-source con omnicanal.
- Configuración con Docker e instalación de canales (sitio web, correo electrónico, WhatsApp).
- Integración de IA: Ollama responde tickets automáticamente o redacta respuestas.
- Flujos de agentes, automatizaciones, etiquetas y enrutamiento.
- Comparación con Rocket.Chat Omnichannel e Intercom.
Introducción
Chatwoot es la alternativa open-source a Intercom/Zendesk: una plataforma de servicio al cliente que unifica todos los canales de comunicación en una única bandeja de entrada: widget de chat web, correo electrónico, WhatsApp Business, Telegram, Facebook, incluso integraciones telefónicas. Los agentes gestionan todo desde una sola interfaz.
Para quienes auto-alojan IA, Chatwoot es la interfaz ideal para soporte potenciado con IA: llegan mensajes → Ollama redacta respuesta → agente verifica y envía (o la IA responde automáticamente en casos simples). Intervención humana en el bucle por diseño.
Casos de uso típicos
- Soporte de primer nivel con IA: la IA contesta preguntas estándar, los humanos manejan casos complejos.
- Bandeja de entrada omnicanal: sitio web, WhatsApp, correo electrónico, todo llega a una cola.
- Borradores de respuesta: los agentes reciben borradores generados por IA para revisar (modo asistente).
- Categorización automática: la IA etiqueta tickets (error, facturación, pregunta) y los enruta.
- Escalado desde bots: Typebot o tu propio bot escala a Chatwoot.
Instalación: Docker
Chatwoot es una aplicación Rails con Postgres + Redis:
services:
chatwoot:
image: chatwoot/chatwoot:latest
ports: ["127.0.0.1:3000:3000"]
environment:
- SECRET_KEY_BASE=langer-zufaelliger-key
- FRONTEND_URL=https://support.deine-domain.de
- POSTGRES_HOST=postgres
- POSTGRES_USERNAME=chatwoot
- POSTGRES_PASSWORD=geheim
- POSTGRES_DATABASE=chatwoot
- REDIS_URL=redis://redis:6379
- MAILER_SENDER_EMAIL=support@deine-domain.de
- SMTP_ADDRESS=smtp.dein-server.de
- SMTP_PORT=587
- SMTP_USERNAME=...
- SMTP_PASSWORD=...
volumes: [chatwoot_data:/app/storage]
depends_on: [postgres, redis]
restart: always
chatwoot-worker:
image: chatwoot/chatwoot:latest
command: bundle exec sidekiq -C config/sidekiq.yml
environment: *same-env-vars*
volumes: [chatwoot_data:/app/storage]
depends_on: [postgres, redis]
restart: always
postgres:
image: postgres:16
environment:
POSTGRES_USER: chatwoot
POSTGRES_PASSWORD: geheim
POSTGRES_DB: chatwoot
volumes: [pg_data:/var/lib/postgresql/data]
restart: always
redis:
image: redis:7
volumes: [redis_data:/data]
restart: always
volumes:
chatwoot_data:
pg_data:
redis_data:
Después de iniciar: docker exec chatwoot bundle exec rails db:prepare para la configuración de la base de datos, luego el asistente de configuración.
Configurar canales
- Chat en vivo web: Bandeja de entrada → Sitio web → Coloca el fragmento del widget en tu página (como el chat en vivo de Rocket.Chat, pero como plataforma de soporte dedicada).
- Correo electrónico: Los correos entrantes a support@ se convierten en tickets.
- WhatsApp Business: A través de Twilio/360dialog o directamente con la API en la nube de WhatsApp.
- Telegram: Introduce el token del bot: los mensajes de Telegram se convierten en tickets.
- Canal API: Integraciones propias a través de la API de Chatwoot.
Integración de IA: Ollama como agente de soporte
Chatwoot tiene webhooks (en cada mensaje nuevo) + API REST (publica respuestas). El agente de IA actúa en medio:
from flask import Flask, request
import requests
import ollama
app = Flask(__name__)
CW = "https://support.deine-domain.de"
CW_TOKEN = "dein-api-access-token"
client = ollama.Client(host="http://ollama:11434")
@app.route("/webhook", methods=["POST"])
def webhook():
data = request.json
if data.get("event") != "message_created":
return {"ok": True}
if data.get("message_type") != "incoming": # solo mensajes de clientes
return {"ok": True}
convo_id = data["conversation"]["id"]
text = data.get("content", "")
# Carga el contexto de la conversación desde Chatwoot
msgs = requests.get(
f"{CW}/api/v1/accounts/1/conversations/{convo_id}/messages",
headers={"api_access_token": CW_TOKEN}).json()
history = [{"role": "user" if m["message_type"] == 0 else "assistant",
"content": m["content"]} for m in msgs["payload"][-10:]]
resp = client.chat(model="llama3.1:8b", messages=[
{"role": "system", "content":
"Du bist Support-Agent. Antworte kurz, hilfreich. "
"Wenn Du unsicher bist, sag 'Ich leite an einen Kollegen weiter'."}
] + history)
answer = resp["message"]["content"]
# Publica la respuesta como agente
requests.post(
f"{CW}/api/v1/accounts/1/conversations/{convo_id}/messages",
headers={"api_access_token": CW_TOKEN},
json={"content": answer})
return {"ok": True}
Modo asistente en lugar de respuesta automática
Más seguro para negocios: la IA publica un borrador como nota privada (no al cliente), el agente revisa y envía:
# private_note: True → solo visible internamente
requests.post(url, json={"content": f"[KI-Entwurf]\n{answer}",
"private": True})
Automatización dentro de Chatwoot
Reglas de automatización incorporadas (sin código):
- Asignación de etiquetas por palabras clave
- Asignación automática a equipos de agentes
- Rastreo de SLA y escalada
- Respuestas predefinidas
Ampliable con webhooks de IA: la IA etiqueta → la automatización enruta.
Seguridad y protección de datos
- RGPD: Auto-alojado → los datos de los clientes permanecen en tu poder, la razón principal frente a Intercom/Zendesk.
- Datos de clientes: el chat de soporte contiene datos personales: HTTPS, acceso solo para agentes.
- Tokens API: token propio por integración.
- Transparencia de IA: los clientes deben saber si hablan con IA o humano (hazlo evidente en el nombre del bot o introducción).
Chatwoot frente a alternativas
| Herramienta | Fortaleza | Debilidad |
|---|---|---|
| Chatwoot | Omnicanal, bandeja de entrada de agentes, compatible con IA | Aplicación Rails, algo pesada |
| Rocket.Chat | Chat de equipo + Omnichannel | características de soporte más débiles |
| Intercom | Características de IA más maduras | En la nube, muy costoso |
| Typebot | Flujos sin código | Sin bandeja de entrada de agentes |
Enlaces útiles
- IRC-Coding.de: Tutoriales de programación: webhooks, integración de API.
- Typebot: Escalado de bot a Chatwoot.
- Rocket.Chat: Alternativa con Omnichannel.
- Bots de WhatsApp: Canal de WhatsApp en detalle.
- n8n: Automatización de flujos de trabajo.
Puntos clave:
- Chatwoot = Intercom open-source: soporte omnicanal (sitio web, correo, WhatsApp) en una bandeja de entrada.
- Webhooks + API → Ollama contesta tickets o redacta respuestas para agentes.
- Intervención humana en el bucle: modo asistente (borrador de IA → humano revisa) es el camino seguro.
- Auto-alojado → los datos de los clientes permanecen en tu poder (RGPD).
- La mejor opción open-source para servicio al cliente real con IA.
FAQ
¿Puede la IA responder completamente de forma automática?
¿Qué canales?
¿Chatwoot o Rocket.Chat para soporte?
¿Recursos?
¿Gratuito?
¿Integración de WhatsApp?
Fuentes y lecturas adicionales
- Chatwoot: GitHub.
- Chatwoot Docs: Documentación.
- IRC-Coding.de: Tutoriales de programación.


