Skip to content

Componentes — Detalle por servicio

whatsapp-gateway

DatoValor
LenguajeGo 1.23 · Fiber v2
Puerto interno8097 (container)
DBMongoDB imcrmdevwhatsapp_messages, whatsapp_conversations
Kafka producerwhatsapp-inbound-events, whatsapp-crm-outbound-mirror
Kafka consumerwhatsapp-outbound-jobs (group: whatsapp-gateway-outbound)
SecretosMETA_APP_SECRET, META_VERIFY_TOKEN, META_SYSTEM_USER_TOKEN (por tenant en Mongo)

Endpoints principales:

  • POST /webhooks/meta — recibe callbacks de WhatsApp.
  • GET /webhooks/meta — verification challenge.
  • GET /health, /metrics (Prometheus).

Flujo interno de inbound (internal/service/inbound.go):

  1. Valida firma X-Hub-Signature-256 con el app secret del tenant resuelto por phone_number_id.
  2. Deduplica por meta_message_id (índice único).
  3. Inserta WhatsAppMessage y upsert WhatsAppConversation.
  4. Publica a whatsapp-inbound-events (Kafka) y canal Redis whatsapp:company:{cid}.

crm-backend/api

DatoValor
LenguajeGo 1.23 · Fiber v2 · air (hot reload)
Puerto3434 (expose 3000)
DBMongoDB imcrmdev (contactos, alertas, contratos, workflows)
AuthPASETO v2 local tokens, API keys con scopes
WorkersDunningWhatsAppJob (hourly), MassOutageBroadcaster, outbound consumer

Módulos clave:

  • internal/delivery/handler/whatsapp_handler.go — envío desde UI.
  • internal/delivery/handler/whatsapp_webhook_handler.goChatwootBridge (webhook de Chatwoot → Meta).
  • internal/jobs/dunning_whatsapp_job.go — worker horario de cobranza.
  • internal/delivery/handler/revenue_impact_handler.goPOST /v1/alerts/revenue-impact.
  • infrastructure/billinggw/client.go — cliente HTTP firmado con PASETO para billing.

impulse-support-agents

Dos binarios, un repo:

integration-api (puerto 8480)

Puente Kafka ↔ Chatwoot. Consumers:

  • whatsapp-inbound-events → crea/actualiza conversación Chatwoot + emite impulse.support.messages.inbound.
  • impulse.support.messages.outbound → POST a Chatwoot con el token apropiado (admin, agente provisionado, o AgentBot IA).
  • whatsapp-crm-outbound-mirror → espeja outbound del CRM en Chatwoot usando el agente provisionado.

Postgres impulse_support:

  • contact_links — mapeo wa_id ↔ Chatwoot contact_id.
  • conversation_links — mapeo wa conversation ↔ Chatwoot conversation_id.
  • support_agent_mappings — provisioning on-the-fly de agentes CRM en Chatwoot.

orchestrator (puerto 8381)

Agente IA. Consume impulse.support.messages.inbound, construye prompt con historial + herramientas (lookup de contrato, plan, tickets abiertos), produce respuesta en impulse.support.messages.outbound tageada con sender_type=ai.

Chatwoot

Fork basado en Chatwoot 3.x. Config específica:

  • account_id=2 para Semtec.
  • Inbox tipo API con webhook → https://dev.api.impulse.ky/v1/whatsapp/chatwoot-bridge.
  • HMAC secret compartido (CHATWOOT_HMAC_SECRET).
  • Platform App Impulse con token en CHATWOOT_PLATFORM_APP_TOKEN (creación de agentes).
  • AgentBot Asistente IA con CHATWOOT_AI_BOT_TOKEN.

impulse-billing

DatoValor
Puerto3030
DBPostgres impulse_billing
Tablas relevantessubscriptions, invoices, payments, plans

Endpoints usados por el CRM:

  • GET /subscriptions/by-contract/:external_id?status=active — retorna array de subscriptions con monthly_cents normalizado.
  • GET /invoices?contact_id=...&status=overdue — input para dunning (pendiente de integrar billing-driven).

telemetrics (contexto)

DatoValor
Puerto API30013434 interno
DBsMongoDB telemetrics (config, alertas) · VictoriaMetrics :8428 (series)

Relevante para WhatsApp: dispara alertas de outage que el CRM consume para ejecutar el broadcast masivo.

Siguiente: Data flow — topics, colecciones y tablas en movimiento.

Impulse Tech · Documentación interna