Análisis Comparativo de 6 Repositorios IA/CRM — Qué adoptar y cómo implementarlo
Evaluación de stack, arquitectura, features y licencia de 6 repositorios GitHub con IA/CRM/tickets contra el ecosistema actual de StreamingApps (CRM WhatsApp con cascada IA, tienda + Dropshipping Dropi, extensión Chrome GoPlay, portal revendedores). Objetivo: mapear qué capacidades valen la pena adoptar, qué adaptar al stack PHP y qué descartar — con blueprint concreto de implementación para cada recomendación.
Metodología
6 clones git clone --depth 1 al sandbox local, con metadata: estrellas, licencia, última actividad, LOC y manifests.
README + estructura + manifests + código fuente de los módulos relevantes (tools, circuit-breaker, ledger, colas).
Cada capacidad comparada contra el ecosistema actual: CRM WhatsApp, tienda/Dropi, cascada IA, extensión Chrome, revendedores.
Matriz adopt/adapt/skip con licencia como filtro duro y blueprint de implementación PHP/MySQL para cada adopt.
1 · Inventario y metadata de los 6 repos
| Repositorio | ★ | Stack | LOC | Licencia | Actividad | Veredicto |
|---|---|---|---|---|---|---|
| Sapheron/AgenticCRM | 21 | TypeScript · NestJS · monorepo | 256k | MIT | 2026-05-03 | ADOPT |
| trycompai/crm (Comp AI) | 10.976 | TypeScript · Bun · Postgres | 124k | MIT | 2026-09-11 (muy activo) | ADOPT |
| kaymen99/AI-Sales-agent | 95 | Python · LangChain · LiteLLM | 962 | SIN LICENCIA | 2024-12-09 (inactivo) | ADAPT |
| aniket-work/intelligent-support-system | 5 | Python · YAML config | 971 | SIN LICENCIA | 2025-12-28 | ADAPT |
| nocobase/nocobase | 24.414 | TypeScript · Node · no-code | 96k | DUAL / NOASSERTION | — | SKIP |
| ManideepMuddagowni/…MCP Ticket | 1 | Python · Streamlit · MCP | 787 | SIN LICENCIA | 2025-06-05 (inactivo) | SKIP |
Nota de licencia: sin licencia = código visible pero sin derecho de copia/reutilización — solo se pueden extraer ideas (nunca fragmentos). NocoBase mezcla Apache-2.0 con términos comerciales (NOASSERTION) y exige Node/Postgres — inadmisible para este stack.
2 · Análisis por repo (stack, arquitectura, features)
① AgenticCRM · ADOPT
★21 · MIT · 256k LOCCRM self-hosted cuyo agente IA vive dentro de WhatsApp. Monorepo NestJS: apps/api (NestJS), apps/worker (agente), apps/whatsapp, apps/dashboard, packages/database.
- 8 tools registradas en
tool-registry.ts: create_lead, update_deal_stage, create_task, search_contacts, send_payment_link, get_conversation_history, add_note, escalate_to_human - Circuit breaker + auto-escalación y fallback de 15 proveedores IA (
apps/worker/src/circuit-breaker/) - Chains de 5 iteraciones tool-call, pipeline Contacts→Leads→Deals→Quotes→Invoices→Payments
- Tickets con SLA, KB, broadcasts/secuencias, staff control por WhatsApp (el dueño escribe a su propio número para operar el CRM)
② Comp AI CRM (trycompai) · ADOPT
★10.976 · MIT · 124k LOC«CRM diseñado para agentes IA» — el agente no es una feature del CRM, el CRM es donde el agente anota lo que sabe. Bun + Postgres, agente propio (eve), skills en markdown.
- Evidence ledger: nada se adivina — cada hecho escrito por el agente queda con fuente y timestamp (
agent/lib/research-instructions.ts) - Work queue con
FOR UPDATE SKIP LOCKED(agent/lib/tasks.ts) — tareas agénticas concurrentes sin pisarse - Skills versionadas en markdown (menos código, más prompts auditables) —
.agents/skills/ - Tool
read_crm_history/read_company_history: contexto histórico recuperable antes de responder
③ AI-Sales-agent · ADAPT (ideas)
★95 · sin licencia · 962 LOCAgente de ventas Python para ecommerce de cómputo: LangChain + LiteLLM (Groq/Langfuse). Obsoleto (2024) y sin licencia → solo patrones.
- get_product_recommendation: agente «experto» que recomienda productos según requisitos → mapea 1:1 a nuestra tabla products (77 filas)
- get_store_info: RAG simple sobre
Docs.txt→ FAQ de streaming/planes - Payment links + Calendly como tools → encaja con checkout WhatsApp y agendamiento
④ intelligent-support-system · ADAPT (ideas)
★5 · sin licencia · 971 LOCPoC multi-agente de 4 agentes encadenados para tickets. Config de prompts en YAML reutilizable.
- Pipeline 4 pasos: Classifier (categoría+prioridad+sentimiento) → Router (depto) → Response → Escalation (¿humano?)
- Separación de prompts en YAML/md por rol → aplicable a nuestros
whatsapp-crm/prompts/*.md - Criterios explícitos de escalamiento → template del flag «requiere humano» en el buyer bot
⑤ NocoBase · SKIP ⑥ MCP Ticket Automation · SKIP
★24.414 / ★1- NocoBase: licencia dual con términos comerciales (NOASSERTION en ojos de GitHub; Apache-2.0 + cláusulas propias), plataforma no-code sobre Node/Postgres — no encaja con PHP 8.3/MySQL/Hostinger y reutilizarlo arrastraría una plataforma entera. 357MB clonados, descartado por licencia + stack.
- MCP Ticket Automation: sin licencia (sin derecho de copia), 1★, Streamlit + Google Sheets + MCP Inspector, inactivo desde 2025-06 — el flujo clasifica→responde→logra en Sheets ya está cubierto por nuestra cola y CRM; aporta menos que el repo ④ con el mismo riesgo legal.
3 · Matriz comparativa: capacidades vs ecosistema actual
| Capacidad | Origen (repo) | StreamingApps hoy | Brecha | Acción |
|---|---|---|---|---|
| Circuit breaker + fallback multi-proveedor IA | AgenticCRM | Cascada 5 proveedores en AIService.php — sin cortacircuitos ni métricas de fallo | Media | ADOPT |
| Control admin por WhatsApp (self-chat allowlist) | AgenticCRM | Admin solo vía panel web | Media | ADOPT |
| Tickets con SLA (1ª respuesta) | AgenticCRM | No existe — conversaciones sin estado de soporte | Alta | ADOPT |
Secuencias/follow-ups con dueAt | AgenticCRM | Templates manuales, sin scheduling automático | Alta | ADOPT |
| Evidence ledger (hechos con fuente, «nada se adivina») | Comp AI CRM | Campos IA de contactos sin procedencia | Media | ADOPT |
| Cola de tareas dueAt (work queue) | Comp AI CRM | api-extension-queue existe solo para la extensión Chrome | Media | ADOPT |
| Prompts versionados en markdown | Comp AI + Support | Prompts inline en PHP | Baja | ADOPT |
| Máquina de estados de sesión WhatsApp + watchdog | AgenticCRM | Sesión WAHA sin monitoreo proactivo | Alta | ADOPT |
| Recomendación de productos (RAG/IA) | AI-Sales-agent | Buyer bot responde catálogo sin recomendación guiada | Media | ADAPT |
| Pipeline clasificador→respuesta→escalamiento | Support System | Escalamiento manual | Media | ADAPT |
| Plataforma no-code / builder de apps | NocoBase | No aplica — producto propio a medida | — | SKIP |
| Tickets→Google Sheets+email (MCP) | MCP Ticket | Cubierto mejor por CRM + cola propios | — | SKIP |
4 · Recomendaciones: qué y cómo se implementa
Blueprints concretos, todos viables en PHP 8.3 + MySQL + Hostinger (sin Node/Postgres). Esfuerzo: S ≤½ día · M 1–2 días · L 3–5 días.
Control admin por WhatsApp (self-chat allowlist)
ADOPT · AgenticCRM M · 1 díaQué: que Anderson pueda operar el CRM escribiendo a su propio número de WhatsApp (buscar contacto, ver ventas, ejecutar comandos) sin abrir el panel.
Cómo: ① tabla nueva wa_admin_allowlist(jid PK, alias, activo, created_at); ② en whatsapp-crm/src/WebhookHandler.php, antes del flujo público, si from_jid ∈ allowlist → ruta corta a un AdminCommandHandler con tools mínimas (buscar_contacto, ventas_hoy, enviar_template, agregar_nota); ③ comandos parseados tipo /ventas hoy; ④ audit log en audit_logs por cada acción; ⑤ no exponer secrets ni datos de otros clientes en las respuestas (allowlist + sanitización de salida).
Circuit breaker + salud de proveedores IA
ADOPT · AgenticCRM M · 1–2 díasQué: que la cascada IA (Groq→OpenRouter→…) no reintente un proveedor caído y degrade con visibilidad, en vez de fallar en silencio o latir lento.
Cómo: ① en whatsapp-crm/src/AIService.php añadir estado por proveedor en una tabla ai_provider_health(provider PK, state ENUM(closed,open,half), failures, next_retry_at, updated_at); ② al fallar N veces seguidas (N=3) → half-open durante T=60s (un solo intento de sondeo); ③ éxito → open, fallo → closed+backoff; ④ endpoint ai_status extiende su JSON con estado por proveedor (ya existe el endpoint, se enriquece); ⑤ métricas en la cola de eventos existente.
Tickets con SLA de primera respuesta
ADOPT · AgenticCRM M · 2 díasQué: convertir conversaciones de soporte en tickets con estado y medir tiempo de 1ª respuesta (hoy no se mide nada).
Cómo: ① tabla support_tickets(id, contact_jid, status ENUM(open,pending,resolved,closed), priority, first_response_at, resolved_at, sla_minutes INT DEFAULT 60, assigned_to); ② trigger de creación: mensaje entrante con intención de soporte (o etiqueta manual del panel) → INSERT ticket si no hay abierto para ese JID; ③ primera salida humana/bot → UPDATE first_response_at; ④ cron PHP (cpanel, cada 15 min) marca breached cuando now-first_response_at > sla_minutes y no resuelto; ⑤ panel de tickets en whatsapp-crm/public/ (lista + badge de SLA vencido).
Máquina de estados de sesión WhatsApp + watchdog
ADOPT · AgenticCRM S–M · 1 díaQué: detectar y auto-recuperar sesiones WAHA caídas/not-qreadys antes de que lleguen mensajes perdidos.
Cómo: ① tabla wa_session_log(id, state, detail, created_at) + estado actual en settings; ② cron PHP cada 5 min: GET /api/sessions de WAHA → si estado ∉ {WORKING, scanQr} por >2 ciclos → log down + POST /api/sessions/start (hasta 3 reintentos) + alerta a la cola de notificación (patrón fail-closed ya usado en M2); ③ en el panel, badge de estado de sesión en tiempo casi real (poll 30s).
Secuencias de follow-up con dueAt
ADOPT · AgenticCRM M · 2 díasQué: seguimiento automático a leads fríos: «3 días sin respuesta → mensaje 2 → 7 días → mensaje 3 → escalar».
Cómo: ① tabla sequences(id, name), sequence_steps(seq_id, step_no, delay_days, template_id), sequence_enrollments(contact_jid, seq_id, current_step, next_due_at, status); ② enroll manual/por regla desde el panel; ③ cron PHP cada 15 min: seleccionar next_due_at ≤ now AND status=active (patrón FOR UPDATE SKIP LOCKED se traduce a SELECT … FOR UPDATE SKIP LOCKED — MySQL 8.0+ lo soporta), enviar template por WAHA, incrementar step, reprogramar; ④ si el contacto responde → status=paused; ⑤ reutiliza la cola existente api-extension-queue como brazo de envío.
Evidence ledger en campos IA de contactos
ADOPT · Comp AI S · ½ díaQué: que todo dato que la IA «aprendió» sobre un contacto (interés, presupuesto, motivo) guarde fuente + timestamp — nada se adivina sin rastro.
Cómo: ① tabla contact_evidence(id, contact_jid, field, value, source ENUM(webhook,ai,message,manual), message_id NULL, confidence DECIMAL NULL, created_at); ② en el path donde hoy se hace UPDATE de is_learned/campos IA, insertar también la fila de evidencia; ③ el panel muestra cada campo IA con ícono de procedencia y hover con la evidencia; ④ regla: si dos evidencias de field difieren → gana la más reciente y se conserva la anterior (auditoría).
Cola de tareas dueAt generalizada
ADOPT · Comp AI S–M · 1 díaQué: una sola tabla de trabajo para todo lo diferido (follow-ups, reportes, limpiezas), consumida por cron — hoy api-extension-queue sirve solo a la extensión Chrome.
Cómo: ① crear tasks(id, type, payload JSON, due_at, status ENUM(pending,running,done,failed), attempts, last_error, locked_at NULL); ② consumidor único en PHP cada 5 min con SELECT … WHERE status='pending' AND due_at<=NOW() ORDER BY due_at LIMIT 5 FOR UPDATE SKIP LOCKED; ③ handlers registrados por type (mapa PHP); ④ reintentos con backoff y failed tras 3 intentos + alerta fail-closed (patrón ya probado en M2).
Prompts en markdown versionados
ADOPT · Comp AI + Support S · ½ díaQué: sacar los prompts inline de PHP a archivos *.md auditables en git (diffs de prompts = diffs de comportamiento).
Cómo: ① crear whatsapp-crm/prompts/{buyer,admin,ticket,classifier}.md con frontmatter YAML (versión, modelo objetivo, temperature); ② helper PromptLoader::get('buyer') con cache por mtime; ③ migrar los prompts de AIService.php/buyer bot a loaders (mismo texto, cero cambio de comportamiento); ④ validación en la suite: archivo presente + placeholders {{var}} declarados.
Pipeline clasificador → auto-respuesta → flag de escalamiento
ADAPT · Support System (ideas) M · 2 díasQué: dar estructura de pipeline al flujo entrante: clasificar (categoría+sentimiento+urgencia) → intentar auto-responder → si criterios de escalamiento → marcar «requiere humano».
Cómo: ① primer paso en WebhookHandler.php: llamada barata a la cascada IA con prompt clasificador (solo JSON: {category, priority, sentiment, escalate:bool}, max_tokens bajo); ② criterios de escalamiento explícitos (furor, mención de cancelación/pago, 2+ mensajes sin resolver, escalate=true) → crea ticket A3 con prioridad; ③ si no escala → auto-respuesta con el buyer bot existente; ④ log de la decisión en evidence ledger B1. Sin copiar código (sin licencia): solo el diseño del pipeline.
Tool de recomendación de productos en el buyer bot
ADAPT · AI-Sales-agent (ideas) M · 1–2 díasQué: que el buyer bot recomiende 2–3 productos del catálogo real según lo que el cliente pide, en vez de solo listar.
Cómo: ① en run_buyer_turn añadir tool recommend_products(query, budget, category); ② implementación: SELECT … FROM products WHERE active=1 AND (name/category LIKE …) ORDER BY margin DESC LIMIT 3 con filtro de presupuesto si llega (77 filas → sin embeddings, LIKE basta; si crece → nomic-embed-text local); ③ el modelo recibe los 3 candidatos y elige/redacta; ④ guardar la recomendación como evidencia B1 (source=ai); ⑤ respetar la fuga de márgenes: la tool devuelve solo precios de venta (nunca buyPrice — ya endurecido en B2).
5 · Roadmap sugerido de adopción
- 1. B1 Evidence ledger (½ d)
- 2. B3 Prompts en md (½ d)
- 3. A2 Circuit breaker (1–2 d)
- 4. D recommend_products (1 d)
- 5. A3 Tickets + SLA (2 d)
- 6. C Pipeline clasificador (2 d)
- 7. B2 Cola de tareas (1 d)
- 8. A4 Watchdog sesión WA (1 d)
- 9. A5 Secuencias dueAt (2 d)
- 10. A1 Admin por WhatsApp (1 d)
Prerrequisitos ya cerrados: bloqueadores B1–B4 remediados (informe 42) · Fase 1 M1–M4 (crypto settings, cola fail-closed, HMAC, CSP) · REGLA DE ORO actualizada a Tailwind self-hosted — todo esto en el mismo día 2026-09-30.
Bitácora del informe
- 13:01 — Clonado de los 6 repos (shallow) al sandbox
/tmp/…/repos-eval/+ extracción de metadata (stars, licencia, actividad, LOC, manifests). - 13:05 — Análisis de stack/arquitectura por repo: README, estructura de directorios, manifests y código fuente de
tool-registry.ts,circuit-breaker/,agent/lib/{tasks,research-instructions}.ts, LICENSE de NocoBase. - 13:07 — Mapeo de capacidades vs ecosistema actual (CRM WhatsApp, tienda/Dropi, cascada IA, extensión, revendedores) y matriz adopt/adapt/skip — licencia como filtro duro (solo MIT copiable; «sin licencia» = solo ideas).
- 13:08 — Blueprint de implementación de las 10 recomendaciones (A1–A5, B1–B3, C, D) con tablas/queries/rutas PHP concretas, esfuerzo y roadmap en 3 sprints.
- 13:09 — Publicación en
auditorias/43-analisis-comparativo-repositorios-ia-20260930.html+ fila e incremento de contador enauditorias/index.html.