Arquitectura General

FullChat es una plataforma SaaS multi-tenant de comunicacion omnicanal construida sobre Chatwoot v4.11.0 (Enterprise fork). Soporta 12+ canales de mensajeria, VoIP/PBX integrado, CRM, campanas multicanal y automatizaciones.

Backend

Ruby on Rails 7.1
PostgreSQL 16
Redis + Sidekiq
Puma (4 workers)

Frontend

Vue 3.5 + Vite 5
PrimeVue 4.5.4
Pinia + Vuex
Tailwind CSS

VoIP

FreePBX + Asterisk 17
PJSIP + WebRTC
JsSIP 3.10
GoIP GSM Gateway

Estructura del Proyecto

fullchat/
  app/
    controllers/          # 215 controllers
      api/v1/accounts/    # API principal
      webhooks/           # Webhook handlers (WA, FB, Voice, etc)
    models/               # 78 modelos (Account, Conversation, Contact, etc)
    services/             # 194 service objects
    jobs/                 # 84 background jobs (Sidekiq)
    javascript/
      dashboard/          # Frontend SPA
        components/       # 168 componentes clasicos
        components-next/  # 390 componentes modernos
        routes/           # Pages y routing
        stores/           # Pinia stores (8)
        store/modules/    # Vuex modules (25+)
        plugins/          # fullchatTheme.js (27 temas)
    channels/             # ActionCable (WebSockets)
  config/
    routes.rb             # 609 rutas, 1098 lineas
    initializers/
      zzz_*.rb            # 10 initializers custom FullCall
  db/
    migrate/              # 114 migraciones
  spec/                   # 783 test files (RSpec)
  deployment/             # Systemd + Nginx configs

Stack Tecnologico

ComponenteTecnologiaVersion
Lenguaje BackendRuby3.4.4
Framework BackendRuby on Rails7.1.5.2
Base de DatosPostgreSQL16.13
Cache / PubSubRedis8.6.2
Background JobsSidekiq7.3+
Web ServerPuma6.x
Reverse ProxyNginx1.24
Lenguaje FrontendJavaScript/TypeScriptES2022
Framework FrontendVue.js3.5.12
BundlerVite + vite-plugin-ruby5.4.21
UI LibraryPrimeVue4.5.4
CSSTailwind CSS + UnoCSS3.x
State ManagementPinia + Vuex3.0 / 4.x
Testing BackendRSpec3.x
Testing FrontendVitest + Vue Test Utils3.0.5
SearchOpenSearch + pgVector-
AIOpenAI (ruby-openai, ruby_llm)GPT-4.1
AuthDevise + devise_token_auth-
AuthorizationPundit-
Feature FlagsFlagShihTzu-
PaymentsStripe~18.0
VoIPAsterisk + FreePBX + PJSIP17.9.3

Infraestructura (4 Servidores)

ServidorIPOSRolServicios
Production194.163.184.69Ubuntu 24.04FullChat AppPuma, Sidekiq, PostgreSQL 16, Redis 8, Nginx
Dokploy207.180.234.156Ubuntu 20.04Docker Swarm30 containers: FreePBX, n8n, Evolution API, Twenty CRM, Jitsi, Etherpad, MinIO
Postal217.76.58.191Ubuntu 24.04Email + VoIPPostal (SMTP), Asterisk 20.18, Kamailio, Nginx
GoIP186.154.148.252FirmwareGSM GatewayGoIP32 - 31 SIMs, llamadas + SMS

Arquitectura de Red

Internet
  |
  +--- Cloudflare (DNS + CDN + SSL)
  |      |
  |      +--- app.fullchat.co ----> 194.163.184.69:443 (Nginx -> Puma:3001)
  |      +--- call.fullchat.co ---> 207.180.234.156:443 (Traefik -> FreePBX:8280)
  |      +--- dev.fullchat.co ----> 207.180.234.156:443 (Traefik -> Docs:8480)
  |      +--- mail.fullchat.co ---> 217.76.58.191:25 (Postal SMTP)
  |      +--- meet.fullchat.co ---> 207.180.234.156:443 (Traefik -> Jitsi:8180)
  |      +--- goip.fullchat.co ---> 207.180.234.156:443 (Traefik -> GoIP:8080)
  |
  +--- SIP/RTP
         +--- GoIP (186.154.148.252:5060) <--> FreePBX (207.180.234.156:5160)
         +--- Postal Asterisk (217.76.58.191:5070) <--> FreePBX

Modulos Custom (FullChat)

Ademas de las funcionalidades nativas de Chatwoot, FullChat agrega 15 modulos custom:

ModuloFrontendBackendPlan Minimo
Centro de LlamadasCallCenterView.vuezzz_call_center.rbDemo
Campanas MulticanalCampaignsView.vuezzz_sms_campaigns.rbStarter
IVR BuilderIvrBuilderView.vuezzz_ivr_builder.rbPro
Voice Bot IAVoiceBotView.vuezzz_ai_voice_bot.rbEnterprise
Predictive Dialer(en Campanas)zzz_predictive_dialer.rbEnterprise
CRM UnificadoCrmView.vuezzz_crm_integration.rbPro
Email MarketingEmailMarketingView.vuezzz_fullsend_email.rbPro
AutomatizacionesAutomationsHubView.vuezzz_n8n_automations.rbPro
SMS GoIP(en Campanas)zzz_sms_campaigns.rbStarter
Softphone WebRTCAsteriskSoftphone.vuelevels_controller.rbDemo
Click-to-CallContactInfoRow.vue(frontend only)Demo
Webhooks Voz-voice_controller.rbDemo
SaaS ControlSaasAdminV2.vue (6080 lineas)saas_admin_v2_controller.rbSuperAdmin
Pipeline CRMPipelineKanban.vuedeals_controller.rbPro
27 TemasfullchatTheme.jsaaa_theme_inject.rbDemo

Feature Gating (SaaS Plans)

# Backend check:
Current.account.call_center_enabled?
Current.account.voice_bot_enabled?
Current.account.can_send_goip_sms?
Current.account.fullcall_features_summary

# API endpoint:
GET /api/v1/accounts/:id/training/fullcall_features
GET /api/v1/accounts/:id/training/fullcall_plans_matrix

API Reference

Autenticacion

# Header token:
curl -H "api_access_token: TOKEN" https://app.fullchat.co/api/v1/...

# Obtener token:
POST /auth/sign_in { email, password }
Response: { data: { access_token: "..." } }

Endpoints Principales (609 rutas)

RecursoMetodoRutaDescripcion
ConversacionesGET/api/v1/accounts/:id/conversationsListar conversaciones
MensajesPOST/api/v1/accounts/:id/conversations/:cid/messagesEnviar mensaje
ContactosGET/api/v1/accounts/:id/contactsListar contactos
InboxesGET/api/v1/accounts/:id/inboxesListar canales
AgentesGET/api/v1/accounts/:id/agentsListar agentes
Call CenterGET/api/v1/accounts/:id/training/call_center_statusEstado PBX en tiempo real
CDRGET/api/v1/accounts/:id/training/call_center_cdrHistorial de llamadas
IVRGET/POST/api/v1/accounts/:id/training/ivr_configLeer/guardar IVR
Voice BotPOST/api/v1/accounts/:id/training/voice_bot_testProbar bot IA con texto
SMSPOST/api/v1/accounts/:id/training/send_smsEnviar SMS via GoIP
CampanasPOST/api/v1/accounts/:id/training/campaign_createCrear campana multicanal
CRMGET/api/v1/accounts/:id/training/crm_contactsContactos Twenty CRM
EmailPOST/api/v1/accounts/:id/training/email_sendEnviar email via Postal
n8nGET/api/v1/accounts/:id/training/automations_listWorkflows n8n
SoftphoneGET/api/v1/accounts/:id/training/voice_configConfig WebRTC SIP
FeaturesGET/api/v1/accounts/:id/training/fullcall_featuresFeatures del plan

Webhooks (Publicos)

# FreePBX envia eventos de llamada:
POST /webhooks/voice/incoming   # Llamada entrante -> crea contacto+conversacion
POST /webhooks/voice/event      # Evento (answered, ended, failed)
POST /webhooks/voice/recording  # Grabacion de llamada (file upload)
# Header: X-Voice-Secret: FullCall_Webhook_2026!

Procedimiento de Deploy

Requisitos

# SSH al servidor de produccion:
ssh [email protected]

# El codigo esta en:
/home/chatwoot/chatwoot/

Deploy paso a paso

# 1. Subir archivos (desde local)
scp archivo [email protected]:/home/chatwoot/chatwoot/path/

# 2. Verificar sintaxis Ruby
cd /home/chatwoot/chatwoot
ruby -c app/controllers/path/file.rb

# 3. Build frontend (si cambiaron .vue/.js/.css)
sudo -u chatwoot bash -c 'cd /home/chatwoot/chatwoot && \
  CI=true RAILS_ENV=production \
  NODE_OPTIONS="--max-old-space-size=3072" \
  bundle exec rails assets:precompile'

# 4. Limpiar cache bootsnap (si cambiaron .rb)
rm -rf tmp/cache/bootsnap*

# 5. Reiniciar servicios
pkill -9 -f puma
sleep 2
systemctl restart chatwoot-puma
systemctl restart chatwoot-sidekiq

# 6. Purgar cache Cloudflare
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/purge_cache" \
  -H "X-Auth-Email: EMAIL" \
  -H "X-Auth-Key: API_KEY" \
  -d '{"purge_everything":true}'

# 7. Verificar
systemctl status chatwoot-puma
curl -sk -o /dev/null -w "%{http_code}" https://app.fullchat.co/app/login
Bootsnap: Rails cachea bytecode de controladores. Si agregas metodos nuevos a un controller, DEBES limpiar tmp/cache/bootsnap* o usar initializers (zzz_*.rb) con class_eval.
ViteRuby: Puma cachea el manifiesto Vite en memoria. Si el build genera nuevos chunks, pkill -9 puma antes de restart. Un simple systemctl restart NO libera el manifiesto viejo.

FullCall PBX

Arquitectura VoIP

FreePBX (207.180.234.156:8280)
  |-- Asterisk 17.9.3
  |-- PJSIP (18 endpoints: 100-109 internos, 200-207 GoIP)
  |-- WebSocket WSS (wss://call.fullchat.co/ws)
  |-- ARI REST API (:8188, user: fullcall)
  |
  |-- Trunk 1: GoIP Gateway (186.154.148.252:5060)
  |     |-- 31 SIMs GSM Colombia
  |     |-- SMS via HTTP API
  |
  |-- Trunk 2: Postal Asterisk (217.76.58.191:5070)
       |-- Asterisk 20.18.2
       |-- Kamailio SIP proxy

WebRTC Softphone (integrado en Dashboard)

# Componente: AsteriskSoftphone.vue
# Cargado en: Dashboard.vue (async)
# Libreria: JsSIP 3.10.1 (CDN)

# API endpoint para config:
GET /api/v1/accounts/:id/training/voice_config
Response: {
  ws_url: "wss://call.fullchat.co/ws",
  realm: "207.180.234.156",
  extension: "101",
  password: "FullCall101!",
  features: { recording: true, transfer: true }
}

# Click-to-Call event (desde ContactInfoRow.vue):
window.dispatchEvent(new CustomEvent('fullcall:dial', {
  detail: { number: '3001234567' }
}));

Sistema de Temas

// 27 temas disponibles en fullchatTheme.js
// Cada tema define 5 colores que generan 133 CSS variables

// Aplicar tema:
import { applyTheme } from 'dashboard/plugins/fullchatTheme';
applyTheme('emerald'); // o sky, navy, violet, rose, sunset, etc.

// CSS variables generadas:
var(--fc-primary)        // Color principal
var(--fc-success)        // Verde (teal)
var(--fc-warning)        // Amarillo
var(--fc-danger)         // Rojo
var(--fc-text)           // Texto principal
var(--fc-text-muted)     // Texto secundario
var(--fc-surface)        // Fondo
var(--fc-border)         // Bordes

// Clases Chatwoot nativas (siempre usar estas):
text-n-slate-12          // Texto principal
text-n-slate-11          // Texto secundario
text-n-blue-9            // Accent
text-n-teal-9            // Success
text-n-ruby-9            // Danger
bg-n-solid-2             // Superficie elevada
bg-n-background          // Fondo
border-n-weak            // Bordes suaves

Canales e Integraciones

Mensajeria (12 canales)

WhatsApp (Evolution API + YCloud)
Facebook Messenger
Instagram DM
Telegram
TikTok
Twitter/X
Line
Email (ActionMailbox)
Web Widget
SMS (Twilio + GoIP)
API Channel
Voice

Herramientas (10+)

Twenty CRM (:4000)
n8n Automations (:5678)
Jitsi Meet (meet.fullchat.co)
Postal Email (mail.fullchat.co)
MinIO Storage (:9000)
Etherpad (:9010)
FreePBX (call.fullchat.co)
GoIP GSM Gateway
Evolution API (:8080)
Stripe Payments

Variables de Entorno Clave

# Core
FRONTEND_URL=https://app.fullchat.co
SECRET_KEY_BASE=...
RAILS_ENV=production

# Database
POSTGRES_HOST=localhost
POSTGRES_DATABASE=chatwoot_production
POSTGRES_USERNAME=chatwoot

# Redis
REDIS_URL=redis://127.0.0.1:6379/0

# Email (Postal)
SMTP_ADDRESS=mail.fullchat.co
SMTP_PORT=25
SMTP_USERNAME=fc/JMrL8Qbn...
MAILER_SENDER_EMAIL=FullChat <[email protected]>

# Puma
WEB_CONCURRENCY=4
RAILS_MAX_THREADS=5

Testing

# Backend (RSpec - 783 test files)
cd /home/chatwoot/chatwoot
RAILS_ENV=test bundle exec rspec

# Frontend (Vitest - 334 test files)
npm test            # Run once
npm run test:watch  # Watch mode
npm run test:coverage # Coverage report

Equipo y Contacto

RolNombreEmail
CEO / CTOGabriel Rodriguez[email protected]
EmpresaTeleya![email protected]
ProductoFullChatapp.fullchat.co

Capacidades Completas (233+)

Inventario exhaustivo de todas las funciones, modulos y beneficios de la plataforma. Cada capacidad es controlable desde el SaaS Super Admin V2: feature flags, plan guards, permisos RBAC, auditoria y tracking de uso.

233+
Capacidades
76
Feature Flags
20
Permisos RBAC
15
Modulos Custom
157
Acciones Admin
37
Limites por Plan

1. Comunicacion Omnicanal (18 capacidades)

Mensajeria — 8 canales

#CanalTecnologiaTipo
1WhatsApp BusinessEvolution API (Baileys) + YCloudMulti-instancia
2Facebook MessengerGraph APIBidireccional
3Instagram DMGraph APIBidireccional
4TikTokTikTok APIBidireccional
5Web Chat WidgetSDK embebiblePersonalizable
6EmailActionMailbox + IMAP/SMTPInbound + Outbound
7TelegramBot APIBidireccional
8SMS GSMGoIP 32 canalesCosto cero Colombia

Voz y Telefonia — 7 capacidades

#CapacidadDetalle
9Click-to-CallLlamar desde conversacion, evento fullcall:dial
10Auto-ConversacionLlamada entrante crea contacto + conversacion
11Grabacion → ConversacionAudio se sube como attachment via webhook
12WebRTC SoftphoneJsSIP 3.10 integrado en dashboard
13IVR InteractivoMenus telefonicos multinivel
14Colas de llamadasRing groups + estrategias
1518 Extensiones PJSIP100-109 agentes, 200-207 GoIP

Video — 3 capacidades

#CapacidadDetalle
16Videollamadas JitsiIntegrado en conversaciones
17Grabacion de videoOpcional por plan
18Compartir pantallaOpcional por plan

2. CRM y Ventas — Pipeline (14)

#CapacidadDetalle
19Tablero KanbanDrag-drop entre etapas
20Pipelines multiplesVentas, soporte, custom
21Etapas personalizablesColor, posicion, probabilidad, won/lost
22Deals CRUDValor monetario, prioridad, producto
23Probabilidad ponderadaValor × probabilidad automatico
24Historial actividadesTimeline por deal
25Asignacion agente/equipoPor deal individual
26Link deal ↔ conversacionAsociar contexto de chat
27Exportar CSVDeals con filtros
28Estadisticas de ventasWon, lost, avg, days to close
29Empresas (Companies)Gestion con contactos asociados
30CRM Externo (Twenty)REST + GraphQL bidireccional

3. Instalaciones / Field Service (19)

#CapacidadDetalle
31CRUD instalacionesCrear, editar, filtrar por zona/fecha/estado
32Import masivo ExcelParser inteligente, auto-detect header
33Validacion WhatsAppVerifica numero activo en WA
34Deteccion carrierOperador movil automatico
35GeolocalizacionCoordenadas + departamento + ciudad
36Mapa estaticoOpenStreetMap + Pillow
37Ciclo confirmacion WAMensaje + audio TTS + ubicacion nativa
38Recordatorio automaticoEspera 3 min → reenvio
39Escalacion SMSNo responde WA → SMS GoIP
40Escalacion llamadaNo responde SMS → llamada Asterisk
41Clasificador NLPCONFIRMO / CAMBIAR / NO PUEDO / ambiguo
42Auto-respuestaResponde segun clasificacion
43ReagendamientoParse flexible de nueva fecha
44Resumen adminNotificacion final via WhatsApp
45Timeline visualFlujo tiempo real, refresh 10s
46TTSAudio colombiano (edge-tts)
4723 columnas auditoriawa_sent_at, carrier, audit_log JSONB
48Vista calendarioInstalaciones por dia
49EstadisticasPor periodo, zona, instalador

4. Campanas Multicanal (8)

#CapacidadDetalle
50Campanas WhatsAppTemplates masivos
51Campanas SMSGoIP 32 canales GSM
52Campanas EmailPostal SMTP propio
53Campanas VozMarcador automatico Asterisk
54SegmentacionFiltros por atributos
55ProgramacionFecha/hora futuro
56Marcador predictivoDiscado con ajuste velocidad
57AMDDeteccion contestador

5-12. Modulos Adicionales

ModuloCapacidadesHighlight
Email Marketing (FullSend)5Templates, variables, tracking, Postal SMTP
Centro de Llamadas6Monitor real-time, CDR, hangup remoto
IVR Builder6Editor visual, guardar a FreePBX via SSH
Voice Bot IA5GPT-4.1 + Whisper + TTS 24/7
Automatizaciones (n8n)9Workflows, macros, SLA, auto-resolve
Referidos/Afiliados9Multinivel, comisiones, payouts
Training Center6Niveles, quizzes, certificados
Centro de Ayuda5Portales, embeddings IA, widget

13. Inteligencia Artificial — Captain (10)

#CapacidadDetalle
111Captain AI v1/v2Asistente de agente con tools
112Captain TasksTareas automatizadas por IA
113Agent BotsBots personalizables por inbox
114CSAT ReviewAnalisis IA de satisfaccion
115AI Chat (Admin)Chat con IA desde panel SaaS
116AI Analyze/ExecuteAnalisis y acciones via IA
117Multi-providerOpenAI, Anthropic, Gemini, DeepSeek, Mistral, Perplexity

14. Contactos y Conversaciones (14)

#CapacidadDetalle
121CRUD contactosImport CSV, export, merge
122Atributos customDefinibles por cuenta
123Labels + filtrosTags + vistas guardadas
124Busqueda avanzadaGIN + full text + pgVector
125Respuestas enlatadasTemplates con atajos
126Menciones + participantesColaboracion en conversaciones
127Notas internasSolo agentes
128Typing + statusReal-time via ActionCable
129Adjuntos multimediaImagenes, docs, audio, video

15. Gestion de Equipos (8)

#CapacidadDetalle
135Teams + Agents CRUDAgrupacion, roles, capacidad
136Inboxes configurablesPor tipo de canal
137Working hoursHorarios por inbox
138Asignacion automaticaRound robin, capacity based
13920 permisos granularesCustom roles con 2^20 combinaciones
14012 plantillas de rolPredefinidas por funcion

16. SaaS Super Admin V2 — 157 acciones

AreaAccionesEndpoints clave
Cuentas11CRUD, suspend, activate, impersonate, seed, export
Usuarios6Roles, password, logout, custom roles
Planes8CRUD, clone, 40+ campos por plan
Pagos4Register, revenue, export
Features376 flags toggle global/por cuenta
App Config217 secciones, 60+ variables
CRM/Pipeline12Deals, stages, activities CRUD
Training10Levels, questions, certificates CRUD
Afiliados11Affiliates, rules, commissions, payouts
Comunicaciones6GoIP, SMS, Voice, Extensions
Infraestructura14Health, Docker, DB, logs, storage, Cloudflare
IA4Chat, analyze, execute, models
Bots/Apps6Agent bots, platform apps CRUD
Monitoring5Sidekiq, uptime, diagnostics

17. Seguridad y Auditoria

20 Permisos RBAC enforced en 19 controllers

GrupoPermisos
Conversaciones (4)conversation_manage, conversation_unassigned_manage, conversation_participating_manage, conversation_monitor
Contactos (3)contact_manage, contact_view_pii, crm_manage
Marketing (2)campaign_manage, knowledge_base_manage
Operaciones (4)team_manage, agent_manage, inbox_manage, automation_manage
Inteligencia (3)report_manage, captain_manage, audit_view
Admin (4)integration_manage, settings_manage, billing_manage, readonly_global

Auditoria: 13 controllers • Tracking: 12 contadores mensuales

# Auditoria automatica en:
conversation, contact, pipeline, campaign, team, agent, inbox,
automation_rule, deal, installation, referral, sms, module

# Tracking mensual por cuenta (SaasUsageRecord):
messages_count, conversations_count, sms_sent, emails_sent,
voice_minutes, video_minutes, whatsapp_messages, deals_created,
installations_processed, campaigns_sent, automations_executed, ai_requests

18. Gobernanza SaaS — 7 Capas por Modulo

Regla: Todo modulo nuevo DEBE implementar las 7 capas de control antes de desplegarse.
CapaArchivoFuncion
1 Feature Flagconfig/features.ymlToggle on/off por cuenta
2 Route Guarddashboard.routes.jsBloquea navegacion frontend
3 SidebarSidebar.vueOculta item segun plan
4 Plan Guardbefore_action403 si plan no incluye
5 PermisosPermissionEnforcementSolo roles autorizados
6 AuditoriaOperationalAuditLog de quien/que/cuando
7 TrackingSaasUsageRecordContadores mensuales

19. Integraciones Externas (20+)

IntegracionUsoAcceso
Evolution APIWhatsApp multi-instancia:8080
Postal SMTPEmail propiomail.fullchat.co
Twenty CRMCRM REST+GraphQL:4000
n8nAutomatizacion visual:5678
FreePBX/AsteriskPBX completacall.fullchat.co
GoIP Gateway32 canales GSMgoip.fullchat.co
Jitsi MeetVideoconferenciameet.fullchat.co
OpenAI/Anthropic/GeminiLLMs multipleAPI cloud
CloudflareCDN + cache purgeAPI
Slack/Linear/NotionProductividadWebhooks/API
Shopify/StripeCommerce + PagosAPI
MinIOObject storage:9000

20. Temas y Personalizacion (5)

CapacidadDetalle
27 temas visualesAzules, verdes, morados, rojos, neutros, sectoriales
Variables CSS --fc-*Gobiernan 100% de la UI
Dark modeAutomatico + manual
BrandingLogo, nombre, URL por cuenta
Disable brandingPlan Enterprise

Resumen Final

Backend

78 modelos
215 controllers
194 services
91 jobs
609 rutas API

Frontend

558 componentes Vue
18 vistas custom
27 temas
8 Pinia stores
25+ Vuex modules

Infra

4 servidores
32+ containers
20+ integraciones
12 canales
31 SIMs GSM