AchieveApex: ficha tecnica completa
Generado desde
achieveApex-Frontend/public/ai-docsel 2026-10-15. Contiene la ficha tecnica, el indice y todas las fichas de todas las apps.
AchieveApex: ficha tecnica del producto
Documento de entrada para una IA o una persona que necesita entender que es AchieveApex (Apex), que hace, para quien y que lo diferencia. Todo lo que dice esta respaldado por el catalogo de funcionalidades de esta misma carpeta (89 modulos, 822 fichas), que a su vez se escribio leyendo el codigo real del frontend y del backend.
Como navegar este catalogo
Este catalogo se publica como HTML estatico. Cualquier IA (ChatGPT, Claude, un agente) debe abrir las URLs .html. El texto esta en la pagina, sin JavaScript y sin descargar Markdown.
Puerta de entrada: https://www.achieveapex.com/llms.html
Ficha de producto: https://www.achieveapex.com/ai-docs/FICHA-TECNICA.html
| Que abrir | URL |
|---|---|
| Esta ficha | https://www.achieveapex.com/ai-docs/FICHA-TECNICA.html |
| Indice | https://www.achieveapex.com/ai-docs/index.html |
| App CRM | https://www.achieveapex.com/ai-docs/crm/index.html |
| Modulo conversaciones | https://www.achieveapex.com/ai-docs/crm/conversaciones/index.html |
| Una capacidad | https://www.achieveapex.com/ai-docs/crm/conversaciones/inbox-view.html |
| Bundle de una app | https://www.achieveapex.com/ai-docs/bundles/crm.html |
Reglas:
- Empezar en
https://www.achieveapex.com/llms.htmly seguir solo enlaces.html. - No abrir
.mdni.txt. Esos archivos son la fuente interna; la pagina que se lee es.html. - La carpeta de una app o modulo es su
index.html(el mismo contenido queREADME.html). - Para una app completa, abrir
https://www.achieveapex.com/ai-docs/bundles/{app}.html. - Para un detalle, ir al
index.htmldel modulo y luego a la ficha.html. Por confirmar:es una duda, no una capacidad.
1. Que es
AchieveApex es una plataforma multi-app para operar un negocio alrededor de sus clientes: atencion y ventas por canales de mensajeria, asistentes de IA que actuan sobre los datos del negocio, automatizaciones, finanzas (cotizaciones, facturas, pagos, cuentas por pagar), reservas, eventos, proyectos, helpdesk, contratos, reuniones, sitios web y presentaciones.
La pieza que une todo es un contacto unico: la misma persona es el hilo de WhatsApp, el deal, la cotizacion, la factura, la reserva, el ticket, el registro del evento, el contrato firmado y el asistente a la reunion. Cada app lee y escribe sobre ese mismo registro.
Usuario tipico: pymes y empresas de servicios de habla hispana e inglesa (clinicas, inmobiliarias, agencias, academias, e-commerce, consultoras, organizadores de eventos, despachos) que atienden clientes por WhatsApp e Instagram y quieren que la IA opere, no solo responda.
2. Arquitectura de producto
| App | Estado | Que resuelve |
|---|---|---|
| CRM | Produccion | Inbox omnicanal, contactos, companias, deals, actividades, productos, formularios, asistentes IA, automatizaciones, campanas, series, email builder, analytics, AI reports, canales, voz y SMS |
| Operations | Produccion | Proyectos, tareas, equipos, estrategia/OKRs, reportes de ejecucion |
| Helpdesk | Beta | Tickets con SLA, knowledge base, portal publico, insights, configuracion de soporte |
| Finance | Beta | Estimates, invoices, pagos recibidos, payment links, recurrentes, vendors, expenses, bills, payments made, plantillas PDF, impuestos y monedas, pasarelas |
| Sites | Produccion | Constructor de sitios con IA y publicacion con dominio propio |
| Presentations | Produccion | Decks HTML con IA, version live y enlace publico |
| Whiteboards | Produccion | Canvas colaborativo con nodos CRM vivos e IA |
| Events | Produccion | Eventos, tickets, cupones, registro publico, check-in QR, insights |
| Reservations | Produccion | Servicios, recursos, disponibilidad, calendario, booking links, booking publico |
| Contracts | Beta | Contratos desde plantillas con variables CRM, firma publica, auditoria |
| Meetings | Produccion | Grabacion y transcripcion (bot Recall o microfono), booking links personales, transcript publico |
| Links | Beta | Smart links apx.red, QR, UTM, actividad y analitica con atribucion CRM |
| Plataforma | Transversal | Organizacion, billing y wallet, equipo y permisos, perfil, partners, developers/MCP, AI voices, ads, Nova, Nova Support, softphone, notificaciones, academy, community, API docs, sitio de marketing |
| Internal | Admin | Consola de AchieveApex: partners, modelos IA, reportes internos, Nova Support admin |
| Support Admin | Admin | Casos de soporte de clientes hacia AchieveApex |
Tecnologia: frontend Next.js 14 (App Router, TypeScript, Tailwind), backend FeathersJS sobre PostgreSQL con Socket.IO para tiempo real, archivos en S3/CloudFront, autenticacion JWT y API keys, autorizacion CASL por organizacion, seccion, modulo y accion granular (own/all). Multi-tenant por organizacion.
3. Lo que hace distinto a Apex
Cada punto sale de los README de modulo (seccion "Que lo hace diferente").
3.1 Un solo contacto para toda la operacion
- Conversaciones de WhatsApp, Instagram, Messenger, SMS, webchat y email en el mismo hilo, asociado al contacto del CRM.
- Ese contacto es el que aparece en deals, estimates, invoices, pagos, reservas, tickets, registros de eventos, contratos, reuniones, smart links y proyectos.
- Un registro publico (formulario, booking, evento, catalogo) crea o relaciona un contacto; no genera listas aisladas.
3.2 Asistentes de IA que operan, no solo chatean
- Un asistente de canal puede, segun sus tools internas habilitadas: buscar y crear contactos, deals, actividades, notas, tareas; consultar disponibilidad y crear o actualizar reservas; crear estimates e invoices; buscar productos por semantica y enviarlos; crear y consultar tickets; enviar mensajes en los canales del CRM; crear smart links; sintetizar audio con voces IA.
- Handoff a humanos con reglas reales: mantener asignacion, propietario del contacto, o reparto entre miembros por disponibilidad, pesos y fallback. Y handoff inverso: un flujo puede cortar el contexto de la IA o reanudarla con una instruccion.
- Tools externas: HTTP propias (API tools), servidores MCP con OAuth o API key, y automatizaciones publicadas que el asistente invoca.
- Skills por asistente (conocimiento + condiciones de uso), historial de cambios de instrucciones con restauracion, playground, horario de disponibilidad, follow-up automatico.
- Modelos via OpenRouter con catalogo administrado por Apex (modelos permitidos por superficie: conversaciones, tickets, AI chat, voz) y cobro por wallet.
- Voz: asistentes de voz sobre Telnyx, con numeros, IVR/enrutamiento a humano o IA, cola, softphone WebRTC en el header y cumplimiento 10DLC.
3.3 Automatizaciones nativas de todo el producto
- Triggers de CRM, conversaciones, reservas, eventos (registro, check-in), Helpdesk (ticket creado/actualizado/SLA), formularios, llamadas de voz, cambios de miembros del equipo, webhook entrante y fecha.
- Acciones sobre entidades y canales nativos: contactos, deals, estimates, reservas, tickets, actividades, notas, series, WhatsApp, SMS, Gmail, Google Calendar, control del asistente IA en la conversacion, atribucion y Meta CAPI.
- Nodo
Chat With AIpara clasificar, resumir o redactar dentro del flujo. Creacion de automatizaciones por chat con IA. Ejecuciones visibles nodo por nodo con entradas y salidas. - Series: secuencias donde cada contacto avanza en su propio calendario y cada paso ejecuta una automatizacion.
3.4 Finanzas pegadas a la venta
- La cotizacion nace del deal y del contacto; se envia desde la conversacion; el cliente acepta o rechaza en una vista publica con tracking de aperturas, tiempo visible y descargas.
- Conversion a factura, pagos parciales y multi-factura, payment links con Stripe o Wompi (
Apex CheckoutoProvider Checkout), recurrencia, multi-moneda con FX automatico. - Pedidos estilo Shopify (estado, pago y entrega por separado) que llegan del checkout del catalogo publico, del asistente de IA, de conversiones o de creacion manual; el catalogo cobra con las pasarelas propias de la organizacion, en varias monedas, con envio o recogida, inventario opcional y recuperacion de checkouts abandonados. Sin impuestos ni suscripciones.
- Plantillas PDF con builder visual e IA, paginas adicionales Markdown y tablas inteligentes, campos personalizados del CRM en el documento.
- Cuentas por pagar (vendors, expenses, bills, payments made, recurrentes) en la misma plataforma. No es contabilidad de partida doble.
3.5 Copilotos de plataforma y acceso para otras IAs
- Nova: copilot interno de cada organizacion que ejecuta tools sobre contactos, conversaciones, deals, productos, automatizaciones, reservas, proyectos y OKRs, y construye AI Reports probando cada fuente de datos antes de guardar un widget.
- Nova Support: ayuda in-app que conoce la pagina actual (metas de soporte por ruta), consulta datos en solo lectura, acepta capturas y escala a un caso humano.
- MCP server oficial: cualquier cliente MCP (Claude, Cursor, ChatGPT con conectores) opera Apex con consentimiento OAuth por organizacion: contactos, conversaciones y mensajes, deals, facturas, reservas, proyectos, tareas, productos, formularios, asistentes IA y consultas de datos autorizadas de la organizacion. API REST documentada en
/docscon API keys por organizacion.
3.6 Modelo comercial
- Suscripcion Stripe por plan mas wallet prepago para consumo variable: IA de asistentes y herramientas, sintesis de voz, transcripcion y grabacion de reuniones, envios masivos de email, busqueda semantica de productos, generacion de contenido, tramites 10DLC.
- Auto-recarga por saldo minimo con limites de 24 horas y 30 dias que la desactivan ante abuso, conservando el motivo.
- Programa de partners (agencias y afiliados) con atribucion, comisiones por eventos de cobro y payouts via Wise reconciliados por webhook.
- Dominio propio en Sites: subdominio gratuito; dominio propio con suscripcion de $5 USD/mes.
4. Integraciones externas confirmadas
| Proveedor | Uso |
|---|---|
| Meta (WhatsApp Cloud API, Instagram, Messenger, Lead Ads, CAPI) | Canales, plantillas, lead ads, conversiones |
| Telnyx | Voz, SMS, numeros, 10DLC, WebRTC softphone, asistentes de voz |
| OpenRouter | Modelos de lenguaje para asistentes, Nova, automatizaciones y builders |
| Stripe | Suscripcion SaaS, wallet, payment links de clientes, dominios de Sites |
| Wompi | Payment links para clientes en Colombia |
| Recall.ai | Bot de grabacion y transcripcion de reuniones |
| Google (Calendar, Meet, Gmail) y Microsoft Outlook | Sincronizacion de actividades, booking links, buzones de email |
| AWS SES | Email broadcasting con dominios DKIM |
| AWS S3 / CloudFront | Archivos, media, sitios publicados |
| Wise | Payouts a partners |
| TikTok | Ruta de demostracion; flujo de conexion no confirmado |
5. Superficies publicas (sin login)
Formularios /f/{id}, cotizaciones /e/{path} e invoices /i/{path}, payment links /payment-links/{token}, catalogos /c/{orgId}/{slug}, eventos /events/{orgId}/..., booking /b/{orgId}/{slug}, booking personal de meetings /m/{orgId}/{slug}, transcripts /mt/{token}, firma de contratos /contracts/sign/{token}, presentaciones /p/{token}, whiteboards /wb/{token}, portal de helpdesk /help/{slug} o dominio propio, sitios publicados en pages.achieveapex.com o dominio propio, smart links en apx.red, unsubscribe de email, consentimiento SMS, webchat embebible.
6. Lo que Apex no hace (honestidad para la IA)
- No es contabilidad de partida doble ni emite facturacion electronica fiscal.
- Tickets legacy (Customer Service) y Helpdesk conviven como productos distintos.
- Clonacion de voz aparece como
Coming Soon; no es operativa. - Vector storage tiene UI de administracion pero el codigo revisado no confirma su backend ni que modulos lo consumen.
- Whiteboards: sin evidencia de colaboracion simultanea ni exportacion.
- Reservations: sin flujo publico de cancelacion por token.
- Todo lo marcado
Por confirmar:en las fichas es una duda real, no una capacidad.
7. Como esta organizado el catalogo
funcionalidades/
FICHA-TECNICA.md ← este documento
README.md ← indice de apps con conteos
PLANTILLA.md ← formato de README de modulo y de ficha
bundles/ ← archivos concatenados para entregar a una IA
{app}/README.md ← modulos de la app
{app}/{modulo}/README.md ← para que sirve, que lo hace diferente, acceso, alcance, tabla de fichas
{app}/{modulo}/{capacidad}.md ← que se logra, donde esta, como funciona, campos, reglas, backend, relaciones
Cada ficha de capacidad responde en orden: que hace, que se logra (resultado, caso de uso, con que se combina), donde esta en la UI, pasos reales, campos, reglas, servicios backend y efectos, relaciones y notas. Los nombres de UI van en ingles tal como aparecen; la explicacion en espanol. En la URL publica, {capacidad}.md y {capacidad} son el mismo documento.
8. Glosario minimo
- Organizacion: tenant. Todo dato pertenece a una.
- Contacto: persona. Compania: cuenta B2B.
- Deal: oportunidad en un pipeline con etapas.
- Estimate: cotizacion. Invoice: factura. Payment link: cobro individual publico.
- Asistente IA: agente configurado por canal (inbox, tickets, Nova/ai-chat, voz).
- Tool interna: accion que el asistente puede ejecutar sobre Apex. API tool: HTTP externa. MCP server: servidor de herramientas externo conectado al asistente.
- Automatizacion: flujo trigger → nodos. Serie: secuencia de automatizaciones por contacto.
- Wallet: saldo prepago para consumo variable.
- Nova: copilot interno. Nova Support: ayuda in-app.
- Smart link: enlace corto
apx.redcon QR, UTM y atribucion.
Funcionalidades
Catalogo de producto de AchieveApex. Cada app tiene su carpeta. Cada modulo tiene la suya. Cada funcionalidad interna es un archivo dentro de la carpeta del modulo.
Para que existe
Es la ficha tecnica de Apex para otra IA (ChatGPT, Claude, un agente) o para quien pregunte "que hace Apex". Empezar por FICHA-TECNICA.md. Para entregarlo a una IA usar los archivos de bundles/:
| Necesidad | Archivo |
|---|---|
| Explicar Apex en un chat corto | FICHA-TECNICA.md |
| Contexto de producto completo sin detalle operativo | bundles/apex-resumen.md |
| Todo el catalogo para un proyecto/knowledge base | bundles/apex-ficha-tecnica-completa.md |
| Solo una app | bundles/{app}.md |
Tras editar fichas, desde achieveApex-Frontend corre node public/ai-docs/absolutize-links.mjs. Convierte los enlaces a URLs absolutas (https://www.achieveapex.com/ai-docs/...), regenera los bundles y valida que existan. No editar bundles/ a mano.
Acceso publico para IA: https://www.achieveapex.com/llms.html y https://www.achieveapex.com/ai-docs/FICHA-TECNICA.html. Cada ficha publicada es un .html estatico generado por node public/ai-docs/build-html.mjs. No enviar a una IA enlaces .md ni .txt. Google no indexa estas paginas (googlebot: noindex); ChatGPT y Claude si pueden abrir el HTML.
Nombre
Usamos funcionalidades y no modulos ni docs porque:
- Un modulo es el contenedor (Conversaciones, Invoices, Sites).
- Lo que vamos a describir dentro son las funcionalidades internas de ese modulo.
src/app/(docs)es el sitio publico de API. Este arbol es el inventario de producto orientado a IA.
Ruta canonica:
achieveApex-Frontend/public/ai-docs/
Estructura
funcionalidades/
README.md ← este indice
FICHA-TECNICA.md ← vision del producto para una IA: que es, que lo hace distinto, limites
PLANTILLA.md ← formato de README de modulo y de ficha
build-bundles.mjs ← genera bundles/
bundles/ ← concatenados por app y completo (generados, no editar)
{app}/
README.md ← lista de modulos de la app
{modulo}/
README.md ← para que sirve, que lo hace diferente, acceso, alcance, tabla de fichas
{funcionalidad}.md ← una por capacidad: que se logra, donde esta, pasos, campos, reglas, backend
Apps de un solo modulo (sites, presentations, whiteboards, support-admin) no anidan otra carpeta: las fichas van directo en la carpeta de la app.
Convencion de slugs
Carpetas en kebab-case, estables, alineadas al producto (no a traducciones de UI):
| Tipo | Ejemplo |
|---|---|
| App | crm, finance, meetings |
| Modulo | conversaciones, recurring-invoices, booking-links |
No renombrar slugs al traducir titulos. El titulo en espanol vive dentro del README.md del modulo.
Mantenimiento
Cada funcionalidad nueva se revisa con el skill funcionalidades-catalog:
- Si es una capacidad de producto (app, modulo o funcion interna usable), se agrega aqui.
- Si es bugfix, refactor, hook, cron o migracion sin UX nueva, no se agrega.
Estado de este arbol
- Inventario de apps y modulos: listo (15 apps, 89 modulos).
- Funcionalidades internas: documentadas (822 fichas). Cada ficha se escribio leyendo el codigo real de frontend y backend; lo no confirmable esta marcado como
Por confirmar:(151 dudas concretas en 132 archivos). - Capa de valor: cada ficha tiene
Que se logra(resultado, caso de uso, con que se combina) y cada modulo tienePara que sirveyQue lo hace diferente, escritos con hechos del codigo y sin marketing. - Calidad: cada ficha sigue
PLANTILLA.md. Esta prohibido el texto plantilla generico (pasos como "abre la seccion correspondiente"); si una ficha no puede describir pasos reales, no se crea.
Apps
| App | Carpeta | Etapa | Modulos | Fichas |
|---|---|---|---|---|
| CRM | crm | Produccion | 19 | 301 |
| Operations | operations | Produccion | 5 | 52 |
| Helpdesk | helpdesk | Beta | 5 | 56 |
| Finance | finance | Beta | 14 | 111 |
| Sites | sites | Produccion | 1 | 16 |
| Presentations | presentations | Produccion | 1 | 11 |
| Whiteboards | whiteboards | Produccion | 1 | 9 |
| Events | events | Produccion | 6 | 40 |
| Reservations | reservations | Produccion | 6 | 40 |
| Contracts | contracts | Beta | 3 | 18 |
| Meetings | meetings | Produccion | 4 | 19 |
| Links | links | Beta | 3 | 14 |
| Plataforma | plataforma | Transversal | 16 | 100 |
| Internal | internal | Admin | 4 | 28 |
| Support Admin | support-admin | Admin | 1 | 7 |
APP: contracts
Contracts
Contratos, plantillas y firma electronica.
- Etapa: Beta
- Landing:
/{orgId}/contracts
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Contracts | contratos |
beta | Ciclo de vida de contratos. |
| Templates | templates |
beta | Plantillas reutilizables. |
| Firma publica | firma-publica |
beta | E-sign /contracts/sign/{token}. |
Funcionalidades internas
18 funcionalidades documentadas en 3 modulos. Ver la tabla de cada modulo.
id: contratos app: contracts nombre: Contratos estado: beta permiso: can_access_contracts
Contratos
Gestiona documentos para solicitar firmas electrónicas o registrar contratos recibidos.
Para que sirve
- Una agencia envía un acuerdo de servicios para firma y conserva el resultado con el deal del cliente.
- Una inmobiliaria prepara contratos de arrendamiento con varios firmantes y controla su vencimiento.
- Un despacho archiva contratos ya firmados recibidos de terceros junto al contacto, proyecto o factura relacionados.
- Una empresa B2B revisa qué contratos siguen pendientes y recuerda a los firmantes sin salir del CRM.
Que lo hace diferente
- Un contrato puede vincularse con contacto, empresa, deal, estimate, invoice y proyecto del CRM.
- Combina firma pública mediante enlace con el registro de contratos recibidos que no requieren un flujo de firma.
- Genera el documento firmado con sello y certificado de auditoría, y conserva eventos del proceso.
- Usa plantillas con variables de los registros CRM para crear el documento inicial de contratos de firma.
Acceso
- Ruta principal:
/[orgId]/contracts - Como se llega:
Header app switcher > Contracts - Permiso requerido:
can_access_contractsy permisos de contratos propios o de toda la organización
Alcance tecnico
- Frontend: lista, detalle, preparación y panel lateral de contratos.
- Backend:
contracts,contract-document-versions,contract-signers,contract-signature-fields,contract-send,cron-expire-contracts. - Integraciones externas: S3, SES, Telnyx y generación PDF.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear contrato | create-contract.md | Inicia firma electrónica o registro. |
| Registrar contrato recibido | register-contract.md | Archiva un documento sin firma. |
| Buscar y filtrar | search-and-filter.md | Encuentra contratos por contenido y estado. |
| Gestionar detalle | contract-detail.md | Actualiza propietario, datos y relaciones. |
| Gestionar versiones | document-versions.md | Sube y consulta el documento vigente. |
| Preparar firmas | prepare-signatures.md | Añade firmantes y campos en el PDF. |
| Enviar para firma | send-for-signature.md | Define idioma, mensaje y vencimiento. |
| Recordar firmantes | reminders.md | Reenvía invitaciones pendientes. |
| Anular contrato | void-contract.md | Revoca un flujo aún no finalizado. |
| Historial y finalización | history-and-completion.md | Conserva eventos y genera el documento final. |
Relaciones
- Depende de: Contactos, Empresas, Deals, Estimates, Invoices y Proyectos.
- Usado por: firma pública y documentos relacionados.
Limitaciones y notas
- Los contratos registrados no se pueden enviar ni preparar para firma.
id: contract-detail modulo: contratos app: contracts nombre: Gestionar detalle del contrato tipo: accion
Gestionar detalle del contrato
Consulta y actualiza los datos, propietario y relaciones de un contrato.
Que se logra
- Resultado: mantiene el documento contractual conectado con su responsable y registros comerciales relacionados.
- Caso de uso: un ejecutivo actualiza el valor y vincula la factura de un acuerdo antes de iniciar la firma.
- Se combina con: versiones del documento, preparación de firmas y CRM.
Donde esta
- Ruta:
/[orgId]/contracts/[contractId] - Acceso en UI:
Contracts > fila - Componente(s):
ContractDetailView.tsx,ContractSidebar.tsx
Como funciona
- Revisa
DocumentyActivity. - Edita valor, fechas y notas desde el panel lateral.
- Cambia el propietario o asigna y desvincula contacto, empresa, deal, estimate, invoice y proyecto.
- Descarga el documento o abre
Prepare & Sendpara un borrador de firma.
Reglas y validaciones
- Los permisos propios o globales se basan en el propietario.
- Tras la primera firma, estimate, invoice y archivos adicionales quedan bloqueados.
Backend
- Servicios:
contracts(get/patch), servicios de relaciones.
Relaciones
- Requiere: contrato existente.
id: create-contract modulo: contratos app: contracts nombre: Crear contrato para firma tipo: accion
Crear contrato para firma
Inicia un borrador que podrá prepararse y enviarse para firma electrónica.
Que se logra
- Resultado: crea un contrato de firma con documento y relaciones de negocio listo para preparar.
- Caso de uso: una agencia abre un acuerdo ligado al deal ganado de un cliente antes de enviarlo a firma.
- Se combina con: plantillas, preparar firmas y registros CRM.
Donde esta
- Ruta:
/[orgId]/contracts - Acceso en UI:
Contracts > New Contract > Request signatures - Componente(s):
CreateContractDialog.tsx
Como funciona
- Elige
Request signaturese introduce el título. - Sube un PDF/DOCX o selecciona una plantilla activa.
- Vincula opcionalmente registros CRM, financieros o proyecto y añade valor o fechas.
- Crea el borrador y abre su detalle.
Reglas y validaciones
- Título y documento o plantilla son obligatorios.
- Los archivos aceptados son PDF/DOCX hasta 20 MB.
Backend
- Servicios:
contracts(create),contract-document-versions(create),contract-generate-document(create).
Relaciones
- Dispara / afecta: preparación y envío para firma.
id: document-versions modulo: contratos app: contracts nombre: Gestionar versiones del documento tipo: accion
Gestionar versiones del documento
Mantiene el archivo actual del contrato y conserva las versiones previas.
Que se logra
- Resultado: reemplaza el documento de trabajo sin perder el historial de versiones del contrato.
- Caso de uso: una empresa actualiza las cláusulas de un acuerdo antes de enviarlo a los firmantes.
- Se combina con: preparar firmas y detalle del contrato.
Donde esta
- Ruta:
/[orgId]/contracts/[contractId] - Acceso en UI:
Contract detail > Document > upload or version picker - Componente(s):
ContractDetailView.tsx,ContractSidebar.tsx
Como funciona
- Sube un PDF o DOCX desde el detalle.
- El sistema convierte el DOCX para permitir vista previa y firma.
- Consulta la versión actual o selecciona una versión disponible.
Reglas y validaciones
- Al incorporar una versión, los campos ligados a la anterior dejan de ser vigentes.
- Después de abandonar
draft, no se puede cambiar la estructura de firma.
Backend
- Servicios:
contract-document-versions(find/create). - Efectos: S3 almacena el archivo y se calcula la vista PDF.
Relaciones
- Afecta: preparación de firmas.
id: history-and-completion modulo: contratos app: contracts nombre: Historial y finalización del contrato tipo: automatizacion
Historial y finalización del contrato
Registra el progreso de firma y produce el documento definitivo cuando firma la última persona.
Que se logra
- Resultado: conserva el rastro de la firma y entrega un PDF final con certificado al completar el flujo.
- Caso de uso: un despacho demuestra el progreso y cierre de un acuerdo ante el propietario del contrato.
- Se combina con: firma pública, recordatorios y detalle del contrato.
Donde esta
- Ruta:
/[orgId]/contracts/[contractId] - Acceso en UI:
Contract detail > Activity / Signers - Componente(s):
ContractTimeline.tsx,ContractSidebar.tsx
Como funciona
- El historial refleja creación, envío, apertura, recordatorios, firma, rechazo o anulación.
View detailsmuestra información de una firma o rechazo.- Al completar todos los firmantes, el sistema finaliza el contrato y ofrece su descarga.
Reglas y validaciones
- El proceso pasa por
Sent,Partially SignedySigned, o por rechazo, vencimiento o anulación. - El cron vence contratos pendientes después de su fecha límite.
Backend
- Servicios:
contract-events(find),cron-expire-contracts. - Efectos: se sella el PDF, se agrega certificado de firma y se envían correos de finalización.
Relaciones
- Requiere: firma pública.
id: prepare-signatures modulo: contratos app: contracts nombre: Preparar firmantes y campos tipo: accion
Preparar firmantes y campos
Configura quién firma y dónde debe completar el documento.
Que se logra
- Resultado: asigna a cada firmante los campos obligatorios y el orden necesario para completar un PDF.
- Caso de uso: una inmobiliaria coloca firmas e iniciales para arrendador, arrendatario y codeudor.
- Se combina con: enviar para firma y firma pública.
Donde esta
- Ruta:
/[orgId]/contracts/[contractId]/prepare - Acceso en UI:
Contract detail > Prepare & Send - Componente(s):
ContractPrepareView.tsx,ContractPdfCanvas.tsx
Como funciona
- Agrega firmantes manualmente, desde el usuario, equipo o cliente.
- Selecciona firma paralela o secuencial y ordena los firmantes.
- Coloca
Signature,Initials,Name,Date,TextoCheckboxsobre el PDF. - Ajusta responsable, obligatorio y etiqueta de cada campo.
Reglas y validaciones
- Solo está disponible para borradores de firma, no para
On file. - Cada firmante necesita al menos un campo
Signatureobligatorio antes de enviar. - Los cambios se guardan progresivamente.
Backend
- Servicios:
contract-signers,contract-signature-fields,contracts(create/patch/remove).
Relaciones
- Requiere: documento PDF vigente.
id: register-contract modulo: contratos app: contracts nombre: Registrar contrato recibido tipo: accion
Registrar contrato recibido
Archiva un contrato que ya recibió la organización, sin solicitar firmas.
Que se logra
- Resultado: conserva un contrato firmado externamente con sus relaciones comerciales sin abrir un proceso de firma.
- Caso de uso: una inmobiliaria archiva un contrato de arrendamiento recibido y lo relaciona con el inquilino.
- Se combina con: contactos, empresas, deals y proyectos.
Donde esta
- Ruta:
/[orgId]/contracts - Acceso en UI:
Contracts > New Contract > Register on file - Componente(s):
CreateContractDialog.tsx
Como funciona
- Selecciona
Register on file. - Añade título y un PDF/DOCX.
- Vincula registros relacionados y detalles opcionales.
- Selecciona
Register contract.
Reglas y validaciones
- Requiere documento y no admite iniciar desde plantilla.
- No tiene firmantes, preparación ni envío electrónico.
Backend
- Servicios:
contracts(create),contract-document-versions(create).
Relaciones
- Requiere: un documento recibido.
id: reminders modulo: contratos app: contracts nombre: Recordatorios a firmantes tipo: accion
Recordatorios a firmantes
Reenvía la invitación de firma a un firmante pendiente.
Que se logra
- Resultado: reanuda el seguimiento de un firmante pendiente sin generar un contrato nuevo.
- Caso de uso: una consultora recuerda a un cliente el acuerdo enviado antes de la fecha de vencimiento.
- Se combina con: enviar para firma e historial del contrato.
Donde esta
- Ruta:
/[orgId]/contracts/[contractId] - Acceso en UI:
Contract detail > Signers > reminder bell - Componente(s):
ContractSidebar.tsx
Como funciona
- Abre el contrato enviado.
- Selecciona el recordatorio junto al firmante pendiente.
- El sistema reenvía el correo de invitación.
Reglas y validaciones
- Solo aplica a contratos
SentoPartially Signed. - No se permite para firmantes que ya firmaron o rechazaron.
Backend
- Servicios:
contract-send(create con acción de recordatorio). - Efectos: envía correo y registra el evento.
Relaciones
- Requiere: envío para firma previo.
id: search-and-filter modulo: contratos app: contracts nombre: Buscar y filtrar contratos tipo: vista
Buscar y filtrar contratos
Permite localizar contratos y segmentarlos por tipo o estado.
Que se logra
- Resultado: identifica contratos de firma o archivados por estado, contenido y relación comercial.
- Caso de uso: un despacho prioriza los contratos enviados que siguen pendientes antes del cierre mensual.
- Se combina con: detalle del contrato e historial de firma.
Donde esta
- Ruta:
/[orgId]/contracts - Acceso en UI:
Contracts > search and filters - Componente(s):
ContractsListView.tsx
Como funciona
- Escribe un término en la búsqueda.
- Filtra entre
For signatureyOn file, y por estado. - Abre una fila o un registro relacionado de la columna
Related.
Reglas y validaciones
- La búsqueda cubre título, número, notas, relaciones y datos de firmantes.
- Los contratos registrados no muestran firmantes.
Backend
- Servicios:
contracts(find). - Hooks relevantes: búsqueda de contratos.
Relaciones
- Requiere: contratos creados.
id: send-for-signature modulo: contratos app: contracts nombre: Enviar contrato para firma tipo: accion
Enviar contrato para firma
Envía enlaces de firma a todos los firmantes configurados.
Que se logra
- Resultado: inicia un proceso de firma con enlaces personales, idioma, mensaje y vencimiento definidos.
- Caso de uso: una empresa B2B envía un acuerdo a cliente y representante legal siguiendo un orden acordado.
- Se combina con: preparar firmas, firma pública e historial del contrato.
Donde esta
- Ruta:
/[orgId]/contracts/[contractId]/prepare - Acceso en UI:
Prepare & Send > Send for signature - Componente(s):
ContractPrepareView.tsx
Como funciona
- Espera que figure
All changes saved. - Abre
Send for signature. - Selecciona idioma, asunto, mensaje y vencimiento.
- Confirma con
Send now.
Reglas y validaciones
- Solo se envían borradores con documento, firmantes y firma obligatoria por firmante.
- El vencimiento es entre 1 y 365 días.
- En modo secuencial todos reciben enlace, pero los posteriores ven espera hasta su turno.
Backend
- Servicios:
contract-send(create). - Efectos: genera tokens, envía correos, registra historial y fija vencimiento.
Relaciones
- Dispara / afecta: firma pública.
id: void-contract modulo: contratos app: contracts nombre: Anular contrato tipo: accion
Anular contrato
Detiene un contrato que ya no debe seguir disponible para firma.
Que se logra
- Resultado: invalida los enlaces de firma de un documento que no debe continuar vigente.
- Caso de uso: una empresa reemplaza una propuesta contractual enviada con condiciones incorrectas.
- Se combina con: historial del contrato y firma pública.
Donde esta
- Ruta:
/[orgId]/contracts/[contractId] - Acceso en UI:
Contract detail > More > Void contract - Componente(s):
ContractDetailView.tsx
Como funciona
- Abre el menú
More. - Selecciona
Void contracty confirma la operación. - El contrato queda anulado y los enlaces de firma se invalidan.
Reglas y validaciones
- No se puede anular un contrato ya firmado, vencido o anulado.
Backend
- Servicios:
contract-send(create con acción de anulación). - Efectos: elimina los tokens de firmantes y añade un evento al historial.
Relaciones
- Afecta: firma pública.
id: firma-publica app: contracts nombre: Firma pública estado: public permiso: ninguno
Firma pública
Permite a una persona firmar un contrato desde un enlace seguro sin cuenta de AchieveApex.
Para que sirve
- Una empresa de servicios obtiene la firma de un cliente sin pedirle acceso al CRM.
- Una inmobiliaria coordina una firma secuencial entre arrendador, arrendatario y codeudor.
- Un despacho recoge evidencia de consentimiento, verificación y, cuando se exige, foto de identidad.
- Un equipo comercial recibe el documento final al completar el último firmante.
Que lo hace diferente
- La firma pública completa el contrato que vive en Apex y conserva sus relaciones con contacto, deal, factura o proyecto.
- Admite orden paralela o secuencial, y entrega cada enlace según el estado del flujo.
- El documento final se sella con un certificado de auditoría y el historial queda disponible para el propietario en Contracts.
- La verificación puede usar correo y SMS con el canal Telnyx configurado por la organización.
Acceso
- Ruta principal:
/contracts/sign/[token] - Como se llega: enlace recibido por correo
- Permiso requerido: ninguno
Alcance tecnico
- Frontend:
ContractSigningExperience,SignaturePady captura de identidad. - Backend:
public-contract-signing. - Superficies publicas:
/contracts/sign/[token]. - Integraciones externas: SES, Telnyx, S3 y generación PDF.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Abrir paquete de firma | open-signing-package.md | Muestra el estado y documentos disponibles. |
| Verificar identidad | verify-identity.md | Valida códigos enviados por correo o SMS. |
| Completar campos | fill-fields.md | Rellena los campos asignados en el PDF. |
| Firmar o rechazar | sign-or-decline.md | Registra consentimiento, firma o rechazo. |
Relaciones
- Depende de: Contratos, firmantes y documentos relacionados.
- Dispara / afecta: finalización del contrato y correos de estado.
Limitaciones y notas
- Un firmante secuencial puede abrir el enlace, pero debe esperar su turno.
id: fill-fields modulo: firma-publica app: contracts nombre: Completar campos del contrato tipo: publico
Completar campos del contrato
Permite llenar los campos que el emisor asignó al firmante dentro del PDF.
Que se logra
- Resultado: cada firmante completa únicamente los datos y firmas que le corresponden en el documento.
- Caso de uso: una inmobiliaria recoge fecha, iniciales y firma de cada parte del arrendamiento.
- Se combina con: abrir paquete de firma y firmar o rechazar.
Donde esta
- Ruta:
/contracts/sign/[token] - Acceso en UI:
Signing page > document fields - Componente(s):
ContractSigningExperience.tsx,ContractPdfCanvas.tsx
Como funciona
- Selecciona el siguiente campo o pulsa directamente uno del PDF.
- Completa texto, nombre, fecha, casilla, iniciales o firma.
- El avance indica campos completados y dirige al siguiente obligatorio.
Reglas y validaciones
- Los campos requeridos deben completarse para finalizar.
- El nombre y la fecha se proponen automáticamente cuando están vacíos.
Backend
- Servicios:
public-contract-signing(get/create).
Relaciones
- Requiere: paquete de firma disponible.
id: open-signing-package modulo: firma-publica app: contracts nombre: Abrir paquete de firma tipo: publico
Abrir paquete de firma
Presenta al firmante el documento, sus campos y el estado de su enlace.
Que se logra
- Resultado: el firmante sabe si puede actuar, esperar su turno o si el enlace ya no está disponible.
- Caso de uso: un arrendatario abre el enlace de su contrato y consulta el PDF sin usar una cuenta interna.
- Se combina con: verificar identidad y completar campos.
Donde esta
- Ruta:
/contracts/sign/[token] - Acceso en UI: enlace enviado por correo
- Componente(s):
ContractSigningExperience.tsx
Como funciona
- La persona abre el enlace personal.
- Ve un estado de disponible, completado, espera, verificación requerida o no disponible.
- Cuando corresponde, consulta el PDF y documentos relacionados.
Reglas y validaciones
- Un enlace anulado, rechazado o vencido no permite firmar.
- En firma secuencial muestra a quién debe esperar.
Backend
- Servicios:
public-contract-signing(get).
Relaciones
- Requiere: envío de contrato.
id: sign-or-decline modulo: firma-publica app: contracts nombre: Firmar o rechazar contrato tipo: publico
Firmar o rechazar contrato
Registra la decisión del firmante, su consentimiento y evidencia asociada.
Que se logra
- Resultado: formaliza la firma o rechazo y deja evidencia para finalizar o detener el contrato.
- Caso de uso: un cliente acepta un acuerdo con firma y consentimiento desde el enlace recibido por correo.
- Se combina con: verificación de identidad e historial y finalización del contrato.
Donde esta
- Ruta:
/contracts/sign/[token] - Acceso en UI:
Signing page > FinishoMore > Decline - Componente(s):
ContractSigningExperience.tsx,SignaturePad.tsx,SigningIdentityPhoto.tsx
Como funciona
- Añade la firma dibujada, escrita o cargada cuando existe un campo de firma.
- Selecciona
Finish, acepta el consentimiento y toma foto de identidad si se solicita. - Confirma
Sign; alternativamente abreDeclinee indica un motivo opcional.
Reglas y validaciones
- Requiere consentimiento, campos obligatorios y firma si hay campo de firma.
- La foto requerida debe ser JPEG y no superar 3 MB.
- Un rechazo cambia el contrato a
Declinedy avisa al propietario.
Backend
- Servicios:
public-contract-signing(create). - Efectos: guarda evidencia, registra IP y dispositivo; la última firma finaliza y sella el PDF.
Relaciones
- Dispara / afecta: historial y finalización del contrato.
id: verify-identity modulo: firma-publica app: contracts nombre: Verificar identidad del firmante tipo: publico
Verificar identidad del firmante
Verifica al firmante antes de mostrarle el paquete de firma cuando el remitente lo exige.
Que se logra
- Resultado: añade una comprobación por código antes de permitir el acceso al documento de firma.
- Caso de uso: un despacho exige código por correo o SMS antes de que un cliente firme un acuerdo sensible.
- Se combina con: abrir paquete de firma y firmar o rechazar.
Donde esta
- Ruta:
/contracts/sign/[token] - Acceso en UI: pantalla
Verification - Componente(s):
ContractSigningExperience.tsx
Como funciona
- La persona solicita un código.
- Recibe el mismo código de seis dígitos por correo, SMS o ambos.
- Lo introduce y continúa al documento.
Reglas y validaciones
- El código vence en 15 minutos.
- Después de cinco intentos fallidos debe solicitarse un código nuevo.
- La verificación SMS requiere teléfono válido del firmante.
Backend
- Servicios:
public-contract-signing(create). - Efectos: correo de verificación y/o SMS de Telnyx.
Relaciones
- Requiere: verificación configurada al preparar el firmante.
id: templates app: contracts nombre: Plantillas de contratos estado: beta permiso: can_access_contracts
Plantillas de contratos
Define documentos reutilizables con variables para generar contratos de firma.
Para que sirve
- Una consultora estandariza acuerdos de servicios y genera un borrador específico para cada cliente.
- Una inmobiliaria reutiliza la base de contratos y completa datos del inmueble o negocio vinculado.
- Un despacho reduce la copia manual de datos al crear contratos desde oportunidades y contactos del CRM.
Que lo hace diferente
- Las variables se resuelven a partir de los registros vinculados al contrato de Apex, no de una base externa de destinatarios.
- La plantilla genera directamente la primera versión de un contrato que después se prepara y envía para firma pública.
- Las plantillas activas se administran dentro de la misma aplicación que conserva contratos, relaciones CRM e historial de firma.
Acceso
- Ruta principal:
/[orgId]/contracts/templates - Como se llega:
Contracts > Templates - Permiso requerido:
can_access_contractsy permiso de edición de contratos
Alcance tecnico
- Frontend:
ContractTemplatesViewyContractTemplateEditorView. - Backend:
contract-templatesycontract-generate-document.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Gestionar plantillas | manage-templates.md | Crea, busca, activa o elimina plantillas. |
| Editar documento | edit-template-document.md | Redacta el contenido en Markdown. |
| Usar variables | template-variables.md | Inserta datos del contrato relacionado. |
| Generar contrato | generate-contract.md | Convierte una plantilla activa en documento. |
Relaciones
- Depende de: Contratos y registros CRM vinculados.
- Usado por: creación de contratos para firma.
Limitaciones y notas
- Solo las plantillas activas se ofrecen al crear un contrato.
id: edit-template-document modulo: templates app: contracts nombre: Editar documento de plantilla tipo: accion
Editar documento de plantilla
Redacta y guarda el contenido reutilizable de una plantilla.
Que se logra
- Resultado: estandariza el texto de futuros contratos y conserva una base editable por la organización.
- Caso de uso: un despacho actualiza sus cláusulas para que los próximos acuerdos usen la versión aprobada.
- Se combina con: variables de plantilla y generar contrato.
Donde esta
- Ruta:
/[orgId]/contracts/templates/[templateId] - Acceso en UI:
Contracts > Templates > fila - Componente(s):
ContractTemplateEditorView.tsx,DocumentMarkdownEditor
Como funciona
- Actualiza el nombre y el cuerpo en el editor.
- Usa la previsualización del editor para revisar el Markdown.
- Activa o desactiva la disponibilidad de la plantilla.
- Selecciona
Save changes.
Reglas y validaciones
- Guardar requiere nombre y contenido no vacío.
- Las plantillas históricas con HTML aún pueden generar documentos.
Backend
- Servicios:
contract-templates(get/patch).
Relaciones
- Requiere: permiso de edición de contratos.
id: generate-contract modulo: templates app: contracts nombre: Generar contrato desde plantilla tipo: accion
Generar contrato desde plantilla
Convierte una plantilla activa en el documento inicial de un contrato de firma.
Que se logra
- Resultado: crea un borrador documental a partir de una plantilla y sus datos CRM vinculados.
- Caso de uso: una empresa de servicios abre un nuevo acuerdo de cliente desde su modelo de contratación.
- Se combina con: crear contrato, variables de plantilla y preparar firmas.
Donde esta
- Ruta:
/[orgId]/contracts - Acceso en UI:
Contracts > New Contract > Request signatures > Use a template - Componente(s):
CreateContractDialog.tsx
Como funciona
- El usuario elige una plantilla activa al crear un contrato de firma.
- El sistema genera el documento y abre el detalle del nuevo borrador.
- El contrato pasa a preparación de firmantes y campos.
Reglas y validaciones
- Los contratos
Register on fileno pueden usar plantillas. - Si no hay plantillas activas, la opción no está disponible.
Backend
- Servicios:
contract-generate-document(create),contract-document-versions.
Relaciones
- Dispara / afecta: crear contrato y preparar firmas.
id: manage-templates modulo: templates app: contracts nombre: Gestionar plantillas tipo: accion
Gestionar plantillas
Crea y administra el inventario de plantillas reutilizables.
Que se logra
- Resultado: mantiene versiones reutilizables de documentos disponibles para nuevos contratos de firma.
- Caso de uso: una agencia conserva sus modelos de acuerdo activos y retira los que ya no debe usar.
- Se combina con: generar contrato desde plantilla.
Donde esta
- Ruta:
/[orgId]/contracts/templates - Acceso en UI:
Contracts > Templates - Componente(s):
ContractTemplatesView.tsx
Como funciona
- Selecciona
New Template, escribe el nombre y la crea. - Busca por nombre o filtra por estado.
- Abre una fila para editarla, o elimina la plantilla desde
Actions.
Reglas y validaciones
- Crear solicita únicamente el nombre.
- Eliminar una plantilla no altera contratos ya generados.
Backend
- Servicios:
contract-templates(find/create/remove).
Relaciones
- Afecta: creación de contratos desde plantilla.
id: template-variables modulo: templates app: contracts nombre: Variables de plantilla tipo: configuracion
Variables de plantilla
Inserta referencias que se reemplazan al generar un contrato.
Que se logra
- Resultado: completa documentos con datos de las relaciones del contrato al generarlo.
- Caso de uso: una consultora crea un acuerdo desde un deal sin repetir manualmente los datos asociados.
- Se combina con: editar plantilla, contactos, empresas y deals.
Donde esta
- Ruta:
/[orgId]/contracts/templates/[templateId] - Acceso en UI:
Template page > Variables - Componente(s):
ContractTemplateVariablesButton.tsx
Como funciona
- Abre
Variables. - Pulsa una variable para insertarla en la posición actual del editor o usa el icono de copia.
- Guarda el documento.
Reglas y validaciones
- Las variables siguen siendo marcadores en la previsualización de la plantilla.
- Los valores disponibles dependen de los registros vinculados al contrato generado.
Backend
- Servicios:
contract-templates(patch),contract-generate-document(create).
Relaciones
- Requiere: contrato con sus relaciones correspondientes.
APP: crm
CRM
Inbox, pipeline, registros y herramientas de marketing/IA.
- Etapa: Produccion
- Landing:
/{orgId}/conversations
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Conversaciones | conversaciones |
shipped | Inbox omnichannel (WhatsApp, Instagram, Messenger, SMS, webchat, email). |
| Deals | deals |
shipped | Pipeline de ventas, etapas, productos y watchers. |
| Tickets legacy | tickets-legacy |
shipped | Customer Service original. Convive con Helpdesk. |
| Actividades | actividades |
shipped | Tareas, llamadas y calendario CRM. |
| Contactos | contactos |
shipped | Personas, importacion, segmentos y fuentes. |
| Companias | companias |
shipped | Cuentas B2B ligadas a contactos y deals. |
| Productos | productos |
shipped | Catalogo, categorias, media y plantillas de envio. |
| Formularios | formularios |
shipped | Constructor de forms y respuestas. |
| Asistentes IA | asistentes-ia |
shipped | Agentes de canal: instrucciones, tools, skills, handoff, voz. |
| Vector storage | vector-storage |
shipped | Embeddings de productos / knowledge para IA. |
| Automatizaciones | automatizaciones |
shipped | Workflow visual, triggers, nodos y ejecuciones. |
| Campanas | campanas |
shipped | Broadcasts WhatsApp, SMS, email, AI calling y automation. |
| Series | series |
shipped | Secuencias drip con suscripcion y pasos. |
| Email builder | email-builder |
shipped | Plantillas MJML, bloques y assets. |
| Analytics CRM | analytics |
shipped | Dashboards de conversaciones, deals, quotes, actividades, attribution. |
| AI Reports | ai-reports |
shipped | Reportes generados por IA sobre conversaciones y metricas. |
| Catalogos publicos | catalogos-publicos |
shipped | Links publicos de catalogo de productos y tienda online con carrito, checkout y pago con Stripe o Wompi. |
| Canales de mensajeria | canales-mensajeria |
shipped | WhatsApp, Instagram, Messenger, TikTok, Webchat. |
| Voice y SMS | voice-sms |
shipped | Numeros Telnyx, IVR, cola, 10DLC, softphone. |
Funcionalidades internas
301 funcionalidades documentadas en 19 modulos. Ver la tabla de cada modulo.
id: actividades app: crm nombre: Actividades estado: shipped permiso: permisos granulares de actividades
Actividades
Gestiona tareas, llamadas y reuniones relacionadas con registros CRM.
Para que sirve
- Una clínica coordina llamadas de confirmación y reuniones de seguimiento con el paciente correcto.
- Una inmobiliaria agenda visitas asociadas al comprador, la constructora y la oportunidad.
- Una agencia prepara reuniones con los interesados de un deal y comparte un enlace de Google Meet.
- Una consultora consulta sus pendientes por responsable y completa las tareas sin perder el historial CRM.
- Una academia sincroniza su calendario para planificar seguimientos sin duplicar eventos futuros.
Que lo hace diferente
- Una actividad puede vincular en el mismo registro contacto, compañía, deal y responsable, y aparece en sus perfiles CRM.
- Los contactos principales y watchers de un deal se sugieren como invitados cuando tienen correo.
- La sincronización nativa con Google y Outlook permite elegir dirección, visibilidad y tipos de actividad.
- Google puede crear un enlace de Meet desde la actividad sincronizable, sin una herramienta de videollamada separada.
- Al completar o eliminar una actividad sincronizada, Apex intenta actualizar el evento externo sin bloquear el cambio en CRM.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Calendario de actividades | activity-calendar.md | Visualiza y administra actividades CRM. |
| Crear y editar actividades | create-edit-activity.md | Registra detalles, horarios y prioridades. |
| Completar y eliminar actividades | complete-delete-activity.md | Actualiza el estado y el evento externo asociado. |
| Vistas, filtros y búsqueda | activity-views-filters.md | Alterna presentaciones y restringe resultados. |
| Tipos de actividad | activity-types.md | Clasifica actividades y documenta su gestión. |
| Vincular actividades al CRM | activity-relationships.md | Relaciona contactos, compañías, deals y responsable. |
| Invitados y enlace de reunión | activity-attendees-meetings.md | Añade asistentes y conferencia de Google Meet. |
| Sincronización de calendario | calendar-sync.md | Conecta y configura Google u Outlook Calendar. |
| Recordatorios de actividades | activity-reminders.md | Documenta el proceso backend de recordatorios. |
| Acciones masivas | activity-bulk-actions.md | Registra la capacidad backend pendiente de UI. |
Acceso
- Ruta principal:
/[orgId]/activities - Como se llega:
Sidebar > CRM > Activities - Permiso requerido: permisos granulares de actividades
Alcance tecnico
- Frontend:
ActivitiesViewyActivitiesCalendarView. - Backend:
activities,activity-types,activities-bulk-actionsyprocess-activity-reminders. - Superficies publicas: ninguna.
- Integraciones externas: calendar integrations.
Relaciones
- Depende de: Contactos, Compañías y Deals.
- Usado por: Timeline CRM y recordatorios.
Limitaciones y notas
- Por confirmar: comportamiento de sincronización exacto con calendar integrations.
id: activity-attendees-meetings modulo: actividades app: crm nombre: Invitados y enlace de reunión tipo: integracion
Invitados y enlace de reunión
Permite añadir invitados a una actividad sincronizable y crear o consultar un enlace de Google Meet.
Que se logra
- Resultado: convierte una actividad CRM en una reunión convocada con sus interesados y, en Google, con enlace de conferencia.
- Caso de uso: una agencia invita al contacto y a los watchers de un deal a la reunión de presentación sin salir del CRM.
- Se combina con: Watchers del deal y Sincronización con Google y Outlook Calendar.
Donde esta
- Ruta:
/[orgId]/activities - Acceso en UI:
Activity form > Add Invites - Componente(s):
ActivityForm.tsx,ActivityInvites.tsx
Como funciona
- Crea o edita una actividad y asigna un miembro con integración de calendario activa.
- Selecciona
Add Invites. - Añade invitados; el contacto relacionado y watchers del deal se sugieren cuando tienen correo.
- Para una integración Google y una actividad pendiente, activa
Add video conference. - Guarda; si ya existe, el formulario muestra el enlace de Google Meet.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Invitados | lista | No | Disponible cuando la actividad puede sincronizarse. |
Add video conference |
casilla | No | Solo aparece para Google y actividades pendientes. |
Reglas y validaciones
- Los invitados no se habilitan si no hay integración de calendario activa para el responsable.
- La actividad completada no ofrece la creación de conferencia.
Backend
- Servicios:
activities(método: create/patch),organization-users-calendar-integrations(método: find),deal-watchers(método: find) - Efectos: los invitados y la solicitud de conferencia se trasladan a la actividad sincronizada.
Relaciones
- Requiere: Responsable con integración activa; Google para conferencia de Meet.
- Dispara / afecta: Sincronización de calendario y watchers del deal.
Notas
- Por confirmar: soporte de enlace de reunión equivalente para Outlook.
id: activity-bulk-actions modulo: actividades app: crm nombre: Acciones masivas de actividades tipo: accion
Acciones masivas de actividades
El backend expone una capacidad de acciones masivas sobre actividades con permisos granulares.
Que se logra
- Resultado: no hay una operación de negocio verificable desde usuario; existe un servicio autorizado pero no una UI ni acciones implementadas confirmadas.
- Caso de uso: un equipo de ventas necesitaría definir las acciones y conectar una interfaz antes de operar varias actividades a la vez.
Donde esta
- Ruta:
/[orgId]/activities - Acceso en UI: Por confirmar: no se encontró un control de acciones masivas conectado en
ActivitiesView.tsx. - Componente(s): Por confirmar: no se encontró componente de UI asociado.
Como funciona
- Por confirmar: flujo y acciones disponibles para el usuario.
- El servicio
activities-bulk-actionsestá registrado en el backend.
Reglas y validaciones
- Las autorizaciones granulares incluyen un manejador para
activities-bulk-actions. - Por confirmar: alcance por selección, filtros y acciones soportadas.
Backend
- Servicios:
activities-bulk-actions(método: create) - Hooks relevantes solo si cambian el comportamiento visible: autorización granular para el servicio.
- Efectos: Por confirmar: modificaciones específicas que ejecuta el servicio.
Relaciones
- Requiere: Actividades y permisos granulares.
- Dispara / afecta: Por confirmar.
Notas
- No se presenta como funcionalidad de UI completa mientras no se confirme el flujo en frontend.
id: activity-calendar modulo: actividades app: crm nombre: Calendario de actividades tipo: vista
Calendario de actividades
Consulta tareas, llamadas y reuniones del CRM en formato calendario.
Que se logra
- Resultado: sitúa el trabajo comercial y de atención en una agenda temporal que revela compromisos y huecos.
- Caso de uso: una clínica revisa las llamadas y reuniones de la semana antes de coordinar a recepción.
- Se combina con: Crear y editar actividades, Sincronización con Google y Outlook Calendar y Recordatorios.
Donde esta
- Ruta:
/[orgId]/activities - Acceso en UI:
Sidebar > CRM > Activities - Componente(s):
ActivitiesView.tsx,ActivitiesCalendarView.tsx
Como funciona
- Abre
Activities. - Consulta el calendario y actividades existentes.
- Crea o actualiza una actividad desde el flujo disponible.
Reglas y validaciones
- Por confirmar: los filtros y vistas exactos disponibles.
Backend
- Servicios:
activities,activity-types(método: find/create/patch/remove)
Relaciones
- Requiere: Contactos, Compañías o Deals según la actividad.
- Dispara / afecta: Timeline CRM y recordatorios.
Notas
- El backend incluye procesamiento de recordatorios.
id: activity-relationships modulo: actividades app: crm nombre: Vincular actividades al CRM tipo: accion
Vincular actividades al CRM
Asocia una actividad a un contacto, compañía, deal y responsable para conservar el contexto comercial.
Que se logra
- Resultado: cada acción pendiente queda visible desde los registros CRM que motivaron el trabajo.
- Caso de uso: una inmobiliaria vincula una visita con el comprador, la constructora y la oportunidad para no perder seguimiento.
- Se combina con: Contactos, Compañías, Deals e Invitados y enlace de reunión.
Donde esta
- Ruta:
/[orgId]/activitiesy perfiles CRM relacionados - Acceso en UI:
Activity form > selección de registros relacionados - Componente(s):
ActivityForm.tsx,ActivityRelatedSelection.tsx,ActivitiesView.tsx
Como funciona
- Abre la creación o edición de una actividad.
- Selecciona el contacto, compañía, deal y miembro responsable cuando aplique.
- Guarda la actividad.
- Desde la lista, abre los enlaces del contacto, compañía o deal asociados.
Reglas y validaciones
- Una actividad puede iniciarse desde un perfil CRM con el contacto, compañía o deal ya seleccionado.
- El contacto principal y los watchers del deal se usan como sugerencias de invitación cuando tienen correo.
Backend
- Servicios:
activities(método: create/get/patch/find),contacts,companies,dealsyorganizations-users(método: find/get) - Hooks relevantes solo si cambian el comportamiento visible: la consulta rápida adjunta los registros relacionados.
- Efectos: incluye la actividad en los perfiles y el timeline de sus registros.
Relaciones
- Requiere: Contactos, Compañías, Deals y miembros de organización.
- Dispara / afecta: Invitaciones, sincronización de calendario y timeline CRM.
Notas
- La actividad no exige una relación CRM en el formulario encontrado.
id: activity-reminders modulo: actividades app: crm nombre: Recordatorios de actividades tipo: automatizacion
Recordatorios de actividades
El backend incluye un proceso dedicado para evaluar y enviar recordatorios de actividades.
Que se logra
- Resultado: no hay un envío de recordatorios verificable todavía; la superficie actual solo expone un servicio sin lógica de procesamiento observable.
- Caso de uso: una clínica necesitaría una configuración y un procesador funcional antes de usarlo para recordar llamadas a pacientes.
Donde esta
- Ruta:
/[orgId]/activities - Acceso en UI: Por confirmar: no se encontró una configuración visible de recordatorios en las rutas inspeccionadas.
- Componente(s): Por confirmar: no se encontró un componente de configuración asociado.
Como funciona
- El proceso de recordatorios recibe una solicitud de ejecución.
- La implementación actual devuelve la solicitud sin evaluar actividades ni entregar notificaciones.
Reglas y validaciones
- No hay condiciones de envío, reintento o supresión implementadas en el servicio revisado.
Backend
- Servicios:
process-activity-reminders(método: create),activities(método: find/patch) - Efectos: no se confirma el envío de notificaciones.
Relaciones
- Requiere: Actividades.
- Dispara / afecta: Recordatorios de actividades.
Notas
- El servicio actual es un marcador técnico; no debe presentarse como recordatorio operativo hasta implementar su procesamiento.
id: activity-types modulo: actividades app: crm nombre: Tipos de actividad tipo: configuracion
Tipos de actividad
El sistema dispone de tipos para clasificar actividades y cuenta con un servicio de gestión para tipos de actividad.
Que se logra
- Resultado: diferencia tareas, llamadas y reuniones para que la agenda y la sincronización reflejen la intención de cada acción.
- Caso de uso: una academia distingue sus llamadas de admisión de las reuniones informativas en la agenda del equipo.
- Se combina con: Crear y editar actividades y Sincronización con Google y Outlook Calendar.
Donde esta
- Ruta:
/[orgId]/activities - Acceso en UI:
Activity form > selector de tipo - Componente(s):
ActivityForm.tsx,ActivitiesView.tsx,ActivitiesCalendarView.tsx
Como funciona
- Crea o edita una actividad.
- Selecciona uno de los tipos visibles:
Call,Meeting,Task,Deadline,EmailoLunch. - La lista y el calendario muestran un icono y color según el tipo.
Reglas y validaciones
- Los tipos usados por el formulario inspeccionado están definidos en la aplicación.
- La configuración de sincronización permite elegir qué tipos se envían al calendario externo.
Backend
- Servicios:
activity-types(método: find/create/patch/remove),activities(método: create/patch) - Efectos: clasifica actividades en las vistas y sincronización.
Relaciones
- Requiere: Actividades.
- Dispara / afecta: Calendario y sincronización externa.
Notas
- Por confirmar: la ruta y UI administrativa que consume el servicio
activity-types; no se encontró en la superficie autenticada inspeccionada.
id: activity-views-filters modulo: actividades app: crm nombre: Vistas, filtros y búsqueda de actividades tipo: vista
Vistas, filtros y búsqueda de actividades
Alterna entre lista y calendario, filtra por responsable o estado y busca actividades por texto.
Que se logra
- Resultado: cada miembro reduce la agenda a sus pendientes, a un responsable o a un período concreto.
- Caso de uso: un gerente de ventas revisa las reuniones pendientes de su equipo en la semana actual.
- Se combina con: Calendario de actividades y Crear y editar actividades.
Donde esta
- Ruta:
/[orgId]/activities - Acceso en UI:
Activities > barra superior - Componente(s):
ActivitiesView.tsx,ActivitiesCalendarView.tsx,TeamMemberSelector.tsx
Como funciona
- Cambia entre
Calendar ViewyList View. - Selecciona un responsable desde el selector de equipo.
- Elige
Not Done,Doneo todos los estados. - Usa
Search activitiespara restringir los resultados. - En el calendario, cambia entre
Month,WeekyDayy navega por fechas.
Reglas y validaciones
- El responsable inicial es el usuario actual cuando está disponible.
- La preferencia de vista lista/calendario se guarda para el usuario.
- La lista se pagina con tamaños entre 10 y 50 elementos; el calendario recupera todos los resultados del período visible.
Backend
- Servicios:
activities(método: find),organizations-users(método: find),users(método: patch) - Hooks relevantes solo si cambian el comportamiento visible: la consulta rápida aporta el contacto, compañía, deal y responsable para cada actividad.
- Efectos: define las actividades visibles en ambas presentaciones.
Relaciones
- Requiere: Miembros de la organización.
- Dispara / afecta: Exportación y navegación hacia contactos, compañías y deals.
Notas
- La vista por asignado se consigue mediante el selector de responsable; no se encontró una ruta separada por asignado.
id: calendar-sync modulo: actividades app: crm nombre: Sincronización con Google y Outlook Calendar tipo: integracion
Sincronización con Google y Outlook Calendar
Conecta el calendario personal para sincronizar actividades CRM y eventos externos de acuerdo con una configuración elegida.
Que se logra
- Resultado: mantiene coordinada la agenda personal con las actividades CRM y permite consultar disponibilidad externa al planear trabajo.
- Caso de uso: una clínica asigna una llamada al asesor correcto consultando su disponibilidad y sincroniza los eventos futuros seleccionados.
- Se combina con: Crear y editar actividades, Invitados y enlace de reunión y Calendario de actividades.
Donde esta
- Ruta:
/[orgId]/my-profile/calendar-sync - Acceso en UI:
My Profile > Calendar Sync > Add Account - Componente(s):
CalendarSyncSettings.tsx,ConnectCalendarDialog.tsx,CalendarIntegrationCard.tsx,ActivityForm.tsx
Como funciona
- Abre
Calendar Syncy seleccionaAdd Account. - Elige
Google CalendaruOutlook Calendar. - Configura
Two-way sync,One-way syncoView only, visibilidad y tipos de actividad. - Completa la autorización con el proveedor.
- Administra conexiones activas, inactivas o con error desde la misma pantalla.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Proveedor | selección | Sí | Google Calendar u Outlook Calendar. |
| Tipo de sincronización | selección | Sí | Bidireccional, unidireccional o solo vista. |
| Visibilidad | selección | Sí | Configura eventos externos y privados en CRM. |
| Tipos de actividad | selección múltiple | Sí | Define qué actividades CRM se sincronizan. |
| Al borrar evento externo | selección | Condicional | En Google bidireccional: completar, eliminar o no cambiar la actividad CRM. |
Reglas y validaciones
- Solo se sincronizan eventos futuros al conectar una cuenta.
- Una actividad pendiente solo se sincroniza si tiene responsable, integración activa y un tipo incluido en la configuración.
- Los fallos de sincronización no impiden guardar la actividad; se marca su estado de sincronización como fallido.
- Al desconectar se deja de sincronizar; una conexión inactiva se puede eliminar.
Backend
- Servicios:
organization-users-calendar-integrations,calendar-sync-processor,google-calendar-webhook,outlook-calendar-webhook,organization-users-calendar-integration-events(método: find/create/patch/remove) - Hooks relevantes solo si cambian el comportamiento visible: creación, edición, finalización y eliminación de actividades se propagan al calendario externo si aplica.
- Efectos: crea, actualiza, completa o elimina eventos externos y procesa cambios recibidos de Google u Outlook.
Relaciones
- Requiere: Perfil del usuario, miembro asignado y autorización OAuth del proveedor.
- Dispara / afecta: Actividades, invitados y enlaces de Google Meet.
Notas
View onlymuestra disponibilidad durante la creación sin sincronizar.
id: complete-delete-activity modulo: actividades app: crm nombre: Completar y eliminar actividades tipo: accion
Completar y eliminar actividades
Permite marcar una actividad como realizada o eliminarla, incluyendo la actualización de su evento externo cuando corresponde.
Que se logra
- Resultado: mantiene al día la agenda CRM y, si corresponde, su reflejo en el calendario externo.
- Caso de uso: una consultora completa una llamada realizada y evita que siga apareciendo entre sus pendientes y en Google Calendar.
- Se combina con: Sincronización con Google y Outlook Calendar y Vistas, filtros y búsqueda.
Donde esta
- Ruta:
/[orgId]/activities - Acceso en UI:
Activities > casilla Done; edición completa de la actividad - Componente(s):
ActivitiesView.tsx,ActivityForm.tsx
Como funciona
- Localiza una actividad en la lista.
- Marca o desmarca su casilla
Done. - Abre una actividad para editarla o usar las acciones de eliminación disponibles.
Reglas y validaciones
- La vista predeterminada muestra actividades no realizadas.
- Al marcarla como realizada, la lista de no realizadas la oculta.
- Si la actividad se sincronizó con Google u Outlook, completarla actualiza su evento externo; eliminarla intenta eliminar el evento asociado.
- Los errores de sincronización no deben impedir completar ni eliminar la actividad CRM.
Backend
- Servicios:
activities(método: patch/remove) - Hooks relevantes solo si cambian el comportamiento visible:
markCalendarEventDoneydeleteFromCalendarpropagan el cambio cuando hay una integración activa. - Efectos: cambia estado de actividad y de evento de calendario asociado.
Relaciones
- Requiere: Actividad existente; integración de calendario solo cuando se sincronizó.
- Dispara / afecta: Lista, calendario y recordatorios.
Notas
- Por confirmar: el punto exacto de UI para eliminar una actividad dentro del formulario.
id: create-edit-activity modulo: actividades app: crm nombre: Crear y editar actividades tipo: accion
Crear y editar actividades
Crea o actualiza tareas, llamadas, reuniones y otros tipos de actividad con horario, prioridad y detalles.
Que se logra
- Resultado: transforma una próxima acción comercial en una tarea calendarizada, asignada y trazable.
- Caso de uso: una agencia programa una reunión de seguimiento, le asigna prioridad y la vincula con el deal del cliente.
- Se combina con: Vincular actividades al CRM, Invitados y enlace de reunión y Sincronización de calendario.
Donde esta
- Ruta:
/[orgId]/activities - Acceso en UI:
Activities > Add Activity, tarjeta existente o creación rápida desde el calendario - Componente(s):
ActivityForm.tsx,ActivityQuickCreatePopover.tsx,ActivitiesCalendarView.tsx
Como funciona
- Selecciona
Add Activity, un bloque horario del calendario o una actividad existente. - Escribe el asunto y elige el tipo.
- Define fechas, horas, prioridad y detalles opcionales.
- Guarda con
Saveo actualiza conUpdate.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Asunto | texto | Sí | El guardado requiere contenido. |
| Tipo | selección | Sí | Call, Meeting, Task, Deadline, Email o Lunch. |
| Fechas y horas | fecha y hora | Sí | La duración se calcula desde el intervalo. |
| Prioridad | selección | No | High, Medium, Low o sin prioridad. |
| Ubicación y descripción | texto | No | Se pueden expandir desde el formulario. |
Reglas y validaciones
- Si la hora inicial supera la final en el mismo día, el formulario ajusta la hora final.
- La creación rápida de calendario usa bloques de 30 minutos y abre el formulario completo cuando se necesita.
Backend
- Servicios:
activities(método: create/get/patch) - Hooks relevantes solo si cambian el comportamiento visible: una creación o edición puede sincronizarse al calendario del responsable.
- Efectos: actualiza listas, calendario y timeline CRM.
Relaciones
- Requiere: Responsables y, opcionalmente, contactos, compañías o deals.
- Dispara / afecta: Sincronización de calendario y recordatorios.
Notas
- Por confirmar: si existen tipos de actividad adicionales creados por configuración.
id: ai-reports app: crm nombre: Reportes con IA estado: shipped permiso: can_access_analytics
Reportes con IA
Área de Analytics para construir páginas de reportes con Nova y ejecutar análisis IA por conversación. Está dirigida a equipos que necesitan consultar métricas del CRM y clasificar conversaciones sin preparar consultas manualmente.
Para que sirve
- Un equipo comercial crea un reporte de pipeline y ventas para identificar oportunidades estancadas por etapa o responsable.
- Una empresa de soporte analiza conversaciones por canal y clasifica motivos, sentimiento o resultados definidos por el equipo.
- Una cadena de servicios prepara una página de indicadores con filtros para comparar reservas, deals o actividad entre periodos.
- Un gerente de operaciones combina tablas y gráficos para revisar el rendimiento de miembros, asistentes o canales desde datos del CRM.
- Una agencia clona un análisis de conversaciones para evaluar campañas diferentes con los mismos criterios.
Que lo hace diferente
- Nova construye reportes sobre datos reales de la organización y prueba cada fuente de datos antes de guardar un widget; no entrega un gráfico basado solo en una descripción.
- Las páginas admiten widgets, filtros vinculados y distribución en lienzo, de modo que una misma vista puede separar métricas comerciales, operativas y de atención.
- Los filtros actualizan únicamente los widgets que declararon vínculo con ellos, evitando que una selección cambie resultados no relacionados.
- Además de gráficos, el análisis IA procesa conversaciones reales que cumplen filtros del CRM y extrae los campos que el equipo define.
- El procesamiento de conversaciones es asíncrono, muestra avance, resultados y errores, y su inicio se controla mediante Wallet.
Acceso
- Ruta principal:
/[orgId]/analytics/ai-reports - Como se llega:
Analytics > AI Reports; los análisis de conversaciones están enAnalytics > AI Insights - Permiso requerido:
can_access_analytics
Alcance tecnico
- Frontend:
analytics/ai-reports/page.tsx,analytics/ai-insights/page.tsx,AnalyticsReportsCanvasView.tsxyAIAnalyticsView.tsx. - Backend:
report-pages,report-widgets,report-widget-data,ai-report-builder,analytics-ai-conversations-jobyanalytics-ai-conversations-job-result. - Superficies publicas: no hay rutas públicas para estas pantallas.
- Integraciones externas: OpenRouter genera y prueba los widgets de Nova; SQS, OpenRouter (LLM) y Jev (clasificador Fast) procesan cada conversación de un trabajo.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Páginas de reportes | report-pages.md | Crea pestañas, las abre por URL y cambia su nombre en línea. |
| Widgets de visualización | report-widgets.md | Agrupa los gráficos, métricas, tablas y bloques que puede crear Nova. |
| Constructor de reportes con Nova | nova-report-builder.md | Convierte una instrucción en páginas y widgets con datos comprobados. |
| Filtros de página | report-filters.md | Aplica valores solo a los widgets que los vincularon. |
| Lienzo y distribución | report-layout.md | Guarda posición y tamaño de cada widget tras moverlo o redimensionarlo. |
| Datos de widgets | widget-data.md | Ejecuta de forma segura la fuente de datos guardada de un gráfico. |
| Tipos de visualización | visualization-types.md | Define las visualizaciones y bloques de contenido disponibles. |
| Edición y eliminación de widgets | widget-editing.md | Renombra, inspecciona, modifica con Nova y elimina widgets. |
| Análisis IA de conversaciones | ai-conversation-analysis.md | Define un trabajo, sus filtros y los campos que IA debe extraer. |
| Seguimiento de trabajos de análisis | analysis-job-monitoring.md | Muestra progreso en tiempo real, resultados y operaciones permitidas. |
Relaciones
- Depende de: datos de CRM, Conversaciones y Wallet.
- Usado por: equipos comerciales, de soporte y de operaciones.
Limitaciones y notas
Nova solo puede guardar widgets cuya consulta de lectura sea válida y se ejecute correctamente para la organización. Las páginas adicionales y la cantidad visible de widgets usan controles de plan. Cada trabajo de conversaciones cobra Wallet una vez al iniciarse y termina de forma asíncrona.
id: ai-conversation-analysis modulo: ai-reports app: crm nombre: Análisis IA de conversaciones tipo: automatizacion
Análisis IA de conversaciones
Permite definir un trabajo que aplica instrucciones de IA a cada conversación que coincida con los filtros elegidos.
Que se logra
- Resultado: el equipo obtiene campos comparables extraídos de un conjunto de conversaciones reales, delimitado por los criterios operativos que elija.
- Caso de uso: un equipo de soporte analiza conversaciones de WhatsApp cerradas durante un mes para identificar motivo de contacto, resolución y sentimiento.
- Se combina con: Conversaciones, Asistentes IA, etiquetas, pipelines de deals y Seguimiento de trabajos de análisis.
Donde esta
- Ruta:
/[orgId]/analytics/ai-insights - Acceso en UI:
Analytics > AI Insights > Create analysis - Componente(s): AIAnalyticsView.tsx, CreateAnalysisJobDialog.tsx, AnalysisResultsView.tsx
Como funciona
- Pulsar
Create analysise indicar nombre y descripción. - Elegir intervalo de fechas, al menos un canal y al menos un estado; opcionalmente restringir por miembros, asistentes IA, etiquetas, pipeline y etapas.
- Agregar uno o más campos de análisis con nombre, tipo e instrucción para IA. En
classification, añadir al menos dos opciones para usar el clasificadorFast; dejarlas vacías extrae etiquetas libres conStandard. - Crear el trabajo; desde la lista, usar
Runmientras esté en borrador. - Cuando tenga más de una conversación procesada, pulsar
Viewpara abrir sus resultados.
Reglas y validaciones
- Los tipos de campo son
text,number,classification,booleanydate. - Cada nombre de campo debe ser único, no puede contener espacios ni caracteres fuera de letras, números y guion bajo.
- Una columna
classificationcon 2 o más opciones, o una columnaboolean, se procesa con el clasificadorFast(Jev).text,number,dateyclassificationsin opciones usan el LLMStandard. - El trabajo muestra
Fast,MixedoStandardsegún esa mezcla. Si hay columnasStandard, ellas marcan el ritmo. - El trabajo requiere nombre, al menos un canal, al menos un estado y un campo de análisis.
- Al ejecutarlo se comprueba y debita Wallet una vez por conversación (
$0.004); el motor no cambia el precio. Después se procesa de forma asíncrona.
Backend
- Servicios:
analytics-ai-conversations-job(create/patch),analytics-ai-conversations-job-result(create/patch) - Efectos: calcula las conversaciones objetivo, crea resultados por conversación y envía el trabajo a la cola de procesamiento.
Relaciones
- Requiere: conversaciones que cumplan filtros y saldo suficiente de Wallet.
- Dispara / afecta: resultados de IA y métricas agregadas del trabajo.
Notas
El diálogo puede abrirse con filtros y campos propuestos por el asistente de IA de esta sección.
id: analysis-job-monitoring modulo: ai-reports app: crm nombre: Seguimiento de trabajos de análisis tipo: vista
Seguimiento de trabajos de análisis
Muestra cada trabajo de análisis, su avance y las operaciones disponibles según su estado.
Que se logra
- Resultado: el responsable conoce cuántas conversaciones se procesaron, qué errores hubo y cuándo puede consultar o reutilizar el análisis.
- Caso de uso: una empresa de telecomunicaciones vigila el análisis de interacciones de soporte y clona la definición para evaluar el periodo siguiente.
- Se combina con: Análisis IA de conversaciones, Conversaciones y Wallet.
Donde esta
- Ruta:
/[orgId]/analytics/ai-insights - Acceso en UI:
AI Insights > lista de trabajos - Componente(s): AnalysisJobsList.tsx, AnalysisMetricsView.tsx
Como funciona
- Entrar a
Analytics > AI Insights. - Consultar nombre, fecha, conversaciones procesadas, errores y total.
- Usar
EditoRunsi el trabajo sigue enDraft. - Pulsar
Viewcuando haya más de una conversación procesada. - Clonar un trabajo para reutilizar su definición o eliminarlo cuando no esté en ejecución.
Reglas y validaciones
- Los estados visibles son
Draft,Running,Processing,CompletedyFailed. - Cada trabajo muestra además si corre en
Fast,MixedoStandardsegún sus columnas. - La lista se suscribe por tiempo real a trabajos en
RunningoProcessing. - En resultados, las columnas Fast muestran confianza 0–1; las métricas incluyen promedio y conteo de baja confianza.
- No permite eliminar un trabajo que esté ejecutándose o procesándose.
- Si un trabajo en procesamiento no progresa durante 30 minutos, se marca como fallido.
Backend
- Servicios:
analytics-ai-conversations-job(find/get/patch/remove),analytics-ai-conversations-job-result(find) - Efectos: las transiciones terminales actualizan el conteo de procesadas y errores; al completarse se calculan métricas finales.
Relaciones
- Requiere: un trabajo de análisis existente.
- Dispara / afecta: resultados y métricas del análisis seleccionado.
Notas
La ejecución distribuye el procesamiento por conversación a través de SQS; la pantalla no espera ese trabajo en la petición inicial.
id: nova-report-builder modulo: ai-reports app: crm nombre: Constructor de reportes con Nova tipo: accion
Constructor de reportes con Nova
Convierte una petición escrita en páginas, widgets y vínculos de filtros. Nova prueba la fuente de datos antes de guardar un widget.
Que se logra
- Resultado: el usuario obtiene un reporte funcional desde una pregunta de negocio, con widgets cuya fuente de datos fue comprobada antes de aparecer en el lienzo.
- Caso de uso: una agencia pide comparar deals ganados por mes y Nova crea el gráfico y los filtros necesarios para explorarlo.
- Se combina con: Páginas de reportes, Filtros de página, Datos de widgets y Edición y eliminación de widgets.
Donde esta
- Ruta:
/[orgId]/analytics/ai-reports - Acceso en UI:
AI Reports > Add with Nova - Componente(s): AnalyticsReportsAddSheet.tsx, useAIReportBuilder.ts
Como funciona
- Crear o abrir una página de reporte.
- Pulsar
AddoAdd with Nova. - Describir el resultado esperado, por ejemplo una métrica, un gráfico comparativo o una tabla.
- Seguir el progreso de Nova en la hoja lateral y leer su respuesta final.
- Para cambiar un widget existente, abrir
Edit with Nova, describir el ajuste y enviar.
Reglas y validaciones
- Nova puede listar, crear y actualizar páginas; crear, actualizar y eliminar widgets; y revisar sus vínculos de filtros.
- Para cada widget con datos valida la visualización, la pertenencia a la organización y que la consulta se ejecute.
- Si faltan ubicación y tamaño, el backend sitúa el widget debajo de los existentes.
- Al reemplazar filtros de página o vínculos de un widget, se sustituye la lista completa anterior.
Backend
- Servicios:
ai-report-builder(create),report-pages(find/create/patch),report-widgets(find/create/patch/remove) - Efectos: devuelve la respuesta de Nova y las acciones realizadas; el lienzo recarga las páginas y widgets afectados.
Relaciones
- Requiere: una página activa para agregar widgets; puede crear otra página si la petición lo necesita.
- Dispara / afecta: páginas, widgets, fuentes de datos y vínculos de filtros.
Notas
Nova no se utiliza para iniciar análisis de conversaciones; esa función está en AI Insights.
id: report-filters modulo: ai-reports app: crm nombre: Filtros de página tipo: configuracion
Filtros de página
Permite usar filtros definidos para la página y refresca únicamente los widgets que declararon una vinculación con ellos.
Que se logra
- Resultado: cada lector puede acotar un reporte por el periodo o dimensión configurada sin alterar los widgets que no corresponden a ese filtro.
- Caso de uso: una red de clínicas filtra una página por canal y fechas para comparar resultados de atención, manteniendo intacto un indicador global.
- Se combina con: Páginas de reportes, Datos de widgets y Constructor de reportes con Nova.
Donde esta
- Ruta:
/[orgId]/analytics/ai-reports - Acceso en UI:
AI Reports > barra de filtros - Componente(s): ReportFilterBar.tsx, useReportFilterEntityOptions.ts
Como funciona
- Abrir una página que tenga filtros creados por Nova.
- Elegir un intervalo de fechas, opción, varias opciones, rango numérico, texto o valor booleano en la barra superior.
- Consultar los gráficos actualizados; un widget sin vinculación conserva sus datos.
- Pulsar
Resetpara quitar los valores elegidos y volver a los valores predeterminados de la página.
Reglas y validaciones
- Las opciones de filtros de miembros, pipelines, asistentes IA y etiquetas se cargan desde la organización.
- Una página define el filtro, pero cada widget declara el campo por el que responde.
- Los filtros de fecha admiten presets y un rango personalizado.
Backend
- Servicios:
report-pages(find/patch),report-widget-data(create) - Efectos: ejecuta otra vez la consulta de cada widget vinculado con los valores aplicables.
Relaciones
- Requiere: filtros presentes en la página activa.
- Dispara / afecta: datos mostrados por los widgets vinculados.
Notas
Los valores elegidos viven en la sesión del lienzo; no se guardan como configuración de la página.
id: report-layout modulo: ai-reports app: crm nombre: Lienzo y distribución tipo: configuracion
Lienzo y distribución
Distribuye los widgets de la página activa en una cuadrícula de doce columnas y conserva su tamaño y ubicación.
Que se logra
- Resultado: cada página presenta los indicadores en una distribución que prioriza la lectura del equipo y se conserva para futuras consultas.
- Caso de uso: un gerente de operaciones coloca primero los indicadores de cumplimiento y deja las tablas de detalle debajo para las reuniones semanales.
- Se combina con: Páginas de reportes y Widgets de visualización.
Donde esta
- Ruta:
/[orgId]/analytics/ai-reports - Acceso en UI:
AI Reports > lienzo - Componente(s): ReportCanvasGrid.tsx, AnalyticsReportsCanvasView.tsx
Como funciona
- Entrar a una página que tenga widgets.
- Mantener el control
Dragde un widget y moverlo a la posición deseada. - Redimensionar el widget desde la cuadrícula.
- Continuar trabajando: el lienzo agrupa los cambios y los guarda automáticamente.
Reglas y validaciones
- El lienzo utiliza doce columnas y filas visuales de 80 píxeles.
- El guardado se demora 800 ms para agrupar varios movimientos o redimensiones.
- La posición y dimensiones se guardan por widget, no como un diseño compartido de la página.
Backend
- Servicios:
report-widgets(patch) - Efectos: los cambios se mantienen al recargar o abrir la misma página mediante enlace directo.
Relaciones
- Requiere: widgets visibles en la página activa.
- Dispara / afecta: distribución de los widgets de esa página.
Notas
Los bloques de encabezado, texto, divisor y espaciador usan el mismo sistema de cuadrícula.
id: report-pages modulo: ai-reports app: crm nombre: Páginas de reportes tipo: configuracion
Páginas de reportes
Crea pestañas independientes para separar reportes y permite cambiar su nombre directamente en el encabezado.
Que se logra
- Resultado: el equipo organiza indicadores en vistas separadas y enlazables, con una pestaña por objetivo de análisis.
- Caso de uso: un concesionario mantiene una página para ventas mensuales y otra para seguimiento de leads, sin mezclar sus widgets.
- Se combina con: Widgets de visualización, Filtros de página y Lienzo y distribución.
Donde esta
- Ruta:
/[orgId]/analytics/ai-reports - Acceso en UI:
AI Reports > icono +; una página vacía muestraCreate report page - Componente(s): AnalyticsReportsCanvasView.tsx
Como funciona
- Entrar a
AI Reports. - Pulsar el icono
+para crear una página con el nombre predeterminado. - Elegir una pestaña para verla; la dirección conserva la página elegida con
reportPageId. - Pulsar el título de la pestaña activa, escribir el nuevo nombre y confirmar la edición.
Reglas y validaciones
- Las páginas se ordenan por su posición de creación.
- Crear más de una página requiere el control de plan
ai_reports_multiple_pages. - Si no existen páginas, no se puede pedir a Nova que agregue widgets.
Backend
- Servicios:
report-pages(find/create/patch) - Efectos: al crearla queda activa; sus filtros y widgets comienzan vacíos.
Relaciones
- Requiere: acceso a Analytics.
- Dispara / afecta: determina la página donde Nova crea y modifica widgets.
Notas
La eliminación de páginas no está expuesta en el lienzo actual.
id: report-widgets modulo: ai-reports app: crm nombre: Widgets de visualización tipo: configuracion
Widgets de visualización
Muestra los widgets de una página y los recarga después de una acción de Nova. Cada widget pertenece a una sola página.
Que se logra
- Resultado: una página convierte métricas o resultados de CRM en gráficos, tablas, indicadores o bloques que el equipo puede revisar en conjunto.
- Caso de uso: un equipo de ventas añade una tabla de deals abiertos y un gráfico por etapa en la misma página para priorizar su seguimiento.
- Se combina con: Constructor de reportes con Nova, Datos de widgets y Tipos de visualización.
Donde esta
- Ruta:
/[orgId]/analytics/ai-reports - Acceso en UI:
AI Reports > AddoAdd with Nova - Componente(s): ReportCanvasGrid.tsx, ReportCanvasWidget.tsx
Como funciona
- Elegir la pestaña de reporte donde se necesita el contenido.
- Pulsar
Addy describir a Nova la métrica, gráfico, tabla o bloque deseado. - Esperar la respuesta de Nova; el lienzo recarga los widgets de la página afectada.
- Usar los controles al pasar el cursor sobre un widget para renombrarlo, inspeccionarlo, pedir un cambio o eliminarlo.
Reglas y validaciones
- Los widgets con datos se validan antes de guardarse; los bloques de diseño no requieren fuente de datos.
- El control
ai_reports_more_widgetslimita la creación; los excedentes no se renderizan y se informa cuántos quedaron ocultos. - La organización solo puede ver o modificar sus propios widgets.
Backend
- Servicios:
report-widgets(find/create/patch/remove),ai-report-builder(create) - Efectos: Nova puede crear, actualizar o eliminar widgets y el lienzo actualiza sus datos.
Relaciones
- Requiere: una página de reporte activa.
- Dispara / afecta: filtros de página, distribución y consultas de datos.
Notas
La interfaz no ofrece un editor manual de tipo ni fuente del widget; esos cambios se solicitan a Nova.
id: visualization-types modulo: ai-reports app: crm nombre: Tipos de visualización tipo: vista
Tipos de visualización
Define cómo se representan los datos que Nova prepara para cada widget y qué bloques de contenido no requieren datos.
Que se logra
- Resultado: el resultado de una consulta se presenta en el formato que mejor comunica una tendencia, comparación, distribución, detalle o explicación.
- Caso de uso: una empresa de formación usa una métrica para inscripciones, una serie para su evolución y una tabla para revisar los cursos involucrados.
- Se combina con: Widgets de visualización, Datos de widgets y Constructor de reportes con Nova.
Donde esta
- Ruta:
/[orgId]/analytics/ai-reports - Acceso en UI:
AI Reports > widgets - Componente(s): ReportVisualizationRenderer.tsx, ReportLayoutBlock.tsx
Como funciona
- Pedir a Nova el tipo de resultado necesario desde
Add. - Nova guarda el tipo y la configuración compatible con las claves de datos devueltas.
- Consultar el resultado en el lienzo y pedir un ajuste a Nova si la representación no comunica bien la métrica.
Reglas y validaciones
- Tipos con datos:
metric,line,area,bar,horizontal_bar,stacked_bar,stacked_area,combo,pie,donut,scatter,gaugeytable. combomezcla series de barras y líneas.gaugeespera un valor entre 0 y 100.- Los bloques
heading,subheading,text,divideryspacerno ejecutan una consulta. - Las cifras admiten formato numérico, moneda, porcentaje y compacto; las tablas pueden formatear cada columna.
Backend
- Servicios:
report-widgets(find/create/patch),report-widget-data(create) - Efectos: el renderizador elige las claves de eje, serie, etiqueta y valor guardadas para el tipo.
Relaciones
- Requiere: una configuración de widget compatible con la fuente de datos.
- Dispara / afecta: presentación de las filas obtenidas por el widget.
Notas
Si un widget no tiene fuente de datos, el renderizador usa datos de ejemplo salvo en los bloques de diseño.
id: widget-data modulo: ai-reports app: crm nombre: Datos de widgets tipo: vista
Datos de widgets
Obtiene las filas de un widget con fuente de datos y las entrega al gráfico, métrica o tabla que lo representa.
Que se logra
- Resultado: cada visualización muestra datos actuales de la organización y se recalcula cuando cambia un filtro vinculado.
- Caso de uso: una empresa de servicios selecciona el último trimestre y ve actualizarse solo los widgets preparados para ese periodo.
- Se combina con: Filtros de página, Widgets de visualización y Constructor de reportes con Nova.
Donde esta
- Ruta:
/[orgId]/analytics/ai-reports - Acceso en UI:
AI Reports > widget con datos - Componente(s): ReportWidgetChart.tsx, ReportVisualizationRenderer.tsx
Como funciona
- Abrir una página de reportes con widgets de datos.
- El widget solicita sus filas al cargar y vuelve a solicitarlas cuando cambia un filtro que tiene vinculado.
- Revisar la visualización; después de una operación de Nova, el lienzo fuerza una actualización de los datos.
Reglas y validaciones
- Solo se ejecutan consultas de lectura contra tablas autorizadas.
- El servicio añade el alcance de organización, limita el resultado a 1.000 filas y corta consultas que exceden 15 segundos.
- Los filtros fijos del widget se suman a los valores elegidos en la página.
Backend
- Servicios:
report-widget-data(create) - Efectos: devuelve columnas, filas, cantidad de filas y si el widget tiene una consulta.
Relaciones
- Requiere: un widget con fuente de datos válida.
- Dispara / afecta: la visualización del widget.
Notas
Los bloques de diseño no solicitan datos; se muestran con su título y contenido.
id: widget-editing modulo: ai-reports app: crm nombre: Edición y eliminación de widgets tipo: accion
Edición y eliminación de widgets
Permite cambiar el título, conocer la fuente funcional del widget, solicitar ajustes a Nova y eliminarlo con confirmación.
Que se logra
- Resultado: el equipo mantiene los indicadores útiles, comprensibles y alineados con sus preguntas sin reconstruir toda la página.
- Caso de uso: un director comercial pide a Nova desglosar un gráfico por asesor, revisa el resultado y elimina el widget anterior.
- Se combina con: Constructor de reportes con Nova, Widgets de visualización y Filtros de página.
Donde esta
- Ruta:
/[orgId]/analytics/ai-reports - Acceso en UI:
AI Reports > controles al pasar sobre un widget - Componente(s): ReportCanvasWidgetActions.tsx, ReportCanvasInlineTitle.tsx
Como funciona
- Pasar el cursor sobre un widget para mostrar sus acciones.
- Pulsar el título para editarlo en línea.
- Usar
Edit with Nova, escribir el ajuste solicitado y enviarlo; Nova recibe el identificador y el contexto del widget. - Abrir
Infopara ver descripción, vínculos a filtros y, si el usuario es superadmin, la consulta del widget. - Pulsar
Delete, revisar el nombre y confirmar la eliminación.
Reglas y validaciones
- El botón para enviar a Nova permanece desactivado hasta que exista una instrucción.
- El contenido de la consulta solo se expone a superadmins y nunca para bloques de diseño.
- La eliminación usa borrado lógico.
Backend
- Servicios:
report-widgets(patch/remove),ai-report-builder(create) - Efectos: tras el cambio con Nova se recargan la página y los widgets tocados; eliminar retira el widget del lienzo.
Relaciones
- Requiere: un widget creado en la página activa.
- Dispara / afecta: título, contenido, vínculos de filtro o existencia del widget.
Notas
Info indica explícitamente cuando un widget es inmune a los filtros de página.
id: analytics app: crm nombre: Analytics CRM estado: shipped permiso: can_access_analytics
Analytics CRM
Reportes operativos y comerciales de conversaciones, deals, quotes, actividades y atribución.
Para que sirve
- Un contact center compara conversaciones por agente, etapa, país y tendencia para planear la operación de soporte.
- Una empresa B2B revisa el valor, progreso, productos y resultados de sus deals para detectar cuellos de botella del pipeline.
- Una agencia analiza qué anuncios y parámetros UTM aportan contactos y oportunidades para justificar inversión de adquisición.
- Un despacho comercial sigue el estado de quotes, sus aceptaciones, rechazos y vencimientos para recuperar propuestas.
- Un gerente mide creación y completitud de actividades para verificar que el equipo ejecute los seguimientos comprometidos.
Que lo hace diferente
- Reúne en un mismo módulo datos de conversaciones, deals, quotes, actividades, productos, pipelines, miembros y atribución.
- Permite pasar de la carga operativa de conversaciones al desempeño comercial de deals y propuestas con los mismos filtros de período.
- Muestra análisis específicos de deals ganados y perdidos, y de quotes aceptadas, rechazadas o vencidas.
- Incluye atribución por anuncios y UTM conectada con los contactos que ingresan al CRM.
- Ofrece comparación de períodos y exportación desde las vistas para análisis operativo y comercial.
Acceso
- Ruta principal:
/[orgId]/analytics - Como se llega:
Sidebar > Tools > Analytics - Permiso requerido: permiso de rol
can_access_analytics; el backend autorizaanalyticscon capacidadread.
Alcance tecnico
- Frontend: rutas
/[orgId]/analytics/{conversations,deals,quotes,activities,attribution}/**, excluidos AI Reports y AI Powered Analytics. - Backend:
analytics(find).reportsno alimenta estas vistas. - Integraciones externas: ninguna confirmada en estas vistas.
Funcionalidades internas
Relaciones
- Depende de: Conversaciones, Deals, Quotes, Actividades, Productos, Pipelines y miembros.
- Usado por: equipos que revisan operación y desempeño.
Limitaciones y notas
- Las rutas AI Reports y AI Powered Analytics se excluyen por pertenecer a otros módulos.
- La ruta
/[orgId]/analytics/dealsno muestra contenido en el código actual; verdeals-home.md.
id: activities-completion modulo: analytics app: crm nombre: Completitud de actividades tipo: vista
Completitud de actividades
Analiza la completitud general, vencimientos, duración y resultado por tipo.
Que se logra
- Resultado: Responde qué proporción de actividades del período fue completada y dónde hay tareas pendientes.
- Caso de uso: Un call center detecta si su equipo está cerrando los seguimientos comprometidos con los prospectos.
- Se combina con: Actividades y filtros de Analytics.
Donde esta
- Ruta:
/[orgId]/analytics/activities/completion - Acceso en UI:
Analytics > Activities > Completion - Componente(s):
ActivityCompletionView.tsx,CompletionSummaryCards.tsx,CompletionByTypeChart.tsx
Como funciona
- Ajuste filtros.
- Revise tarjetas y gráfica por tipo.
Reglas y validaciones
- Filtros: rango de fechas, tipo de actividad y miembro.
Backend
- Servicios:
analytics(método: find; análisis de completitud).
Relaciones
- Requiere: Actividades.
Notas
- Muestra
Overall Completion Rate,Completed Last Week,Completed Last Month,Overdue Rate, duraciones promedio yCompletionByTypeChart, que ofreceExport Excel.
id: activities-home modulo: analytics app: crm nombre: Entrada de actividades tipo: vista
Entrada de actividades
Redirige al resumen de actividades.
Que se logra
- Resultado: Lleva al análisis operativo de actividades para responder cómo está trabajando el equipo.
- Caso de uso: Una agencia comercial abre esta vista para revisar tareas, reuniones y seguimientos del período.
- Se combina con: Actividades y filtros de Analytics.
Donde esta
- Ruta:
/[orgId]/analytics/activities - Acceso en UI:
Analytics > Activities - Componente(s):
page.tsx
Como funciona
- Abra
Activities. - El sistema reemplaza la ruta por
Overview.
Reglas y validaciones
- No contiene filtros propios.
Backend
- Servicios: ninguno invocado por esta ruta.
Relaciones
- Requiere: Resumen de actividades.
Notas
- No añade métricas ni gráficas propias.
id: activities-overview modulo: analytics app: crm nombre: Resumen de actividades tipo: vista
Resumen de actividades
Resume cantidad, estado, duración y completitud de actividades.
Que se logra
- Resultado: Responde cuántas actividades se crearon, completaron o permanecen pendientes en el período.
- Caso de uso: Una clínica mide si su equipo administrativo está atendiendo las tareas que genera cada paciente.
- Se combina con: Actividades y comparación de períodos.
Donde esta
- Ruta:
/[orgId]/analytics/activities/overview - Acceso en UI:
Analytics > Activities > Overview - Componente(s):
ActivityOverviewView.tsx,ActivityMetrics.tsx
Como funciona
- Ajuste filtros.
- Revise tarjetas y gráficas.
Reglas y validaciones
- Filtros: rango de fechas, tipo de actividad y miembro.
Backend
- Servicios:
analytics(método: find; métricas, actividades por tipo y completitud).
Relaciones
- Requiere: Actividades y miembros.
Notas
- Muestra
Total Activities,Completed,Pending,Overdue, tasa de completitud, duración promedio,ActivitiesByTypeChartyCompletionRateChart.
id: activities-team modulo: analytics app: crm nombre: Equipo de actividades tipo: vista
Equipo de actividades
Compara carga, estado, duración y tasa de completitud por miembro.
Que se logra
- Resultado: Responde qué miembros del equipo generan y completan más actividades.
- Caso de uso: Un equipo B2B compara la carga y cumplimiento de seguimientos entre sus ejecutivos.
- Se combina con: Actividades y filtros globales.
Donde esta
- Ruta:
/[orgId]/analytics/activities/team - Acceso en UI:
Analytics > Activities > Team - Componente(s):
ActivityTeamView.tsx,TeamPerformanceTable.tsx
Como funciona
- Ajuste filtros.
- Consulte la tabla
TeamPerformanceTable.
Reglas y validaciones
- Filtros: rango de fechas, tipo de actividad y miembro.
Backend
- Servicios:
analytics(método: find; actividades por miembro).
Relaciones
- Requiere: Actividades y miembros.
Notas
- La tabla incluye desempeño y ofrece
Export Excel.
id: activities-trends modulo: analytics app: crm nombre: Tendencias de actividades tipo: vista
Tendencias de actividades
Presenta el volumen, estado, duración y completitud de actividades por día y mes.
Que se logra
- Resultado: Responde cómo cambia con el tiempo el volumen de actividades y sus estados.
- Caso de uso: Una inmobiliaria detecta semanas en las que baja la creación de llamadas de seguimiento.
- Se combina con: Actividades y comparación de períodos.
Donde esta
- Ruta:
/[orgId]/analytics/activities/trends - Acceso en UI:
Analytics > Activities > Trends - Componente(s):
ActivityTrendsView.tsx,DailyTrendsChart.tsx,MonthlyTrendsChart.tsx
Como funciona
- Ajuste filtros.
- Consulte las tendencias diaria y mensual.
Reglas y validaciones
- Filtros: rango de fechas, tipo de actividad y miembro.
Backend
- Servicios:
analytics(método: find; tendencias diarias y mensuales).
Relaciones
- Requiere: Actividades.
Notas
DailyTrendsChartyMonthlyTrendsChartdisponen deExport Excel.
id: attribution-ads modulo: analytics app: crm nombre: Atribución de anuncios tipo: vista
Atribución de anuncios
Analiza contactos, conversiones y resultados procedentes de anuncios.
Que se logra
- Resultado: Responde qué anuncios originan contactos y resultados comerciales atribuibles.
- Caso de uso: Un e-commerce identifica cuál campaña publicitaria está llevando contactos que avanzan en el CRM.
- Se combina con: Atribución, Contactos y Deals.
Donde esta
- Ruta:
/[orgId]/analytics/attribution/ads - Acceso en UI:
Analytics > Attribution > Ads - Componente(s):
AttributionAdsView.tsx,AttributionShared.tsx
Como funciona
- Seleccione período y dimensión.
- Revise métricas, cobertura, tendencia y desglose.
Reglas y validaciones
- Filtros: rango de fechas y dimensión:
Source ID,Source URLoChannel.
Backend
- Servicios:
analytics(método: find; resumen, cobertura, desglose y tendencias con alcance de anuncios).
Relaciones
- Requiere: Contactos con atribución de anuncios.
Notas
- Muestra
AttributionMetricCards,AttributionCoverageCards,AttributionTrendsCardyAttributionBreakdownSection.
id: attribution-contacts modulo: analytics app: crm nombre: Contactos atribuidos tipo: vista
Contactos atribuidos
Lista contactos y sus datos de atribución según período y dimensión.
Que se logra
- Resultado: Responde cuántos contactos llegan por cada fuente atribuida.
- Caso de uso: Una academia compara los registros generados por sus campañas para decidir dónde invertir.
- Se combina con: Contactos, atribución UTM y anuncios.
Donde esta
- Ruta:
/[orgId]/analytics/attribution/contacts - Acceso en UI:
Analytics > Attribution > Contacts - Componente(s):
AttributionContactsView.tsx,AttributionContactsTable
Como funciona
- Seleccione período y dimensión.
- Navegue los resultados con los controles anterior y siguiente.
Reglas y validaciones
- Filtros: rango de fechas y dimensión: fuente, canal, identificador, URL o
UTM Source. - La tabla muestra 20 contactos por página.
Backend
- Servicios:
analytics(método: find; detalle de atribución).
Relaciones
- Requiere: Contactos.
Notas
- Muestra
AttributionContactsTable.
id: attribution-home modulo: analytics app: crm nombre: Entrada de atribución tipo: vista
Entrada de atribución
Redirige al tablero de resumen de atribución.
Que se logra
- Resultado: Lleva al análisis de origen de contactos y resultados para evaluar la adquisición.
- Caso de uso: Una empresa de servicios entra aquí para entender qué fuentes están alimentando su CRM.
- Se combina con: Atribución, Contactos y Deals.
Donde esta
- Ruta:
/[orgId]/analytics/attribution - Acceso en UI:
Analytics > Attribution - Componente(s):
page.tsx
Como funciona
- Abra
Attribution. - El sistema redirige a
Overview.
Reglas y validaciones
- No contiene filtros propios.
Backend
- Servicios: ninguno invocado por esta ruta.
Relaciones
- Requiere: Resumen de atribución.
Notas
- No añade métricas ni gráficas propias.
id: attribution-overview modulo: analytics app: crm nombre: Resumen de atribución tipo: vista
Resumen de atribución
Relaciona adquisición, conversaciones, conversiones, deals ganados e ingresos por origen.
Que se logra
- Resultado: Responde qué canales y fuentes concentran el rendimiento atribuido del período.
- Caso de uso: Una agencia presenta a un cliente el aporte relativo de anuncios y campañas a la captación.
- Se combina con: Atribución de anuncios, UTM, Contactos y Deals.
Donde esta
- Ruta:
/[orgId]/analytics/attribution/overview - Acceso en UI:
Analytics > Attribution > Overview - Componente(s):
AttributionOverviewView.tsx,AttributionShared.tsx
Como funciona
- Elija período y dimensión.
- Cambie entre
DailyyMonthlypara la tendencia. - Revise métricas, embudo, tendencia y desglose.
Reglas y validaciones
- Filtros: rango de fechas y dimensión: fuente, canal, campaña o UTM source.
Backend
- Servicios:
analytics(método: find; resumen, embudo, desglose y tendencias de atribución).
Relaciones
- Requiere: Contactos, conversaciones y deals.
Notas
- Muestra
AttributionMetricCards,AttributionFunnelCard,AttributionTrendsCardyAttributionBreakdownSection.
id: attribution-utm modulo: analytics app: crm nombre: Atribución UTM tipo: vista
Atribución UTM
Analiza la adquisición atribuida a parámetros UTM.
Que se logra
- Resultado: Responde qué combinaciones UTM generan contactos y resultados rastreables.
- Caso de uso: Un negocio de cursos compara campañas de
email, redes y afiliados sin mezclar sus fuentes. - Se combina con: Atribución, campañas y Contactos.
Donde esta
- Ruta:
/[orgId]/analytics/attribution/utm - Acceso en UI:
Analytics > Attribution > UTM - Componente(s):
AttributionUtmView.tsx,AttributionShared.tsx
Como funciona
- Seleccione período y dimensión UTM.
- Revise la cobertura y, si hay datos UTM, las tendencias y desglose.
Reglas y validaciones
- Filtros: rango de fechas y dimensión:
UTM Source,UTM Medium,UTM Campaign,UTM TermoUTM Content. - Sin contactos UTM, no se muestran tendencia ni desglose.
Backend
- Servicios:
analytics(método: find; resumen, cobertura, desglose y tendencias con alcance UTM).
Relaciones
- Requiere: Contactos con parámetros UTM.
Notas
- Muestra
AttributionMetricCards,AttributionCoverageCards,AttributionTrendsCardyAttributionBreakdownSection.
id: conversations-countries modulo: analytics app: crm nombre: Países de conversaciones tipo: vista
Países de conversaciones
Desglosa las conversaciones por el país detectado a partir de su información telefónica.
Que se logra
- Resultado: Responde desde qué países se originan más conversaciones del período.
- Caso de uso: Un comercio internacional identifica mercados donde debe reforzar cobertura de atención.
- Se combina con: Conversaciones y filtros globales.
Donde esta
- Ruta:
/[orgId]/analytics/conversations/countries - Acceso en UI:
Analytics > Conversations > Countries - Componente(s):
ConversationCountriesView.tsx
Como funciona
- Aplique filtros superiores.
- Busque un país en
Search countries...o revise las gráficas y la tabla.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro, asistente de IA y canal.
Backend
- Servicios:
analytics(método: find; reporte por país).
Relaciones
- Requiere: Conversaciones con número telefónico.
Notas
- Muestra
Countries Detected,Phone Coverage,Top Country,Unknown Country,Top 10 Countries,Country DistributionyAll Countries.
id: conversations-daily-trend modulo: analytics app: crm nombre: Tendencia diaria de conversaciones tipo: vista
Tendencia diaria de conversaciones
Presenta las variaciones diarias de volumen, canales, asignación, no leídos y seguimientos.
Que se logra
- Resultado: Responde en qué días sube o baja el volumen de conversaciones.
- Caso de uso: Un soporte técnico relaciona picos diarios de mensajes con un lanzamiento de producto.
- Se combina con: Conversaciones y comparación de períodos.
Donde esta
- Ruta:
/[orgId]/analytics/conversations/daily-trend - Acceso en UI:
Analytics > Conversations > Daily Trend - Componente(s):
DailyTrendView.tsx
Como funciona
- Seleccione el período y los filtros.
- Consulte las gráficas por día.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro, asistente de IA y canal.
Backend
- Servicios:
analytics(método: find; reporte de tendencias diarias).
Relaciones
- Requiere: Conversaciones y canales de mensajería.
Notas
- Gráficas:
Daily Conversations Volume,Daily Channel Distribution,Daily Assignment Rates,Daily Unread Messages,Daily Follow-upsyDaily Assignment Breakdown.
id: conversations-home modulo: analytics app: crm nombre: Entrada de conversaciones tipo: vista
Entrada de conversaciones
La ruta de conversaciones carga directamente el tablero Conversations Overview.
Que se logra
- Resultado: Lleva a las vistas que responden cómo evoluciona y se distribuye la atención conversacional.
- Caso de uso: Un equipo de soporte abre esta entrada para revisar la operación de sus canales.
- Se combina con: Conversaciones y filtros de Analytics.
Donde esta
- Ruta:
/[orgId]/analytics/conversations - Acceso en UI:
Analytics > Conversations - Componente(s):
ConversationOverviewView.tsx
Como funciona
- Abra
Conversations. - Revise el mismo contenido de
Conversations Overview.
Reglas y validaciones
- Aplica los filtros compartidos de conversaciones.
Backend
- Servicios:
analytics(método: find).
Relaciones
- Requiere: Resumen de conversaciones.
Notas
- Esta ruta no contiene una vista distinta; renderiza el resumen.
id: conversations-monthly-trend modulo: analytics app: crm nombre: Tendencia mensual de conversaciones tipo: vista
Tendencia mensual de conversaciones
Agrupa por mes el volumen, canales, asignación, no leídos y seguimientos.
Que se logra
- Resultado: Responde cómo evoluciona mes a mes la demanda de conversaciones.
- Caso de uso: Una empresa de turismo anticipa temporadas de alta consulta para planear turnos de atención.
- Se combina con: Conversaciones y comparación de períodos.
Donde esta
- Ruta:
/[orgId]/analytics/conversations/monthly-trend - Acceso en UI:
Analytics > Conversations > Monthly Trend - Componente(s):
MonthlyTrendView.tsx
Como funciona
- Ajuste el período y filtros.
- Compare los valores mensuales de las gráficas.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro, asistente de IA y canal.
Backend
- Servicios:
analytics(método: find; reporte de tendencias mensuales).
Relaciones
- Requiere: Conversaciones y canales de mensajería.
Notas
- Gráficas:
Total Conversations,Channel Distribution,Assignment Rates,Unread Messages,Follow-upsyAssignment Breakdown.
id: conversations-overview modulo: analytics app: crm nombre: Resumen de conversaciones tipo: vista
Resumen de conversaciones
Resume volumen, asignación, actividad, mensajes sin leer y distribución por canal.
Que se logra
- Resultado: Responde cuántas conversaciones entran y cuál es la fotografía general de la atención.
- Caso de uso: Un negocio de delivery revisa el volumen atendido antes de ajustar la capacidad de su equipo.
- Se combina con: Conversaciones, miembros y filtros globales.
Donde esta
- Ruta:
/[orgId]/analytics/conversations/overview - Acceso en UI:
Analytics > Conversations > Overview - Componente(s):
ConversationOverviewView.tsx
Como funciona
- Ajuste los filtros superiores.
- Revise las tarjetas y el bloque
Channels.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro del equipo, asistente de IA y canal.
Backend
- Servicios:
analytics(método: find; reporte de resumen de conversaciones).
Relaciones
- Requiere: Conversaciones y asistentes de IA.
Notas
- Muestra
Total Conversations,Assignment,Today's Activity,Unread Messagesy tarjetas deWhatsApp,InstagramyMessenger.
id: conversations-stages modulo: analytics app: crm nombre: Etapas de conversaciones tipo: vista
Etapas de conversaciones
Analiza el rendimiento de conversaciones por etapa de pipeline.
Que se logra
- Resultado: Responde en qué etapas se concentran las conversaciones y dónde se estanca la atención.
- Caso de uso: Una inmobiliaria detecta leads que permanecen demasiado tiempo en la etapa de primera respuesta.
- Se combina con: Conversaciones y automatizaciones.
Donde esta
- Ruta:
/[orgId]/analytics/conversations/stages - Acceso en UI:
Analytics > Conversations > Stages Analysis - Componente(s):
ConversationStagesView.tsx
Como funciona
- Seleccione filtros y, si procede, un pipeline.
- Revise gráficas, análisis y detalle por etapa.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro, asistente de IA, canal y pipeline.
Backend
- Servicios:
analytics(método: find; reporte de etapas del pipeline).
Relaciones
- Requiere: Conversaciones y pipelines.
Notas
- Muestra
Total Conversations,Open Conversations,Avg Workload Distribution,Avg Days in Stage, gráficas de embudo, asignación, rendimiento y canales,Stages Efficiency AnalysisyStage Performance Details.
id: conversations-team modulo: analytics app: crm nombre: Equipo de conversaciones tipo: vista
Equipo de conversaciones
Muestra carga, antigüedad y estado de conversaciones asignadas por miembro.
Que se logra
- Resultado: Responde cuántas conversaciones gestiona cada agente y cómo se distribuye la carga.
- Caso de uso: Un contact center identifica asesores sobrecargados para redistribuir nuevas conversaciones.
- Se combina con: Conversaciones y miembros.
Donde esta
- Ruta:
/[orgId]/analytics/conversations/team - Acceso en UI:
Analytics > Conversations > Team - Componente(s):
ConversationTeamView.tsx
Como funciona
- Elija
UnreadoWaiting. - Ordene la tabla por sus encabezados y use
Load moresi hay más miembros.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro, asistente de IA, canal y pipeline.
- La vista usa páginas de hasta 50 miembros.
Backend
- Servicios:
analytics(método: find; reporte por miembro).
Relaciones
- Requiere: Conversaciones, miembros y pipelines.
Notas
- Muestra
Members,Assigned,Unread 24h+oReply 24h+,Load skewy la tablaTeam members.
id: deals-home modulo: analytics app: crm nombre: Entrada de deals tipo: vista
Entrada de deals
La ruta existe, pero su componente no retorna contenido visible.
Que se logra
- Resultado: Actualmente no muestra un reporte ni datos visibles; la ruta existe como punto de navegación sin contenido.
- Caso de uso: Un equipo B2B debe abrir
Overviewpara revisar semanalmente las oportunidades de su pipeline. - Se combina con: Resumen de deals, Pipelines y filtros de Analytics.
Donde esta
- Ruta:
/[orgId]/analytics/deals - Acceso en UI:
Analytics > Deals - Componente(s):
page.tsx
Como funciona
- Abra
Deals.
Reglas y validaciones
- La ruta no redirige ni carga una vista analítica en el código actual.
Backend
- Servicios: ninguno invocado por esta ruta.
Relaciones
- Requiere: Resumen de deals.
Notas
- La ayuda de Nova la describe como entrada del dominio, pero el código actual no renderiza esa interfaz.
id: deals-lost-analysis modulo: analytics app: crm nombre: Análisis de deals perdidos tipo: vista
Análisis de deals perdidos
Estudia volumen, valor, tiempo, causas y deals perdidos recientes.
Que se logra
- Resultado: Responde cuántos deals se pierden y cuáles son los motivos o patrones de pérdida.
- Caso de uso: Una concesionaria detecta que el precio explica la mayoría de oportunidades perdidas y ajusta su oferta.
- Se combina con: Deals, Pipelines y comparación de períodos.
Donde esta
- Ruta:
/[orgId]/analytics/deals/lost-analysis - Acceso en UI:
Analytics > Deals > Lost Analysis - Componente(s):
DealLostAnalysisView.tsx
Como funciona
- Ajuste filtros de Deals.
- Revise resumen, tendencias, motivos y tablas.
Reglas y validaciones
- Filtros: rango de fechas, pipeline, estado y miembro del equipo.
Backend
- Servicios:
analytics(método: find; análisis y tendencias de deals perdidos).
Relaciones
- Requiere: Deals perdidos y pipelines.
Notas
- Incluye
LostSummaryCards, tendencias diarias y mensuales,TimeRangeDistributionChart,LostReasonsTableyRecentLossesTable; las dos últimas ofrecenExport Excel.
id: deals-overview modulo: analytics app: crm nombre: Resumen de deals tipo: vista
Resumen de deals
Resume métricas comerciales, distribución por pipeline y proporción de resultados.
Que se logra
- Resultado: Responde cuál es el valor y volumen general de oportunidades abiertas, ganadas o perdidas.
- Caso de uso: Una consultora revisa la salud comercial del período antes de proyectar ingresos.
- Se combina con: Deals, Pipelines y filtros globales.
Donde esta
- Ruta:
/[orgId]/analytics/deals/overview - Acceso en UI:
Analytics > Deals > Overview - Componente(s):
DealOverviewView.tsx,DealMetrics.tsx
Como funciona
- Ajuste filtros del dominio Deals.
- Consulte tarjetas y gráficas.
Reglas y validaciones
- Filtros: rango de fechas, pipeline, estado y miembro del equipo.
Backend
- Servicios:
analytics(método: find; métricas, pipeline y razón open/won/lost).
Relaciones
- Requiere: Deals y pipelines.
Notas
- Incluye
DealMetrics,DealsPipelineChartyWinLossChart.
id: deals-products modulo: analytics app: crm nombre: Productos de deals tipo: vista
Productos de deals
Muestra la distribución y el valor de los productos asociados a deals.
Que se logra
- Resultado: Responde qué productos aparecen con mayor frecuencia o valor dentro de los deals.
- Caso de uso: Un distribuidor identifica los productos que impulsan más oportunidades comerciales.
- Se combina con: Deals, Productos y Pipelines.
Donde esta
- Ruta:
/[orgId]/analytics/deals/products - Acceso en UI:
Analytics > Deals > Products - Componente(s):
DealProductsView.tsx,ProductsDistributionChart.tsx,ProductsValueChart.tsx
Como funciona
- Ajuste los filtros de Deals.
- Revise las dos gráficas de producto.
Reglas y validaciones
- Filtros: rango de fechas, pipeline, estado y miembro del equipo.
Backend
- Servicios:
analytics(método: find; distribución y valor por producto).
Relaciones
- Requiere: Deals, productos y pipelines.
Notas
- Gráficas:
ProductsDistributionChartyProductsValueChart.
id: deals-progress modulo: analytics app: crm nombre: Progreso de deals tipo: vista
Progreso de deals
Compara la evolución diaria y mensual de cantidad, estado y valor de deals.
Que se logra
- Resultado: Responde cuánto avanza el valor de los deals a través del embudo durante el período.
- Caso de uso: Un SaaS observa si sus oportunidades están progresando hacia cierre o permanecen inmóviles.
- Se combina con: Deals, Pipelines y comparación de períodos.
Donde esta
- Ruta:
/[orgId]/analytics/deals/progress - Acceso en UI:
Analytics > Deals > Progress - Componente(s):
DealProgressView.tsx,DealDailyTrendsChart.tsx,DealMonthlyTrendsChart.tsx
Como funciona
- Ajuste filtros.
- Revise tendencias diarias y mensuales.
Reglas y validaciones
- Filtros: rango de fechas, pipeline, estado y miembro del equipo.
Backend
- Servicios:
analytics(método: find; tendencias diarias y mensuales de deals).
Relaciones
- Requiere: Deals y pipelines.
Notas
- Gráficas:
DealDailyTrendsChartyDealMonthlyTrendsChart.
id: deals-stages modulo: analytics app: crm nombre: Etapas de deals tipo: vista
Etapas de deals
Analiza distribución, conversión, velocidad y cuellos de botella por etapa.
Que se logra
- Resultado: Responde cuántos deals y qué valor se concentran en cada etapa del pipeline.
- Caso de uso: Una agencia identifica cuellos de botella en la etapa de propuesta y prioriza seguimientos.
- Se combina con: Deals y Pipelines.
Donde esta
- Ruta:
/[orgId]/analytics/deals/stages - Acceso en UI:
Analytics > Deals > Stages - Componente(s):
DealStagesView.tsx
Como funciona
- Seleccione un pipeline para el análisis detallado.
- Revise las tarjetas, gráficas, análisis y tabla de etapas.
Reglas y validaciones
- Filtros: rango de fechas, pipeline, estado y miembro del equipo.
- Con varios pipelines, el embudo y el detalle solicitan elegir uno específico.
Backend
- Servicios:
analytics(método: find; etapas, velocidad y cuellos de botella).
Relaciones
- Requiere: Deals y pipelines.
Notas
- Muestra
Total Deals,Total Value,Avg Conversion Rate,Avg Days in Stage,Stage Velocity Analysis,Stage Performance Details, embudo, distribución y eficiencia.
id: deals-team modulo: analytics app: crm nombre: Equipo de deals tipo: vista
Equipo de deals
Muestra la evolución mensual y estadísticas de deals por miembro.
Que se logra
- Resultado: Responde cuántos deals maneja, gana o pierde cada miembro del equipo comercial.
- Caso de uso: Una empresa de software compara la producción comercial de sus account executives.
- Se combina con: Deals, miembros y Pipelines.
Donde esta
- Ruta:
/[orgId]/analytics/deals/team - Acceso en UI:
Analytics > Deals > Team - Componente(s):
DealTeamView.tsx,TeamMonthlyChart.tsx,TeamStatsChart.tsx
Como funciona
- Ajuste filtros de Deals.
- Consulte las gráficas disponibles por miembro.
Reglas y validaciones
- Filtros: rango de fechas, pipeline, estado y miembro del equipo.
Backend
- Servicios:
analytics(método: find; estadísticas mensuales y de equipo).
Relaciones
- Requiere: Deals, miembros y pipelines.
Notas
- Muestra
TeamMonthlyChartyTeamStatsChart.TeamPerformanceChartyTeamValueChartestán importados pero no se renderizan.
id: deals-won-analysis modulo: analytics app: crm nombre: Análisis de deals ganados tipo: vista
Análisis de deals ganados
Estudia volumen, valor, tiempo de cierre y deals ganados recientes.
Que se logra
- Resultado: Responde cuántos deals se ganan, por qué valor y con qué patrones de cierre.
- Caso de uso: Un proveedor B2B identifica qué tipo de oportunidad termina convirtiéndose con mayor frecuencia.
- Se combina con: Deals, Productos y Pipelines.
Donde esta
- Ruta:
/[orgId]/analytics/deals/won-analysis - Acceso en UI:
Analytics > Deals > Won Analysis - Componente(s):
DealWonAnalysisView.tsx
Como funciona
- Ajuste filtros de Deals.
- Revise el resumen, las tendencias, distribución y la tabla.
Reglas y validaciones
- Filtros: rango de fechas, pipeline, estado y miembro del equipo.
Backend
- Servicios:
analytics(método: find; análisis y tendencias de deals ganados).
Relaciones
- Requiere: Deals ganados y pipelines.
Notas
- Incluye
WonSummaryCards,WonDailyTrendsChart,WonMonthlyTrendsChart,TimeRangeDistributionChartyRecentWinsTable; esta última ofreceExport Excel.
id: export-analytics modulo: analytics app: crm nombre: Exportar datos de Analytics tipo: vista
Exportar datos de Analytics
Algunas tablas y gráficas permiten descargar sus datos como archivo Excel.
Que se logra
- Resultado: Los datos de la vista analítica se pueden llevar fuera de Apex para compartirlos o trabajarlos después.
- Caso de uso: Una agencia exporta el desempeño de deals para preparar el informe mensual de un cliente.
- Se combina con: Todas las vistas de Analytics.
Donde esta
- Ruta: vistas de tendencias, equipo, completitud y análisis de deals.
- Acceso en UI: botón
Export Exceldentro del componente correspondiente. - Componente(s):
DailyTrendsChart.tsx,MonthlyTrendsChart.tsx,TeamPerformanceTable.tsx,CompletionByTypeChart.tsx,RecentWinsTable.tsx,LostReasonsTable.tsx,RecentLossesTable.tsx
Como funciona
- Abra una vista que muestre
Export Excel. - Aplique filtros si necesita limitar los datos.
- Seleccione
Export Excel.
Reglas y validaciones
- La disponibilidad no es global: aparece solo en los componentes enumerados.
Backend
- Servicios: ninguno; la exportación se prepara en el navegador con los datos cargados.
Relaciones
- Requiere: Tendencias de actividades, equipo de actividades, completitud de actividades o análisis de deals.
Notas
- No se detectó una exportación transversal para todas las vistas de Analytics.
id: global-filters modulo: analytics app: crm nombre: Filtros de Analytics tipo: vista
Filtros de Analytics
Los tableros disponen de filtros específicos por dominio para acotar los resultados.
Que se logra
- Resultado: Responde una misma pregunta analítica para el período, equipo o alcance elegido sin cambiar de reporte.
- Caso de uso: Un gerente limita todas las vistas al trimestre y a una sede antes de tomar decisiones.
- Se combina con: Todas las vistas de Analytics.
Donde esta
- Ruta:
/[orgId]/analytics/{conversations,deals,quotes,activities,attribution}/** - Acceso en UI: barras superiores de cada dominio.
- Componente(s):
TopBar.tsx,DateRangeSelector.tsx
Como funciona
- Abra una vista de Analytics.
- Ajuste el rango de fechas y los selectores disponibles.
- La vista vuelve a consultar sus métricas y gráficas.
Reglas y validaciones
- Conversaciones: rango, estado, miembro, asistente de IA, canal y en algunas vistas pipeline.
- Deals: rango, pipeline, estado y miembro.
- Quotes: rango, estado, miembro y producto.
- Actividades: rango, tipo de actividad y miembro.
- Atribución: rango y dimensión.
Backend
- Servicios:
analytics(método: find).
Relaciones
- Requiere: las vistas de Analytics.
Notas
- No todos los selectores están presentes en todas las vistas; consulte su ficha individual.
id: period-comparison modulo: analytics app: crm nombre: Comparativa de períodos tipo: vista
Comparativa de períodos
El resumen de quotes calcula indicadores de cambio frente al período anterior.
Que se logra
- Resultado: Responde si el desempeño actual mejora o empeora frente a otro período equivalente.
- Caso de uso: Un e-commerce compara las conversaciones de esta semana con la anterior tras una promoción.
- Se combina con: Conversaciones, Deals, Quotes y Actividades.
Donde esta
- Ruta:
/[orgId]/analytics/quotes/overview - Acceso en UI:
Analytics > Quotes > Overview > QuotesMetrics - Componente(s):
QuotesMetrics.tsx
Como funciona
- Seleccione un rango de fechas en Quotes.
- Revise el indicador de cambio de las tarjetas.
Reglas y validaciones
- Se compara el rango seleccionado con el período anterior.
Backend
- Servicios:
analytics(método: find; métricas del resumen de estimates).
Relaciones
- Requiere: Resumen de quotes.
Notas
- No se detectó un selector de comparación manual común a todos los tableros.
id: quotes-accepted-analysis modulo: analytics app: crm nombre: Análisis de quotes aceptadas tipo: vista
Análisis de quotes aceptadas
Analiza valor, tiempo de aceptación, tendencia y quotes aceptadas recientes.
Que se logra
- Resultado: Responde cuántas quotes son aceptadas y qué productos o valores participan en esas aceptaciones.
- Caso de uso: Un proveedor industrial identifica las propuestas que sus clientes aprueban con mayor frecuencia.
- Se combina con: Quotes, Productos y Deals.
Donde esta
- Ruta:
/[orgId]/analytics/quotes/accepted-analysis - Acceso en UI:
Analytics > Quotes > Accepted Analysis - Componente(s):
QuotesAcceptedView.tsx
Como funciona
- Ajuste fecha, miembro o producto.
- Revise tarjetas, tendencia y tabla.
Reglas y validaciones
- Filtros: rango de fechas, miembro y producto.
Backend
- Servicios:
analytics(método: find; análisis de estimates aceptados).
Relaciones
- Requiere: Quotes aceptadas y productos.
Notas
- Incluye
AcceptedSummaryCards,AcceptedTrendsChartyRecentAcceptedTable.
id: quotes-declined-analysis modulo: analytics app: crm nombre: Análisis de quotes rechazadas y vencidas tipo: vista
Análisis de quotes rechazadas y vencidas
Analiza conteo, valor, motivos, tendencia y quotes recientes rechazadas o vencidas.
Que se logra
- Resultado: Responde cuántas quotes se rechazan o vencen y qué resultados requieren seguimiento.
- Caso de uso: Una empresa de servicios detecta propuestas vencidas para que ventas retome el contacto.
- Se combina con: Quotes, Actividades y Deals.
Donde esta
- Ruta:
/[orgId]/analytics/quotes/declined-analysis - Acceso en UI:
Analytics > Quotes > Declined Analysis - Componente(s):
QuotesDeclinedView.tsx
Como funciona
- Ajuste fecha, miembro o producto.
- Revise las tarjetas, tendencias y tablas.
Reglas y validaciones
- Filtros: rango de fechas, miembro y producto.
Backend
- Servicios:
analytics(método: find; análisis de estimates rechazados o vencidos).
Relaciones
- Requiere: Quotes rechazadas, vencidas y productos.
Notas
- Incluye
DeclinedSummaryCards,DeclinedTrendsChart,Declined Reasons BreakdownyRecent Declined & Expired Quotes.
id: quotes-home modulo: analytics app: crm nombre: Entrada de quotes tipo: vista
Entrada de quotes
Redirige al resumen de quotes.
Que se logra
- Resultado: Lleva al análisis de propuestas para responder su estado, progreso y aceptación comercial.
- Caso de uso: Un estudio creativo inicia aquí la revisión de cotizaciones enviadas durante el mes.
- Se combina con: Quotes y filtros de Analytics.
Donde esta
- Ruta:
/[orgId]/analytics/quotes - Acceso en UI:
Analytics > Quotes - Componente(s):
page.tsx
Como funciona
- Abra
Quotes. - El sistema redirige a
Overview.
Reglas y validaciones
- No contiene filtros propios.
Backend
- Servicios: ninguno invocado por esta ruta.
Relaciones
- Requiere: Resumen de quotes.
Notas
- No añade métricas ni gráficas propias.
id: quotes-overview modulo: analytics app: crm nombre: Resumen de quotes tipo: vista
Resumen de quotes
Resume quotes por valor, estado y variación frente al período anterior.
Que se logra
- Resultado: Responde cuál es el volumen, valor y distribución general de las quotes del período.
- Caso de uso: Una constructora revisa cuánto valor tiene en propuestas antes de planear su flujo de ventas.
- Se combina con: Quotes, Deals y comparación de períodos.
Donde esta
- Ruta:
/[orgId]/analytics/quotes/overview - Acceso en UI:
Analytics > Quotes > Overview - Componente(s):
QuotesOverviewView.tsx,QuotesMetrics.tsx,QuotesByStatusChart.tsx
Como funciona
- Ajuste los filtros.
- Revise tarjetas y distribución por estado.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro y producto.
Backend
- Servicios:
analytics(método: find; métricas del resumen y quotes por estado).
Relaciones
- Requiere: Quotes, productos y miembros.
Notas
- Muestra
QuotesMetricsyQuotesByStatusChart; las tarjetas incluyen comparación con el período anterior.
id: quotes-products modulo: analytics app: crm nombre: Productos de quotes tipo: vista
Productos de quotes
Desglosa quotes y valores por producto.
Que se logra
- Resultado: Responde qué productos aparecen más en las cotizaciones y en qué resultados comerciales.
- Caso de uso: Un mayorista descubre qué referencias concentran las propuestas aceptadas para priorizar inventario.
- Se combina con: Quotes, Productos y análisis de aceptación.
Donde esta
- Ruta:
/[orgId]/analytics/quotes/products - Acceso en UI:
Analytics > Quotes > Products - Componente(s):
QuotesProductsView.tsx,ProductsDistributionChart.tsx,ProductsValueChart.tsx
Como funciona
- Ajuste filtros.
- Revise gráficas y
Product Details.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro y producto.
Backend
- Servicios:
analytics(método: find; estimates por producto).
Relaciones
- Requiere: Quotes y productos.
Notas
- La tabla
Product Detailsmuestra cantidad, aceptadas, valor, cantidad cotizada y tasa promedio.
id: quotes-progress modulo: analytics app: crm nombre: Progreso de quotes tipo: vista
Progreso de quotes
Presenta la evolución diaria y mensual de quotes.
Que se logra
- Resultado: Responde cómo avanza el valor de las quotes desde creación hasta su resultado.
- Caso de uso: Una agencia mide si el valor de sus propuestas está convirtiéndose o quedando pendiente.
- Se combina con: Quotes, Deals y comparación de períodos.
Donde esta
- Ruta:
/[orgId]/analytics/quotes/progress - Acceso en UI:
Analytics > Quotes > Progress - Componente(s):
QuotesProgressView.tsx,QuotesDailyTrendsChart.tsx,QuotesMonthlyTrendsChart.tsx
Como funciona
- Ajuste filtros de Quotes.
- Consulte ambas tendencias.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro y producto.
Backend
- Servicios:
analytics(método: find; tendencias diaria y mensual de estimates).
Relaciones
- Requiere: Quotes.
Notas
- Gráficas:
QuotesDailyTrendsChartyQuotesMonthlyTrendsChart.
id: quotes-status modulo: analytics app: crm nombre: Estado y embudo de quotes tipo: vista
Estado y embudo de quotes
Muestra las etapas del embudo y sus métricas de conversión.
Que se logra
- Resultado: Responde cuántas quotes están en cada estado, incluidas aceptadas, rechazadas o vencidas.
- Caso de uso: Un despacho de arquitectura identifica cuántas propuestas necesitan seguimiento antes de expirar.
- Se combina con: Quotes y Actividades.
Donde esta
- Ruta:
/[orgId]/analytics/quotes/status - Acceso en UI:
Analytics > Quotes > Status & Funnel - Componente(s):
QuotesStatusView.tsx,QuotesConversionMetrics.tsx,QuotesFunnelChart.tsx
Como funciona
- Ajuste fecha, miembro o producto.
- Revise métricas y embudo.
Reglas y validaciones
- Filtros: rango de fechas, miembro y producto.
Backend
- Servicios:
analytics(método: find; embudo de conversión de estimates).
Relaciones
- Requiere: Quotes y productos.
Notas
- Muestra
QuotesConversionMetricsyQuotesFunnelChart.
id: quotes-team modulo: analytics app: crm nombre: Equipo de quotes tipo: vista
Equipo de quotes
Compara desempeño y valor de quotes por miembro.
Que se logra
- Resultado: Responde qué miembros crean, administran o convierten más quotes.
- Caso de uso: Un equipo comercial compara el desempeño de sus asesores en la elaboración de propuestas.
- Se combina con: Quotes, miembros y Deals.
Donde esta
- Ruta:
/[orgId]/analytics/quotes/team - Acceso en UI:
Analytics > Quotes > Team - Componente(s):
QuotesTeamView.tsx,TeamPerformanceChart.tsx,TeamValueChart.tsx,TeamStatsTable.tsx
Como funciona
- Ajuste filtros.
- Revise gráficas y tabla por miembro.
Reglas y validaciones
- Filtros: rango de fechas, estado, miembro y producto.
Backend
- Servicios:
analytics(método: find; estimates por miembro).
Relaciones
- Requiere: Quotes y miembros.
Notas
- Muestra
TeamPerformanceChart,TeamValueChartyTeamStatsTable.
id: asistentes-ia app: crm nombre: Asistentes IA estado: shipped permiso: can_access_ai_assistant
Asistentes IA
Configura asistentes para Inbox, tickets, Nova y llamadas de voz. Cada tipo expone pestañas y modelos compatibles distintos.
Para que sirve
- Una clínica configura un asistente para responder consultas iniciales, consultar disponibilidad y derivar casos sensibles a recepción.
- Una inmobiliaria atiende prospectos desde Inbox, consulta propiedades o contactos del CRM y asigna la oportunidad al asesor disponible.
- Un ecommerce permite al asistente buscar productos, enviar información y continuar seguimientos cuando el comprador deja de responder.
- Un equipo de soporte clasifica tickets, ejecuta automatizaciones permitidas y entrega conversaciones complejas al miembro correcto.
- Una empresa de servicios publica un agente de voz en su web para atender llamadas, agendar o transferir a una persona.
Que lo hace diferente
- No es solo un chatbot: puede habilitar herramientas internas para buscar y crear contactos, deals, actividades, reservas, estimates, invoices, productos, notas, tareas y conversaciones, según la configuración de cada asistente.
- Puede consultar disponibilidad, crear o actualizar reservas, cotizar con estimates, buscar productos y enviar mensajes en los canales disponibles del CRM.
- El handoff puede conservar la asignación actual, usar el propietario del contacto o distribuir entre miembros según disponibilidad, pesos y reglas de fallback.
- Integra herramientas HTTP propias, servidores MCP con OAuth o API keys, y automatizaciones publicadas que el asistente puede invocar.
- Sus skills añaden conocimiento y condiciones de uso por asistente; las instrucciones y la configuración conservan historial recuperable.
- Los asistentes de voz se sincronizan con Telnyx; los modelos de texto se configuran mediante conexiones permitidas y el uso de IA se controla con Wallet.
Acceso
- Ruta principal:
/[orgId]/ai-assistant - Como se llega:
Sidebar > AI Assistant - Permiso requerido:
can_access_ai_assistant
Alcance tecnico
- Frontend:
ai-assistant/page.tsx,ai-assistant/[assistantId]/page.tsxycomponents/aiassistant. - Backend:
ai-assistants,ai-assistant-response,ai-assistant-response-v2,ai-assistant-skills,api-tools,mcp-tool-connection-proxyy servicios de voz. - Superficies publicas: el widget de voz generado se inserta en sitios externos después de sincronizar el asistente.
- Integraciones externas: OpenRouter, Telnyx, ElevenLabs, servidores MCP y S3 para logos del widget.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Gestión de asistentes | assistant-management.md | Crea, selecciona, duplica y elimina asistentes por tipo. |
| Instrucciones y modos | assistant-instructions.md | Define comportamiento con Guided Mode o Blank Canvas. |
| Asistente de redacción | instruction-writing-assistant.md | Ayuda a redactar, revisar o diagramar instrucciones antes de aplicarlas. |
| Modelo y ajustes básicos | assistant-model-settings.md | Configura nombre, modelo, zona horaria y conexión de IA permitida. |
| Herramientas internas | internal-tools.md | Habilita herramientas nativas de CRM, mensajería, productos, finanzas y otros módulos. |
| Herramientas API | api-tools.md | Crea, prueba y conecta herramientas HTTP personalizadas al asistente. |
| Servidores MCP | mcp-servers.md | Conecta servidores MCP y habilita herramientas remotas por asistente. |
| Skills del asistente | assistant-skills.md | Crea y mantiene conocimiento especializado activado bajo condiciones de uso. |
| Transferencia a personas | human-handoff.md | Define reglas para entregar conversaciones a miembros disponibles, propietarios o alternativas. |
| Transferencia a otro asistente | ai-handoff.md | Transfiere conversaciones a otro asistente con reglas y opciones de respuesta. |
| Seguimientos automáticos | follow-up.md | Configura reglas de seguimiento cuando el cliente deja de responder. |
| Automatizaciones invocables | assistant-automations.md | Asocia automatizaciones publicadas e instrucciones para que el asistente las ejecute. |
| Configuración avanzada | advanced-settings.md | Controla salida estructurada, respuesta, medios, análisis de imágenes y resumen. |
| Horario de disponibilidad | availability-schedule.md | Define atención semanal y acciones fuera de horario. |
| Playground de texto | playground.md | Prueba asistentes de conversación y Nova con contactos y conversaciones de Playground. |
| Configuración de voz | voice-configuration.md | Configura runtime, voz, transcripción, saludo, variables y sincronización de un asistente de voz. |
| Transferencia de voz | voice-handoff.md | Transfiere llamadas a agentes de voz, otros asistentes o destinos externos. |
| Widget web de voz | voice-web-widget.md | Personaliza y copia el embed del agente de voz para un sitio web. |
| Historial y restauración | assistant-history.md | Consulta snapshots, compara versiones y restaura instrucciones o configuración completa. |
| Configuración al enviar mensajes | message-time-configuration.md | Consulta la configuración histórica asociada a un mensaje de IA. |
| Configuración externa por MCP | mcp-assistant-configuration.md | Permite a clientes MCP autorizados consultar y modificar asistentes de conversación y tickets. |
Relaciones
- Depende de: modelos de IA, miembros de la organización, Conversaciones, Customer Service y Calling & SMS.
- Usado por: Inbox, tickets, Nova, seguimientos y llamadas de voz.
Limitaciones y notas
ai-chatyvoicenacen enBlank Canvas; conversación y tickets pueden iniciar enGuided Mode.- Nova oculta
Handoff,Follow UpyAutomations; voz no tieneFollow Up. - La creación y cada actualización guardan una versión de historial cuando la petición contiene un usuario autenticado.
id: advanced-settings modulo: asistentes-ia app: crm nombre: Configuración avanzada tipo: configuracion
Configuración avanzada
Controla salida estructurada, respuesta, medios, análisis de imágenes y resumen.
Que se logra
- Resultado: el equipo ajusta cómo el modelo razona, responde y devuelve resultados para adecuarlo a una tarea de atención concreta.
- Caso de uso: una tienda con catálogo visual configura análisis de imágenes para que el asistente interprete una foto enviada por el cliente antes de orientar la conversación.
- Se combina con: Instrucciones y modos, Modelo y ajustes básicos y Herramientas internas.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): AdvancedModelOptionsDialog.tsx, JsonSchemaEditor.tsx
Como funciona
- Abre
Advancedy usaAdvanced Model Configuration. - Selecciona
VerbosityyReasoning Effort, o usaReseten cada ajuste yReset Allpara volver a valores base. - Cierra con
Savey pulsaUpdate Assistant.
Reglas y validaciones
Verbosityse aplica a modelos GPT-5 compatibles;Reasoning Effortofrece None, Low, Medium y High en los modelos que lo soportan.- Las opciones avanzadas requieren plan de pago; Free muestra el botón bloqueado.
- La configuración registrada también puede incluir temperatura, Top P, máximo de tokens, secuencias de parada, análisis de imágenes, mensajes múltiples, audio y claves JSON adicionales si se configuraron desde otras secciones.
Backend
- Servicios:
ai-assistants(patch) yai-assistants-change-history(find).
Relaciones
- Requiere: plan distinto de Free para guardar el diálogo.
- Dispara / afecta: detalle y razonamiento de las respuestas.
Notas
Por confirmar: qué controles de configuración avanzada siguen visibles en AssistantSettingsForm además del diálogo.
id: ai-handoff modulo: asistentes-ia app: crm nombre: Transferencia a otro asistente tipo: configuracion
Transferencia a otro asistente
Transfiere conversaciones a otro asistente con reglas y opciones de respuesta.
Que se logra
- Resultado: una conversación pasa al asistente especializado adecuado sin perder las decisiones de asignación ni el contexto del intercambio.
- Caso de uso: una aseguradora transfiere las preguntas de cotización a un asistente comercial y los siniestros a otro configurado para soporte.
- Se combina con: Gestión de asistentes, Transferencia a personas y Herramientas internas.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): AIAssistantHandoffSection.tsx
Como funciona
- En
Handoff, añade una regla deAI Assistant Handoff. - Describe
When should this rule be triggered?y selecciona el asistente destino; el selector permite buscar por nombre o descripción. Puedes insertar variables de contacto en la condición y en el mensaje de handoff. - Configura el mensaje opcional,
Keep assigned human agent,Mark conversation as unread,Trigger AI reply immediatelyyAlso send current AI reply. - Si hay variables de contacto y el permiso de lectura del contacto está en No Access, aparece una alerta roja.
- Guarda mediante
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| asistente destino | lista | Si | Debe pertenecer a la misma organización. |
| instrucciones | texto largo | Si | Describe el escenario de transferencia. Acepta {{contact.*}}. |
| mensaje y opciones de respuesta | texto / casillas | No | El mensaje de handoff se interpola con el contacto. La respuesta actual y la nueva pueden generar dos mensajes. |
Reglas y validaciones
- Free permite una regla y los planes de pago más de una.
- Un asistente no puede transferirse a sí mismo; los asistentes de voz solo pueden transferir a otro asistente de voz.
Backend
- Servicios:
ai-assistants(patch),ai-assistant-responseyai-assistant-response-v2.
Relaciones
- Requiere: otro asistente válido de la organización.
- Dispara / afecta: el asistente asignado y el estado de lectura de la conversación.
Notas
Por confirmar: cómo se ordenan reglas simultáneamente aplicables.
id: api-tools modulo: asistentes-ia app: crm nombre: Herramientas API tipo: integracion
Herramientas API
Crea, prueba y conecta herramientas HTTP personalizadas al asistente.
Que se logra
- Resultado: el asistente puede consultar o enviar datos a un sistema externo mediante una operación HTTP definida y probada por la organización.
- Caso de uso: un distribuidor conecta su inventario para que el asistente confirme disponibilidad antes de responder a un comprador.
- Se combina con: Herramientas internas y Servidores MCP, para cubrir datos del CRM y sistemas externos.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): ApiToolsGallery.tsx
Como funciona
- En
Tools > API, crea o selecciona una herramienta. - Define
Name,Description, endpoint, métodoGEToPOST, esquema de parámetros y, según corresponda, parámetros URL, cuerpo, headers y ejemplo de respuesta. - Usa la prueba de la galería antes de asociarla al asistente y describe cuándo debe utilizarse.
- Guarda la asociación con
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| nombre, endpoint y método | texto / lista | Si | Método GET o POST. |
| esquema de parámetros | editor | Si | Define datos de entrada. |
| URL, cuerpo, headers, respuesta | configuración | No | Ajustan la petición y prueba. |
Reglas y validaciones
- Una herramienta asociada puede aportar descripción, condición de uso y configuración por asistente.
Backend
- Servicios:
api-tools(find/create/patch/remove),api-tool-testing-proxy(create),ai-assistants(patch) y respuestas IA.
Relaciones
- Requiere: endpoint HTTP disponible.
- Dispara / afecta: llamadas externas solicitadas por el asistente.
Notas
Por confirmar: restricciones de red y tiempo de espera del proxy de pruebas.
id: assistant-automations modulo: asistentes-ia app: crm nombre: Automatizaciones invocables tipo: automatizacion
Automatizaciones invocables
Asocia automatizaciones publicadas e instrucciones para que el asistente las ejecute.
Que se logra
- Resultado: el asistente puede activar un proceso publicado del negocio y usar su resultado para responder o sustituir su respuesta.
- Caso de uso: un operador turístico deja que el asistente ejecute la automatización de solicitud de reserva cuando el cliente confirma fechas y cantidad de viajeros.
- Se combina con: Automatizaciones, Herramientas internas y Seguimientos automáticos.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): AutomationsSection.tsx
Como funciona
- En
Automations, pulsaAdd Automation. - Selecciona una automatización no añadida previamente mediante el selector por carpetas y escribe
When To Use. - En la tarjeta, activa
Pass automation output as contextsi la IA debe esperar el resultado;Override AI Responsereemplaza la respuesta con un texto fijo. - Usa el ojo para ver el canvas o el enlace externo para editar el flujo. Guarda con
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| automatización | selector | Si | No permite duplicar la misma. |
When To Use |
texto largo | Si | Indica al asistente cuándo invocarla. |
Pass automation output as context |
casilla | No | Espera y aporta la salida al modelo. |
Override AI Response |
texto | No | Sustituye la respuesta normal. |
Reglas y validaciones
- Free permite una automatización; los planes de pago permiten más.
Backend
- Servicios:
ai-assistants(patch),automations(find) y ejecución de automatizaciones desde la respuesta IA.
Relaciones
- Requiere: automatizaciones existentes.
- Dispara / afecta: ejecuciones solicitadas por el asistente.
Notas
Por confirmar: si el backend restringe la selección a automatizaciones publicadas.
id: assistant-history modulo: asistentes-ia app: crm nombre: Historial y restauración tipo: vista
Historial y restauración
Consulta snapshots, compara versiones y restaura instrucciones o configuración completa.
Que se logra
- Resultado: el equipo puede auditar quién cambió la configuración y volver a una versión conocida si una modificación afecta la calidad de atención.
- Caso de uso: una empresa SaaS compara el comportamiento anterior y actual después de actualizar las instrucciones de soporte y restaura solo las instrucciones si es necesario.
- Se combina con: Instrucciones y modos, Skills del asistente y Configuración al enviar mensajes.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): AssistantHistoryDialog.tsx, AssistantVersionCompare.tsx
Como funciona
- Desde
Instructions, pulsa el icono de historial. - Expande una fecha y selecciona una versión para ver autor, fecha, idioma, instrucciones y configuración.
- Usa
Compare with CurrentoComparepara contrastarla con el estado actual. - Elige
Restore Instructions OnlyoRestore Complete Configuration; la pantalla se recarga al terminar.
Reglas y validaciones
- El historial se muestra en bloques de 50 entradas, ordenado de más reciente a más antiguo.
- Las restauraciones no crean otra entrada de historial para evitar registrar la restauración como un cambio ordinario.
Backend
- Servicios:
ai-assistants-change-history(find) yai-assistants-restore-from-changes-history(create).
Relaciones
- Requiere: versiones creadas por cambios autenticados del asistente.
- Dispara / afecta: instrucciones o toda la configuración del asistente seleccionado.
Notas
Por confirmar: los permisos específicos para consultar o restaurar el historial.
id: assistant-instructions modulo: asistentes-ia app: crm nombre: Instrucciones y modos tipo: configuracion
Instrucciones y modos
Define comportamiento con Guided Mode o Blank Canvas.
Que se logra
- Resultado: cada asistente responde y decide acciones con un comportamiento definido para el idioma, tono, reglas y proceso de atención del negocio.
- Caso de uso: una agencia define en
Guided Modecómo calificar leads y cuándo escalar una consulta; su equipo técnico usaBlank Canvaspara reglas más detalladas. - Se combina con: Asistente de redacción, Herramientas internas, Skills del asistente y Configuración avanzada.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): InstructionsSection.tsx, EasyModeForm.tsx
Como funciona
- Selecciona un asistente y abre
Instructions. - Elige
EnglishoSpanish. - En
Guided Mode, completa el formulario estructurado; el sistema regenera las instrucciones. EnBlank Canvas, redacta Markdown directamente o usaCodeyPreview. - Usa
Insert variablepara personalizar el texto con campos del contacto, por ejemplo{{contact.first_name}}o{{contact.custom_fields_by_key.membership}}. Esas variables se resuelven al responder. - Si insertas variables de contacto, el asistente necesita
Contact Readen Advanced > Access. Si el permiso sigue en No Access, aparece una alerta roja. - Usa el icono de brillo para pedir una propuesta al asistente de redacción y aplica el texto resultante.
- Guarda el panel ampliado con
Save Changeso los cambios generales conUpdate Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Instructions Language |
lista | No | English o Spanish. |
Instructions |
editor Markdown | No | Permite títulos, listas, tablas, enlaces, imágenes y variables {{contact.*}}. |
Guided Mode |
modo | No | Genera instrucciones desde marca, rol, objetivos, restricciones y flujos. |
Reglas y validaciones
- El cambio de
Guided ModeaBlank Canvaselimina la configuración guiada y no ofrece conversión inversa. - Nova usa
Blank Canvas; el historial permite restaurar las instrucciones de una versión. - Las variables de contacto requieren
access_permissions_contactenread. Sin ese permiso, los tokens se resuelven vacíos.
Backend
- Servicios:
ai-assistants(patch),ai-assistants-change-history(find) yai-assistants-restore-from-changes-history(create).
Relaciones
- Requiere: un asistente creado.
- Dispara / afecta: la respuesta de ese asistente en conversaciones, tickets, Nova o voz.
Notas
Por confirmar: el límite operativo de longitud de las instrucciones no está validado en el schema.
id: assistant-management modulo: asistentes-ia app: crm nombre: Gestión de asistentes tipo: configuracion
Gestión de asistentes
Crea asistentes de conversación, tickets, Helpdesk, Nova y voz; desde el panel también se seleccionan, duplican o eliminan.
Que se logra
- Resultado: la organización dispone de asistentes separados por canal o función, con configuración reutilizable para atención, soporte, análisis o voz.
- Caso de uso: una empresa de software crea un asistente para ventas en Inbox y otro para tickets, evitando que ambos operen con las mismas instrucciones.
- Se combina con: Instrucciones y modos, Herramientas internas, Transferencia a personas y Configuración de voz.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
Sidebar > AI Assistant > Conversation | Voice | Tickets | Nova > Add Assistant - Componente(s): AIAssistantView.tsx, AIAssistantSidebar.tsx
Como funciona
- Expande el grupo de tipo y pulsa
Add Assistant. - Escribe
Name, escogeAI Modelcuando el tipo no sea voz, seleccionaTimezoney elAssistant Type. - Para conversación, tickets y Helpdesk elige
Guided ModeoBlank Canvas; Nova y voz se crean siempre conBlank Canvas. - Pulsa
Create Assistant; el nuevo recurso queda seleccionado y se abre en/[orgId]/ai-assistant/[assistantId]. - Usa el lápiz para
Basic Settings, el icono de copia para duplicar y el icono de papelera junto aUpdate Assistantpara eliminar.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Si | Identifica el asistente en su carpeta. |
AI Model |
lista | Si, salvo voz | La lista se filtra por compatibilidad del tipo. |
Timezone |
selector | Si | Inicia en UTC. |
Assistant Type |
lista | Si | Conversation, Ticket, Helpdesk, AI Chat o Voice. |
Instruction Mode |
selector | No | No aparece para Nova ni voz. |
Connection |
lista | Si | Solo Enterprise: System, Organization o Specific. |
Reglas y validaciones
- Los modelos eliminados no aparecen; Tickets/Helpdesk requieren modelos habilitados para tickets, Nova para AI Chat y voz para Voice.
- En planes no Enterprise, la conexión se fuerza a
System; una conexiónSpecificexigeSpecific OpenAI Secret Key. - Los planes Free limitan a un asistente por tipo y el resto de límites se señalan con
PremiumFeature.
Backend
- Servicios:
ai-assistants(find/get/create/patch/remove). - Efectos: genera
version_id, registra historial, sincroniza asistentes de voz con Telnyx y al eliminar desasigna el asistente de conversaciones.
Relaciones
- Requiere:
can_access_ai_assistanty modelos de IA configurados. - Dispara / afecta: Inbox, Customer Service, Nova y voz.
Notas
Por confirmar: el comportamiento del tipo helpdesk no tiene una carpeta separada en el panel lateral.
id: assistant-model-settings modulo: asistentes-ia app: crm nombre: Modelo y ajustes básicos tipo: configuracion
Modelo y ajustes básicos
Configura nombre, modelo, zona horaria y conexión de IA permitida.
Que se logra
- Resultado: el asistente usa el modelo, zona horaria y conexión de IA aprobados para su función y nivel de acceso.
- Caso de uso: una empresa con varias marcas asigna modelos distintos a ventas y soporte, y restringe un asistente empresarial a una conexión específica.
- Se combina con: Gestión de asistentes, Configuración avanzada y Horario de disponibilidad.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): BasicSettingsSection.tsx
Como funciona
- En el encabezado de
Assistant Settings, pulsa el icono de lápiz. - Edita
Name,AI ModelyTimezone. - En Enterprise, elige
Connection; si eligesSpecific, introduceSpecific OpenAI Secret Key. - Pulsa
Doney termina conUpdate Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Si | Nombre visible del asistente. |
AI Model |
lista | Si, salvo voz | Presenta contexto, modalidades y coste cuando el modelo informa esos datos. |
Timezone |
selector | Si | Predeterminado UTC. |
Connection |
lista | Enterprise | System, Organization o Specific. |
Specific OpenAI Secret Key |
secreto | Con Specific | Se puede mostrar u ocultar. |
Reglas y validaciones
- La lista de modelos depende del tipo; voz no muestra este selector.
- Fuera de Enterprise se conserva
System, aunque el registro previo tuviera otra conexión.
Backend
- Servicios:
ai-assistants(patch),ai-models(find) yorganizations(get).
Relaciones
- Requiere: modelos publicados para el tipo de asistente.
- Dispara / afecta: proveedor y coste de las respuestas del asistente.
Notas
Por confirmar: la interfaz no muestra el criterio exacto que clasifica una organización como Enterprise.
id: assistant-skills modulo: asistentes-ia app: crm nombre: Skills del asistente tipo: configuracion
Skills del asistente
Crea y mantiene conocimiento especializado activado bajo condiciones de uso.
Que se logra
- Resultado: el asistente recibe procedimientos y conocimiento específico solo en los escenarios en que debe aplicarlos.
- Caso de uso: una firma contable crea un skill para explicar requisitos de facturación cuando un cliente pregunta por ese trámite.
- Se combina con: Instrucciones y modos, Herramientas internas e Historial y restauración.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): SkillsSection.tsx
Como funciona
- Abre
Skillsy pulsaAdd Skill. - Escribe
Skill Name, describeWhen To Usey redactaSkill Content. - Usa
Insert variableenWhen To UseoSkill Contentpara personalizar con campos del contacto ({{contact.first_name}},{{contact.custom_fields_by_key.<key>}}). - Alterna entre
MarkdownyCode; en modo código puedes abrirPreview. - Pulsa
Add Skill; para cambiar una existente expándela, edita sus campos y pulsaSave Changes. Eliminar requiere confirmarRemove. - Si hay variables de contacto y el asistente no tiene Contact Read, aparece una alerta roja. Activa el permiso y guarda con
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Skill Name |
texto | Si | Nombre visible de la tarjeta. |
When To Use |
texto largo | Si | Condición que orienta el uso. Acepta variables {{contact.*}}. |
Skill Content |
editor Markdown | Si | Conocimiento que recibe el asistente. Acepta variables {{contact.*}}. |
Reglas y validaciones
- La creación se bloquea hasta completar los tres campos.
- El listado se carga por asistente, hasta 50 skills ordenadas por creación.
Backend
- Servicios:
ai-assistant-skills(find/create/patch/remove).
Relaciones
- Requiere: asistente seleccionado.
- Dispara / afecta: contexto de respuesta del asistente.
Notas
Por confirmar: selección o prioridad de skills cuando sus condiciones se solapan.
id: availability-schedule modulo: asistentes-ia app: crm nombre: Horario de disponibilidad tipo: configuracion
Horario de disponibilidad
Define atención semanal y acciones fuera de horario.
Que se logra
- Resultado: el asistente atiende en las franjas definidas y ejecuta una respuesta o derivación previsible cuando la organización está cerrada.
- Caso de uso: un centro médico informa fuera de horario el siguiente periodo de atención o asigna la solicitud a un miembro de guardia.
- Se combina con: Transferencia a personas, Seguimientos automáticos y Modelo y ajustes básicos.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): ScheduleSection.tsx
Como funciona
- Abre
Advanced > Scheduley eligeAlways AvailableoBased on Schedule. - Para horario, añade franjas
From/toen cada día y usaCopy to All Dayscuando corresponda. - Fuera de horario, selecciona
Send Messagey redactaNot Available Message, oAssign to Team Member. - En handoff, define mensaje, desasignación de IA, no leído, disponibilidad, distribución general y distribución por día.
- Pulsa
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Availability Mode |
radio | Si | Siempre disponible o por agenda. |
Weekly Schedule |
franjas horarias | Condicional | Un día sin franja queda no disponible. |
Out of Schedule Action |
selector | Condicional | Mensaje o transferencia. |
| distribución de equipo | miembros y porcentajes | Condicional | El total de miembros debe ser 100%. |
Reglas y validaciones
- Elegir
Always Availableborra las franjas semanales de la configuración. - El handoff con disponibilidad exige fallback válido, igual que la transferencia humana.
Backend
- Servicios:
ai-assistants(patch) y respuestas de asistente para aplicar la acción fuera de horario.
Relaciones
- Requiere: miembros activos para transferir.
- Dispara / afecta: respuesta o asignación de conversaciones entrantes.
Notas
Por confirmar: la zona horaria efectiva usada por el evaluador de agenda.
id: follow-up modulo: asistentes-ia app: crm nombre: Seguimientos automáticos tipo: automatizacion
Seguimientos automáticos
Configura reglas de seguimiento cuando el cliente deja de responder.
Que se logra
- Resultado: el asistente reanuda oportunidades o solicitudes sin respuesta mediante el canal, plantilla, automatización o mensaje de IA elegido.
- Caso de uso: un concesionario envía un recordatorio de prueba de manejo por WhatsApp tras un periodo sin respuesta y limita los intentos.
- Se combina con: Plantillas de Email y WhatsApp, Automatizaciones invocables y Conversaciones.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): FollowUpSection.tsx
Como funciona
- Activa
Enable Follow Upy defineMaximum Follow Upsentre 1 y 10. - Añade una regla con
When To Assigny el número de minutos enTime After. - Agrega acciones de tipo
Template,AutomationoAI Generated Message. - Para template, selecciona Email o WhatsApp y una plantilla; para automatización selecciona el flujo; para IA escribe sus instrucciones.
- Pulsa
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Maximum Follow Ups |
número | Si | Mínimo 1; interfaz máximo 10. |
When To Assign |
texto largo | Si | Condición de la regla. |
Time After |
minutos | Si | Puede ser 0. |
Follow Up Actions |
lista | No | Template, Automation o AI Generated Message. |
Reglas y validaciones
- Free admite una regla; los planes de pago más de una.
- Las plantillas de correo se cargan desde
support-ticket-email-templates; las de WhatsApp se eligen con el selector de plantillas aprobado. - El procesador incrementa el contador de seguimiento y evita generar dos mensajes de IA si la regla ya incluye
AI Generated Message.
Backend
- Servicios:
ai-assistants(patch),process-follow-ups(create),ai-conversation-follow-up(create) y plantillas/automatizaciones seleccionadas.
Relaciones
- Requiere: asistente de conversación o tickets.
- Dispara / afecta: conversaciones y tickets asignados al asistente.
Notas
Por confirmar: el planificador que decide cuándo encolar cada siguiente regla.
id: human-handoff modulo: asistentes-ia app: crm nombre: Transferencia a personas tipo: configuracion
Transferencia a personas
Define reglas para entregar conversaciones a miembros disponibles, propietarios o alternativas.
Que se logra
- Resultado: las conversaciones que requieren intervención humana llegan a una persona elegible con la asignación, etapa y señales de atención definidas.
- Caso de uso: una inmobiliaria distribuye solicitudes de visita entre asesores disponibles, pero conserva al asesor propietario cuando ya existe relación con el contacto.
- Se combina con: Horario de disponibilidad, Seguimientos automáticos, Conversaciones y pipelines de deals.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): HumanHandoffSection.tsx
Como funciona
- En
Handoff, pulsaAdd Ruley expande la regla. - Define un
Rule Namede hasta 10 caracteres con minúsculas, números o guiones bajos, y redactaWhen should rule be triggered?. Puedes insertar variables de contacto ({{contact.first_name}}) en la condición y en elCustom Handoff Message. Si usas variables, el asistente necesita Contact Read. - Añade miembros en
Add agenty reparte suWeight;Auto Distribute Weightrecalcula pesos al agregar o modificar integrantes. - Decide si conserva un miembro ya asignado, asigna al propietario del contacto, desasigna el agente IA y marca la conversación como no leída.
- Opcionalmente selecciona
PipelineyStage, y configura disponibilidad y fallback. Guarda conUpdate Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Rule Name |
texto | Si | Debe ser único dentro del asistente. |
When should rule be triggered? |
texto largo | Si | Indica al modelo cuándo transferir. Acepta {{contact.*}}. |
Custom Handoff Message |
texto largo | No | Mensaje al cliente; se interpola con el contacto actual. |
Team Members / Weight |
lista / porcentaje | Condicional | El total debe ser 100%. |
Assign to contact owner |
casilla | No | Permite regla sin miembros. |
Only assign to available advisors |
casilla | No | Exige elegir fallback. |
Reglas y validaciones
- Free permite una regla; los planes de pago permiten más.
- Si se respeta disponibilidad, el fallback puede dejar sin asignar, mantener IA, usar un usuario de respaldo o el propietario del contacto. Un fallback de usuario debe pertenecer a la organización.
- Para asistentes de voz, cada miembro elegido debe ser un agente de voz activo.
Backend
- Servicios:
ai-assistants(patch) yai-assistant-response/ai-assistant-response-v2(procesan el handoff).
Relaciones
- Requiere: miembros activos; pipeline y etapa son opcionales.
- Dispara / afecta: asignación, estado de lectura y etapa de la conversación.
Notas
Por confirmar: la prioridad cuando coinciden varias reglas.
id: instruction-writing-assistant modulo: asistentes-ia app: crm nombre: Asistente de redacción tipo: accion
Asistente de redacción
Ayuda a redactar, revisar o diagramar instrucciones antes de aplicarlas.
Que se logra
- Resultado: el responsable puede convertir una necesidad operativa en instrucciones revisables sin reemplazar directamente la configuración vigente.
- Caso de uso: una clínica describe cómo debe manejar consultas de urgencia y recibe una propuesta antes de aplicarla al asistente de recepción.
- Se combina con: Instrucciones y modos y Herramientas internas, cuyas definiciones se incluyen en el contexto de la propuesta.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): AssistantInstructionsAIAssistant.tsx
Como funciona
- En el editor de
Instructions, pulsa el icono de brillo. - Describe el cambio que quieres hacer; el asistente recibe las instrucciones actuales, la configuración del asistente y las definiciones de sus herramientas internas activadas.
- Revisa la propuesta y aplícala al editor; después guarda las instrucciones o pulsa
Update Assistant.
Reglas y validaciones
- En el panel expandido, la propuesta se aplica a ese borrador y requiere
Save Changes.
Backend
- Servicios: servicio de composición de instrucciones y
ai-assistants(patch).
Relaciones
- Requiere: asistente seleccionado.
- Dispara / afecta: texto de
Instructions; no guarda automáticamente.
Notas
Por confirmar: el modelo y el servicio backend exactos usados por el compositor.
id: internal-tools modulo: asistentes-ia app: crm nombre: Herramientas internas tipo: configuracion
Herramientas internas
Activa herramientas nativas que el modelo puede invocar al atender una conversación o solicitud.
Que se logra
- Resultado: el asistente puede convertir una conversación en acciones verificables sobre datos de la organización, no solo redactar una respuesta.
- Caso de uso: una empresa de reservas permite al asistente consultar horarios, crear una reserva y registrar una nota del cliente sin salir de la conversación.
- Se combina con: Instrucciones y modos, Seguimientos automáticos y Automatizaciones invocables.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant > Tools > Internal - Componente(s): AssistantSettingsForm.tsx
Como funciona
- Abre
Toolsy seleccionaInternal. - Activa
Enable Allo habilita únicamente las herramientas necesarias por grupo. - Pulsa
Update Assistantpara persistir la selección.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Internal tools |
interruptores | No | El estado principal habilita el uso del catálogo. |
| herramientas | interruptores por grupo | No | Se guardan individualmente por asistente. |
Reglas y validaciones
- El catálogo expone herramientas de Contactos (crear, buscar, leer, actualizar), Deals (crear, buscar, leer, actualizar, añadir productos), Tickets (crear, consultar, buscar y buscar conocimiento), Empresas (crear, buscar, leer, actualizar) y Mensajería (buscar conversaciones, leer conversación o mensajes, buscar mensajes, iniciar WhatsApp, buscar/enviar templates y enviar mensajes).
- También incluye Pipelines y configuración (pipelines, monedas, custom fields), Productos (buscar y leer), Actividades/Notas (crear, actualizar o eliminar), Billing (PDF de estimates e invoices), voz (voces guardadas y síntesis), Smart Links, Email Broadcast, Automatizaciones y Reservas.
- Activar una herramienta no concede permisos adicionales al asistente; limita qué acciones puede solicitar al backend.
Backend
- Servicios:
ai-assistant-internal-tools-catalog(find),ai-assistants(patch),ai-assistant-response-v2(create).
Relaciones
- Requiere: asistente seleccionado.
- Dispara / afecta: las llamadas disponibles durante la generación de respuestas.
Notas
Por confirmar: el orden y rótulos exactos de grupos en la galería, que no están en el catálogo backend.
id: mcp-assistant-configuration modulo: asistentes-ia app: crm nombre: Configuración externa por MCP tipo: integracion
Configuración externa por MCP
Permite a clientes MCP autorizados consultar y modificar asistentes de conversación y tickets.
Que se logra
- Resultado: un cliente MCP autorizado puede administrar asistentes de conversación y tickets desde su propio entorno sin repetir la configuración manualmente en la interfaz.
- Caso de uso: una empresa con un agente interno sincroniza las instrucciones y herramientas aprobadas de su asistente de soporte mediante MCP.
- Se combina con: Servidores MCP, Skills del asistente, Herramientas API e Historial y restauración.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): mcp-internal-tools (backend)
Como funciona
- Conecta un cliente MCP autorizado a las herramientas internas de AchieveApex.
- Consulta asistentes y sus capacidades; recupera configuración, skills, herramientas API e historial.
- Crea asistentes o modifica instrucciones, ajustes, handoff, follow-up, herramientas internas/API y servidores MCP mediante las herramientas expuestas.
Reglas y validaciones
- La superficie no tiene pantalla propia: las operaciones están expuestas por
mcp-internal-tools. - Las herramientas conservan el alcance de la organización autenticada y los validadores de
ai-assistants.
Backend
- Servicios:
mcp-internal-tools(create),ai-assistants,ai-assistant-skills,api-toolsyai-assistants-change-history.
Relaciones
- Requiere: cliente MCP autenticado y autorizado.
- Dispara / afecta: la misma configuración disponible en
AI Assistant.
Notas
Por confirmar: política de autorización por herramienta MCP.
id: mcp-servers modulo: asistentes-ia app: crm nombre: Servidores MCP tipo: integracion
Servidores MCP
Conecta servidores MCP y habilita herramientas remotas por asistente.
Que se logra
- Resultado: cada asistente puede usar un conjunto seleccionado de herramientas de un servidor MCP externo con las credenciales configuradas por la organización.
- Caso de uso: una empresa de logística conecta su servidor MCP para que el asistente consulte el estado de un envío durante la atención.
- Se combina con: Herramientas API, Herramientas internas y Configuración externa por MCP.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): MCPServerConnectionDialog.tsx, MCPServerCard.tsx
Como funciona
- En
Tools > MCP, pulsa conectar servidor y completaURL,LabelyDescription. - Elige
OAuth 2.1,Bearer Token / API Key,Custom HeadersoNo Authentication. - Para headers, añade cada par
Header/Value; para API key escribe el token. - Con OAuth,
Connectdescubre el servidor de autorización, registra el cliente, abre una ventana y canjea el código con PKCE. - Tras conectar, selecciona las herramientas remotas y guarda con
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
URL, Label |
texto | Si | Requeridos para conectar. |
Authentication |
lista | Si | OAuth, API key, headers o sin autenticación. |
| token o headers | secreto / lista | Condicional | Obligatorios según autenticación. |
Reglas y validaciones
No Authenticationmuestra advertencia; OAuth requiere que el servidor admita registro dinámico de cliente.- Si expira OAuth, la configuración puede indicar que necesita reautorización.
Backend
- Servicios:
mcp-tool-connection-proxy(create),ai-assistants(patch) yai-assistant-response-v2(ejecución).
Relaciones
- Requiere: servidor MCP confiable y, para OAuth, autorización del proveedor.
- Dispara / afecta: herramientas disponibles durante la respuesta del asistente.
Notas
Por confirmar: la validación backend de URL y el tiempo de espera de la conexión.
id: message-time-configuration modulo: asistentes-ia app: crm nombre: Configuración al enviar mensajes tipo: vista
Configuración al enviar mensajes
Consulta la configuración histórica asociada a un mensaje de IA.
Que se logra
- Resultado: el equipo puede explicar una respuesta concreta con la versión de instrucciones, modelo, herramientas y reglas que estaban vigentes al enviarse.
- Caso de uso: un responsable de soporte revisa por qué un asistente escaló un ticket y comprueba la configuración histórica, sin depender de la versión actual.
- Se combina con: Historial y restauración, Instrucciones y modos y Herramientas internas.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): AssistantConfigurationAtTimeDialog.tsx
Como funciona
- Abre la configuración histórica desde el mensaje de IA que la expone.
- El diálogo busca la versión de historial vigente en ese momento y carga el modelo asociado.
- Revisa instrucciones, conexión, modelo, opciones avanzadas, permisos, handoffs, automatizaciones, herramientas y agenda como una instantánea de solo lectura.
Reglas y validaciones
- No edita ni restaura; sirve para explicar con qué configuración se emitió una respuesta.
Backend
- Servicios:
ai-assistants-change-history(find) yai-models(get).
Relaciones
- Requiere: un mensaje asociado a una versión de configuración.
- Dispara / afecta: no modifica el asistente ni el mensaje.
Notas
Por confirmar: el punto exacto de UI que abre este diálogo para cada canal.
id: playground modulo: asistentes-ia app: crm nombre: Playground de texto tipo: vista
Playground de texto
Prueba asistentes de conversación y Nova con contactos y conversaciones de Playground.
Que se logra
- Resultado: el equipo puede verificar respuestas, asignaciones y acciones del asistente en una conversación aislada antes de usarlo con clientes.
- Caso de uso: un ecommerce prueba una instrucción de devolución con un contacto de ejemplo y confirma si el asistente transfiere el caso como se espera.
- Se combina con: Instrucciones y modos, Herramientas internas y Gestión de asistentes.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): AIAssistantPlayground.tsx
Como funciona
- Selecciona un asistente y abre
Playground; enGuided Modeprimero cambia el panel derecho aPlayground. - Selecciona o crea el contacto y la conversación de prueba.
- Envía mensajes y revisa en tiempo real los cambios de conversación, asistente asignado y usuario asignado.
- Usa
System Promptsolo si eres superadmin para inspeccionar el prompt compuesto.
Reglas y validaciones
- Las conversaciones creadas por Playground son registros de conversación; no se asignan a canales externos por esta pantalla.
- El panel escucha eventos
created,patchedyremovedde conversaciones.
Backend
- Servicios:
contacts,conversations,ai-assistants,usersy respuesta del asistente.
Relaciones
- Requiere: asistente de conversación o Nova seleccionado.
- Dispara / afecta: contactos y conversaciones de prueba.
Notas
Por confirmar: mecanismo exacto que distingue una conversación de Playground de una conversación productiva.
id: voice-configuration modulo: asistentes-ia app: crm nombre: Configuración de voz tipo: configuracion
Configuración de voz
Configura runtime, voz, transcripción, saludo, variables y sincronización de un asistente de voz.
Que se logra
- Resultado: la organización despliega un agente telefónico configurado para escuchar, hablar, usar herramientas y responder bajo una identidad de voz definida.
- Caso de uso: una clínica crea un agente que saluda, transcribe solicitudes de cita y consulta herramientas de reserva antes de confirmar el siguiente paso.
- Se combina con: Herramientas internas, Transferencia de voz, Widget web de voz y Calling & SMS.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): VoiceSection.tsx
Como funciona
- Crea o selecciona un asistente de tipo Voice y abre
Voice. - Elige runtime, proveedor, modelo y voz; configura saludo, idioma y modelo de transcripción, interrupciones y tiempos de espera.
- Ajusta herramientas, variables dinámicas, audio de fondo, retención de datos y webhooks cuando el runtime los muestre.
- Pulsa
Update Assistant; el servicio sincroniza la configuración con Telnyx y expone estado pending, synced o error.
Reglas y validaciones
- Los runtimes admitidos son
telnyx_builtin,custom_llmyopenai_realtime_sip. - El backend valida la automatización indicada para variables dinámicas y resuelve la clave de voz antes de sincronizar.
Backend
- Servicios:
ai-assistants(get/patch),telnyx-ai-assistants,telnyx-ai-models,telnyx-ai-voices,telnyx-ai-transcription-languagesyvoice-assistant-playground.
Relaciones
- Requiere: modelo disponible para voz y configuración de Telnyx.
- Dispara / afecta: llamadas, widget de voz y handoffs de voz.
Notas
Por confirmar: campos visibles por cada runtime, ya que VoiceSection.tsx supera el límite de lectura disponible en esta revisión.
id: voice-handoff modulo: asistentes-ia app: crm nombre: Transferencia de voz tipo: configuracion
Transferencia de voz
Transfiere llamadas a agentes de voz, otros asistentes o destinos externos.
Que se logra
- Resultado: una llamada que requiere otra atención se redirige al número, SIP o destino configurado con una regla que el agente de voz puede reconocer.
- Caso de uso: una firma legal transfiere llamadas sobre casos urgentes a la línea de guardia y las consultas administrativas al conmutador.
- Se combina con: Configuración de voz, Calling & SMS y Transferencia a personas.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): ExternalHandoffTargetsSection.tsx
Como funciona
- En el asistente de voz abre
Handoff > External Handoff Targets. - Elige
Original Caller NumberoCompany Number; para empresa seleccionaFrom NumberoAutomatic. - Añade
External Target, identifica suInternal Name,Caller LabelyWhen To Use. - Selecciona
External Numbercon país y número E.164, oSIP URI; estableceTimeout (seconds), mensaje opcional yEnabled. - Guarda con
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Destination Type |
lista | Si | External Number o SIP URI. |
| número / SIP URI | texto | Si | Según el destino. |
Timeout |
número | No | Entre 5 y 120 segundos; inicia en 30. |
Enabled |
interruptor | No | Desactiva una regla sin eliminarla. |
Reglas y validaciones
- Solo asistentes de voz pueden guardar destinos externos.
- IDs, etiquetas y destinos no pueden repetirse. El número debe ser E.164 válido, coincidir con el país indicado y estar permitido por el canal de voz activo; la URI debe ser SIP/SIPS válida.
Backend
- Servicios:
ai-assistants(patch),voice-channels(find) y flujos de voz.
Relaciones
- Requiere: canal de voz activo para aplicar países permitidos.
- Dispara / afecta: transferencias de llamadas del asistente de voz.
Notas
Por confirmar: el comportamiento del timeout al no contestar el destino.
id: voice-web-widget modulo: asistentes-ia app: crm nombre: Widget web de voz tipo: integracion
Widget web de voz
Personaliza y copia el embed del agente de voz para un sitio web.
Que se logra
- Resultado: un sitio externo ofrece una entrada de voz identificada con la marca de la organización y conectada al asistente sincronizado.
- Caso de uso: una escuela de idiomas inserta el widget en su página de cursos para que visitantes hablen con el agente y soliciten información.
- Se combina con: Configuración de voz, Sitios y S3 para el logo cargado.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant - Componente(s): WebWidgetEmbedSection.tsx
Como funciona
- En un asistente de voz abre
Voice > Embed on your website. - Cuando exista el ID tras la sincronización, pulsa
Copy embed code. - En
Widget appearanceajusta tema, posición, estado inicial y textos del widget. - Sube un logo de imagen de hasta 5 MB o pega una URL pública; usa
Clear appearance fieldspara limpiar los campos administrados. - Persiste el aspecto con
Update Assistant.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Theme |
lista | No | Default, light o dark. |
Position |
lista | No | Default, fixed o static. |
| logo y textos | URL / texto | No | Incluye inicio, espera e interrupción. |
Reglas y validaciones
- Sin ID del recurso de voz, no se genera embed y la UI pide guardar y esperar sincronización.
- Solo se aceptan archivos de imagen de 5 MB o menos.
Backend
- Servicios:
ai-assistants(patch),s3-url-signing(create) y sincronización Telnyx. - Efectos: el logo se sube al almacenamiento de archivos de la organización.
Relaciones
- Requiere: asistente de voz sincronizado.
- Dispara / afecta: el widget Telnyx insertado en un sitio externo.
Notas
Por confirmar: las opciones adicionales aceptadas por el widget de Telnyx.
id: automatizaciones app: crm nombre: Automatizaciones estado: shipped permiso: can_access_automations
Automatizaciones
Constructor visual de flujos que responde a triggers, ejecuta acciones de CRM y conserva el detalle de cada ejecución.
Para que sirve
- Una clínica: cuando se crea una reserva, envía un WhatsApp de confirmación, crea una actividad de recordatorio y notifica al doctor.
- Una inmobiliaria: cuando entra un formulario de un inmueble, busca o crea el contacto, lo distribuye entre asesores y abre un deal.
- Un e-commerce: cuando un cliente comenta una palabra clave en un Reel, inicia una conversación, identifica su interés y continúa el seguimiento comercial.
- Un equipo SaaS de soporte: cuando un ticket incumple su SLA, lo reasigna, deja una nota interna y alerta al responsable.
- Una agencia B2B: cuando un deal pasa a propuesta, busca los productos solicitados, crea un estimate y agenda el seguimiento.
- Un centro de reservas: antes de una cita, envía un recordatorio; si la llamada llega al buzón de voz, envía un SMS y crea una tarea de reintento.
- Un organizador de eventos: cuando un asistente hace check-in, crea una oportunidad para ventas y envía un mensaje posterior.
- Una tienda conectada: cuando confirma un pago en su plataforma externa, llama un webhook de Apex para actualizar el contacto y disparar la comunicación correspondiente.
Que lo hace diferente
- Los triggers nacen de módulos propios: CRM, conversaciones, reservas, eventos, Helpdesk, formularios, llamadas de voz y cambios de miembros del equipo; no requieren replicar esos datos en una herramienta externa.
- Las acciones operan entidades y canales nativos: contactos, deals, estimates, reservas, tickets, actividades, WhatsApp, SMS, Gmail y Google Calendar.
- Puede controlar el comportamiento del asistente IA dentro de una conversación, incluyendo cortar su contexto o reanudarlo con una instrucción del flujo.
- Incluye acciones para obtener y establecer atribución de contactos y enviar conversiones a Meta CAPI desde hitos comerciales que ocurren en Apex.
- El nodo
Chat With AIpermite clasificar, resumir o redactar una salida que pasa directamente a las siguientes ramas y acciones. - El editor permite probar, publicar y activar el flujo, y cada ejecución puede revisarse visualmente nodo por nodo con sus entradas y salidas.
- También admite un trigger webhook con URL propia, para conectar eventos externos al mismo proceso que usa los datos del CRM.
- El código revisado no establece una tarifa universal por tarea de automatización:
Chat With AIcobra Wallet según modelo y tokens, y la búsqueda semántica de productos cobra por su consulta de embeddings.
Acceso
- Ruta principal:
/[orgId]/automations - Como se llega:
Sidebar > Tools > Automations - Permiso requerido:
can_access_automations
Alcance tecnico
- Frontend:
automations/page.tsx,automations/[automationId]/page.tsx,automations-executionsy componentes desrc/components/automations. - Backend:
automations,automations-categories,automations-webhooks,automations-executions,automation-run,process-automation-triggery serviciosautomation-node-*. - Superficies publicas: URLs de webhook de automatizaciones.
- Integraciones externas: Meta, WhatsApp, Telnyx, Gmail, Google Calendar, S3 y AWS SES según nodo.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Trigger: contacto creado | trigger-contact-created.md | Inicia al crear un contacto y permite filtros de creador, propietario, empresa, tipo y etiquetas. |
| Trigger: contacto actualizado | trigger-contact-updated.md | Inicia cuando cambia un contacto y permite filtros del contacto afectado. |
| Trigger: deal creado | trigger-deal-created.md | Inicia al crear un deal y permite filtros de pipeline y etapa. |
| Trigger: deal actualizado | trigger-deal-updated.md | Inicia al actualizar un deal, normalmente para cambios de pipeline o etapa. |
| Trigger: actividad creada | trigger-activity-created.md | Inicia al crear una actividad con filtros por creador, asignado, tipo y estado. |
| Trigger: actividad actualizada | trigger-activity-updated.md | Inicia por cambios de actividad y permite seleccionar cambios de campos. |
| Trigger: fecha de actividad | trigger-activity-date-based.md | Inicia cuando llega una fecha de actividad o un tiempo antes o después. |
| Trigger: miembro agregado | trigger-team-member-added.md | Inicia cuando un usuario se agrega a la organización. |
| Trigger: miembro actualizado | trigger-team-member-updated.md | Inicia por cambios de membresía o perfil de un miembro. |
| Trigger: miembro eliminado | trigger-team-member-removed.md | Inicia cuando se retira un miembro de la organización. |
| Trigger: conversación iniciada | trigger-conversation-created.md | Inicia al crear una conversación con filtros de canal, pipeline y asignación. |
| Trigger: conversación actualizada | trigger-conversation-updated.md | Inicia por cambios de conversación y permite filtros de canal, pipeline y asignación. |
| Trigger: reserva creada | trigger-reservation-created.md | Inicia al crear una reserva y filtra por servicio y estado. |
| Trigger: reserva actualizada | trigger-reservation-updated.md | Inicia al cambiar una reserva y filtra por servicio y estado. |
| Trigger: fecha de reserva | trigger-reservation-date-based.md | Inicia cuando llega una fecha de reserva o un tiempo antes o después. |
| Trigger: nuevo pedido | trigger-order-created.md | Inicia al colocar un pedido y filtra por fuente, catálogo y propietario. |
| Trigger: pedido pagado | trigger-order-paid.md | Inicia una vez cuando el pedido queda totalmente pagado. |
| Trigger: entrega del pedido actualizada | trigger-order-fulfillment-updated.md | Inicia cuando cambia el estado de entrega, con filtro por nuevo estado. |
| Trigger: pedido cancelado | trigger-order-cancelled.md | Inicia cuando se cancela un pedido. |
| Trigger: checkout abandonado | trigger-checkout-abandoned.md | Inicia un tiempo después de la última actividad de un checkout de catálogo sin completar. |
| Trigger: registro de evento creado | trigger-event-registration-created.md | Inicia cuando un invitado se registra en un evento. |
| Trigger: registro de evento actualizado | trigger-event-registration-updated.md | Inicia al actualizar un registro de invitado, por ejemplo estado o pago. |
| Trigger: invitado registrado | trigger-event-guest-checked-in.md | Inicia cuando se hace check-in de un invitado. |
| Trigger: formulario enviado | trigger-form-submitted.md | Inicia cuando se envía un formulario publicado. |
| Trigger: ticket de Helpdesk creado | trigger-helpdesk-ticket-created.md | Se ejecuta al crear un ticket de Helpdesk que cumpla los filtros configurados. |
| Trigger: ticket de Helpdesk actualizado | trigger-helpdesk-ticket-updated.md | Se ejecuta cuando un ticket cambia y satisface las transiciones y filtros configurados. |
| Trigger: SLA de Helpdesk incumplido | trigger-helpdesk-ticket-sla-breached.md | Se ejecuta cuando el programador de SLA detecta que un ticket incumplió un objetivo de primera respuesta, siguiente respuesta o resolución. |
| Trigger: comentario en publicación de Facebook | trigger-facebook-post-comment.md | Se ejecuta para comentarios de una Page de Facebook que coinciden con una publicación y reglas de palabras. |
| Trigger: comentario en publicación o Reel de Instagram | trigger-instagram-post-reel-comment.md | Se ejecuta para comentarios entrantes de Instagram que coinciden con una publicación/Reel y reglas de palabras. |
| Trigger: respuesta a historia de Instagram | trigger-instagram-story-reply.md | Se ejecuta cuando alguien responde una historia de Instagram y la respuesta satisface los filtros. |
| Trigger: llamada de voz iniciada | trigger-voice-call-created.md | Se ejecuta al crear una llamada de voz no interna que cumple los filtros. |
| Trigger: llamada de voz actualizada | trigger-voice-call-updated.md | Se ejecuta cuando una llamada elegible cambia en alguno de los campos configurados. |
| Trigger: llamada de voz finalizada | trigger-voice-call-ended.md | Se ejecuta cuando finaliza una llamada elegible que cumple los filtros. |
| Trigger: filtrado de llamada detectado | trigger-voice-call-screening-detected.md | Se ejecuta al detectar buzón de voz o preclasificación en una llamada saliente elegible. |
| Trigger: webhook | trigger-webhook.md | Genera una URL HTTPS única para que sistemas externos inicien el flujo. |
| Control de flujo | flow-control.md | Condiciones, variables, tablas de consulta, transformación JavaScript, HTTP y finalización de ramas. |
| Mensajería de conversaciones | conversation-messages.md | Obtiene, busca, inicia conversaciones y envía mensajes, plantillas o actualizaciones. |
| Control de IA en conversación | conversation-ai-control.md | Corta contexto o reasigna una conversación a IA con instrucción de reanudación. |
| Chat con IA | chat-with-ai.md | Ejecuta una interacción de IA dentro de un flujo para generar una salida utilizable. |
| Acciones de voz | voice-actions.md | Programa llamadas IA salientes y establece variables dinámicas de voz. |
| Acciones de contactos | contact-actions.md | Crea, actualiza, busca y obtiene contactos; incluye distribución ponderada de miembros. |
| Acciones de deals | deal-actions.md | Crea, actualiza, consulta deals, productos y watchers, o agrega watchers. |
| Creación de estimates | estimate-actions.md | Crea estimates con líneas, moneda, plantilla y datos relacionados. |
| Acciones de empresas | company-actions.md | Crea y consulta empresas del CRM. |
| Acciones de actividades | activity-actions.md | Crea, consulta, actualiza o elimina actividades e integra Google Calendar y correo. |
| Acciones de reservas | reservation-actions.md | Consulta disponibilidad, crea, actualiza y obtiene reservas. |
| Acciones de tickets | ticket-actions.md | Actualiza tickets y realiza acciones de Helpdesk como asignar, responder, anotar o vigilar. |
| Notas internas | notes-actions.md | Crea notas internas asociadas a contactos o deals. |
| Búsqueda de productos | product-search.md | Busca el catálogo por texto, semántica IA o combinación de ambos. |
| Conversiones de Meta | meta-conversions.md | Obtiene o establece atribución de contacto y envía conversiones a Meta CAPI. |
| Acciones de Series | series-actions.md | Suscribe o desuscribe contactos de Series. |
| Monitoreo de ejecuciones | execution-monitoring.md | Lista, filtra, consulta, reproduce y crea ejecuciones manuales. |
| Visor de ejecución | execution-viewer.md | Representa visualmente una ejecución y permite inspeccionar entradas, configuración y salidas. |
| Editor visual | automation-editor.md | Edita el lienzo, triggers, nodos, anotaciones, publicación, prueba, copia y descarga. |
| Organización en carpetas | automation-folders.md | Crea carpetas y organiza automatizaciones desde la lista lateral. |
| Trigger legado: mensaje de WhatsApp | trigger-legacy-whatsapp-message.md | Monitorea mensajes entrantes de WhatsApp en automatizaciones existentes. | | Trigger legado: URL de WhatsApp | trigger-legacy-whatsapp-url.md | Inicia una automatización existente al coincidir una URL de WhatsApp. | | Trigger legado: mensaje de Messenger | trigger-legacy-messenger-message.md | Monitorea mensajes de Messenger en automatizaciones existentes. | | Trigger legado: comentario de Facebook | trigger-legacy-facebook-comment.md | Inicia con comentarios en publicaciones de Facebook configuradas. | | Trigger legado: clic en anuncio de Facebook | trigger-legacy-facebook-ad-click.md | Inicia al detectar clics en el anuncio configurado. | | Trigger legado: URL ref de Messenger | trigger-legacy-messenger-ref-url.md | Responde a una URL de referencia de Messenger existente. | | Trigger legado: código QR | trigger-legacy-qr-code.md | Inicia al detectar la interacción configurada de código QR. | | Trigger legado: mensaje de Instagram | trigger-legacy-instagram-message.md | Monitorea mensajes directos de Instagram en automatizaciones existentes. | | Trigger legado: comentario en vivo de Instagram | trigger-legacy-instagram-live-comment.md | Inicia con comentarios de un Instagram Live configurado. | | Trigger legado: URL ref de Instagram | trigger-legacy-instagram-ref-url.md | Responde a una URL de referencia de Instagram existente. | | Trigger legado: suscripción a secuencia | trigger-legacy-sequence-subscription.md | Inicia al suscribir un contacto a una secuencia existente. | | Trigger legado: baja de secuencia | trigger-legacy-sequence-unsubscription.md | Inicia al retirar un contacto de una secuencia existente. | | Trigger legado: fecha y hora | trigger-legacy-date-time.md | Programa un trigger único o recurrente para automatizaciones existentes. | | Trigger legado: mensaje de Facebook Shop | trigger-legacy-facebook-shop-message.md | Monitorea mensajes de tienda con filtros de tipo, palabra y tiempo. | | Trigger legado: widget web | trigger-legacy-website-widget.md | Inicia por vista, interacción, envío o cierre de un widget web configurado. | | Trigger legado: modal de Messenger | trigger-legacy-messenger-modal.md | Inicia por eventos de un modal de Messenger en un sitio web. | | Trigger legado: landing page | trigger-legacy-landing-page.md | Inicia al visitar la URL de landing page configurada. |
Relaciones
- Depende de: CRM, Conversaciones, Tickets, Reservations, Events, Series y Calling & SMS.
- Usado por: Asistentes IA, canales y operaciones automatizadas.
Limitaciones y notas
Los cambios del lienzo requieren Publish; el interruptor Active controla si el flujo publicado responde a triggers. El nodo Delay está marcado como Coming Soon.
Inventario de archivos
| Archivo | Contenido |
|---|---|
README.md |
Índice del módulo |
activity-actions.md |
Acciones de actividades y correo |
automation-editor.md |
Lienzo y publicación |
automation-folders.md |
Carpetas de automatizaciones |
chat-with-ai.md |
Nodo de IA |
company-actions.md |
Acciones de empresas |
contact-actions.md |
Acciones de contactos |
conversation-ai-control.md |
Control de IA de conversación |
conversation-messages.md |
Acciones de conversaciones |
deal-actions.md |
Acciones de deals |
estimate-actions.md |
Creación de estimates |
execution-monitoring.md |
Historial de ejecuciones |
execution-viewer.md |
Detalle de ejecución |
flow-control.md |
Nodos de control |
meta-conversions.md |
Atribución y conversiones Meta |
notes-actions.md |
Notas internas |
product-search.md |
Búsqueda de productos |
reservation-actions.md |
Acciones de reservas |
series-actions.md |
Suscripciones de Series |
ticket-actions.md |
Acciones de tickets |
trigger-activity-created.md |
Trigger de actividad creada |
trigger-activity-date-based.md |
Trigger de fecha de actividad |
trigger-activity-updated.md |
Trigger de actividad actualizada |
trigger-contact-created.md |
Trigger de contacto creado |
trigger-contact-updated.md |
Trigger de contacto actualizado |
trigger-conversation-created.md |
Trigger de conversación creada |
trigger-conversation-updated.md |
Trigger de conversación actualizada |
trigger-deal-created.md |
Trigger de deal creado |
trigger-deal-updated.md |
Trigger de deal actualizado |
trigger-event-guest-checked-in.md |
Trigger de check-in |
trigger-event-registration-created.md |
Trigger de registro de evento |
trigger-event-registration-updated.md |
Trigger de actualización de registro |
trigger-form-submitted.md |
Trigger de formulario |
trigger-legacy-date-time.md |
Trigger legado de fecha |
trigger-legacy-facebook-ad-click.md |
Trigger legado de anuncio |
trigger-legacy-facebook-comment.md |
Trigger legado de comentario |
trigger-legacy-facebook-shop-message.md |
Trigger legado de tienda |
trigger-legacy-instagram-live-comment.md |
Trigger legado de Live |
trigger-legacy-instagram-message.md |
Trigger legado de mensaje |
trigger-legacy-instagram-ref-url.md |
Trigger legado de URL |
trigger-legacy-landing-page.md |
Trigger legado de landing |
trigger-legacy-messenger-message.md |
Trigger legado de Messenger |
trigger-legacy-messenger-modal.md |
Trigger legado de modal |
trigger-legacy-messenger-ref-url.md |
Trigger legado de URL |
trigger-legacy-qr-code.md |
Trigger legado de QR |
trigger-legacy-sequence-subscription.md |
Trigger legado de suscripción |
trigger-legacy-sequence-unsubscription.md |
Trigger legado de baja |
trigger-legacy-website-widget.md |
Trigger legado de widget |
trigger-legacy-whatsapp-message.md |
Trigger legado de mensaje |
trigger-legacy-whatsapp-url.md |
Trigger legado de URL |
trigger-reservation-created.md |
Trigger de reserva creada |
trigger-reservation-date-based.md |
Trigger de fecha de reserva |
trigger-reservation-updated.md |
Trigger de reserva actualizada |
trigger-order-created.md |
Trigger de nuevo pedido |
trigger-order-paid.md |
Trigger de pedido pagado |
trigger-order-fulfillment-updated.md |
Trigger de entrega del pedido |
trigger-order-cancelled.md |
Trigger de pedido cancelado |
trigger-checkout-abandoned.md |
Trigger de checkout abandonado |
trigger-team-member-added.md |
Trigger de miembro agregado |
trigger-team-member-removed.md |
Trigger de miembro eliminado |
trigger-team-member-updated.md |
Trigger de miembro actualizado |
trigger-webhook.md |
Trigger por webhook |
trigger-helpdesk-ticket-created.md |
Trigger: ticket de Helpdesk creado |
trigger-helpdesk-ticket-updated.md |
Trigger: ticket de Helpdesk actualizado |
trigger-helpdesk-ticket-sla-breached.md |
Trigger: SLA de Helpdesk incumplido |
trigger-facebook-post-comment.md |
Trigger: comentario en publicación de Facebook |
trigger-instagram-post-reel-comment.md |
Trigger: comentario en publicación o Reel de Instagram |
trigger-instagram-story-reply.md |
Trigger: respuesta a historia de Instagram |
trigger-voice-call-created.md |
Trigger: llamada de voz iniciada |
trigger-voice-call-updated.md |
Trigger: llamada de voz actualizada |
trigger-voice-call-ended.md |
Trigger: llamada de voz finalizada |
trigger-voice-call-screening-detected.md |
Trigger: filtrado de llamada detectado |
voice-actions.md |
Acciones de voz |
id: activity-actions modulo: automatizaciones app: crm nombre: Acciones de actividades tipo: accion
Acciones de actividades
Agrupa acciones para actividades, Google Calendar y envíos de correo.
Que se logra
- Resultado: Crea y mantiene tareas, eventos de calendario y comunicaciones de seguimiento para que el equipo actúe en el momento adecuado.
- Caso de uso: Una correduría: cuando un deal pasa a propuesta, crea una tarea para el asesor, un evento de Google Calendar y un email de seguimiento.
- Se combina con:
Trigger: deal actualizado,Deal actionsy Google Calendar/Gmail.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): CreateActivityNode.tsx, CreateGoogleCalendarEventNode.tsx, SendGmailEmailNode.tsx
Como funciona
- Elegir en
Add Node > Activitiesuna acción:Create Activity,Get Activities,Get Activity,Update Activity,Delete Activity,Get Google Calendar Events,Create Google Calendar Event,Send Gmail Email,Send Email (Broadcast)oUnsubscribe from email broadcast. - Completar los IDs, fechas, destinatarios o contenido solicitados por el nodo.
- Conectar la salida con los pasos que consumen la actividad, evento o resultado de envío.
Reglas y validaciones
- Google Calendar y Gmail solo muestran integraciones marcadas como disponibles para automatizaciones.
Get Google Calendar Eventsusa calendario, fechas y máximo de resultados;Create Google Calendar Eventadmite asistentes y Google Meet.- El correo broadcast utiliza un remitente SES verificado y HTML propio o plantilla.
Backend
- Servicios:
automation-node-system-create-activity,automation-node-system-get-activities,automation-node-system-get-activity,automation-node-system-update-activity,automation-node-system-delete-activity,automation-node-system-get-google-calendar-events,automation-node-system-create-google-calendar-event,automation-node-system-send-gmail-email,automation-node-system-send-email-broadcast,automation-node-system-unsubscribe-from-email-broadcast - Efectos: crea, actualiza o elimina actividades; crea o consulta eventos; envía correo o registra una baja.
Relaciones
- Requiere: integraciones activas cuando el nodo las usa.
- Dispara / afecta: Actividades, Google Calendar, Gmail y correo broadcast.
Notas
El campo de contenido de Send Gmail Email admite versión HTML y texto plano, además de CC y BCC.
id: automation-editor modulo: automatizaciones app: crm nombre: Editor visual tipo: vista
Editor visual
Construye el flujo publicado de una automatización mediante nodos y conexiones, y permite probarlo antes de depender de un trigger.
Que se logra
- Resultado: Permite diseñar, probar, publicar y activar un proceso conectado con los datos y acciones nativas de Apex.
- Caso de uso: Una clínica configura: cuando se crea una reserva, envía WhatsApp de confirmación, crea una actividad de recordatorio y notifica al profesional.
- Se combina con: Triggers, familias de nodos,
Monitoreo de ejecucionesyVisor de ejecución.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automations > seleccionar una automatización - Componente(s): AutomationsView.tsx
Como funciona
- Crear o abrir una automatización desde
Automations. - Pulsar el nodo
Startpara añadir uno o más triggers; usar el+de una conexión o arrastrar desde un handle vacío para abrirAdd Node. - Elegir un nodo del catálogo, conectarlo con la rama anterior y pulsarlo para completar su diálogo o panel lateral.
- Seleccionar nodos para copiarlos, pegarlos o eliminarlos; el editor impide formar ciclos.
- Añadir notas adhesivas o anotaciones de dibujo desde las herramientas del lienzo.
- Pulsar
Publishpara guardar nodos y conexiones. UsarRun Executioncon un payload guardado o JSON para probar y abrir el visor. - Activar
Activepara que el flujo publicado responda a triggers;Duplicatecrea una copia yDownloaddescarga el flujo.
Reglas y validaciones
Publishguarda el lienzo actual; el interruptorActivehabilita o deshabilita respuestas a triggers.- El editor bloquea conexiones circulares.
Delayaparece comoComing Soony no se puede añadir. - Las variables se basan en la última ejecución: primero entrada del nodo, luego el ancestro completado más próximo y, como último origen, payload inicial.
Backend
- Servicios:
automations(get/patch),automation-run(create),automations-executions(create/find),automation-node-executions(find) yautomation-node-*(create) - Efectos: publicar cambia el flujo que utilizan las ejecuciones; la prueba crea una ejecución y redirige a su visor.
Relaciones
- Requiere: permiso
can_access_automations. - Dispara / afecta: triggers, ejecuciones y las acciones configuradas en cada nodo.
Notas
Una automatización bloqueada por detección de bucle se puede reactivar desde la barra solo por administradores o propietarios.
id: automation-folders modulo: automatizaciones app: crm nombre: Organización en carpetas tipo: vista
Organización en carpetas
Crea carpetas para agrupar automatizaciones y filtra la lista mediante la carpeta elegida.
Que se logra
- Resultado: Ordena flujos por equipo, proceso o área para que una organización grande pueda mantener el inventario operativo.
- Caso de uso: Una franquicia: agrupa automatizaciones de ventas, reservas y soporte para que cada responsable encuentre y mantenga su conjunto de flujos.
- Se combina con:
Editor visualy el listado deAutomations.
Donde esta
- Ruta:
/[orgId]/automations - Acceso en UI:
Automations > barra lateral de carpetas - Componente(s):
AutomationSidebar.tsx
Como funciona
- Entrar a
Automationsy abrir la barra lateral. - Crear una carpeta desde su control de alta e indicar el nombre.
- Asignar una carpeta al crear o editar una automatización.
- Elegir una carpeta para mostrar solamente los flujos de ese grupo.
Reglas y validaciones
- Una carpeta no modifica la publicación, el interruptor
Activeni el flujo de sus automatizaciones.
Backend
- Servicios:
automations-categories(find/create/patch/remove),automations(find/create/patch) - Efectos: la categoría asignada determina la agrupación mostrada en la lista.
Relaciones
- Requiere: permiso
can_access_automations. - Dispara / afecta: organización visual de la lista.
Notas
Por confirmar: si eliminar una carpeta reasigna automáticamente las automatizaciones contenidas.
id: chat-with-ai modulo: automatizaciones app: crm nombre: Chat con IA tipo: accion
Chat con IA
Envía instrucciones y datos del flujo a un modelo de IA y devuelve su respuesta para los pasos siguientes.
Que se logra
- Resultado: Obtiene una salida de IA dentro del flujo para clasificar, resumir o redactar contenido que los nodos posteriores pueden usar.
- Caso de uso: Un e-commerce: cuando llega una consulta libre, la IA identifica intención y redacta una respuesta; luego el flujo envía el mensaje y crea un deal si hay interés.
- Se combina con:
Mensajería de conversaciones,Flow ControlyContact actions.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): nodes/ChatWithAiNode/*
Como funciona
- Elegir
Chat With AIenAdd Node > AI. - Escribir las instrucciones y el mensaje, e insertar variables del trigger o nodos anteriores.
- Elegir el modelo disponible y guardar el nodo.
Reglas y validaciones
- La salida del modelo queda disponible para nodos posteriores.
Backend
- Servicios:
automation-node-system-chat-with-ai(create),automation-node-executions(create) - Efectos: realiza una solicitud de IA y adjunta la respuesta al payload de ejecución.
Relaciones
- Requiere: configuración de IA disponible para la organización.
- Dispara / afecta: datos de la ejecución y saldo de Wallet si el proveedor factura uso.
Notas
Cada ejecución registra en Wallet el consumo de entrada y salida de IA según los precios configurados para el modelo seleccionado; por eso el costo cambia con el modelo y los tokens utilizados.
id: company-actions modulo: automatizaciones app: crm nombre: Acciones de empresas tipo: accion
Acciones de empresas
Crea empresas o recupera una empresa concreta para usar sus datos en el flujo.
Que se logra
- Resultado: Crea o consulta empresas para que los nuevos leads y operaciones queden asociados a su cuenta comercial.
- Caso de uso: Una agencia B2B: cuando llega un formulario corporativo, crea la empresa si no existe y vincula el contacto antes de abrir una oportunidad.
- Se combina con:
Trigger: formulario enviado,Contact actionsyDeal actions.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): CreateCompanyNode.tsx, GetCompanyDialog.tsx
Como funciona
- Elegir
Create CompanyoGet CompanyenAdd Node > Companies. - Para crear, indicar
Company Namey unOwneropcional; para consultar, proporcionarCompany ID. - Usar el registro creado o consultado en nodos posteriores.
Reglas y validaciones
- El nombre es obligatorio al crear una empresa; el ID es obligatorio al consultarla durante la ejecución.
Backend
- Servicios:
automation-node-system-create-company,automation-node-system-get-company - Efectos: crea una empresa o devuelve sus datos al payload de ejecución.
Relaciones
- Requiere: datos válidos de empresa o un ID existente.
- Dispara / afecta: Companies y nodos posteriores.
Notas
El propietario puede mapearse desde una variable.
id: contact-actions modulo: automatizaciones app: crm nombre: Acciones de contactos tipo: accion
Acciones de contactos
Agrupa los nodos que crean, buscan, consultan o actualizan contactos y distribuyen asignaciones.
Que se logra
- Resultado: Crea, localiza y actualiza contactos, incluida la distribución ponderada entre miembros, para mantener un CRM accionable.
- Caso de uso: Una inmobiliaria: al enviar un formulario, busca el contacto, actualiza sus datos y distribuye el lead entre asesores según pesos configurados.
- Se combina con:
Trigger: formulario enviado,Acciones de dealsyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): CreateContactDialog.tsx, UpdateContactNode.tsx, TeamMemberDistributionDialog.tsx
Como funciona
- Elegir
Create Contact,Update Contact,Find Contact,Get ContactoTeam Member DistributionenAdd Node > Contacts. - Completar los identificadores o criterios con texto fijo o variables del flujo.
- Conectar la salida con el nodo que consumirá el contacto o usuario resultante.
Campos y opciones
| Nodo | Campos configurables reales | Efecto |
|---|---|---|
Create Contact |
nombre, email, teléfono, país, propietario, empresa, etiquetas y campos personalizados | crea un contacto |
Update Contact |
ID, nombre, email, teléfono, propietario, empresa, etiquetas y campos personalizados | actualiza el contacto indicado |
Find Contact |
valor, alcance All Fields/Email/Phone/Name, país opcional y máximo 1–50 | devuelve coincidencias |
Get Contact |
ID del contacto | devuelve un contacto |
Team Member Distribution |
miembros, peso de cada uno y Auto distribute weight |
selecciona un miembro por distribución ponderada |
Reglas y validaciones
Find Contactexige un valor de búsqueda y limita el resultado a 50.- La distribución ponderada exige que los pesos sumen 100 %.
Backend
- Servicios:
automation-node-system-create-contact,automation-node-system-update-contact,automation-node-system-find-contact,automation-node-system-get-contact,automation-node-system-team-member-distributionyautomation-node-executions(create) - Efectos: crea o actualiza contactos y entrega los registros o usuario seleccionado a la ejecución.
Relaciones
- Requiere: permiso para Automatizaciones y datos válidos del contacto.
- Dispara / afecta: Contactos y nodos posteriores que reciben sus datos.
Notas
Los IDs que proceden de un trigger pueden dejarse vacíos al guardar y asignarse desde variables antes de probar.
id: conversation-ai-control modulo: automatizaciones app: crm nombre: Control de IA en conversación tipo: accion
Control de IA en conversación
Controla el contexto y la reanudación de un asistente IA dentro de una conversación.
Que se logra
- Resultado: Controla cuándo el asistente IA pierde el contexto anterior o vuelve a atender una conversación con una instrucción específica.
- Caso de uso: Un soporte técnico: cuando el ticket se resuelve, corta el contexto de IA; si el cliente responde de nuevo, reanuda la IA con instrucciones de postventa.
- Se combina con:
Trigger: conversación actualizada,Mensajería de conversacionesy Asistentes IA.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): ConversationAIContextCutDialog.tsx, ResumeConversationWithAiNode.tsx
Como funciona
- Elegir
Cut AI ContextoResume with AIenAdd Node > Conversations. - Indicar la conversación con un ID o variable.
- Para reanudar, escribir una instrucción, elegir un asistente o
Keep current, y decidir si responde de inmediato.
Reglas y validaciones
Resume with AIadmiteSend a message nowyReset AI context.- Si no envía ahora, la instrucción queda pendiente y se consume con el siguiente mensaje entrante.
Backend
- Servicios:
automation-node-system-conversation-ai-context-cut,automation-node-system-resume-conversation-with-ai - Efectos: borra memoria de IA o asigna/reanuda un asistente; puede producir una respuesta proactiva.
Relaciones
- Requiere: una conversación con IA accesible.
- Dispara / afecta: asignación, memoria y respuestas de asistentes IA.
Notas
Las plantillas de reanudación requieren seleccionar un asistente concreto.
id: conversation-messages modulo: automatizaciones app: crm nombre: Mensajería de conversaciones tipo: accion
Mensajería de conversaciones
Reúne los nodos para buscar, abrir, actualizar y enviar mensajes en conversaciones de los canales conectados.
Que se logra
- Resultado: Opera conversaciones omnicanal desde el flujo: busca contexto, inicia chats y envía mensajes, SMS o plantillas de WhatsApp.
- Caso de uso: Una tienda: cuando se abandona un formulario, inicia WhatsApp, envía una plantilla aprobada y actualiza la conversación para que ventas la retome.
- Se combina con:
Triggers de conversación,Chat With AIyControl de IA en conversación.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): nodes/Conversation.tsx, SendConversationMessageNode.tsx
Como funciona
- En
Add Node > Conversations, elegirSend Message,Get Conversation,Find Conversation,Check Instagram Follower,Initiate WhatsApp,Initiate SMS,Send WhatsApp TemplateoUpdate Conversation. - Mapear el ID de contacto o conversación desde un trigger o nodo anterior.
- Configurar contenido, canal, plantilla o campos de conversación y publicar el flujo.
Campos y opciones
| Nodo | Campos configurables reales | Efecto |
|---|---|---|
Send Message |
conversación, tipo text/image/audio/video/document, texto y archivo S3 | envía mensaje o medio |
Get Conversation |
ID de conversación | devuelve conversación |
Find Conversation |
contacto, plataforma y máximo 1–50 | busca conversaciones |
Check Instagram Follower |
ID de conversación | consulta seguimiento y consentimiento Meta |
Initiate WhatsApp |
ID de contacto | abre o reanuda chat WhatsApp |
Initiate SMS |
contacto y número saliente | inicia chat SMS |
Send WhatsApp Template |
destinatario, contacto o conversación, plantilla y variables | envía plantilla aprobada |
Update Conversation |
ID, pipeline, etapa, usuario, asistente IA, estado, etiquetas y campos personalizados | actualiza conversación |
Reglas y validaciones
- El seguimiento de Instagram exige consentimiento de mensajería; un comentario aislado no es suficiente.
- Para SMS el número saliente debe estar activo. Los adjuntos de
Send Messagese cargan a S3.
Backend
- Servicios:
automation-node-system-send-conversation-message,automation-node-system-get-conversation,automation-node-system-find-conversation,automation-node-system-check-instagram-follower,automation-node-system-whatsapp-conversation-initiate,automation-node-system-sms-conversation-initiate,automation-node-system-send-whatsapp-template,automation-node-system-update-conversation - Efectos: envía comunicaciones, inicia hilos o actualiza el enrutamiento de una conversación.
Relaciones
- Requiere: canales configurados y destinatarios válidos.
- Dispara / afecta: Conversaciones, Mensajes, WhatsApp, SMS e Instagram.
Notas
El selector de variables permite guardar IDs vacíos que se resolverán durante una ejecución.
id: deal-actions modulo: automatizaciones app: crm nombre: Acciones de deals tipo: accion
Acciones de deals
Agrupa las acciones para crear y modificar deals y consultar sus productos o contactos observadores.
Que se logra
- Resultado: Crea, consulta y actualiza oportunidades, productos y watchers para que el pipeline avance con señales reales del cliente.
- Caso de uso: Una empresa B2B: cuando un lead responde a una campaña, crea un deal, asigna watchers y añade los productos consultados al seguimiento comercial.
- Se combina con:
Trigger: contacto creado,Búsqueda de productosyAcciones de actividades.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): CreateDealNode.tsx, UpdateDealDialog.tsx, GetDealsDialog.tsx
Como funciona
- Elegir un nodo en
Add Node > Deals. - Definir IDs y campos con valores fijos o variables de pasos anteriores.
- Publicar y utilizar la salida de la acción en la siguiente rama.
Campos y opciones
| Nodo | Campos configurables reales | Efecto |
|---|---|---|
Create Deal |
nombre, valor, moneda, contacto, empresa, pipeline, etapa, propietario, fecha, etiquetas y campos personalizados | crea un deal |
Update Deal |
ID y los mismos campos; acción de etiquetas preserve/replace/remove/remove_all | actualiza un deal |
Get Deal |
ID | devuelve un deal |
Get Deals |
contacto, empresa, estado, pipeline y etapa | devuelve deals filtrados |
Get Deal Products |
ID del deal | devuelve sus líneas de producto |
Get Deal Watchers |
ID del deal | devuelve observadores y cantidad |
Add Deal Watcher |
deal, contacto, rol y notas | agrega o restaura un observador |
Reglas y validaciones
Add Deal Watcherno admite el contacto principal del deal y restaura una relación eliminada en lugar de duplicarla.
Backend
- Servicios:
automation-node-system-create-deal,automation-node-system-update-deal,automation-node-system-get-deal,automation-node-system-get-deals,automation-node-system-get-deal-products,automation-node-system-get-deal-watchers,automation-node-system-add-deal-watcher - Efectos: crea o modifica deals y sus observadores, o devuelve datos de consulta para nodos posteriores.
Relaciones
- Requiere: IDs accesibles de la organización.
- Dispara / afecta: Deals, líneas de producto y observadores.
Notas
Los nodos que reciben un ID en tiempo de ejecución validan ese valor en backend al ejecutarse.
id: estimate-actions modulo: automatizaciones app: crm nombre: Creación de estimates tipo: accion
Creación de estimates
Crea un estimate de ventas con sus líneas de producto y configuración documental.
Que se logra
- Resultado: Genera una cotización desde los datos ya capturados por el flujo, con sus líneas, moneda y plantilla.
- Caso de uso: Una empresa de servicios: cuando un prospecto acepta una propuesta por WhatsApp, crea un estimate con el servicio solicitado y lo deja listo para seguimiento.
- Se combina con:
Deal actions,Búsqueda de productosyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): CreateEstimateDialog.tsx
Como funciona
- Elegir
Create EstimateenAdd Node > Estimates. - Indicar
Contact ID, moneda, fechas, estado, propietario y plantilla documental. - Añadir líneas de producto manualmente o pegar el arreglo en modo JSON; completar descuentos, notas y campos personalizados.
Reglas y validaciones
- El contacto es obligatorio y las líneas pueden configurarse en modo manual o JSON.
Backend
- Servicios:
automation-node-system-create-estimate - Efectos: crea el estimate y sus líneas para la organización.
Relaciones
- Requiere: contacto y moneda de la organización.
- Dispara / afecta: Estimates y documentos de ventas.
Notas
Por confirmar: qué estados de estimate admite el servicio en todas las configuraciones.
id: execution-monitoring modulo: automatizaciones app: crm nombre: Monitoreo de ejecuciones tipo: vista
Monitoreo de ejecuciones
Lista las ejecuciones de automatizaciones y permite abrir su recorrido, reintentar una ejecución o iniciar una prueba manual.
Que se logra
- Resultado: Da trazabilidad operativa para localizar ejecuciones, revisar su estado y volver a lanzar casos cuando la interfaz lo permite.
- Caso de uso: Un negocio de soporte: filtra ejecuciones fallidas de SLA, abre cada una y reintenta el caso después de corregir el dato del ticket.
- Se combina con:
Visor de ejecuciónyEditor visual.
Donde esta
- Ruta:
/[orgId]/automations-executions - Acceso en UI:
Automations > View Executions - Componente(s): AutomationsExecutionsView y páginas de ejecuciones
Como funciona
- Abrir
View Executionsdesde la lista o desde el editor. - Filtrar por automatización, estado o periodo y elegir una fila.
- Abrir la ejecución para inspeccionar el recorrido completo en
Automation execution viewer. - Usar el control de reintento cuando la ejecución lo permita, o lanzar
Run Executiondesde el editor con un payload de prueba.
Reglas y validaciones
- Las ejecuciones manuales no esperan un trigger externo.
- El historial se asocia a una automatización concreta, incluida la enviada como filtro en la URL.
Backend
- Servicios:
automations-executions(find/get/create/patch),automation-node-executions(find),automation-run(create) - Efectos: crear o reintentar produce ejecuciones y estados de nodo que se pueden abrir en el visor.
Relaciones
- Requiere: permiso
can_access_automations. - Dispara / afecta: acciones de las ramas ejecutadas.
Notas
Por confirmar: qué estados concretos habilitan el botón de reintento en todas las variantes de la pantalla.
id: execution-viewer modulo: automatizaciones app: crm nombre: Visor de ejecución tipo: vista
Visor de ejecución
Reconstruye en el lienzo el flujo ejecutado y muestra el estado, la entrada, la configuración y la salida de cada nodo.
Que se logra
- Resultado: Permite explicar qué ocurrió en una ejecución concreta, qué nodo siguió el flujo y qué datos produjo.
- Caso de uso: Un equipo de operaciones: ante una reserva sin confirmación, revisa paso a paso si falló la búsqueda de horario, el mensaje o la creación de la reserva.
- Se combina con:
Monitoreo de ejecucionesyEditor visual.
Donde esta
- Ruta:
/[orgId]/automations-executions/viewer/[executionID] - Acceso en UI:
Automation execution viewer - Componente(s): AutomationExecutionViewer y NodeExecutionPanel
Como funciona
- Abrir una ejecución desde
View Executionso después deRun Execution. - Revisar los nodos y conectores coloreados según el resultado de cada paso.
- Pulsar un nodo para abrir su panel y comparar el payload recibido, su configuración y el resultado producido.
- Identificar el paso con error para corregir el flujo o los valores de una futura prueba.
Reglas y validaciones
- El visor usa el flujo guardado con la ejecución y no depende del estado actual del editor.
- Los datos de variables se muestran por paso para poder seguir una rama condicional.
Backend
- Servicios:
automations-executions(get),automation-node-executions(find),automations(get) - Efectos: no ejecuta ni modifica el flujo; solo presenta el registro de la ejecución.
Relaciones
- Requiere: una ejecución accesible de la organización.
- Dispara / afecta: no produce acciones adicionales.
Notas
Por confirmar: si el visor conserva el flujo de ejecuciones muy antiguas cuando su automatización ya fue eliminada.
id: flow-control modulo: automatizaciones app: crm nombre: Control de flujo tipo: accion
Control de flujo
Agrupa los nodos que dirigen una rama o transforman datos entre acciones.
Que se logra
- Resultado: Define ramas, variables, búsquedas de referencia, transformaciones y llamadas HTTP para adaptar el flujo a cada caso.
- Caso de uso: Un operador turístico: según destino y disponibilidad, bifurca el flujo, transforma los datos del viajero y termina solo la rama que no aplica.
- Se combina con: Cualquier trigger y los nodos de CRM, conversaciones, reservas o integraciones HTTP.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): NodeSelectionMenu.tsx, ConditionSidebar.tsx, JavaScriptDialog.tsx
Como funciona
- En
Add Node > Flow Control, elegirCondition,HTTP,JavaScript Transform,Lookup Value,Set VariableoEnd. - Conectar el nodo a la rama;
Conditionabre sus salidas para cada resultado. - Abrir el nodo y completar sus datos antes de publicar.
Campos y opciones
| Nodo | Campos configurables reales | Efecto |
|---|---|---|
Condition |
reglas y grupos lógicos | envía la ejecución a la salida que coincide |
HTTP |
etiqueta, método GET/POST/PUT/DELETE/PATCH, URL, encabezados, parámetros y cuerpo | realiza una solicitud externa |
JavaScript Transform |
etiqueta, plantilla y código transform(input) |
devuelve datos transformados para el paso siguiente |
Lookup Value |
etiqueta, clave, filas clave/valor, valor predeterminado y coincidencia sensible a mayúsculas | busca una equivalencia |
Set Variable |
etiqueta, nombre y valor | añade o reemplaza una variable de la ejecución |
End |
etiqueta y Output Data (JSON) |
termina esa rama y puede devolver un payload |
Reglas y validaciones
JavaScript Transformsolo admite una funcióntransform; bloquea imports, consola y temporizadores.Endbloquea guardar si su JSON no es válido.Delayaparece comoComing Soony no puede agregarse.
Backend
- Servicios:
automation-node-http,automation-node-system-javascript,automation-node-system-lookup-value,automation-node-system-set-variable,automation-node-system-endyautomation-node-executions(create) - Efectos: la condición controla la rama; HTTP llama sistemas externos; los demás enriquecen, transforman o cierran el payload.
Relaciones
- Requiere: una automatización y valores disponibles en la ejecución.
- Dispara / afecta: la información disponible para los nodos posteriores.
Notas
El selector de variables toma datos de la última ejecución y no mezcla datos de ejecuciones distintas.
id: meta-conversions modulo: automatizaciones app: crm nombre: Conversiones de Meta tipo: accion
Conversiones de Meta
Recupera o registra atribución de Meta y envía una conversión mediante Meta CAPI.
Que se logra
- Resultado: Centraliza la atribución del contacto y registra una conversión en Meta CAPI desde el momento comercial que ocurre en Apex.
- Caso de uso: Una tienda que capta prospectos por anuncios: cuando un deal se gana, recupera la fuente del contacto y envía a Meta la conversión para medir campañas.
- Se combina con:
Contact actions,Deal actionsyFlow Control.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): GetContactSourcesDialog.tsx, SendMetaConversionDialog.tsx
Como funciona
- Elegir
Get Contact Sources,Set Contact SourceoSend Meta ConversionenAdd Node > Meta Conversions. - Para buscar atribución, mapear el contacto y escoger WhatsApp, Facebook o ambos; se puede preferir una conversación.
- Para registrar una fuente, indicar contacto, tipo, UTM, canal, IDs Meta y metadata JSON.
- Para convertir, elegir cómo localizar atribución, evento, canal y, para
Purchase, moneda y valor.
Reglas y validaciones
Send Meta Conversionpuede omitir contactos sin anuncio Meta cuando se activaSkip if no Meta ad found.- El resultado de
Get Contact Sourcesexponemeta_source_id, recomendado para enviar la conversión.
Backend
- Servicios:
automation-node-system-get-contact-sources,automation-node-system-set-contact-sources,automation-node-system-send-meta-conversion - Efectos: crea/actualiza atribución y envía el evento de conversión a Meta.
Relaciones
- Requiere: configuración de conversiones de Meta y atribución o identificador de contacto.
- Dispara / afecta: Contact Sources y Meta Conversions.
Notas
Purchase exige moneda y valor.
id: notes-actions modulo: automatizaciones app: crm nombre: Notas internas tipo: accion
Notas internas
Crea una nota interna asociada a un contacto o a un deal.
Que se logra
- Resultado: Deja contexto interno estructurado en el contacto o deal sin depender de que un usuario transcriba información.
- Caso de uso: Una inmobiliaria: tras una conversación calificada, guarda en el deal una nota con el presupuesto y la zona de interés para el asesor.
- Se combina con:
Mensajería de conversaciones,Contact actionsyDeal actions.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): CreateNoteNode.tsx
Como funciona
- Elegir
Create NoteenAdd Node > Notes. - Seleccionar
Note Typeentre deal y contact. - Indicar el ID correspondiente y escribir
Note Content, con variables si es necesario.
Reglas y validaciones
- El contenido de la nota es obligatorio y solo se muestra el ID que corresponde al tipo elegido.
Backend
- Servicios:
automation-node-system-create-note - Efectos: crea una nota interna vinculada al contacto o deal.
Relaciones
- Requiere: un contacto o deal existente.
- Dispara / afecta: historial del contacto o deal.
Notas
La nota no envía notificaciones desde este nodo.
id: product-search modulo: automatizaciones app: crm nombre: Búsqueda de productos tipo: accion
Búsqueda de productos
Busca productos del catálogo y expone las coincidencias a los pasos siguientes.
Que se logra
- Resultado: Encuentra productos del catálogo dentro de una automatización para continuar el flujo con una opción comercial relevante.
- Caso de uso: Un distribuidor: cuando un prospecto pregunta por una categoría, busca productos por texto o semántica y usa el resultado antes de crear el deal.
- Se combina con:
Chat With AI,Deal actionsyCreate Estimate.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): SearchProductDialog.tsx
Como funciona
- Elegir
Search ProductenAdd Node > Products. - Escribir
Search Term, elegirAI + Text Search,AI Semantic Search OnlyoText Search Only, y definir entre 1 y 50 resultados. - Usar los productos devueltos, incluidos sus campos personalizados, en una condición, estimate o mensaje.
Reglas y validaciones
- El término de búsqueda es obligatorio; los modos que usan IA pueden generar costo.
Backend
- Servicios:
automation-node-system-search-product - Efectos: consulta el catálogo mediante texto, búsqueda semántica o ambas.
Relaciones
- Requiere: productos de la organización.
- Dispara / afecta: datos disponibles en la ejecución.
Notas
La búsqueda semántica registra en Wallet un consumo basado en los tokens de la consulta de embeddings y el cargo incluye el margen configurado por la plataforma. La búsqueda de texto no realiza esa consulta de embeddings.
id: reservation-actions modulo: automatizaciones app: crm nombre: Acciones de reservas tipo: accion
Acciones de reservas
Consulta disponibilidad y administra reservas desde un flujo.
Que se logra
- Resultado: Consulta disponibilidad y crea, actualiza o recupera reservas como parte de una respuesta operativa automática.
- Caso de uso: Una clínica: cuando un paciente confirma por WhatsApp, consulta horarios, crea la reserva y responde con la cita confirmada.
- Se combina con:
Trigger: reserva creada/actualizada,Mensajería de conversacionesy Reservations.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): CreateReservationDialog.tsx, UpdateReservationDialog.tsx
Como funciona
- Elegir
Get Reservations Available Slots,Create Reservation,Update ReservationoGet ReservationenAdd Node > Reservations. - Definir servicio, fecha o ID de reserva usando datos fijos o variables.
- Utilizar los slots devueltos antes de crear una reserva.
Reglas y validaciones
- La consulta de slots exige servicio y fecha; el recurso preferido es opcional.
- La actualización requiere ID y permite cambiar servicio, contacto, fecha, tamaño, recurso, estado, notas y campos personalizados.
Backend
- Servicios:
automation-node-system-get-reservations-available-slots,automation-node-system-create-reservations,automation-node-system-update-reservations,automation-node-system-get-reservation - Efectos: crea o modifica reservas y devuelve la disponibilidad o el registro solicitado.
Relaciones
- Requiere: servicios de reservas configurados.
- Dispara / afecta: Reservations y sus recursos.
Notas
Por confirmar: los estados disponibles dependen de la configuración de Reservations.
id: series-actions modulo: automatizaciones app: crm nombre: Acciones de Series tipo: accion
Acciones de Series
Inscribe un contacto en una Series o lo retira de una Series concreta o de todas.
Que se logra
- Resultado: Inscribe o retira contactos de una serie desde un flujo, para que las secuencias se ajusten al estado real del cliente.
- Caso de uso: Una academia: cuando un alumno reserva una demo, se suscribe a la serie de preparación; si compra, se le retira de la serie de captación.
- Se combina con:
Trigger: reserva creada,Contact actionsy Series.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): SubscribeToSeriesDialog.tsx, UnsubscribeFromSeriesDialog.tsx
Como funciona
- Elegir
Subscribe to SeriesoUnsubscribe from SeriesenAdd Node > Series. - Mapear
Contact ID. - Elegir una Series para suscribir o retirar; para la baja, activar
Unsubscribe from all seriessi debe aplicarse a todas.
Reglas y validaciones
- La suscripción exige una Series y el nodo omite la acción si la Series está inactiva.
Backend
- Servicios:
automation-node-system-subscribe-to-series,automation-node-system-unsubscribe-from-series - Efectos: crea o elimina la suscripción de la Series.
Relaciones
- Requiere: contacto y Series existentes.
- Dispara / afecta: Campaigns > Series.
Notas
La baja puede ejecutarse sin elegir una Series cuando se activa la opción para todas.
id: ticket-actions modulo: automatizaciones app: crm nombre: Acciones de tickets tipo: accion
Acciones de tickets
Actualiza tickets y ejecuta acciones de Helpdesk sobre ellos.
Que se logra
- Resultado: Convierte cambios de soporte en acciones repetibles: asignación, respuesta, notas y seguimiento del ticket sin intervención manual.
- Caso de uso: Una mesa de ayuda SaaS: cuando entra un ticket prioritario, lo asigna al equipo de guardia, añade una nota interna y responde con el primer paso.
- Se combina con:
Trigger: ticket de Helpdesk creado/actualizadoyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): UpdateTicketDialog.tsx, HelpdeskTicketActionDialog.tsx
Como funciona
- Elegir
Update TicketenTickets, oUpdate Helpdesk Ticket,Assign Helpdesk Ticket,Add Helpdesk Note,Send Helpdesk ReplyoAdd Helpdesk WatcherenHelpdesk. - Mapear el ID del ticket y completar la acción: estado, prioridad, responsable, asistente IA, pipeline, nota, respuesta u observador.
- Publicar el flujo y revisar la ejecución desde el visor.
Reglas y validaciones
Update Ticketpermite cambiar estado, prioridad, usuario, asistente IA, pipeline y etapa.
Backend
- Servicios:
automation-node-system-update-ticket,automation-node-system-helpdesk-ticket-action - Efectos: actualiza, asigna, anota, responde o añade un observador al ticket.
Relaciones
- Requiere: ticket accesible y valores válidos para la acción.
- Dispara / afecta: Tickets y Helpdesk.
Notas
Por confirmar: la lista exhaustiva de campos para cada variante de Helpdesk Ticket Action está distribuida entre sus acciones internas.
id: trigger-activity-created modulo: automatizaciones app: crm nombre: Trigger: actividad creada tipo: automatizacion
Trigger: actividad creada
Se ejecuta tras crear una actividad que coincida con los filtros de autor, responsable, tipo y finalización.
Que se logra
- Resultado: Convierte una actividad nueva en una respuesta coordinada de ventas u operación.
- Caso de uso: Una agencia: cuando se crea una llamada de seguimiento, envía al responsable un email y añade un watcher al deal relacionado.
- Se combina con:
Acciones de actividades,Acciones de dealsyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ActivityCreatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Created by User |
selector | No | Miembro que creó la actividad. |
Assigned to User |
selector | No | Responsable asignado. |
Activity Type |
selector | No | Call, Meeting, Task, Deadline, Email o Lunch. |
Completion Status |
selector | No | Not Completed o Completed. |
Reglas y validaciones
- Todos los filtros son opcionales.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
activities/hooks/automationActivityOnCreated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-activity-date-based modulo: automatizaciones app: crm nombre: Trigger: fecha de actividad tipo: automatizacion
Trigger: fecha de actividad
Se ejecuta cuando llega el inicio o fin de una actividad, o un intervalo antes o después, y la actividad pasa los filtros.
Que se logra
- Resultado: Ejecuta una acción antes o después de una fecha de actividad para recordar reuniones y activar seguimiento.
- Caso de uso: Una agencia: 15 minutos antes de una reunión, envía WhatsApp al contacto; después de la fecha, crea una tarea de seguimiento si la actividad no se completó.
- Se combina con:
Acciones de actividades,Mensajería de conversacionesyAcciones de deals.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ActivityDateBasedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Activity date |
selector | Sí | Start date and time o End date and time. |
When to run |
selector | Sí | Before, On o After. |
Amount y Unit |
número y selector | Condicional | Para antes/después: entero positivo en Minutes, Hours o Days. |
Created by user |
selector | No | Miembro que creó la actividad. |
Assigned to user |
selector | No | Miembro asignado. |
Activity type |
selector | No | Call, Meeting, Task, Deadline, Email o Lunch. |
Completion status |
selector | No | Not completed o Completed. |
Reglas y validaciones
- Con
Onno se guarda intervalo. - Fecha y hora se leen en la zona horaria de la organización. Sin hora válida, no dispara.
- El proceso se ejecuta por ventanas de un minuto, no antes del instante objetivo; deduplica entregas.
- Sin estado explícito, antes/en usa actividades no completadas; después no filtra por completada.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
cron-activity-date-based;src/lib/date-based-automation-triggers/run.js. - Efectos: una coincidencia inicia el flujo publicado con el registro de actividad como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Una modificación de la fecha u hora que cambie el minuto objetivo puede originar una nueva ejecución.
- El recordatorio de producto de 10 minutos (
schedule-activity-reminder) es independiente de este trigger.
id: trigger-activity-updated modulo: automatizaciones app: crm nombre: Trigger: actividad actualizada tipo: automatizacion
Trigger: actividad actualizada
Se ejecuta cuando cambia una actividad y coincide con un cambio monitorizado.
Que se logra
- Resultado: Reacciona a un cambio relevante de una tarea, reunión o llamada para cerrar el siguiente paso del proceso.
- Caso de uso: Una asesoría: cuando una actividad queda completada, crea la siguiente tarea y actualiza el deal para evitar seguimientos perdidos.
- Se combina con:
Acciones de actividadesyAcciones de deals.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ActivityUpdatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | No | Subject, tipo, responsable, finalización, fechas/horas y referencias a deal, contacto o empresa. |
From / To |
valor o Any Value |
No | Para tipo, responsable y finalización usa opciones; los demás admiten texto. |
Created by User |
selector | No | Miembro que creó la actividad. |
Assigned to User |
selector | No | Responsable asignado. |
Activity Type |
selector | No | Call, Meeting, Task, Deadline, Email o Lunch. |
Completion Status |
selector | No | Not Completed o Completed. |
Reglas y validaciones
- Las reglas de cambio se aplican sobre valores anterior y nuevo.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
activities/hooks/automationActivityOnUpdated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-checkout-abandoned modulo: automatizaciones app: crm nombre: Trigger: checkout abandonado tipo: automatizacion
Trigger: checkout abandonado
Trigger por fecha que se ejecuta una vez por checkout del catálogo que sigue abierto un tiempo después de la última actividad del comprador.
Que se logra
- Resultado: recupera ventas enviando al comprador un link que restaura su carrito.
- Caso de uso: una tienda de cosméticos envía por WhatsApp, una hora después, el
recovery_urlcon un mensaje personalizado. - Se combina con:
Mensajería de conversacionesyAcciones de actividades(correo).
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Order Events > Checkout abandoned - Componente(s):
OrderTriggerConfig.tsx(CheckoutAbandonedConfig)
Como funciona
- En el nodo
Start, agregaCheckout abandoned. - Indica cuánto esperar tras la última actividad (cantidad y unidad) y, opcionalmente, un catálogo.
- Conecta un nodo de WhatsApp o correo que use
recovery_url, guarda y publica.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Amount / Unit | número y selector | Sí | Minutos, horas o días después de last_activity_at. |
| Catalog | selector | No | Limita a un catálogo. |
Reglas y validaciones
- Solo checkouts
open, sin pedido y con correo o teléfono del comprador. - Dispara una vez por checkout y trigger.
- El payload incluye
recovery_url, artículos, total, moneda y datos del comprador.
Backend
- Servicios:
automations-webhooks,automation-run,checkouts. - Hooks relevantes:
src/lib/date-based-automation-triggers/checkout-abandoned.js,src/lib/date-based-automation-triggers/run.js.
Relaciones
- Requiere: catálogo con checkout habilitado y automatización publicada.
- Dispara / afecta: nodos conectados desde
Start.
id: trigger-contact-created modulo: automatizaciones app: crm nombre: Trigger: contacto creado tipo: automatizacion
Trigger: contacto creado
Se ejecuta después de crear un contacto que coincida con los filtros configurados.
Que se logra
- Resultado: Activa la calificación y el primer contacto desde el momento en que entra un lead al CRM.
- Caso de uso: Una inmobiliaria: cuando se crea un contacto con etiqueta de campaña, lo distribuye a un asesor, crea un deal y envía un WhatsApp de bienvenida.
- Se combina con:
Acciones de contactos,Acciones de dealsyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ContactCreatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Created by user |
selector | No | Miembro que creó el contacto. |
Contact owner |
selector | No | Miembro responsable. |
Company |
buscador | No | Empresa vinculada. |
System type |
selector | No | Conversation, Lead o Contact. |
Required tags |
selección múltiple | No | Basta con que tenga una de las etiquetas elegidas. |
Reglas y validaciones
- El hook busca webhooks activos de tipo
new-contactde la organización.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
contacts/hooks/automationContactOnCreated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-contact-updated modulo: automatizaciones app: crm nombre: Trigger: contacto actualizado tipo: automatizacion
Trigger: contacto actualizado
Se ejecuta cuando una actualización del contacto cumple al menos uno de los cambios de campo definidos y los filtros adicionales.
Que se logra
- Resultado: Mantiene los procesos comerciales alineados con cambios en el perfil o la clasificación del contacto.
- Caso de uso: Una academia: cuando un contacto cambia a interesado en un programa, lo suscribe a una serie y crea una actividad para admisiones.
- Se combina con:
Acciones de contactos,Acciones de SeriesyAcciones de actividades.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ContactUpdatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | No | Campos: First Name, Last Name, Email, Phone, Company, creador, propietario, tipo y lista de WhatsApp. |
From / To |
valor o Any Value |
No | Compara el valor anterior y el nuevo. |
Created by user |
selector | No | Miembro que creó el contacto. |
Contact owner |
selector | No | Miembro responsable. |
Company |
buscador | No | Empresa vinculada. |
System type |
selector | No | Conversation, Lead o Contact. |
Required tags |
selección múltiple | No | Basta con que tenga una de las etiquetas elegidas. |
Reglas y validaciones
- Cada regla compara un campo antes y después; los filtros adicionales se aplican al contacto resultante.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
contacts/hooks/automationContactOnUpdated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-conversation-created modulo: automatizaciones app: crm nombre: Trigger: conversación iniciada tipo: automatizacion
Trigger: conversación iniciada
Se ejecuta al crear una conversación que coincide con canal, pipeline o asignaciones.
Que se logra
- Resultado: Responde de forma consistente desde que se inicia una conversación nueva en un canal conectado.
- Caso de uso: Una tienda: cuando llega una conversación de Instagram, consulta el contacto, deja que la IA clasifique la intención y asigna el caso a ventas.
- Se combina con:
Mensajería de conversaciones,Chat With AIyAcciones de contactos.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
NewConversationConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Channel |
selector | No | WhatsApp, Instagram, Messenger o Webchat. |
Trigger for any pipeline |
interruptor | No | Al desactivarlo permite elegir Pipeline y Pipeline Stage. |
Assigned user |
selector | No | Miembro asignado. |
Assigned AI assistant |
selector | No | Asistente asignado a la conversación. |
Reglas y validaciones
- La etapa solo se ofrece después de elegir un pipeline.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
conversations/hooks/automationConversationOnCreated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-conversation-updated modulo: automatizaciones app: crm nombre: Trigger: conversación actualizada tipo: automatizacion
Trigger: conversación actualizada
Se ejecuta cuando una conversación cambia en una transición configurada.
Que se logra
- Resultado: Activa acciones por cambios de conversación, como asignación, pipeline o estado, sin revisar manualmente la bandeja.
- Caso de uso: Un equipo de soporte: cuando una conversación se asigna a escalamiento, corta el contexto de IA y crea una actividad para el especialista.
- Se combina con:
Control de IA en conversaciónyAcciones de actividades.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ConversationUpdatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | Sí | Assigned user, Assigned AI assistant, pipeline, etapa, estado o canal. |
From / To |
selector o Any Value |
No | Valores anterior y nuevo de cada regla. |
Channel |
selector | No | WhatsApp, Instagram, Messenger o Webchat. |
Trigger for any pipeline |
interruptor | No | Al desactivarlo permite elegir Pipeline y Pipeline Stage. |
Assigned user |
selector | No | Miembro asignado. |
Assigned AI assistant |
selector | No | Asistente asignado a la conversación. |
Reglas y validaciones
- Debe existir al menos un
Field Changeválido; el backend rechaza configuraciones vacías y omite webhooks heredados sin cambios.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
conversations/hooks/automationConversationOnUpdated.js;automations-webhooks/hooks/validate-conversation-updated-config.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-deal-created modulo: automatizaciones app: crm nombre: Trigger: deal creado tipo: automatizacion
Trigger: deal creado
Se ejecuta después de crear un deal que coincide con su pipeline, responsable, estado, moneda o importe.
Que se logra
- Resultado: Inicia la ejecución comercial al abrir una oportunidad en el pipeline.
- Caso de uso: Una consultora: cuando se crea un deal en el pipeline de ventas, añade un watcher, crea una tarea de descubrimiento y avisa al responsable.
- Se combina con:
Acciones de dealsyAcciones de actividades.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
NewDealConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Trigger for any pipeline |
interruptor | No | Al desactivarlo se habilitan Pipeline y Pipeline Stage. |
Deal owner / Created by user |
selector | No | Miembros de la organización. |
Status |
selector | No | Open, Won o Lost. |
Currency |
selector | No | USD, EUR, GBP o COP. |
Minimum amount / Maximum amount |
número | No | Rango inclusivo del importe. |
Reglas y validaciones
- Si se elige un pipeline, la etapa se limita a sus etapas.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
deals/hooks/automationDealOnCreated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-deal-updated modulo: automatizaciones app: crm nombre: Trigger: deal actualizado tipo: automatizacion
Trigger: deal actualizado
Se ejecuta si una actualización del deal satisface uno de los cambios monitorizados y los filtros del deal actual.
Que se logra
- Resultado: Automatiza el siguiente paso según el avance o retroceso de una oportunidad.
- Caso de uso: Un proveedor B2B: cuando un deal pasa a propuesta, genera un estimate, agenda seguimiento y envía al contacto el mensaje correspondiente.
- Se combina con:
Creación de estimates,Acciones de actividadesyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
DealUpdatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | No | Deal owner, creador, pipeline, etapa, estado, moneda, importe o nombre. |
From / To |
valor o Any Value |
No | Evalúa la transición del campo seleccionado. |
Trigger for any pipeline |
interruptor | No | Al desactivarlo se habilitan Pipeline y Pipeline Stage. |
Deal owner / Created by user |
selector | No | Miembros de la organización. |
Status |
selector | No | Open, Won o Lost. |
Currency |
selector | No | USD, EUR, GBP o COP. |
Minimum amount / Maximum amount |
número | No | Rango inclusivo del importe. |
Reglas y validaciones
- Un cambio de campo debe modificar efectivamente el valor; las reglas se evalúan como alternativas.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
deals/hooks/automationDealOnUpdated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-event-guest-checked-in modulo: automatizaciones app: crm nombre: Trigger: asistente registrado en check-in tipo: automatizacion
Trigger: asistente registrado en check-in
Se ejecuta una sola vez cuando se registra el check-in de un asistente, desde QR, tabla de invitados o API.
Que se logra
- Resultado: Activa la atención posterior a la asistencia efectiva, no solo al registro.
- Caso de uso: Una feria comercial: cuando un invitado hace check-in, crea un deal para el equipo de ventas y envía un mensaje de agradecimiento posterior.
- Se combina con:
Acciones de deals,Mensajería de conversacionesy Events.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
EventGuestCheckedInConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Event |
buscador | No | Evento del asistente. |
Ticket type ID |
número | No | Restringe a un tipo de entrada concreto. |
Reglas y validaciones
- El hook comprueba que el check-in se haya producido por primera vez, por lo que los parches posteriores no relanzan el flujo.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
event-registrations/hooks/automationEventGuestOnCheckedIn.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-event-registration-created modulo: automatizaciones app: crm nombre: Trigger: registro de evento creado tipo: automatizacion
Trigger: registro de evento creado
Se ejecuta al crear una inscripción de evento que coincida con evento, estado u origen.
Que se logra
- Resultado: Orquesta la bienvenida desde el momento en que un invitado se registra a un evento.
- Caso de uso: Un organizador de seminarios: cuando alguien se registra, envía confirmación, crea una actividad de seguimiento y añade una nota al contacto.
- Se combina con:
Mensajería de conversaciones,Acciones de actividadesy Events.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
EventRegistrationCreatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Event |
buscador | No | Evento concreto o Any Event. |
Status |
selector | No | Approved, Pending approval, Waitlist, Invited, Declined o Cancelled. |
Source |
texto | No | Origen de la inscripción. |
Reglas y validaciones
- El payload inicial es la inscripción creada.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
event-registrations/hooks/automationEventRegistrationOnCreated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-event-registration-updated modulo: automatizaciones app: crm nombre: Trigger: registro de evento actualizado tipo: automatizacion
Trigger: registro de evento actualizado
Se ejecuta cuando una inscripción cambia y coincide con una transición o filtro.
Que se logra
- Resultado: Adecúa el proceso del evento a cambios de registro, como estado o pago.
- Caso de uso: Una conferencia: cuando un registro cambia a confirmado, envía las instrucciones de acceso y crea una actividad para el anfitrión.
- Se combina con:
Mensajería de conversaciones,Acciones de actividadesy Events.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
EventRegistrationUpdatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | No | Status, Payment status, Ticket type, Source o Event. |
From / To |
valor o Any Value |
No | Estado, fuente y evento tienen selector; otros aceptan texto. |
Event |
buscador | No | Evento concreto o Any Event. |
Status |
selector | No | Approved, Pending approval, Waitlist, Invited, Declined o Cancelled. |
Source |
texto | No | Origen de la inscripción. |
Reglas y validaciones
- Solo inicia cuando una regla detecta un cambio real.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
event-registrations/hooks/automationEventRegistrationOnUpdated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-facebook-post-comment modulo: automatizaciones app: crm nombre: Trigger: comentario en publicación de Facebook tipo: automatizacion
Trigger: comentario en publicación de Facebook
Se ejecuta para comentarios entrantes de una Page de Facebook que coinciden con una publicación y reglas de palabras.
Que se logra
- Resultado: Convierte comentarios públicos de Facebook en una ruta de atención o captación, con respuesta pública opcional y un mensaje privado por Messenger.
- Caso de uso: Una marca: cuando alguien comenta una palabra clave en una publicación, busca el contacto, inicia la conversación de Messenger y puede responder en el comentario.
- Se combina con:
Mensajería de conversaciones,Acciones de contactosy Facebook / Messenger.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Facebook > Post Comment - Componente(s):
FacebookCommentConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y, si hace falta, la respuesta pública: textos predefinidos o
AI generated(modelo + prompt con el comentario recibido). - Guardar con
SaveoUpdate. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| publicación concreta / cualquier publicación | selector | No | Elige contenido de la Page conectada. |
| palabras incluidas y excluidas | lista | No | Comparación sin distinguir mayúsculas/minúsculas. |
| respuestas públicas | radio | No | No, varias respuestas aleatorias, o AI generated. |
| respuestas aleatorias | lista y lenguaje | No | Se envía una respuesta predefinida al azar en English o Spanish. |
| respuesta AI | modelo + prompt | No | La IA escribe la respuesta pública con el comentario recibido. Se cobra al wallet. |
Reglas y validaciones
- Ignora eventos enviados por la misma Page.
- Una publicación concreta solo puede quedar configurada en una automatización; Any post sí puede coexistir.
- La respuesta pública se envía al llegar el comentario, no desde nodos posteriores. Para redactarla con IA hay que usar
Yes, AI generateden el trigger. - Cada respuesta
AI generatedcobra el wallet de la organización. Si no hay saldo, se omite la respuesta pública y el resto de la automatización sigue. - Las respuestas públicas requieren permiso de la Page para gestionar comentarios. Si Meta la rechaza, el mensaje privado de Messenger sigue.
Backend
- Servicios:
automation-triggers-facebook(configuración),process-automation-trigger(inicio),automations-executions(ejecución). - Hooks relevantes:
messenger-channel-webhook;process-facebook-comment. - Efectos: una coincidencia inicia el flujo publicado con el comentario, el contacto y la conversación de Messenger.
Relaciones
- Requiere: una automatización publicada, el trigger activo y una Page de Facebook conectada.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Crea o encuentra contacto y conversación de Messenger antes de iniciar la ejecución.
- Meta permite una respuesta privada por comentario, dentro de 7 días.
id: trigger-form-submitted modulo: automatizaciones app: crm nombre: Trigger: formulario enviado tipo: automatizacion
Trigger: formulario enviado
Se ejecuta al crear un envío de formulario.
Que se logra
- Resultado: Convierte un envío de formulario en un proceso inmediato de captación y seguimiento.
- Caso de uso: Una agencia: cuando un prospecto envía el formulario de cotización, busca o crea el contacto, abre un deal y asigna una actividad al vendedor.
- Se combina con:
Acciones de contactos,Acciones de dealsy Forms.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
FormSubmissionConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Form |
selector | No | Un formulario concreto o Any form; se muestran también los no publicados. |
Reglas y validaciones
- El filtro por formulario se evalúa antes de iniciar el flujo.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
form-submissions/hooks/automation-form-submission-on-created.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-helpdesk-ticket-created modulo: automatizaciones app: crm nombre: Trigger: ticket de Helpdesk creado tipo: automatizacion
Trigger: ticket de Helpdesk creado
Se ejecuta al crear un ticket de Helpdesk que cumpla los filtros configurados.
Que se logra
- Resultado: Establece una respuesta inicial homogénea al entrar un ticket de soporte.
- Caso de uso: Un SaaS: cuando se crea un ticket de prioridad alta, lo asigna a guardia, añade una nota interna y envía una primera respuesta al cliente.
- Se combina con:
Acciones de ticketsyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
HelpdeskTicketCreatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Source |
selector | No | manual, ai, email, widget, portal, form, api o automation. |
Priority |
selector | No | low, normal, high o urgent. |
Ticket type, Support group, Assigned agent, Company |
selector | No | Valores de la organización. |
Reglas y validaciones
- Los filtros vacíos aceptan cualquier ticket.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
helpdesk-tickets/hooks/lib/helpdesk-ticket-automation.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-helpdesk-ticket-sla-breached modulo: automatizaciones app: crm nombre: Trigger: SLA de Helpdesk incumplido tipo: automatizacion
Trigger: SLA de Helpdesk incumplido
Se ejecuta cuando el programador de SLA detecta que un ticket incumplió un objetivo de primera respuesta, siguiente respuesta o resolución.
Que se logra
- Resultado: Escala automáticamente los incumplimientos de atención antes de que queden sin dueño.
- Caso de uso: Un BPO: cuando se incumple el SLA de primera respuesta, reasigna el ticket, registra una nota y alerta al supervisor mediante conversación.
- Se combina con:
Acciones de tickets,Mensajería de conversacionesy Helpdesk.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
HelpdeskTicketSlaBreachedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Breach type |
selector | No | first_response_breached, next_response_breached o resolution_breached. |
Source, Priority, Ticket type, Support group, Assigned agent, Company |
selector | No | Filtros sobre el ticket incumplido. |
Reglas y validaciones
- El programador considera tickets
open,pendinguon holdque no están pausados por SLA. - El payload incluye el tipo de incumplimiento.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
helpdesk-tickets/hooks/lib/helpdesk-ticket-automation.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-helpdesk-ticket-updated modulo: automatizaciones app: crm nombre: Trigger: ticket de Helpdesk actualizado tipo: automatizacion
Trigger: ticket de Helpdesk actualizado
Se ejecuta cuando un ticket cambia y satisface las transiciones y filtros configurados.
Que se logra
- Resultado: Encadena acciones de soporte cuando un ticket cambia de responsable, estado o prioridad.
- Caso de uso: Una empresa logística: cuando el ticket cambia a escalado, añade un watcher, avisa al especialista y crea una actividad de seguimiento.
- Se combina con:
Acciones de ticketsyAcciones de actividades.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
HelpdeskTicketUpdatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | No | Estado, prioridad, agente, grupo, tipo, origen, empresa, contacto, deal o asunto. |
Updated by |
selector | No | Agent, Contact, AI assistant o System. |
Source, Priority, Ticket type, Support group, Assigned agent, Company |
selector | No | Filtros sobre el ticket actualizado. |
Reglas y validaciones
- Sin reglas de cambio, responde a toda actualización que pase los filtros.
- El flujo recibe el ticket,
previous_tickety el tipo de ejecutor.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
helpdesk-tickets/hooks/lib/helpdesk-ticket-automation.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-instagram-post-reel-comment modulo: automatizaciones app: crm nombre: Trigger: comentario en publicación o Reel de Instagram tipo: automatizacion
Trigger: comentario en publicación o Reel de Instagram
Se ejecuta para comentarios entrantes de Instagram que coinciden con una publicación/Reel y reglas de palabras.
Que se logra
- Resultado: Convierte comentarios públicos en una ruta de atención o captación con las reglas de contenido configuradas.
- Caso de uso: Una marca: cuando alguien comenta una palabra clave en un Reel, busca el contacto, inicia una conversación y entrega el seguimiento comercial.
- Se combina con:
Mensajería de conversaciones,Acciones de contactose Instagram.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
InstagramPostReelCommentConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y, si hace falta, la respuesta pública: textos predefinidos o
AI generated(modelo + prompt con el comentario recibido). - Guardar con
SaveoUpdate. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Specific Post or Reel / Any post or Reel |
selector | No | Elige contenido de la cuenta conectada. |
| palabras incluidas y excluidas | lista | No | Comparación sin distinguir mayúsculas/minúsculas. |
| respuestas públicas | radio | No | No, varias respuestas aleatorias, o AI generated. |
| respuestas aleatorias | lista y lenguaje | No | Se envía una respuesta predefinida al azar en English o Spanish. |
| respuesta AI | modelo + prompt | No | La IA escribe la respuesta pública con el comentario recibido. Se cobra al wallet. |
Reglas y validaciones
- Ignora eventos enviados por la misma cuenta de Instagram.
- Una publicación concreta solo puede quedar configurada en una automatización;
Any post or Reelsí puede coexistir. - La respuesta pública se envía al llegar el comentario, no desde nodos posteriores. Para redactarla con IA hay que usar
Yes, AI generateden el trigger. - Cada respuesta
AI generatedcobra el wallet de la organización. Si no hay saldo, se omite la respuesta pública y el resto de la automatización sigue.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
instagram-channel-webhook/hooks/process-event.js;process-automation-trigger. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Crea o encuentra contacto y conversación antes de iniciar la ejecución.
id: trigger-instagram-story-reply modulo: automatizaciones app: crm nombre: Trigger: respuesta a historia de Instagram tipo: automatizacion
Trigger: respuesta a historia de Instagram
Se ejecuta cuando alguien responde una historia de Instagram y la respuesta satisface los filtros.
Que se logra
- Resultado: Procesa respuestas a historias como señales de interés que pueden entrar al CRM.
- Caso de uso: Un gimnasio: cuando alguien responde una historia sobre una promoción, clasifica el mensaje con IA y crea un deal si solicita información.
- Se combina con:
Chat With AI,Acciones de dealse Instagram.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
InstagramStoryReplyConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Specific Story / Any story |
selector | No | Solo se pueden elegir historias activas de las últimas 24 horas. |
| palabras incluidas y excluidas | lista | No | Comparación sin distinguir mayúsculas/minúsculas. |
| respuestas automáticas | lista y lenguaje | No | Se envía un DM aleatorio. |
Skip AI reply on this story |
interruptor | No | Evita una segunda respuesta del asistente asignado. |
Reglas y validaciones
- Ignora respuestas de la cuenta propia.
- Solo puede existir un trigger
Any storypor organización; una historia concreta mantiene su identificador aunque expire.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
instagram-channel-webhook/hooks/process-event.js;process-automation-trigger. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Crea o encuentra contacto y conversación antes de iniciar la ejecución.
id: trigger-legacy-date-time modulo: automatizaciones app: crm nombre: Trigger: fecha y hora tipo: automatizacion
Trigger: fecha y hora
Ficha de compatibilidad para el trigger legado de fecha y hora. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por fechas y horarios programados por flujos existentes; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-facebook-ad-click modulo: automatizaciones app: crm nombre: Trigger: clic en anuncio de Facebook tipo: automatizacion
Trigger: clic en anuncio de Facebook
Ficha de compatibilidad para el trigger legado de clic en anuncio de Facebook. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por clics detectados en anuncios de Facebook configurados; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-facebook-comment modulo: automatizaciones app: crm nombre: Trigger: comentario de Facebook tipo: automatizacion
Trigger: comentario de Facebook
Ficha de compatibilidad para el trigger legado de comentario de Facebook. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por comentarios de Facebook en publicaciones configuradas; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-facebook-shop-message modulo: automatizaciones app: crm nombre: Trigger: mensaje de Facebook Shop tipo: automatizacion
Trigger: mensaje de Facebook Shop
Ficha de compatibilidad para el trigger legado de mensaje de Facebook Shop. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por mensajes de Facebook Shop de configuraciones anteriores; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-instagram-live-comment modulo: automatizaciones app: crm nombre: Trigger: comentario en vivo de Instagram tipo: automatizacion
Trigger: comentario en vivo de Instagram
Ficha de compatibilidad para el trigger legado de comentario en vivo de Instagram. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por comentarios de Instagram Live de configuraciones anteriores; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-instagram-message modulo: automatizaciones app: crm nombre: Trigger: mensaje de Instagram tipo: automatizacion
Trigger: mensaje de Instagram
Ficha de compatibilidad para el trigger legado de mensaje de Instagram. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por mensajes directos de Instagram usados por automatizaciones anteriores; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-instagram-ref-url modulo: automatizaciones app: crm nombre: Trigger: URL de referencia de Instagram tipo: automatizacion
Trigger: URL de referencia de Instagram
Ficha de compatibilidad para el trigger legado de URL de referencia de Instagram. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por URLs de referencia de Instagram usadas por flujos anteriores; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-landing-page modulo: automatizaciones app: crm nombre: Trigger: landing page tipo: automatizacion
Trigger: landing page
Ficha de compatibilidad para el trigger legado de landing page. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por visitas a landing pages configuradas previamente; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-messenger-message modulo: automatizaciones app: crm nombre: Trigger: mensaje de Messenger tipo: automatizacion
Trigger: mensaje de Messenger
Ficha de compatibilidad para el trigger legado de mensaje de Messenger. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por mensajes entrantes de Messenger de configuraciones anteriores; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-messenger-modal modulo: automatizaciones app: crm nombre: Trigger: modal de Messenger tipo: automatizacion
Trigger: modal de Messenger
Ficha de compatibilidad para el trigger legado de modal de Messenger. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por eventos de modales de Messenger integrados antes; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-messenger-ref-url modulo: automatizaciones app: crm nombre: Trigger: URL de referencia de Messenger tipo: automatizacion
Trigger: URL de referencia de Messenger
Ficha de compatibilidad para el trigger legado de URL de referencia de Messenger. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por URLs de referencia de Messenger usadas por flujos anteriores; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-qr-code modulo: automatizaciones app: crm nombre: Trigger: código QR tipo: automatizacion
Trigger: código QR
Ficha de compatibilidad para el trigger legado de código QR. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por interacciones de código QR de integraciones anteriores; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-sequence-subscription modulo: automatizaciones app: crm nombre: Trigger: suscripción a secuencia tipo: automatizacion
Trigger: suscripción a secuencia
Ficha de compatibilidad para el trigger legado de suscripción a secuencia. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por altas a secuencias existentes; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-sequence-unsubscription modulo: automatizaciones app: crm nombre: Trigger: cancelación de suscripción a secuencia tipo: automatizacion
Trigger: cancelación de suscripción a secuencia
Ficha de compatibilidad para el trigger legado de cancelación de suscripción a secuencia. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por bajas de secuencias existentes; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-website-widget modulo: automatizaciones app: crm nombre: Trigger: widget de sitio web tipo: automatizacion
Trigger: widget de sitio web
Ficha de compatibilidad para el trigger legado de widget de sitio web. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por eventos de widgets web configurados anteriormente; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-whatsapp-message modulo: automatizaciones app: crm nombre: Trigger: mensaje de WhatsApp tipo: automatizacion
Trigger: mensaje de WhatsApp
Ficha de compatibilidad para el trigger legado de mensaje de WhatsApp. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por mensajes entrantes de WhatsApp en automatizaciones ya configuradas; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-legacy-whatsapp-url modulo: automatizaciones app: crm nombre: Trigger: URL de WhatsApp tipo: automatizacion
Trigger: URL de WhatsApp
Ficha de compatibilidad para el trigger legado de URL de WhatsApp. No aparece en el selector actual de Trigger Selection.
Que se logra
- Resultado: Conserva la continuidad de automatizaciones antiguas que se activaban por interacciones por URL de WhatsApp previamente configuradas; es un trigger legado, no una capacidad nueva para diseñar procesos.
- Caso de uso: Una empresa que ya tenía el flujo: cuando ocurre el evento legado configurado, entonces conserva el seguimiento existente, por ejemplo enviar un mensaje y crear una actividad.
- Se combina con:
Editor visualy las automatizaciones existentes que todavía usan este trigger legado.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
triggerConfigurations(configuración histórica)`
Como funciona
- Abrir una automatización existente que ya contenga este trigger.
- Revisar su configuración histórica desde el nodo
Startsi el componente aún está disponible. - Mantenerlo activo únicamente mientras la integración histórica continúe entregando ese evento.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Configuración histórica |
variable | No | Solo se conserva para automatizaciones existentes. |
Reglas y validaciones
- Es un trigger legacy: no se pueden crear nuevos desde la UI actual.
- El selector vigente no lo ofrece; su ejecución depende del hook o integración histórica que aún emita ese tipo de webhook.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Por confirmar: confirmar con telemetría o pruebas de integración cuáles de estos tipos legacy siguen recibiendo eventos en producción.
id: trigger-order-cancelled modulo: automatizaciones app: crm nombre: Trigger: pedido cancelado tipo: automatizacion
Trigger: pedido cancelado
Se ejecuta cuando un pedido pasa a Cancelled.
Que se logra
- Resultado: el equipo y el cliente quedan informados de la cancelación y se pueden revertir procesos asociados.
- Caso de uso: un distribuidor avisa al vendedor y crea una actividad para gestionar el reembolso manual.
- Se combina con:
Acciones de actividadesyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Order Events > Order cancelled - Componente(s):
OrderTriggerConfig.tsx(OrderCancelledConfig)
Como funciona
- En el nodo
Start, agregaOrder cancelled. - Filtra opcionalmente por fuente, catálogo o propietario y guarda.
- Activa el trigger y publica el flujo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Source / Catalog / Owner | selector | No | Filtros del pedido. |
Reglas y validaciones
- Al cancelar se libera el inventario reservado y se cancelan los enlaces de pago abiertos; los pagos recibidos no se reembolsan automáticamente.
Backend
- Servicios:
automations-webhooks,automation-run. - Hooks relevantes:
sync-order-lifecycle(orders).
Relaciones
- Requiere: automatización publicada con el trigger activo.
- Dispara / afecta: nodos conectados desde
Start.
id: trigger-order-created modulo: automatizaciones app: crm nombre: Trigger: nuevo pedido tipo: automatizacion
Trigger: nuevo pedido
Se ejecuta cuando se coloca un pedido: checkout del catálogo, asistente de IA, creación manual o conversión desde cotización o factura.
Que se logra
- Resultado: cada pedido nuevo inicia un flujo con el pedido, sus artículos, el contacto y el link público.
- Caso de uso: una tienda envía por WhatsApp la confirmación con el link
/o/{path}y crea una tarea para el equipo de bodega. - Se combina con:
Mensajería de conversaciones,Acciones de actividadesyAcciones de deals.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Order Events > New order placed - Componente(s):
OrderTriggerConfig.tsx(OrderCreatedConfig)
Como funciona
- En el nodo
Start, agregaNew order placed. - Filtra opcionalmente por fuente, catálogo o propietario y guarda.
- Activa el trigger y publica el flujo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Source | selector | No | Catalog, AI assistant, Manual, Estimate, Invoice, API, Automation. |
| Catalog | selector | No | Catálogo de origen. |
| Owner | selector | No | Miembro propietario del pedido. |
Reglas y validaciones
- Los borradores no disparan; dispara al pasar a
Open. - El payload incluye el pedido,
items,contactypublic_url.
Backend
- Servicios:
automations-webhooks,automation-run. - Hooks relevantes:
sync-order-lifecycle(orders),src/lib/orders/order-automation.js.
Relaciones
- Requiere: automatización publicada con el trigger activo.
- Dispara / afecta: nodos conectados desde
Start.
id: trigger-order-fulfillment-updated modulo: automatizaciones app: crm nombre: Trigger: entrega del pedido actualizada tipo: automatizacion
Trigger: entrega del pedido actualizada
Se ejecuta cuando cambia el estado de entrega de un pedido.
Que se logra
- Resultado: el cliente recibe avisos de envío o entrega sin que el equipo escriba cada mensaje.
- Caso de uso: una tienda envía por WhatsApp el número de guía cuando el pedido pasa a
Fulfilled. - Se combina con:
Mensajería de conversacionesyAcciones de actividades.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Order Events > Order fulfillment updated - Componente(s):
OrderTriggerConfig.tsx(OrderFulfillmentUpdatedConfig)
Como funciona
- En el nodo
Start, agregaOrder fulfillment updated. - Opcionalmente elige el nuevo estado de entrega y filtra por fuente, catálogo o propietario.
- Guarda, activa el trigger y publica.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Fulfillment status | selector | No | Unfulfilled, Partially fulfilled, Fulfilled, Returned. |
| Source / Catalog / Owner | selector | No | Mismos filtros que los otros triggers de pedidos. |
Reglas y validaciones
- El payload incluye
previous_fulfillment_status. - AchieveApex ya envía un correo al comprador cuando un envío pasa a
Ready for pickup,In transitoDelivered; este trigger sirve para avisos adicionales, por ejemplo por WhatsApp.
Backend
- Servicios:
automations-webhooks,automation-run,order-fulfillments. - Hooks relevantes:
sync-order-after-fulfillment,src/lib/orders/order-state.js.
Relaciones
- Requiere: automatización publicada con el trigger activo.
- Dispara / afecta: nodos conectados desde
Start.
id: trigger-order-paid modulo: automatizaciones app: crm nombre: Trigger: pedido pagado tipo: automatizacion
Trigger: pedido pagado
Se ejecuta una vez cuando un pedido queda totalmente pagado, por pago online, enlace de pago o pago registrado.
Que se logra
- Resultado: el flujo arranca en el momento del cobro con el pedido completo.
- Caso de uso: un curso presencial confirma el cupo por WhatsApp y mueve el deal a
Woncuando el pedido se paga. - Se combina con:
Mensajería de conversacionesyAcciones de deals.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Order Events > Order paid - Componente(s):
OrderTriggerConfig.tsx(OrderPaidConfig)
Como funciona
- En el nodo
Start, agregaOrder paid. - Filtra opcionalmente por fuente, catálogo o propietario y guarda.
- Activa el trigger y publica el flujo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Source | selector | No | Fuente del pedido. |
| Catalog | selector | No | Catálogo de origen. |
| Owner | selector | No | Miembro propietario. |
Reglas y validaciones
- Dispara solo en la transición a
Paid; los pagos parciales no disparan.
Backend
- Servicios:
automations-webhooks,automation-run. - Hooks relevantes:
src/lib/orders/order-state.js(recalculo de pago).
Relaciones
- Requiere: automatización publicada con el trigger activo.
- Dispara / afecta: nodos conectados desde
Start.
id: trigger-reservation-created modulo: automatizaciones app: crm nombre: Trigger: reserva creada tipo: automatizacion
Trigger: reserva creada
Se ejecuta tras crear una reserva que cumple los filtros de servicio, estado, origen y creador.
Que se logra
- Resultado: Convierte una reserva nueva en una confirmación y preparación automática del servicio.
- Caso de uso: Una clínica: cuando se crea una reserva, envía WhatsApp de confirmación, crea una actividad previa y notifica al doctor.
- Se combina con:
Acciones de reservas,Mensajería de conversacionesyAcciones de actividades.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ReservationCreatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Created by User |
selector | No | Miembro que originó la reserva. |
Service |
buscador | No | Solo servicios activos. |
Status |
selector | No | Pending, Confirmed, Cancelled, Completed o No Show. |
Source |
texto | No | Por ejemplo manual, whatsapp_ai, instagram_ai, webchat, public_link o api. |
Reglas y validaciones
- La configuración se guarda en el webhook de la automatización.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
reservations/hooks/automationReservationOnCreated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-reservation-date-based modulo: automatizaciones app: crm nombre: Trigger: fecha de reserva tipo: automatizacion
Trigger: fecha de reserva
Se ejecuta cuando llega el inicio o fin de una reserva, o un intervalo antes o después, y la reserva pasa los filtros.
Que se logra
- Resultado: Ejecuta una acción antes o después de una fecha de reserva para prevenir ausencias y activar seguimiento.
- Caso de uso: Una clínica: 24 horas antes de la cita, envía WhatsApp de recordatorio; después de la atención, solicita confirmación de seguimiento.
- Se combina con:
Acciones de reservas,Mensajería de conversacionesyAcciones de voz.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ReservationDateBasedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Date field |
selector | Sí | Start date and time o End date and time. |
When to run |
selector | Sí | Before, On o After. |
Amount y Unit |
número y selector | Condicional | Para antes/después: entero positivo en Minutes, Hours o Days. |
Created by User |
selector | No | Miembro que originó la reserva. |
Service |
buscador | No | Solo servicios activos. |
Status |
selector | No | Pending, Confirmed, Cancelled, Completed o No Show. |
Source |
texto | No | Por ejemplo manual, whatsapp_ai, instagram_ai, webchat, public_link o api. |
Reglas y validaciones
- Con
Onno se guarda intervalo. - El proceso se ejecuta por ventanas de un minuto, no antes del instante objetivo; deduplica entregas.
- Sin estado explícito, antes/en usa
PendingyConfirmed; después usaConfirmedyCompleted.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
cron-reservation-date-based;src/lib/date-based-automation-triggers/run.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Una modificación de la fecha que cambie el minuto objetivo puede originar una nueva ejecución.
id: trigger-reservation-updated modulo: automatizaciones app: crm nombre: Trigger: reserva actualizada tipo: automatizacion
Trigger: reserva actualizada
Se ejecuta cuando una reserva cambia y cumple la transición elegida.
Que se logra
- Resultado: Sincroniza las comunicaciones y tareas cuando cambia el estado o servicio de una reserva.
- Caso de uso: Un salón: cuando se reprograma una reserva, actualiza la actividad asociada y envía al cliente el nuevo horario por SMS.
- Se combina con:
Acciones de reservas,Acciones de actividadesyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
ReservationUpdatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | No | Status, Source, Service, creador, estado de pago o tamaño del grupo. |
From / To |
valor o Any Value |
No | La fuente y tamaño se comparan como texto. |
Created by User |
selector | No | Miembro que originó la reserva. |
Service |
buscador | No | Solo servicios activos. |
Status |
selector | No | Pending, Confirmed, Cancelled, Completed o No Show. |
Source |
texto | No | Por ejemplo manual, whatsapp_ai, instagram_ai, webchat, public_link o api. |
Reglas y validaciones
- Una regla requiere que el valor anterior sea diferente del nuevo.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
reservations/hooks/automationReservationOnUpdated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-team-member-added modulo: automatizaciones app: crm nombre: Trigger: miembro del equipo agregado tipo: automatizacion
Trigger: miembro del equipo agregado
Se ejecuta después de asociar un miembro a la organización.
Que se logra
- Resultado: Estandariza el alta de un nuevo miembro para que entre al proceso del equipo sin tareas manuales repetidas.
- Caso de uso: Una agencia: cuando se agrega un asesor, crea actividades de onboarding y notifica al líder para completar su habilitación.
- Se combina con:
Acciones de actividadesy miembros de organización.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
OrganizationUserTriggerConfig.tsx
Como funciona
- Añadir el trigger en el nodo
Starty abrir su configuración. - Elegir filtros de miembro, rol o rol de permisos y guardar con
Save Configuration. - Activar el trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Team Member |
selector | No | Miembro específico o Any Team Member. |
Role |
selector | No | Owner, Admin o Member. |
Permission Role |
selector | No | Rol granular de la organización o cualquier rol. |
Reglas y validaciones
- Evalúa los filtros contra la relación de membresía creada.
Backend
- Servicios:
organizations-users,automations-webhooks,automation-runyautomations-executions. - Hooks relevantes:
organizations-users/hooks/automationOrganizationUserOnCreated.js. - Efectos: entrega al flujo el miembro de la organización que produjo el evento.
Relaciones
- Requiere: automatización publicada, trigger activo y pertenencia a la organización.
- Dispara / afecta: el historial de ejecuciones y los nodos posteriores de la automatización.
Notas
- Los filtros vacíos permiten cualquier miembro o rol.
id: trigger-team-member-removed modulo: automatizaciones app: crm nombre: Trigger: miembro del equipo eliminado tipo: automatizacion
Trigger: miembro del equipo eliminado
Se ejecuta al quitar la relación de un miembro con la organización.
Que se logra
- Resultado: Inicia el cierre operativo derivado de retirar a una persona del equipo.
- Caso de uso: Una firma de servicios: cuando se elimina un miembro, crea tareas para que el supervisor revise la reasignación de sus asuntos.
- Se combina con:
Acciones de actividadesy miembros de organización.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
OrganizationUserTriggerConfig.tsx
Como funciona
- Añadir el trigger en el nodo
Starty abrir su configuración. - Elegir filtros de miembro, rol o rol de permisos y guardar con
Save Configuration. - Activar el trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Team Member |
selector | No | Miembro específico o Any Team Member. |
Role |
selector | No | Owner, Admin o Member. |
Permission Role |
selector | No | Rol granular de la organización o cualquier rol. |
Reglas y validaciones
- Conserva el payload de la membresía eliminada para que el flujo pueda usar el miembro afectado.
Backend
- Servicios:
organizations-users,automations-webhooks,automation-runyautomations-executions. - Hooks relevantes:
organizations-users/hooks/automationOrganizationUserOnDeleted.js. - Efectos: entrega al flujo el miembro de la organización que produjo el evento.
Relaciones
- Requiere: automatización publicada, trigger activo y pertenencia a la organización.
- Dispara / afecta: el historial de ejecuciones y los nodos posteriores de la automatización.
Notas
- Los filtros vacíos permiten cualquier miembro o rol.
id: trigger-team-member-updated modulo: automatizaciones app: crm nombre: Trigger: miembro del equipo actualizado tipo: automatizacion
Trigger: miembro del equipo actualizado
Se ejecuta cuando cambia una membresía o un dato monitorizado del usuario asociado.
Que se logra
- Resultado: Reacciona a cambios de membresía o perfil que requieren redistribuir o comunicar responsabilidades.
- Caso de uso: Un call center: cuando se actualiza un miembro, crea una tarea de revisión para su supervisor y notifica al equipo correspondiente.
- Se combina con:
Acciones de actividadesy miembros de organización.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
OrganizationUserTriggerConfig.tsx
Como funciona
- Añadir el trigger en el nodo
Starty abrir su configuración. - Elegir filtros de miembro, rol o rol de permisos y guardar con
Save Configuration. - Activar el trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | No | Usuario, rol, rol de permisos, nombre, apellido, email, avatar, teléfono o rol del sistema. |
From / To |
valor o Any Value |
No | Compara el valor anterior y el nuevo. |
Team Member |
selector | No | Miembro específico o Any Team Member. |
Role |
selector | No | Owner, Admin o Member. |
Permission Role |
selector | No | Rol granular de la organización o cualquier rol. |
Reglas y validaciones
- Las reglas de cambio se usan únicamente en la variante actualizada.
Backend
- Servicios:
organizations-users,automations-webhooks,automation-runyautomations-executions. - Hooks relevantes:
organizations-users/hooks/automationOrganizationUserOnUpdated.js;users/hooks/automationOrganizationUserProfileOnUpdated.js. - Efectos: entrega al flujo el miembro de la organización que produjo el evento.
Relaciones
- Requiere: automatización publicada, trigger activo y pertenencia a la organización.
- Dispara / afecta: el historial de ejecuciones y los nodos posteriores de la automatización.
Notas
- Los filtros vacíos permiten cualquier miembro o rol.
id: trigger-voice-call-created modulo: automatizaciones app: crm nombre: Trigger: llamada de voz iniciada tipo: automatizacion
Trigger: llamada de voz iniciada
Se ejecuta al crear una llamada de voz no interna que cumple los filtros.
Que se logra
- Resultado: Inicia seguimiento operativo al comienzo de una llamada de voz elegible.
- Caso de uso: Un equipo de cobranza: cuando se crea una llamada saliente, registra una actividad y prepara variables que la IA usará durante el contacto.
- Se combina con:
Acciones de voz,Acciones de actividadesy Calling & SMS.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
VoiceCallCreatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Direction |
selector | No | Inbound o Outbound. |
Call type |
selector | No | Customer o AI assistant. |
Phone number, Assigned AI assistant, Voice agent |
selector | No | Recursos de voz de la organización. |
Reglas y validaciones
- Las llamadas de tipo sistema no son elegibles.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
voice-calls/hooks/automationVoiceCallOnCreated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-voice-call-ended modulo: automatizaciones app: crm nombre: Trigger: llamada de voz finalizada tipo: automatizacion
Trigger: llamada de voz finalizada
Se ejecuta cuando finaliza una llamada elegible que cumple los filtros.
Que se logra
- Resultado: Convierte el cierre de una llamada en seguimiento comercial, soporte o registro de contexto.
- Caso de uso: Una empresa de servicios: cuando finaliza una llamada, agrega una nota al deal y agenda la siguiente actividad si requiere seguimiento.
- Se combina con:
Notas internas,Acciones de actividadesyAcciones de deals.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
VoiceCallEndedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Direction |
selector | No | Inbound o Outbound. |
Call type |
selector | No | Customer o AI assistant. |
Phone number, Assigned AI assistant, Voice agent |
selector | No | Recursos de voz de la organización. |
Minimum duration (seconds) |
número | No | Excluye llamadas más cortas. |
Reglas y validaciones
- Si no se indica duración mínima, acepta cualquier duración.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
voice-calls/hooks/automationVoiceCallOnEnded.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-voice-call-screening-detected modulo: automatizaciones app: crm nombre: Trigger: filtrado de llamada detectado tipo: automatizacion
Trigger: filtrado de llamada detectado
Se ejecuta al detectar buzón de voz o preclasificación en una llamada saliente elegible.
Que se logra
- Resultado: Maneja llamadas que llegan a buzón de voz o a una preclasificación para preservar la oportunidad de contacto.
- Caso de uso: Una clínica: cuando detecta buzón de voz en una llamada de recordatorio, envía un SMS y crea una tarea para volver a intentar.
- Se combina con:
Mensajería de conversaciones,Acciones de actividadesy Calling & SMS.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
VoiceCallScreeningDetectedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Direction |
selector | No | Inbound o Outbound. |
Call type |
selector | No | Customer o AI assistant. |
Phone number, Assigned AI assistant, Voice agent |
selector | No | Recursos de voz de la organización. |
Screening type |
selector | No | Voicemail o Pre-screening. |
Reglas y validaciones
- El filtro de dirección inicia en
Outbound; se puede cambiar en la UI.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
voice-calls/hooks/automationVoiceCallOnScreeningDetected.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-voice-call-updated modulo: automatizaciones app: crm nombre: Trigger: llamada de voz actualizada tipo: automatizacion
Trigger: llamada de voz actualizada
Se ejecuta cuando una llamada elegible cambia en alguno de los campos configurados.
Que se logra
- Resultado: Reacciona a cambios durante el ciclo de una llamada sin tener que revisar registros manualmente.
- Caso de uso: Una clínica: cuando la llamada cambia a un estado de atención, actualiza el contacto y crea una tarea para el asesor.
- Se combina con:
Acciones de contactos,Acciones de actividadesy Calling & SMS.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
VoiceCallUpdatedConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Field Changes |
lista repetible | Sí | Estado, modo del asistente, asistente asignado, contacto o tipo de filtrado. |
From / To |
selector o Any Value |
No | Compara valores anterior y nuevo. |
Direction |
selector | No | Inbound o Outbound. |
Call type |
selector | No | Customer o AI assistant. |
Phone number, Assigned AI assistant, Voice agent |
selector | No | Recursos de voz de la organización. |
Reglas y validaciones
- Requiere un campo de cambio.
- Los parches que solo actualizan datos internos de sincronización, grabación, coste o etiquetas se ignoran.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
voice-calls/hooks/automationVoiceCallOnUpdated.js. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- Los filtros vacíos equivalen a cualquier valor.
id: trigger-webhook modulo: automatizaciones app: crm nombre: Trigger: webhook externo tipo: automatizacion
Trigger: webhook externo
Inicia la automatización con el JSON enviado a una URL única generada para el webhook.
Que se logra
- Resultado: Permite que un sistema externo inicie un flujo con una URL propia de la automatización.
- Caso de uso: Un e-commerce: cuando su tienda confirma un pago, llama el webhook; Apex crea o actualiza el contacto y envía la confirmación por WhatsApp.
- Se combina con:
Flow Control,Acciones de contactosyMensajería de conversaciones.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Start node > Add Trigger - Componente(s):
WebhookConfig.tsx
Como funciona
- En el nodo
Start, agregar este trigger y abrir su configuración. - Definir los filtros disponibles y guardar con
Save Configuration. - Activar el interruptor del trigger y publicar el flujo con
Publish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Generate Webhook URL |
acción | Sí | Crea la URL para la automatización. |
Copy |
acción | No | Copia la URL. |
Replace webhook URL |
acción | No | Invalida la URL anterior y genera otra. |
Reglas y validaciones
- El sistema externo debe enviar una petición
POSTcon cuerpo JSON. - Reemplazar la URL obliga a actualizar el sistema emisor.
Backend
- Servicios:
automations-webhooks(configuración),automation-run(inicio),automations-executions(ejecución). - Hooks relevantes:
automations-webhooks/hooks/create-replace-path.js;automation-run. - Efectos: una coincidencia inicia el flujo publicado con el registro o evento que produjo el trigger como datos iniciales.
Relaciones
- Requiere: una automatización publicada y el trigger activo.
- Dispara / afecta: los nodos conectados desde
Starty el historial de ejecuciones.
Notas
- El contenido JSON se convierte en los datos iniciales disponibles para los nodos del flujo.
id: voice-actions modulo: automatizaciones app: crm nombre: Acciones de voz tipo: accion
Acciones de voz
Programa llamadas IA salientes y prepara los valores que un asistente de voz utiliza durante la interacción.
Que se logra
- Resultado: Programa una llamada saliente con IA y le entrega variables dinámicas del contacto o del caso.
- Caso de uso: Una clínica dental: si un paciente no confirma su cita, programa una llamada de IA con su nombre y horario para recuperar la confirmación.
- Se combina con:
Trigger: fecha de reserva, Calling & SMS yContact actions.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Add Node - Componente(s): CreateVoiceOutboundRequestNode.tsx, SetVoiceDynamicVariablesNode.tsx
Como funciona
- Elegir
Outbound AI CalloSet Voice Dynamic VariablesenAdd Node > Voice. - Para una llamada, seleccionar número saliente y asistente, y aportar contacto o número alternativo.
- Elegir ejecución inmediata, relativa, fecha y hora exacta o expresión variable; añadir pares de variables si se necesitan.
Campos y opciones
| Nodo | Campos configurables reales | Efecto |
|---|---|---|
Outbound AI Call |
número, asistente, contacto, teléfono alternativo, agenda y variables dinámicas | programa una llamada Telnyx |
Set Voice Dynamic Variables |
variables, consulta de memoria y metadatos de conversación | prepara contexto de voz |
Reglas y validaciones
- La agenda relativa acepta minutos, horas o días.
- El número y el asistente son necesarios para programar una llamada.
Backend
- Servicios:
automation-node-system-create-voice-outbound-request,automation-node-system-set-voice-dynamic-variables - Efectos: crea una solicitud de llamada o modifica el contexto entregado al asistente de voz.
Relaciones
- Requiere: número de voz y asistente configurados.
- Dispara / afecta: Calling & SMS, Telnyx y Wallet.
Notas
Por confirmar: la tarifa exacta de Wallet de cada llamada no se expone en el diálogo del nodo.
id: campanas app: crm nombre: Campañas estado: shipped permiso: can_access_campaigns
Campañas
Permite crear, configurar, calendarizar y supervisar envíos masivos por WhatsApp, SMS, email, llamadas de IA y automatizaciones. Incluye audiencias reutilizables y la configuración de email broadcasting.
Para que sirve
- Una clínica usa campañas de WhatsApp para recordar citas a pacientes filtrados desde su CRM y registrar el resultado de cada entrega.
- Un e-commerce segmenta compradores y les envía promociones por email, SMS o WhatsApp desde una misma operación.
- Una inmobiliaria lanza llamadas de IA a leads que no respondieron para recuperar oportunidades de visita.
- Una franquicia inicia una automatización sobre una audiencia para asignar tareas y responsables de manera masiva.
Que lo hace diferente
- Combina segmentos construidos con datos del CRM con campañas por WhatsApp, SMS, email, llamadas de IA y automatizaciones.
- Las campañas de WhatsApp usan plantillas aprobadas por Meta y variables de cada contacto.
- Puede ejecutar llamadas salientes con asistentes IA, no solo mensajes de texto.
- Una campaña puede activar una automatización para cada contacto de la audiencia.
- El email usa dominios, remitentes y supresiones compartidos con Email Broadcasting.
- Los resultados distinguen entregas procesadas y fallos, incluidos contactos que no llegaron a enviarse.
Acceso
- Ruta principal:
/[orgId]/campaigns - Como se llega:
Sidebar > Campaigns - Permiso requerido:
can_access_campaigns
Alcance tecnico
- Frontend: rutas bajo
/[orgId]/campaigns,CampaignsView,CampaignForm,SegmentsViewy formularios por canal. - Backend:
campaigns,campaign-segments,campaign-segments-split, servicios de envío por canal y serviciosemail-broadcast-*. - Superficies publicas:
/email-broadcast-unsubscribe?t=.... - Integraciones externas: Meta WhatsApp Cloud API, Telnyx, AWS SES, S3, DynamoDB, SQS y wallet de la organización.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Gestionar campañas | campaign-management.md | Lista, crea, duplica, detiene y elimina campañas. |
| Configurar campaña | campaign-configuration.md | Reúne contenido, audiencia y horario antes del envío. |
| Elegir plantilla de WhatsApp | whatsapp-campaign-content.md | Selecciona plantillas aprobadas y sus variables. |
| Elegir plantilla de email | email-campaign-content.md | Vincula plantilla visual y remitente verificado. |
| Redactar campaña SMS/MMS | sms-campaign-content.md | Define remitente, texto y adjuntos. |
| Configurar llamadas con IA | ai-calling-campaign-content.md | Selecciona número, asistente y variables dinámicas. |
| Ejecutar automatización masiva | automation-campaign-content.md | Aplica una automatización a la audiencia. |
| Seleccionar audiencia | campaign-audience-selection.md | Asigna un segmento compatible y consulta su tamaño. |
| Programar y enviar | campaign-scheduling.md | Guarda borradores, agenda o inicia una campaña. |
| Consultar resultados | campaign-delivery-results.md | Muestra estados y resultados de campañas terminadas o en proceso. |
| Gestionar segmentos | campaign-segments.md | Crea, filtra, edita y elimina audiencias por canal. |
| Diseñar filtros de segmento | segment-filter-builder.md | Combina condiciones y grupos lógicos anidados. |
| Dividir un segmento | segment-splitting.md | Parte una audiencia en segmentos más pequeños. |
| Configurar email broadcasting | email-broadcasting-settings.md | Administra dominios, remitentes, envíos, supresiones y salud. |
| Cancelar suscripción de email | email-broadcast-unsubscribe.md | Permite al destinatario bloquear futuros emails de marketing. |
Relaciones
- Depende de: Contactos, Automatizaciones, plantillas de WhatsApp, Email Builder, canales de email y Calling & SMS.
- Usado por: Analytics, conversaciones, wallet y automatizaciones.
Limitaciones y notas
- Las campañas de plan Free están limitadas a una; los planes pagados no aplican ese límite desde la interfaz.
- Solo los estados
draftyscheduledpermiten edición. - Los resultados de WhatsApp consideran tanto mensajes aceptados como destinatarios que fallan antes del envío.
id: ai-calling-campaign-content modulo: campanas app: crm nombre: Configurar campaña de llamadas con IA tipo: configuracion
Configurar campaña de llamadas con IA
Prepara llamadas salientes personalizadas para cada contacto mediante un asistente de voz.
Que se logra
- Resultado: Una audiencia seleccionada recibe llamadas salientes realizadas por un asistente de IA con el número y contexto configurados.
- Caso de uso: Una clínica dental llama a pacientes que no confirmaron su cita para resolver dudas y recuperar confirmaciones.
- Se combina con: Asistentes IA, Contactos y campañas.
Donde esta
- Ruta:
/[orgId]/campaigns/configuration/[campaignID] - Acceso en UI:
Campaign configuration > Template - Componente(s):
AiCallingForm.tsx
Como funciona
- Seleccione
Voice Phone Number. - Elija
AI Assistant. - Agregue variables dinámicas o cargue las detectadas en el asistente.
- Inserte campos del contacto y valores de respaldo cuando sea necesario.
Reglas y validaciones
- Requiere número de voz y asistente.
- No se muestran asistentes con ejecución OpenAI Realtime SIP.
- Las filas de variables sin clave se ignoran al guardar.
Backend
- Servicios:
campaigns(patch),campaign-voice-outbound-trigger(create). - Efectos: activa llamadas salientes por contacto.
Relaciones
- Requiere: Calling & SMS y AI Assistant de voz.
- Dispara / afecta: llamadas y consumo asociado de la organización.
Notas
- Las variables admiten campos de contacto y un valor alternativo.
id: automation-campaign-content modulo: campanas app: crm nombre: Ejecutar automatización masiva tipo: automatizacion
Ejecutar automatización masiva
Permite aplicar una automatización existente a todos los contactos de un segmento.
Que se logra
- Resultado: Una misma automatización se ejecuta para cada contacto de la audiencia, sin tener que iniciarla uno a uno.
- Caso de uso: Una inmobiliaria asigna masivamente los leads de una feria a un flujo que crea tareas y notifica al asesor responsable.
- Se combina con: Automatizaciones, Contactos y segmentos de campaña.
Donde esta
- Ruta:
/[orgId]/campaigns/configuration/[campaignID] - Acceso en UI:
Campaign configuration > Template - Componente(s):
AutomationForm.tsx
Como funciona
- Abra una campaña del canal Automation.
- Seleccione una automatización.
- Elija una audiencia y programe la ejecución.
- Guarde, programe o inicie la campaña.
Reglas y validaciones
- Una automatización seleccionada es obligatoria.
- Se aplican las reglas generales de segmentos y horario de campaña.
Backend
- Servicios:
campaigns(patch),campaign-automation-trigger(create). - Efectos: inicia ejecuciones de automatización para la audiencia.
Relaciones
- Requiere: módulo Automatizaciones y segmentos de canal Automation.
- Dispara / afecta: ejecuciones de automatización por contacto.
Notas
- La configuración de la automatización se realiza en su módulo, no en la campaña.
id: campaign-audience-selection modulo: campanas app: crm nombre: Seleccionar audiencia de campaña tipo: configuracion
Seleccionar audiencia de campaña
Asigna un segmento compatible al canal de campaña y muestra su cantidad de contactos.
Que se logra
- Resultado: La campaña queda dirigida a un grupo medible de contactos compatible con el canal elegido.
- Caso de uso: Una tienda selecciona compradores recientes para anunciar una reposición por WhatsApp sin contactar a toda su base.
- Se combina con: Segmentos de campaña, Contactos y contenido de campaña.
Donde esta
- Ruta:
/[orgId]/campaigns/configuration/[campaignID] - Acceso en UI:
Campaign configuration > Audience - Componente(s):
AudienceSelector.tsx,WhatsAppCampaignMessagingLimitBanner.tsx
Como funciona
- Abra
Select Segment. - Elija un segmento del mismo canal.
- Revise la cantidad estimada.
- Para WhatsApp, divida el segmento desde el aviso si supera el límite mostrado.
Reglas y validaciones
- Si no hay segmentos del canal, debe crearse uno en
Campaigns > Segments. - Las plantillas de autenticación excluyen contactos de WhatsApp sin teléfono.
Backend
- Servicios:
campaign-segments(find),campaigns(patch).
Relaciones
- Requiere: segmentos de campaña.
- Dispara / afecta: cálculo de destinatarios de envío.
Notas
- Tras dividir un segmento WhatsApp, el selector se actualiza.
id: campaign-configuration modulo: campanas app: crm nombre: Configurar una campaña tipo: configuracion
Configurar una campaña
Reúne el contenido específico del canal, la audiencia y la programación de una campaña.
Que se logra
- Resultado: Se deja una campaña coherente y lista para revisión, con canal, contenido, audiencia y entrega definidos.
- Caso de uso: Un centro de estética prepara una invitación de SMS solo para clientes de una sede antes de programarla.
- Se combina con: Segmentos, Email Builder, plantillas de WhatsApp y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/campaigns/configuration/[campaignID] - Acceso en UI:
Campaigns > abrir campaña draft o scheduled - Componente(s):
CampaignForm.tsx
Como funciona
- Edite el nombre desde el icono de lápiz si lo necesita.
- Configure el contenido en
Template. - Elija un segmento en
Audience. - Establezca fecha, hora y zona horaria en
Schedule. - Consulte la lista
Requirements, guarde como borrador, programe o useSend Nowcuando corresponda.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre | texto | Sí | Mínimo dos caracteres. |
| Contenido | según canal | Sí | Cambia para WhatsApp, email, SMS, automatización o IA. |
| Segmento | selector | Sí | Debe corresponder al canal. |
| Fecha y hora | fecha y selector | Sí para programar | No acepta fechas pasadas. |
| Zona horaria | selector con búsqueda | Sí para programar | Se guarda junto con el horario. |
Reglas y validaciones
- Solo campañas
draftyscheduledson editables. - La programación requiere contenido válido, segmento y fecha/hora.
- SMS requiere además que la configuración de SMS esté preparada.
Backend
- Servicios:
campaigns(get/patch). - Efectos: cambiar a
scheduledconserva el instante elegido;presendinginicia el flujo de envío.
Relaciones
- Requiere: contenido por canal, segmentos y configuración de canales.
- Dispara / afecta: procesamiento y resultados de campañas.
Notas
- En móvil las secciones aparecen como pestañas
Template,AudienceySchedule.
id: campaign-delivery-results modulo: campanas app: crm nombre: Consultar resultados de campaña tipo: vista
Consultar resultados de campaña
Muestra el avance y el resultado de las campañas cuyo contenido ya no es editable.
Que se logra
- Resultado: El equipo puede comprobar cuántos destinatarios recibieron, fallaron o siguen procesándose en una campaña.
- Caso de uso: Un comercio identifica los contactos que no pudieron recibir una plantilla de WhatsApp y organiza una recuperación.
- Se combina con: Conversaciones, Contactos y campañas de WhatsApp.
Donde esta
- Ruta:
/[orgId]/campaigns/whatsapp/[id],/[orgId]/campaigns/sms/[id],/[orgId]/campaigns/ai-calling/[id]o/[orgId]/campaigns/automation/[id] - Acceso en UI:
Campaigns > abrir una campaña enviada o en proceso - Componente(s): vistas de detalle por canal
Como funciona
- Abra una campaña con estado de envío o terminada.
- Consulte destinatarios, éxitos y fallos.
- En WhatsApp consulte lotes y mensajes fallidos para investigar resultados.
Reglas y validaciones
- Las campañas enviadas, en envío, por lotes o completadas no se pueden editar desde el formulario.
Backend
- Servicios:
campaigns(get),campaigns-batches-information(find/get). - Efectos: el procesamiento actualiza estados y contadores hasta completar la campaña.
Relaciones
- Requiere: campañas iniciadas.
- Dispara / afecta: auditoría de envío por canal.
Notas
- En WhatsApp, los fallos incluyen mensajes fallidos posteriormente y destinatarios inválidos que no llegaron a enviarse.
id: campaign-management modulo: campanas app: crm nombre: Gestionar campañas tipo: vista
Gestionar campañas
Centraliza las campañas de la organización por canal y permite administrar su ciclo de vida.
Que se logra
- Resultado: El negocio mantiene controlado el ciclo de vida de sus envíos masivos, desde borrador hasta finalización.
- Caso de uso: Una franquicia duplica la campaña de apertura de una sede, ajusta su audiencia y evita reconstruirla desde cero.
- Se combina con: Segmentos, programación de campañas y resultados de entrega.
Donde esta
- Ruta:
/[orgId]/campaigns,/[orgId]/campaigns/whatsapp,/[orgId]/campaigns/sms,/[orgId]/campaigns/email,/[orgId]/campaigns/ai-callingy/[orgId]/campaigns/automation - Acceso en UI:
Sidebar > Campaigns - Componente(s):
CampaignsView.tsx,AddCampaignDialog.tsx
Como funciona
- Abra el hub o una lista específica de canal.
- Use
Create Campaign; en listas de canal este se define automáticamente y en el hub se escoge antes de crear. - Abra una campaña borrador o programada para configurarla; las demás abren su vista de resultados.
- Use
Refresh, cambie paginación, duplique, elimine borradores/programadas o detenga envíos activos.
Reglas y validaciones
- El nombre exige al menos dos caracteres.
- Plan Free permite una campaña; el resto de planes no tiene este límite en esta pantalla.
- Solo se pueden eliminar campañas
draftoscheduled. - Solo se pueden detener campañas
starting_sending,sendingobatched; se solicita confirmación.
Backend
- Servicios:
campaigns(find/get/create/patch/remove). - Efectos: duplicar crea un borrador sin horario; detener cambia el estado de la campaña.
Relaciones
- Requiere: configuración de contenido, audiencia y horario.
- Dispara / afecta: ejecución por canal y métricas de campaña.
Notas
- La tabla permite ordenar por creación y cambiar el número de filas visibles.
id: campaign-scheduling modulo: campanas app: crm nombre: Programar y enviar campañas tipo: accion
Programar y enviar campañas
Guarda el avance como borrador, agenda un envío o inicia una campaña programada de inmediato.
Que se logra
- Resultado: Una campaña puede salir de inmediato o quedar preparada para ejecutarse en la fecha definida.
- Caso de uso: Un gimnasio agenda un recordatorio de renovación para la mañana anterior al vencimiento de membresías.
- Se combina con: Configuración de campaña y resultados de entrega.
Donde esta
- Ruta:
/[orgId]/campaigns/configuration/[campaignID] - Acceso en UI:
Campaign configuration > Schedule - Componente(s):
CampaignForm.tsx
Como funciona
- Seleccione fecha, hora y zona horaria.
- Confirme que la lista
Requirementsesté completa. - Use
Save Draftpara persistir sin agenda. - Use
Schedule Campaigny confirme el horario. - En una campaña programada, use
Send Nowpara iniciarla inmediatamente.
Reglas y validaciones
- No admite fechas anteriores.
- La hora se ofrece en intervalos de diez minutos.
- Requiere contenido, audiencia y horario; SMS también exige configuración lista.
Backend
- Servicios:
campaigns(patch),campaign-start-sending(create). - Efectos: el inicio prepara destinatarios y delega el envío al canal.
Relaciones
- Requiere: configuración de campaña completa.
- Dispara / afecta: lotes, entregas y métricas.
Notas
- La confirmación indica fecha, hora y zona horaria seleccionadas.
id: campaign-segments modulo: campanas app: crm nombre: Gestionar segmentos de campaña tipo: vista
Gestionar segmentos de campaña
Permite crear y mantener audiencias filtrables para campañas de cada canal.
Que se logra
- Resultado: El equipo conserva audiencias reutilizables basadas en criterios del CRM para usarlas en distintos envíos.
- Caso de uso: Una agencia crea un segmento de prospectos sin respuesta para campañas periódicas de seguimiento.
- Se combina con: Contactos, selección de audiencia y filtros de segmento.
Donde esta
- Ruta:
/[orgId]/campaigns/segments - Acceso en UI:
Campaigns > Segments - Componente(s):
SegmentsView.tsx,CreateSegmentDialog.tsx
Como funciona
- Filtre el listado por canal.
- Use
Create Segment, asigne nombre y canal. - Abra el editor para definir condiciones.
- Elimine segmentos desde la fila tras confirmar.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Name | texto | Sí | Identifica la audiencia. |
| Channel | selector | Sí | WhatsApp, SMS, AI Calling o Automation. |
Reglas y validaciones
- Los segmentos SMS incluyen contactos con teléfono y código de país válidos y excluyen opt-outs.
- La pantalla lista también segmentos de email existentes, aunque la creación disponible no ofrece ese canal.
Backend
- Servicios:
campaign-segments(find/create/patch/remove).
Relaciones
- Requiere: Contactos y datos disponibles para los filtros.
- Dispara / afecta: selección de audiencia en campañas.
Notas
- El listado admite paginación de 10 a 50 filas.
id: email-broadcast-unsubscribe modulo: campanas app: crm nombre: Cancelar suscripción de email tipo: publico
Cancelar suscripción de email
Permite a un destinatario dejar de recibir emails de marketing de un remitente y organización.
Que se logra
- Resultado: El destinatario puede bloquear futuros correos de marketing y el sistema registra esa preferencia.
- Caso de uso: Una marca de e-commerce respeta la baja solicitada desde un newsletter sin intervención manual del equipo.
- Se combina con: Email Broadcasting y campañas de email.
Donde esta
- Ruta:
/email-broadcast-unsubscribe?t=... - Acceso en UI: enlace de cancelación incluido en el email.
- Componente(s):
EmailBroadcastUnsubscribeClient.tsx
Como funciona
- El destinatario abre el enlace con su token.
- La página procesa la solicitud automáticamente.
- Muestra confirmación, estado de ya cancelado, enlace inválido o error.
Reglas y validaciones
- Sin token, el enlace se considera inválido.
- Si la dirección ya está suprimida, el resultado informa que ya estaba cancelada.
Backend
- Servicios:
email-broadcast-unsubscribe(create),email-broadcast-suppressions(create). - Efectos: agrega la dirección a la lista de supresiones de marketing.
Relaciones
- Requiere: un email de broadcasting con enlace de cancelación.
- Dispara / afecta: futuros envíos de campañas email.
Notas
- La página no exige iniciar sesión.
id: email-broadcasting-settings modulo: campanas app: crm nombre: Configurar Email Broadcasting tipo: configuracion
Configurar Email Broadcasting
Administra la capacidad de envío masivo de email mediante AWS SES.
Que se logra
- Resultado: La organización deja listos sus dominios, remitentes y reglas de supresión para enviar email comercial.
- Caso de uso: Una academia configura su dominio institucional y un remitente de admisiones antes de lanzar una campaña.
- Se combina con: Campañas de email, Email Builder y lista de supresión.
Donde esta
- Ruta:
/[orgId]/settings/email-channel - Acceso en UI:
Settings > Channels > Email Broadcasting - Componente(s):
EmailChannel.tsx,EmailChannelSetup.tsx,EmailChannelDomains.tsx,EmailChannelSenders.tsx,EmailBroadcastSendsHistory.tsx,EmailBroadcastSuppressionsPanel.tsx,EmailChannelHealth.tsx
Como funciona
- Active el canal desde el estado vacío.
- Añada un dominio y complete sus registros DNS; use
Load DNS / Verifypara comprobarlo. - Cree remitentes verificados en
Senders. - Consulte
Sends,Suppressionsy el estado de entregabilidad.
Reglas y validaciones
- Una campaña solo puede escoger remitentes verificados de un canal activo.
- Un dominio que falla después de DNS correcto puede requerir reiniciar la comprobación.
Backend
- Servicios:
email-blacklist-configurations,email-broadcast-sends,email-broadcast-suppressions. - Efectos: los envíos exitosos se cargan al wallet; fallidos o suprimidos no.
Relaciones
- Requiere: AWS SES y configuración DNS.
- Dispara / afecta: campañas de email y la cancelación de suscripción.
Notas
- El costo publicado es $0.80 por 1.000 envíos exitosos; el archivado opcional suma $0.05 por 1.000.
id: email-campaign-content modulo: campanas app: crm nombre: Configurar contenido de campaña de email tipo: configuracion
Configurar contenido de campaña de email
Asocia una plantilla de Email Builder y un remitente verificado a una campaña de email.
Que se logra
- Resultado: La campaña usa una plantilla visual y un remitente verificado para entregar un email preparado para producción.
- Caso de uso: Una tienda de ropa selecciona una plantilla de lanzamiento y su remitente de marketing para avisar una colección.
- Se combina con: Constructor de emails, Email Broadcasting y segmentos.
Donde esta
- Ruta:
/[orgId]/campaigns/configuration/[campaignID] - Acceso en UI:
Campaign configuration > Template - Componente(s):
EmailForm.tsx
Como funciona
- Seleccione o busque una plantilla.
- Elija un canal de email activo y una dirección remitente verificada.
- Revise asunto, texto de previsualización y la vista MJML.
- Use
Edit Templatepara modificar el diseño.
Reglas y validaciones
- Requiere plantilla, canal de email y remitente antes de guardar o programar.
- Solo se ofrecen identidades verificadas del canal seleccionado.
Backend
- Servicios:
campaigns(patch),email-broadcast-sends(create). - Efectos: los envíos exitosos se cargan al wallet; las supresiones no se envían.
Relaciones
- Requiere: Email Builder, Email Broadcasting y segmento de email.
- Dispara / afecta: historial de envíos y lista de supresiones.
Notas
- El diseño se edita fuera de la configuración de campaña.
id: segment-filter-builder modulo: campanas app: crm nombre: Diseñar filtros de segmento tipo: configuracion
Diseñar filtros de segmento
Construye la lógica de selección de contactos con condiciones y grupos anidados.
Que se logra
- Resultado: Se obtiene una audiencia precisa al combinar condiciones de contactos y reglas lógicas.
- Caso de uso: Una concesionaria filtra contactos de una ciudad que pidieron cotización pero aún no tienen un deal ganado.
- Se combina con: Contactos, Deals, Quotes y segmentos de campaña.
Donde esta
- Ruta:
/[orgId]/campaigns/segments/[segmentId] - Acceso en UI:
Campaigns > Segments > editar segmento - Componente(s):
SegmentBuilder.tsx,SegmentPreview.tsx
Como funciona
- Agregue una condición y seleccione campo, operador y valor.
- Elija
Match ALLoMatch ANY. - Agregue grupos para lógica independiente, hasta tres niveles.
- Revise la vista previa de contactos y espere el guardado automático.
Reglas y validaciones
- Operadores y tipo de valor dependen del campo seleccionado.
- El nombre se guarda al salir del campo si no está vacío.
- La previsualización JSON/SQL solo está disponible para admin y superadmin.
Backend
- Servicios:
contacts-segments-schema-builder(create),campaign-segments(get/patch). - Efectos: guarda la consulta y prepara la audiencia que utilizarán las campañas.
Relaciones
- Requiere: Contactos, compañías y deals disponibles para los filtros.
- Dispara / afecta: tamaño y composición de segmentos.
Notas
- Los cambios se guardan con una espera de un segundo.
- En propiedades de la conversación se puede filtrar por último mensaje recibido (cuando el contacto escribió), último mensaje enviado, fecha de última interacción y fecha de creación de la conversación.
- "Último mensaje recibido" anterior a una fecha incluye a quienes nunca escribieron. Si el contacto escribió de nuevo después, esa fecha pasa a ser la más reciente y ya no representa un mes calendario completo.
id: segment-splitting modulo: campanas app: crm nombre: Dividir un segmento tipo: accion
Dividir un segmento
Crea segmentos más pequeños a partir de una audiencia ya definida.
Que se logra
- Resultado: Una audiencia grande se distribuye en grupos más pequeños para ejecutar envíos escalonados o pruebas.
- Caso de uso: Una tienda divide sus suscriptores en grupos para dosificar una promoción por WhatsApp.
- Se combina con: Segmentos de campaña y programación de campañas.
Donde esta
- Ruta:
/[orgId]/campaigns/segments/[segmentId] - Acceso en UI:
Segment editor > Split - Componente(s):
SplitSegmentDialog.tsx
Como funciona
- Guarde condiciones válidas en el segmento.
- Abra
Split. - Indique la cantidad de contactos por segmento.
- Confirme y use los nuevos segmentos en una campaña.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Contacts per segment | número entero | Sí | Debe ser mayor que cero; el valor inicial es 2.000. |
Reglas y validaciones
- Solo se habilita cuando el segmento guardado tiene al menos una condición.
- El número debe ser entero positivo.
Backend
- Servicios:
campaign-segments-split(create). - Efectos: devuelve las audiencias creadas y su conteo.
Relaciones
- Requiere: un segmento configurado.
- Dispara / afecta: selección de audiencia, especialmente en campañas WhatsApp.
Notas
- El segmento original permanece disponible.
id: sms-campaign-content modulo: campanas app: crm nombre: Redactar campaña SMS o MMS tipo: configuracion
Redactar campaña SMS o MMS
Define el mensaje, número remitente y adjuntos opcionales para una campaña SMS.
Que se logra
- Resultado: El negocio define el mensaje y, cuando corresponde, el recurso multimedia que llegará por SMS o MMS.
- Caso de uso: Un taller automotriz envía un SMS de mantenimiento a clientes con vehículos próximos a revisión.
- Se combina con: Contactos, segmentos y Calling & SMS.
Donde esta
- Ruta:
/[orgId]/campaigns/configuration/[campaignID] - Acceso en UI:
Campaign configuration > Template - Componente(s):
SmsForm.tsx
Como funciona
- Seleccione un número remitente activo.
- Redacte el mensaje y revise caracteres, codificación y segmentos.
- Opcionalmente agregue archivos para convertirlo en MMS.
- Consulte la previsualización antes de guardar.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Sender Phone Number | selector | Sí | Número activo de la organización. |
| Message | texto largo | Sí, salvo con adjunto | Muestra codificación y segmentos. |
| Media Attachments | archivo | No | Admite imágenes, video y documentos. |
Reglas y validaciones
- Requiere un remitente y texto o medios.
- Debe existir configuración SMS con remitente alfanumérico.
- Mensajes extensos se facturan por segmentos.
Backend
- Servicios:
campaigns(patch),campaign-sms-send-message(create). - Efectos: entrega mediante Telnyx.
Relaciones
- Requiere:
Settings > Calling & SMS > SMSy segmento SMS. - Dispara / afecta: wallet y conversaciones de respuesta.
Notas
- La interfaz distingue GSM-7 de UCS-2 para el conteo.
id: whatsapp-campaign-content modulo: campanas app: crm nombre: Configurar contenido de campaña de WhatsApp tipo: configuracion
Configurar contenido de campaña de WhatsApp
Permite elegir una plantilla de WhatsApp aprobada y revisar su contenido antes de una campaña.
Que se logra
- Resultado: Se prepara un envío masivo con una plantilla de WhatsApp aprobada por Meta y variables de cada contacto.
- Caso de uso: Una clínica envía recordatorios de cita por WhatsApp a pacientes elegibles con fecha y hora personalizadas.
- Se combina con: Plantillas de WhatsApp, Contactos, segmentos y Conversaciones.
Donde esta
- Ruta:
/[orgId]/campaigns/configuration/[campaignID] - Acceso en UI:
Campaign configuration > Template - Componente(s):
WhatsAppForm.tsx,WhatsAppTemplatePreview.tsx
Como funciona
- Busque o recargue plantillas.
- Seleccione una plantilla aprobada disponible para campañas.
- Revise la previsualización y las variables detectadas.
- Use
Newsi debe crear una plantilla.
Reglas y validaciones
- Solo aparecen plantillas
APPROVEDdisponibles para campañas. - Las plantillas
AUTHENTICATIONexcluyen destinatarios sin teléfono. - Las variables requieren datos disponibles al momento de enviar.
Backend
- Servicios:
campaigns(patch),campaign-whatsapp-send-message(create). - Efectos: el envío crea o localiza la conversación y solo registra el mensaje si Meta lo acepta.
Relaciones
- Requiere: plantillas de WhatsApp y un segmento WhatsApp.
- Dispara / afecta: Meta WhatsApp Cloud API y resultados por lote.
Notas
- Los contactos identificados solo por usuario de WhatsApp pueden recibir plantillas de marketing o utilidad.
id: canales-mensajeria app: crm nombre: Canales de mensajería estado: shipped permiso: can_access_crm
Canales de mensajería
Conecta, supervisa y configura los canales que alimentan el inbox omnicanal.
Para que sirve
- Un restaurante conecta WhatsApp, Instagram y Messenger para atender reservas desde
Conversations. - Una tienda en línea instala Webchat en su sitio y convierte consultas web en conversaciones del CRM.
- Una agencia conecta Gmail u Outlook para que los correos de clientes queden junto con el resto de su atención.
- Un e-commerce verifica su dominio y configura AWS SES antes de enviar campañas por email.
Que lo hace diferente
- Los canales no quedan aislados: todos alimentan el inbox omnicanal y el contacto compartido con el CRM.
- WhatsApp incluye diagnóstico de permisos, plantillas para revisión de Meta y sincronización inicial de contactos e historial cuando el tipo de conexión lo permite.
- Webchat entrega conversaciones al mismo flujo que los canales Meta y puede permitir adjuntos bajo configuración de la organización.
- Email combina buzones operativos Gmail/Outlook con un canal de difusión AWS SES, dominios DKIM y reglas de filtrado.
Acceso
- Ruta principal:
/[orgId]/settings/channel-whatsapp - Como se llega:
Avatar menu > Settings > Channels - Permiso requerido:
can_access_crm; algunos controles son de admin o superadmin.
Alcance tecnico
- Frontend: rutas de canales WhatsApp, Instagram, Messenger, TikTok, Webchat, inbox y email
- Backend:
whatsapp-channels,instagram-channels,messenger-channels,webchat-widget-settings,inbox-channels,email-channels - Superficies publicas: widget Webchat instalado en sitios externos
- Integraciones externas: Meta, Google, Microsoft y AWS SES
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Canal WhatsApp | whatsapp-channel.md | Conexión y gestión Meta. |
| Diagnóstico WhatsApp | whatsapp-health-check.md | Salud y permisos. |
| Plantillas WhatsApp | whatsapp-templates.md | Creación para revisión. |
| Sincronización SMB | whatsapp-smb-sync.md | Contactos e historial. |
| Instagram y Messenger | meta-messaging-channels.md | Canales Meta. |
| Webchat | webchat-channel.md | Widget y clave. |
| Buzones Gmail y Outlook | inbox-email-channels.md | OAuth, firma y reconexión. |
| Filtros de correo | email-filtering-rules.md | Listas y spam. |
| Difusión por email | email-broadcast-channel.md | Canal AWS SES. |
| Dominios de envío | email-sending-domains.md | DKIM y verificación. |
| Mantenimiento de conversaciones | channel-conversation-maintenance.md | Ocultar o restaurar. |
Relaciones
- Depende de: Organización, Contactos y proveedores externos.
- Usado por: Conversaciones, Campañas y Automatizaciones.
Limitaciones y notas
- TikTok tiene una ruta de demostración, pero no se confirmó flujo de conexión equivalente.
id: channel-conversation-maintenance modulo: canales-mensajeria app: crm nombre: Mantenimiento de conversaciones por canal tipo: accion
Mantenimiento de conversaciones por canal
Permite ocultar conversaciones del canal actual y restaurar las ocultadas recientemente.
Que se logra
- Resultado: administradores limpian la vista operativa de un canal sin borrar los mensajes y pueden revertir la decisión dentro del plazo disponible.
- Caso de uso: una agencia oculta conversaciones antiguas de un canal de Instagram tras una migración y restaura una si un cliente vuelve a escribir.
- Se combina con: Conversaciones y Conectar y administrar WhatsApp.
Donde esta
- Ruta:
/[orgId]/settings/channel-whatsapp,/[orgId]/settings/channel-instagram,/[orgId]/settings/channel-messengery/[orgId]/settings/channel-webchat - Acceso en UI:
Channel settings > Conversation maintenance - Componente(s):
ChannelConversationMaintenance.tsx,HiddenChannelConversations.tsx
Como funciona
- Abrir la configuración de un canal conectado.
- Elegir
Hide all conversationsoReview hidden conversations. - Revisar la tabla y confirmar
Restore hidden conversations.
Reglas y validaciones
- Solo admin y superadmin pueden usarla.
- Restauración incluye únicamente conversaciones ocultadas durante los últimos 10 días y del canal actual.
Backend
- Servicios:
conversations-channel-maintenance(método: create),conversations(método: find)
Relaciones
- Requiere: canal conectado.
- Dispara / afecta: visibilidad de Conversaciones.
Notas
- Ocultar no elimina los mensajes.
id: email-broadcast-channel modulo: canales-mensajeria app: crm nombre: Configurar canal de difusión por email tipo: configuracion
Configurar canal de difusión por email
Administra el canal AWS SES de envío masivo, archivado de mensajes y dominios de salida.
Que se logra
- Resultado: la organización dispone de un canal controlado para enviar emails masivos y conservar los enviados como referencia en el inbox.
- Caso de uso: un e-commerce activa el archivado para que soporte pueda consultar la campaña que recibió un comprador antes de responderle.
- Se combina con: Verificar dominios de envío, Campañas y Conversaciones.
Donde esta
- Ruta:
/[orgId]/settings/email-channel - Acceso en UI:
Avatar menu > Settings > Channels > Email Broadcasting - Componente(s):
EmailChannel.tsx,EmailChannelHealth.tsx
Como funciona
- Crear o completar la configuración del canal.
- Activar o desactivar
Message Archiving. - Consultar cuotas de envío.
- Como superadmin, pausar o reanudar el envío.
Reglas y validaciones
- La configuración de SES y el estado global de envío son exclusivos de superadmin.
Backend
- Servicios:
email-channels,email-channel-identities(método: find/create/patch) - Efectos: AWS SES gestiona el envío y verificación.
Relaciones
- Requiere: AWS SES y dominios de envío.
- Dispara / afecta: Campañas y referencia de correo en el inbox.
Notas
- El archivado guarda el contenido enviado para consulta en conversaciones.
id: email-filtering-rules modulo: canales-mensajeria app: crm nombre: Reglas de filtrado de correo tipo: configuracion
Reglas de filtrado de correo
Configura listas permitidas, bloqueadas y palabras clave de spam para los buzones conectados.
Que se logra
- Resultado: los buzones conectados aplican criterios de confianza y spam antes de que el correo llegue a la operación del inbox.
- Caso de uso: una agencia bloquea dominios de spam conocidos y permite los dominios de sus clientes para reducir revisiones manuales.
- Se combina con: Conectar buzones Gmail y Outlook y Conversaciones.
Donde esta
- Ruta:
/[orgId]/settings/inbox-channels - Acceso en UI:
Inbox Channels > Email Filtering Rules - Componente(s):
page.tsx
Como funciona
- Elegir pestaña
WhitelistoBlacklist. - Elegir
Add Rulee indicar correo o dominio. - Añadir palabras desde
Spam Keywords. - Eliminar una regla o usar
Remove all.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Rule Type | selección | Sí | Correo o dominio permitido/bloqueado. |
| Match Type | selección | No | Coincidencia exacta o por usuario para correos. |
| Value | texto | Sí | Correo, dominio o palabra. |
Reglas y validaciones
- No se pueden combinar reglas organizacionales de lista permitida y bloqueada.
- No admite valores vacíos, formatos inválidos ni valores duplicados.
- Las reglas de sistema son solo lectura.
Backend
- Servicios:
email-blacklist-configurations(método: find/create/remove)
Relaciones
- Requiere: buzones de correo conectados.
- Dispara / afecta: filtrado de correo entrante.
Notas
- Las palabras de spam se administran por separado.
id: email-sending-domains modulo: canales-mensajeria app: crm nombre: Verificar dominios de envío tipo: configuracion
Verificar dominios de envío
Agrega dominios a AWS SES, presenta los registros DKIM y verifica su propagación.
Que se logra
- Resultado: el dominio propio queda verificado para el envío de email a través del canal de difusión.
- Caso de uso: una academia valida su dominio institucional antes de enviar comunicaciones de matrícula desde una dirección reconocible.
- Se combina con: Configurar canal de difusión por email y Campañas.
Donde esta
- Ruta:
/[orgId]/settings/email-channel - Acceso en UI:
Email Broadcasting > Sending Domains - Componente(s):
EmailChannel.tsx
Como funciona
- Escribir un dominio y elegir
Add Domain. - Copiar los tres registros DKIM al proveedor DNS.
- Elegir
Load DNS / Verifyhasta completar la verificación. - Eliminar el dominio cuando no se requiera.
Reglas y validaciones
- Solo se aceptan dominios públicos; no URLs, correos, IP ni localhost.
- Si AWS terminó el intento,
Load DNS / Verifyreinicia la comprobación sin regenerar los registros.
Backend
- Servicios:
email-channel-identities(método: find/create/patch/remove)
Relaciones
- Requiere: Canal de difusión por email y DNS del dominio.
- Dispara / afecta: capacidad de envío de campañas.
Notas
- La propagación DNS puede tomar hasta 72 horas.
id: inbox-email-channels modulo: canales-mensajeria app: crm nombre: Conectar buzones Gmail y Outlook tipo: integracion
Conectar buzones Gmail y Outlook
Conecta cuentas Gmail u Outlook para enviar y recibir correos dentro del inbox CRM.
Que se logra
- Resultado: los correos de una cuenta operativa aparecen en el inbox y se responden con el contexto del contacto CRM.
- Caso de uso: un despacho legal conecta Outlook para que las comunicaciones por email queden junto a los mensajes del mismo cliente.
- Se combina con: Conversaciones, Contactos y Reglas de filtrado de correo.
Donde esta
- Ruta:
/[orgId]/settings/inbox-channels - Acceso en UI:
Avatar menu > Settings > Inbox Channels - Componente(s):
page.tsx,DeleteInboxChannelDialog.tsx
Como funciona
- Elegir
Connect GmailoConnect Outlook. - Completar autorización en la ventana OAuth.
- Consultar estado, editar firma, reconectar o eliminar el buzón.
- En Gmail, usar
Refresh Tokensi hace falta renovar la conexión.
Reglas y validaciones
- Solo puede conectarse un canal de cada proveedor según los controles de la página.
Backend
- Servicios:
inbox-channels,gmail-inbox-token-refresh,crm-emails(método: find/create/patch/remove)
Relaciones
- Requiere: cuenta Gmail u Outlook.
- Dispara / afecta: Conversaciones y correos CRM.
Notas
- Los estados visibles incluyen pendiente, activo, inactivo y error.
id: meta-messaging-channels modulo: canales-mensajeria app: crm nombre: Conectar Instagram y Messenger tipo: integracion
Conectar Instagram y Messenger
Conecta los canales de mensajería Meta para recibir y responder conversaciones desde el inbox.
Que se logra
- Resultado: los mensajes privados de Instagram o Messenger pasan a la misma operación de atención y CRM que los demás canales.
- Caso de uso: una marca de moda responde desde un solo inbox a consultas que llegan por Instagram y Facebook sin duplicar contactos.
- Se combina con: Conversaciones, Contactos y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/channel-instagramy/[orgId]/settings/channel-messenger - Acceso en UI:
Avatar menu > Settings > Channels > InstagramoMessenger - Componente(s):
InstagramChannel.tsx,MessengerChannel.tsx
Como funciona
- Abrir el canal deseado.
- Autorizar Meta y seleccionar la cuenta o página disponible.
- Revisar estado y actualizar, reconectar o desconectar según corresponda.
Reglas y validaciones
- Messenger muestra un solo canal por organización; se debe desconectar antes de cambiar de página.
- Las páginas sin token de acceso no aparecen en el selector de Messenger.
Backend
- Servicios:
instagram-channels,messenger-channels(método: find/create/patch/remove) - Hooks relevantes: conexión y cancelación de suscripciones de webhooks.
Relaciones
- Requiere: acceso administrativo a recursos Meta.
- Dispara / afecta: Conversaciones.
Notas
- Los mensajes de Messenger están sujetos a las reglas de mensajería de Meta.
id: webchat-channel modulo: canales-mensajeria app: crm nombre: Configurar Webchat tipo: configuracion
Configurar Webchat
Habilita el widget web, genera su clave de integración y permite personalizarlo.
Que se logra
- Resultado: las consultas de visitantes del sitio se convierten en conversaciones webchat dentro del inbox de la organización.
- Caso de uso: una academia instala el widget en su página de cursos para que admisiones atienda a los interesados desde
Conversations. - Se combina con: Conversaciones, Enviar adjuntos y Asistentes de IA.
Donde esta
- Ruta:
/[orgId]/settings/channel-webchat - Acceso en UI:
Avatar menu > Settings > Channels > Webchat - Componente(s):
WebchatChannel.tsx
Como funciona
- Activar
Enable Webchat. - Copiar la
API Keyy el script de integración. - Personalizar el widget y decidir si permite adjuntos.
- Instalar el script antes de
</body>del sitio. - Regenerar la clave si se compromete.
Reglas y validaciones
- La primera activación crea una clave; desactivar no la borra.
- La clave queda expuesta en JavaScript del cliente y debe restringirse a dominios autorizados.
Backend
- Servicios:
webchat-widget-settings(método: find/create/patch)
Relaciones
- Requiere: sitio web donde insertar el script.
- Dispara / afecta: Conversaciones de canal webchat.
Notas
- Visitantes pueden adjuntar imágenes y documentos si se habilita la opción.
id: whatsapp-channel modulo: canales-mensajeria app: crm nombre: Conectar y administrar WhatsApp tipo: integracion
Conectar y administrar WhatsApp
Conecta uno o varios números de WhatsApp Business y administra su estado, métricas y reconexión.
Que se logra
- Resultado: cada número empresarial queda disponible para recibir y enviar mensajes desde
Conversations, con visibilidad de su estado operativo. - Caso de uso: un restaurante conecta su WhatsApp Business para que reservas y pedidos entren al inbox donde trabaja todo el equipo.
- Caso de uso: una empresa conecta un número de Ventas y otro de Soporte en la misma organización; cada conversación muestra por qué número llegó y las respuestas salen por ese mismo número.
- Se combina con: Conversaciones, Plantillas de WhatsApp y Diagnóstico de canal WhatsApp.
Donde esta
- Ruta:
/[orgId]/settings/channel-whatsapp(?channelId=<id>abre un número concreto) - Acceso en UI:
Avatar menu > Settings > Channels > WhatsApp - Componente(s):
WhatsAppChannel.tsx,WhatsAppNumbersBar.tsx,EditWhatsAppChannelDialog.tsx
Como funciona
- Elegir
Connect WhatsApp(oConectar otro númerosi ya hay uno) y completar el registro integrado de Meta. - La lista
Números de WhatsApp conectadosmuestra todos los números; se puede poner un nombre interno a cada uno y elegir el número predeterminado. - Seleccionar un número para revisar estado, calidad, posibilidad de envío y plantillas en
General. - Usar actualizar, reconectar o eliminar desde la barra del número seleccionado.
Reglas y validaciones
- Cada conversación queda ligada a un número. Un mismo contacto tiene una conversación separada por cada número con el que habla.
- Las respuestas, la IA y las automatizaciones sobre una conversación siempre salen por el número de esa conversación.
- El número predeterminado se usa cuando un flujo nuevo no elige número (iniciar conversación, campañas, nodos de automatización, herramienta de IA). Solo hay uno por organización; si se elimina, otro número pasa a ser el predeterminado.
- Las plantillas pertenecen a la cuenta de WhatsApp Business (WABA) del número: solo se pueden enviar desde números de esa misma WABA.
- Eliminar un número oculta solo sus conversaciones; los demás números siguen funcionando.
- La reconexión vuelve a solicitar permisos de Meta.
Backend
- Servicios:
whatsapp-channels,whatsapp-channel-health-status(método: find/create/patch/remove/get) - Campos por número:
label(nombre interno),is_default(número predeterminado). - Efectos: registra el número para conversaciones entrantes y salientes;
conversations.whatsapp_channel_idindica el número de cada conversación.
Relaciones
- Requiere: cuenta Meta/WhatsApp Business.
- Dispara / afecta: Conversaciones, plantillas WhatsApp, campañas (
Enviar desde el número), reglas de autoasignación (condiciónNúmero de WhatsApp) y disparadores de automatización.
Notas
- Los canales de onboarding de aplicación de negocio habilitan la pestaña
SMB Sync. - En el inbox, el filtro de canal permite elegir un número concreto y cada conversación muestra
via <número>cuando la organización tiene más de uno.
id: whatsapp-health-check modulo: canales-mensajeria app: crm nombre: Diagnóstico de canal WhatsApp tipo: vista
Diagnóstico de canal WhatsApp
Ejecuta un diagnóstico de mensajería, cuenta, plantillas y configuración técnica del canal.
Que se logra
- Resultado: se identifica si un problema para enviar proviene de mensajería, cuenta, plantillas o permisos antes de escalarlo.
- Caso de uso: una clínica detecta que su canal dejó de responder porque el token de Meta venció y vuelve a conectarlo.
- Se combina con: Conectar y administrar WhatsApp y Plantillas de WhatsApp.
Donde esta
- Ruta:
/[orgId]/settings/channel-whatsapp - Acceso en UI:
WhatsApp > icono de actividad - Componente(s):
HealthStatusDialog.tsx
Como funciona
- Abrir el diálogo de salud desde un canal conectado.
- Revisar
Messaging,Account,TemplatesyTechnical. - Elegir
Run Health Check Againdespués de corregir un problema.
Reglas y validaciones
- Abrir el diálogo inicia la comprobación.
Backend
- Servicios:
whatsapp-channel-health-status(método: get)
Relaciones
- Requiere: Canal WhatsApp conectado.
- Dispara / afecta: diagnóstico para reconexión y configuración Meta.
Notas
- Puede señalar permisos, vencimiento de token y capacidad real de enviar.
id: whatsapp-smb-sync modulo: canales-mensajeria app: crm nombre: Sincronizar contactos e historial de WhatsApp tipo: accion
Sincronizar contactos e historial de WhatsApp
Importa contactos o historial durante la ventana de onboarding de una cuenta WhatsApp Business App.
Que se logra
- Resultado: contactos y conversaciones previas de una cuenta elegible se incorporan al CRM durante su incorporación inicial.
- Caso de uso: una agencia migra el WhatsApp Business de un cliente y conserva los interlocutores y el historial reciente para que el equipo continúe atendiendo.
- Se combina con: Conectar y administrar WhatsApp, Contactos y Conversaciones.
Donde esta
- Ruta:
/[orgId]/settings/channel-whatsapp - Acceso en UI:
WhatsApp > SMB Sync - Componente(s):
WhatsAppChannel.tsx
Como funciona
- Abrir la pestaña
SMB Syncen un canal compatible. - Elegir la sincronización de contactos o historial.
- Iniciar la sincronización y esperar su finalización.
Reglas y validaciones
- Se bloquea cuando hay autoasignación por IA activa, otra sincronización en curso o venció la ventana de onboarding de 24 horas.
Backend
- Servicios:
whatsapp-channels(método: patch)
Relaciones
- Requiere: canal con onboarding de aplicación de negocio.
- Dispara / afecta: Contactos y Conversaciones.
Notas
- No aparece para todos los tipos de conexión WhatsApp.
id: whatsapp-templates modulo: canales-mensajeria app: crm nombre: Crear plantillas de WhatsApp tipo: configuracion
Crear plantillas de WhatsApp
Crea plantillas para revisión de Meta con encabezado, contenido, variables y previsualización.
Que se logra
- Resultado: la organización prepara mensajes aprobables por Meta para iniciar o retomar conversaciones de WhatsApp con contenido consistente.
- Caso de uso: un e-commerce crea una plantilla con variables para notificar envío y la usa después desde la conversación del comprador.
- Se combina con: Conectar y administrar WhatsApp y Enviar plantillas de WhatsApp.
Donde esta
- Ruta:
/[orgId]/settings/channel-whatsapp-templates-creation - Acceso en UI:
Settings > Channels > WhatsApp templates - Componente(s):
WhatsAppChannelTemplatesCreation.tsx
Como funciona
- Definir nombre, categoría e idioma.
- Configurar encabezado opcional, cuerpo, pie y ejemplos de variables.
- Revisar la vista previa y elegir
Submit for Review.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Template Name | texto | Sí | Se prepara para Meta. |
| Category | selección | Sí | Marketing, utilidad o autenticación. |
| Language | selección | Sí | Idioma de la plantilla. |
| Header | selección | No | Texto, imagen, video o documento. |
| Message | área de texto | Sí | Admite variables. |
Reglas y validaciones
- Cada variable detectada necesita un ejemplo; el encabezado de texto permite máximo una variable.
Backend
- Servicios:
whatsapp-channels,whatsapp-templates(método: find/create)
Relaciones
- Requiere: Canal WhatsApp activo.
- Dispara / afecta: Enviar plantillas desde Conversaciones.
Notas
- Por confirmar: el comportamiento de edición posterior de plantillas revisado no está expuesto en esta pantalla.
id: catalogos-publicos app: crm nombre: Catálogos públicos estado: shipped permiso: can_access_settings
Catálogos públicos
Páginas públicas de productos configurables y compartibles por cada organización. Con el checkout activo, el catálogo funciona como tienda online (ecommerce): carrito, Add to cart / Buy now, pago con las pasarelas de la organización (Stripe o Wompi) o pagar después, envío o recogida, multi-moneda y pedidos que llegan a Finance > Orders.
Para que sirve
- Una tienda vende online desde el catálogo: el cliente agrega productos al carrito, elige envío o recogida y paga con tarjeta (Stripe o Wompi) sin iniciar sesión.
- Una tienda comparte una página pública con sus productos para que clientes consulten referencias sin iniciar sesión.
- Un restaurante publica solo categorías seleccionadas y dirige a los visitantes hacia WhatsApp para hacer consultas.
- Una marca inserta un catálogo en una landing mediante iframe y conserva el inventario administrado en Apex.
- Un distribuidor prepara catálogos diferentes para líneas o audiencias específicas sin duplicar los productos.
- Un negocio controla qué productos, precios, medios y filtros ve el visitante desde un editor interno.
Que lo hace diferente
- Cada catálogo público se alimenta directamente de Productos, categorías y media de Apex, sin exportar ni sincronizar inventario a otra herramienta.
- Un enlace puede limitarse a todos los productos, categorías concretas o una selección específica, y ordenar las categorías visibles de forma independiente.
- El visitante puede abrir el detalle, explorar media, buscar y, si el catálogo lo habilita y existe canal configurado, iniciar contacto por WhatsApp.
- Los mismos enlaces de catálogo se pueden enviar desde el composer de Conversaciones usando los modos de envío de productos.
- El checkout cobra con las pasarelas propias de la organización (formulario embebido o redirección), en varias monedas con precios fijos o convertidos, con inventario opcional, pedido mínimo y recuperación de checkouts abandonados; cada compra crea un pedido, un contacto y puede generar la factura al pagarse.
- El editor configura contenido, layouts y tema, mientras
embed=truepermite integrar el catálogo sin encabezado ni pie de página.
Acceso
- Ruta principal:
/[orgId]/settings/products/catalog-links - Como se llega:
Settings > Products > Catalog Links - Permiso requerido:
can_access_settings
Alcance tecnico
- Frontend: editor
CatalogLinkEditorPage, listadoCatalogLinksManagementy ruta pública/c/[orgId]/[slug]. - Backend:
catalog-links,public-catalog,public-catalog-checkoutyorders. - Superficies publicas: catálogo, categoría y producto sin inicio de sesión; checkout
/c/[orgId]/[slug]/checkouty página del pedido/o/[path].
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Gestionar enlaces | catalog-link-management.md | Crea, activa, comparte, edita y elimina catálogos. |
| Configurar catálogo | catalog-link-editor.md | Define selección, marca, contenido, layout y tema. |
| Seleccionar productos | catalog-product-selection.md | Limita el catálogo a todo, categorías o productos. |
| Personalizar presentación | catalog-display-and-theme.md | Configura layout, visibilidad y colores. |
| Explorar catálogo público | public-catalog-browsing.md | Permite buscar, filtrar, abrir y compartir productos. |
| Checkout y pagos | catalog-checkout.md | Carrito, multi-moneda, envío o recogida y pago online con Stripe o Wompi que crea pedidos. |
Relaciones
- Depende de: Productos, categorías y canal de WhatsApp opcional; Payment Gateways para pago online.
- Usado por: clientes externos, enlaces compartidos y Pedidos (checkout).
Limitaciones y notas
- Un enlace inactivo no está disponible para visitantes.
- La búsqueda semántica puede configurarse, pero su disponibilidad efectiva depende de la configuración del catálogo.
id: catalog-checkout modulo: catalogos-publicos app: crm nombre: Checkout y pagos del catálogo tipo: configuracion
Checkout y pagos del catálogo
Convierte un catálogo público en tienda: carrito, checkout con datos del comprador, envío o recogida, multi-moneda y pago online con las pasarelas propias de la organización.
Que se logra
- Resultado: el visitante agrega productos, paga con Stripe o Wompi (o elige pagar después) y el pedido aparece en
Finance > Orders. - Caso de uso: una tienda de accesorios en Colombia vende en COP con Wompi y en USD con Stripe desde el mismo catálogo, con envío nacional y recogida en tienda.
- Se combina con: Pedidos, Payment Gateways, Productos (precios por moneda e inventario) y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/products/catalog-links/[catalogLinkId](editor) y/c/[orgId]/[slug]/checkout(público) - Acceso en UI: editor del catálogo > pestaña
Checkout; en la configuración de CTA de producto activarAdd to carty/oBuy now
Como funciona
- En la pestaña
CheckoutactivaEnable checkout. - En
Currencieselige las monedas que el comprador puede usar, la moneda por defecto yConverted price rounding. - En
PaymentsactivaAccept online payments, elige pasarelas yPayment experience(Embedded card formoRedirect to the gateway page); opcionalmenteAllow pay latercon instrucciones. - En
Buyer contactdefine si se exige correo, teléfono, cualquiera o ambos. - En
Deliveryagrega métodos de envío (precio yFree over), países permitidos y puntos de recogida. - En
Orderselige numeración, propietario, monto mínimo, miembros a notificar, tiempo para abandono yCreate invoice when paid. - En el catálogo público el comprador usa
Add to cart/Buy now, revisa el carrito y paga en/c/[orgId]/[slug]/checkout; al terminar va a/o/[path].
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Enable checkout | interruptor | Sí | Sin él, los CTA Add to cart y Buy now no se muestran. |
| Currencies / Default | multiselección | No | Solo monedas habilitadas en la organización; sin selección usa la moneda base. |
| Converted price rounding | lista | No | No rounding, Whole number, Ends in .99, Nearest 100, Nearest 1,000. Solo afecta precios convertidos. |
| Accept online payments / gateways | interruptor y selección | No | Por defecto se ofrecen todas las pasarelas activas; Wompi solo cuando se paga en COP. |
| Payment experience | lista | No | Formulario embebido o redirección a la pasarela. |
| Payment numbering | lista | No | Numeración del pago recibido. |
| Allow pay later | interruptor y texto | No | El pedido se crea sin pago y muestra las instrucciones. |
| Buyer contact | lista | Sí | Email required, Phone required, Email or phone, Email and phone. |
| Shipping methods | lista | No | Nombre, precio y Free over (optional) en la moneda por defecto. |
| Ship to countries | texto | No | Códigos ISO separados por coma; vacío envía a cualquier país. |
| Require shipping address | interruptor | No | La dirección usa autocompletado de Google Places. |
| Pickup locations | lista | No | Nombre, dirección e instrucciones. |
| Order numbering / Order owner | lista | No | Numeración order y miembro propietario. |
| Minimum order amount | importe | No | Bloquea pedidos por debajo del mínimo. |
| Notify members about new orders | multiselección | No | Si nadie está seleccionado se notifica al propietario. |
| Mark checkout as abandoned after (minutes) | número | No | Mínimo 5, por defecto 60. |
| Create invoice when paid | interruptor | No | Con numeración de factura opcional. |
Reglas y validaciones
- Cada producto tiene su moneda y puede tener
Fixed prices in other currencies; si no hay precio fijo, se convierte con la tasa de cambio y el redondeo del catálogo. - Con
Track inventory, el comprador no puede pedir más que el stock disponible salvo que el producto tengaKeep selling when out of stock. - El carrito vive en el navegador; el checkout se guarda en el servidor cuando el comprador deja correo o teléfono, lo que habilita la recuperación.
- El comprador se asocia a un contacto existente por correo o teléfono, o se crea uno nuevo.
- Con pago online, el pedido se crea cuando el pago se confirma; con pagar después, al enviar el checkout.
Backend
- Servicios:
catalog-links(configuración enpage_config.checkout),public-catalog(precios por moneda),public-catalog-checkout(quote, save, restore, submit, status),payment-links,public-payment-charge,orders. - Efectos: correo de confirmación y de pago al comprador, notificación a miembros, triggers
New order placed,Order paidyCheckout abandoned.
Relaciones
- Requiere: pasarela activa para pago online y esquema de numeración
order. - Dispara / afecta: Pedidos, Checkouts abandonados, inventario de productos.
id: catalog-display-and-theme modulo: catalogos-publicos app: crm nombre: Personalizar presentación del catálogo tipo: configuracion
Personalizar presentación del catálogo
Define cómo se muestran los productos y la identidad visual de la página pública.
Que se logra
- Resultado: la página pública refleja la marca y muestra la información comercial elegida en el formato más adecuado.
- Caso de uso: una marca de diseño usa un layout de cuadrícula y colores propios para presentar su colección en una landing.
- Se combina con: configuración del catálogo y exploración de catálogo público.
Donde esta
- Ruta:
/[orgId]/settings/products/catalog-links/[catalogLinkId] - Acceso en UI:
Catalog editor > ContentyTheme - Componente(s):
CatalogLinkEditorPage.tsx
Como funciona
- Ajuste precios, SKU, botón de compartir, imágenes, barra de categorías y búsqueda.
- Elija
Grid,List,Link tree (products)oLink tree (categories). - Configure alineación y el layout de productos por categoría si selecciona esa presentación.
- Elija un preset o colores personalizados.
Reglas y validaciones
- Los layouts de árbol ocultan la barra fija de categorías.
- Las imágenes de lista y detalle se controlan por separado.
Backend
- Servicios:
catalog-links(patch).
Relaciones
- Requiere: enlace de catálogo.
- Dispara / afecta: experiencia pública.
Notas
- La llamada a WhatsApp solo se muestra si está habilitada y existe un canal configurado.
id: catalog-link-editor modulo: catalogos-publicos app: crm nombre: Configurar un catálogo público tipo: configuracion
Configurar un catálogo público
Construye una página pública de productos con identidad de marca, contenido y selección propia.
Que se logra
- Resultado: un catálogo público queda adaptado a una línea comercial con marca, contenido, selección y apariencia propios.
- Caso de uso: un distribuidor prepara un catálogo para mayoristas con su propio nombre, hero y selección de referencias.
- Se combina con: productos, categorías, selección de productos y presentación del catálogo.
Donde esta
- Ruta:
/[orgId]/settings/products/catalog-links/newy/[orgId]/settings/products/catalog-links/[catalogLinkId] - Acceso en UI:
Catalog Links > New catalog linkoEdit - Componente(s):
CatalogLinkEditorPage.tsx
Como funciona
- Complete
Basics: nombre, slug, modo y activo. - Ajuste hero, banner y logo.
- Seleccione contenido, layout y opciones de presentación.
- Defina colores en
Theme. - Revise la previsualización y guarde.
Reglas y validaciones
- El slug admite minúsculas, números y guiones.
- La selección de categorías visible determina el orden público.
Backend
- Servicios:
catalog-links(get/create/patch).
Relaciones
- Requiere: Productos y categorías.
- Dispara / afecta: catálogo público.
Notas
- El editor permite previsualizar al introducir un slug, antes de guardar.
id: catalog-link-management modulo: catalogos-publicos app: crm nombre: Gestionar enlaces de catálogo tipo: vista
Gestionar enlaces de catálogo
Lista enlaces públicos y permite crear, compartir, activar, editar o eliminar cada catálogo.
Que se logra
- Resultado: la organización administra qué catálogos públicos existen, cuáles están disponibles y cómo se comparten.
- Caso de uso: una marca crea un enlace para su colección de temporada, lo activa al lanzamiento y lo desactiva al finalizar.
- Se combina con: productos, configuración de catálogo y compartir productos desde conversaciones.
Donde esta
- Ruta:
/[orgId]/settings/products/catalog-links - Acceso en UI:
Settings > Products > Catalog Links - Componente(s):
CatalogLinksManagement.tsx
Como funciona
- Use
New catalog link. - Copie, abra o comparta el enlace desde la fila.
- Active o desactive su disponibilidad pública.
- Edite o elimine el enlace.
Reglas y validaciones
- Eliminar pide confirmación.
- La pantalla carga más enlaces al desplazarse.
Backend
- Servicios:
catalog-links(find/patch/remove).
Relaciones
- Requiere: Productos.
- Dispara / afecta: página pública del catálogo.
Notas
Shareofrece URL directa y código iframe conembed=true.
id: catalog-product-selection modulo: catalogos-publicos app: crm nombre: Seleccionar productos de catálogo tipo: configuracion
Seleccionar productos de catálogo
Limita los productos publicados por modo de catálogo y filtros visuales.
Que se logra
- Resultado: el visitante ve solo el subconjunto y orden de productos que el negocio decidió publicar en ese enlace.
- Caso de uso: una boutique comparte un catálogo de regalos que excluye productos sin fotografía y ordena sus categorías principales.
- Se combina con: productos, categorías y catálogo público.
Donde esta
- Ruta:
/[orgId]/settings/products/catalog-links/[catalogLinkId] - Acceso en UI:
Catalog editor > Basics - Componente(s):
CatalogLinkCategoriesOrderEditor.tsx,CatalogLinkProductsSectionsEditor.tsx
Como funciona
- Elija todos los productos, categorías seleccionadas o productos seleccionados.
- Para categorías, mueva elementos de
AvailableaVisible. - Ordene los elementos visibles.
- Active
Only show products with imagessi corresponde.
Reglas y validaciones
- El orden de
Visiblees el orden de las categorías y badges públicos.
Backend
- Servicios:
catalog-links(patch),public-catalog(get).
Relaciones
- Requiere: Productos y categorías activas.
- Dispara / afecta: listado que ve el visitante.
Notas
- Los productos sin imagen pueden excluirse sin modificar los productos originales.
id: public-catalog-browsing modulo: catalogos-publicos app: crm nombre: Explorar catálogo público tipo: publico
Explorar catálogo público
Permite a visitantes navegar productos, categorías, detalle, medios y acciones públicas.
Que se logra
- Resultado: un visitante explora productos y detalles sin cuenta, y puede compartirlos o contactar por WhatsApp cuando está habilitado.
- Caso de uso: un cliente de una tienda abre un enlace de catálogo, filtra por categoría y consulta un artículo desde WhatsApp.
- Se combina con: productos, Catálogos públicos y Conversaciones de WhatsApp.
Donde esta
- Ruta:
/c/[orgId]/[slug],/c/[orgId]/[slug]/category/[categoryId]y/c/[orgId]/[slug]/product/[productId] - Acceso en UI: URL compartida o iframe.
- Componente(s):
page.tsx
Como funciona
- Abra el enlace público.
- Use búsqueda o categorías cuando el editor las habilite.
- Abra un producto para ver su detalle en un panel.
- Explore imágenes o videos y cargue más elementos si existen.
- Use compartir o
Contact on WhatsAppsi el catálogo lo permite.
Reglas y validaciones
- Un catálogo inactivo devuelve una página no disponible.
- La búsqueda espera brevemente antes de actualizar resultados.
Backend
- Servicios:
public-catalog(get).
Relaciones
- Requiere: catálogo activo y productos disponibles.
- Dispara / afecta: enlace de producto, compartir y conversación de WhatsApp opcional.
Notas
embed=trueoculta el encabezado y pie de página para incrustación.
id: companias app: crm nombre: Companias estado: shipped permiso: permisos granulares de compañías
Companias
Agrupa cuentas B2B y sus contactos, deals y actividad.
Para que sirve
- Una agencia administra cada empresa cliente junto con sus contactos, oportunidades y notas.
- Una consultora reúne el historial de una cuenta antes de preparar una renovación.
- Un proveedor B2B asigna cuentas corporativas a responsables y redistribuye carteras por lote.
- Un despacho legal registra empresas y consulta sus documentos, actividad y contactos relacionados.
Que lo hace diferente
- La compañía es una cuenta compartida por Contactos, Deals, Actividades, Estimates, Reservas y Proyectos.
- Su perfil reúne registros CRM y documentos comerciales en vez de separar la cuenta de las operaciones diarias.
- Los campos personalizados y etiquetas pueden mostrarse también como columnas de la lista de empresas.
- Las acciones masivas aplican a la selección o a todos los resultados de la búsqueda, con progreso y restricciones de plan.
- La reasignación conserva cambios de responsable para mantener trazabilidad de la cartera.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Perfil de compañía | company-profile.md | Consulta datos y relaciones CRM. |
| Lista, búsqueda y vistas | company-list-filters.md | Consulta, ordena y personaliza la tabla. |
| Crear compañía | create-company.md | Añade una compañía desde el listado. |
| Editar y eliminar compañía | edit-delete-company.md | Actualiza o elimina el registro desde su perfil. |
| Acciones masivas y exportación | company-bulk-actions.md | Procesa compañías seleccionadas o exporta datos. |
| Campos personalizados y etiquetas | company-custom-fields-tags.md | Completa campos y administra etiquetas. |
| Registros relacionados | company-related-records.md | Reúne contactos, deals y actividad de la compañía. |
Acceso
- Ruta principal:
/[orgId]/companies - Como se llega:
Sidebar > CRM > Companies - Permiso requerido: permisos granulares de compañías
Alcance tecnico
- Frontend: lista y detalle;
CompanyView,CompanyHeader,CompanySidebaryCRMMainContent - Backend:
companies,companies-bulk-actions,contacts,deals,notes,tagsycustom-fields - Superficies publicas: ninguna
- Integraciones externas: S3 y canales de comunicación vinculados a contactos
Relaciones
- Depende de: Contactos, Deals, Etiquetas y Campos personalizados.
- Usado por: Contactos, Deals, Estimates y Actividades.
Limitaciones y notas
- El diálogo de edición confirma como datos centrales únicamente el nombre; los demás vínculos se gestionan desde el perfil.
id: company-bulk-actions modulo: companias app: crm nombre: Acciones masivas y exportación de compañías tipo: accion
Acciones masivas y exportación de compañías
Permite seleccionar compañías para cambiar responsable, eliminarlas o exportarlas.
Que se logra
- Resultado: ejecuta una operación de cartera sobre varias cuentas y deja visible su progreso.
- Caso de uso: un proveedor B2B reasigna todas las empresas de una región al equipo que la atenderá.
- Se combina con: Lista, búsqueda y vistas de compañías y permisos de organizaciones.
Donde esta
- Ruta:
/[orgId]/companies - Acceso en UI:
Companies > seleccionar compañías > Bulk Actionso menú⋯ - Componente(s):
CompanyView.tsx,BulkActionWizard.tsx,BulkChangeOwnerDialog.tsx
Como funciona
- Selecciona compañías de la página o todos los resultados actuales.
- Usa
Bulk Actionspara elegir eliminar,Update Ownero exportar. - Elige el alcance
Selected companiesoAll companies; para responsable, selecciona el nuevo miembro. - Revisa y confirma la acción.
Reglas y validaciones
- El asistente procesa eliminaciones y cambios de responsable por lotes y muestra el progreso y errores.
- La exportación está restringida para el plan
Free; los planes de pago la habilitan. - El alcance
All companiesconserva el texto de búsqueda activo.
Backend
- Servicios:
companies-bulk-actions(método: create),companies(método: find/patch/remove),export-data(método: create) - Hooks relevantes solo si cambian el comportamiento visible: las autorizaciones granulares cubren
companies-bulk-actions. - Efectos: genera exportaciones o modifica múltiples compañías.
Relaciones
- Requiere: Lista de compañías y miembros de la organización.
- Dispara / afecta: Responsable, listado y exportación.
Notas
Import Companiesaparece como elemento de UI, pero no tiene flujo conectado en el código inspeccionado. Por confirmar: importación operativa.
id: company-custom-fields-tags modulo: companias app: crm nombre: Campos personalizados y etiquetas de compañías tipo: configuracion
Campos personalizados y etiquetas de compañías
Permite complementar el perfil de una compañía con campos configurables y gestionar sus etiquetas.
Que se logra
- Resultado: ajusta la ficha de cada cuenta a los criterios de calificación y clasificación propios del negocio.
- Caso de uso: una agencia marca sector, tamaño y nivel de servicio de cada cliente corporativo.
- Se combina con: Lista, búsqueda y vistas de compañías y Perfil de compañía.
Donde esta
- Ruta:
/[orgId]/companies/[id] - Acceso en UI:
Company Profile > Company Details > Custom Fieldsy fila de etiquetas - Componente(s):
CompanyCustomFields.tsx,CompanySidebar.tsx
Como funciona
- Abre el perfil de la compañía.
- En
Custom Fields, actualiza un valor, guárdalo o límpialo. - En la fila de etiquetas usa el lápiz para administrar las etiquetas de la compañía.
- En el listado, usa el selector de columnas para incluir campos personalizados.
Reglas y validaciones
- Los valores de campos se guardan uno a uno.
- La UI muestra la última actualización disponible de cada valor.
Backend
- Servicios:
custom-fields(método: find),companies(método: get/patch),tags(método: find/create/patch/remove) - Efectos: los valores pueden mostrarse como columnas y dentro del perfil.
Relaciones
- Requiere: Campos personalizados y etiquetas configurados para la organización.
- Dispara / afecta: Perfil y listado de compañías.
Notas
- Por confirmar: las reglas de obligatoriedad de campos personalizados al editar una compañía.
id: company-list-filters modulo: companias app: crm nombre: Lista, búsqueda y vistas de compañías tipo: vista
Lista, búsqueda y vistas de compañías
Consulta compañías en una tabla paginada, busca registros y personaliza las columnas mediante vistas guardadas.
Que se logra
- Resultado: prioriza cuentas B2B y adapta la lista a la información que cada equipo necesita revisar.
- Caso de uso: un despacho legal crea una vista de empresas activas con sus datos operativos antes de planear renovaciones.
- Se combina con: Acciones masivas y exportación de compañías y Campos personalizados.
Donde esta
- Ruta:
/[orgId]/companies - Acceso en UI:
Sidebar > CRM > Companies - Componente(s):
CompanyView.tsx,EntityViewManager.tsx
Como funciona
- Abre
Companies. - Escribe en
Search companiespara buscar. - Ordena por fecha de creación y ajusta el tamaño de página.
- Usa el selector de columnas para elegir campos del sistema y personalizados.
- Crea, selecciona o elimina una vista desde el administrador de vistas.
Reglas y validaciones
- La búsqueda aplica una espera breve antes de consultar.
- Con una vista seleccionada, la búsqueda queda deshabilitada; buscar limpia la vista seleccionada.
- La tabla permite entre 10 y 50 filas por página.
Backend
- Servicios:
companies(método: find),custom-fields(método: find),entity-views(método: find/create/patch/remove) - Hooks relevantes solo si cambian el comportamiento visible: la consulta rápida incorpora los datos para creador, responsable y campos de lista.
- Efectos: determina el alcance de la exportación y acciones masivas.
Relaciones
- Requiere: Campos personalizados y vistas de entidad.
- Dispara / afecta: Acciones masivas y exportación de compañías.
Notas
- Por confirmar: filtros adicionales distintos de búsqueda y vista guardada.
id: company-profile modulo: companias app: crm nombre: Perfil de compañía tipo: vista
Perfil de compañía
Consulta datos de una compañía y sus registros CRM relacionados.
Que se logra
- Resultado: ofrece una vista de cuenta para entender quiénes participan y qué actividad comercial existe con una empresa.
- Caso de uso: una agencia revisa la compañía cliente antes de una reunión con varios decisores.
- Se combina con: Registros relacionados de la compañía y Contactos.
Donde esta
- Ruta:
/[orgId]/companies/[id] - Acceso en UI:
Companies > fila de compañía - Componente(s):
CompanyHeader.tsx,CompanySidebar.tsx,CRMMainContent.tsx
Como funciona
- Abre una compañía desde la lista.
- Revisa detalles, contactos, deals y otros registros en la barra lateral.
- Usa las pestañas de actividad, notas, archivos, email y timeline.
Reglas y validaciones
- En móvil se alterna entre
Company DetailsyActivity.
Backend
- Servicios:
companies,contacts,deals,notes(método: get/find)
Relaciones
- Requiere: Contactos y Deals.
- Dispara / afecta: Ninguna.
Notas
- El nombre se puede editar desde encabezado o menú de más acciones.
id: company-related-records modulo: companias app: crm nombre: Registros relacionados de la compañía tipo: vista
Registros relacionados de la compañía
Centraliza los contactos, deals, actividad, notas, archivos y otros registros CRM vinculados a una compañía.
Que se logra
- Resultado: concentra la relación comercial de una cuenta, desde los interlocutores hasta documentos y trabajo asociado.
- Caso de uso: una consultora abre una empresa cliente y revisa su oportunidad, notas, reserva y proyecto antes de una propuesta.
- Se combina con: Contactos, Deals, Estimates, Reservas y Proyectos.
Donde esta
- Ruta:
/[orgId]/companies/[id] - Acceso en UI:
Company Profile > barra lateral y pestañas de actividad - Componente(s):
CompanySidebar.tsx,CRMMainContent.tsx,CompanyHeader.tsx
Como funciona
- Abre una compañía desde el listado.
- Expande las secciones
ContactsyDealspara consultar o abrir registros vinculados. - Usa las pestañas
Activity,Notes,Files,Email,RecordingeHistorypara trabajar con la relación. - Crea contactos, deals, estimates, reservas o proyectos desde las secciones que los ofrecen.
Reglas y validaciones
- En pantallas pequeñas se alterna entre
Company DetailsyActivity. - Si no hay permiso para deals, su sección muestra una nota de acceso en vez de exponer el error de autorización.
Backend
- Servicios:
companies,contacts,deals,activities,notes,files,estimates,reservationsyprojects(método: find/get/create) - Efectos: concentra la actividad y documentación relacionada con una cuenta.
Relaciones
- Requiere: Contactos y deals de la compañía.
- Dispara / afecta: Actividades, documents comerciales, reservas y proyectos.
Notas
- Por confirmar: los permisos específicos para cada sección relacionada.
id: create-company modulo: companias app: crm nombre: Crear compañía tipo: accion
Crear compañía
Crea una compañía nueva desde el listado de compañías.
Que se logra
- Resultado: incorpora una cuenta B2B que puede convertirse en el contexto común de sus contactos y oportunidades.
- Caso de uso: una consultora crea la ficha de una empresa prospecto antes de relacionar sus interlocutores.
- Se combina con: Contactos, Deals y Perfil de compañía.
Donde esta
- Ruta:
/[orgId]/companies - Acceso en UI:
Companies > Add Company - Componente(s):
CompanyView.tsx
Como funciona
- Selecciona
Add Company. - Escribe el nombre de la compañía.
- Confirma con
Add Company. - La tabla se actualiza con el nuevo registro.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Company Name |
texto | Sí | Debe tener al menos dos caracteres. |
Reglas y validaciones
- El formulario muestra un error si el nombre no alcanza la longitud mínima.
Backend
- Servicios:
companies(método: create/find) - Efectos: incorpora la compañía en el listado de la organización.
Relaciones
- Requiere: Permiso de creación de compañías.
- Dispara / afecta: Perfil y listado de compañías.
Notas
- Los contactos y deals se vinculan desde el perfil de la compañía.
id: edit-delete-company modulo: companias app: crm nombre: Editar y eliminar compañía tipo: accion
Editar y eliminar compañía
Permite actualizar el nombre o responsable de una compañía y eliminarla desde su perfil.
Que se logra
- Resultado: mantiene actualizada la cuenta responsable de la relación B2B y conserva el rastro de sus reasignaciones.
- Caso de uso: una agencia transfiere una cuenta corporativa a otro director sin perder su contexto CRM.
- Se combina con: Registros relacionados de la compañía y Timeline CRM.
Donde esta
- Ruta:
/[orgId]/companies/[id] - Acceso en UI:
Company Profile > nombreoMore actions > Edit CompanyyDelete Company - Componente(s):
CompanyHeader.tsx,CompanySidebar.tsx
Como funciona
- Abre una compañía.
- Selecciona el nombre o
Edit Companypara actualizar sus datos centrales. - Usa el selector de equipo del encabezado para asignar un responsable.
- Selecciona
Delete Companypara eliminarla.
Reglas y validaciones
- El diálogo de edición confirmado en el catálogo actual se centra en el nombre.
- La eliminación usa el comportamiento de borrado suave del servicio.
Backend
- Servicios:
companies(método: get/patch/remove),owner-changes(método: create/find) - Efectos: actualiza el perfil, la lista y la trazabilidad del responsable.
Relaciones
- Requiere: Perfil de compañía y miembros de la organización.
- Dispara / afecta: Contactos, deals y timeline relacionados.
Notas
- Por confirmar: las validaciones y condiciones exactas que impiden eliminar una compañía con relaciones.
id: contactos app: crm nombre: Contactos estado: shipped permiso: permisos granulares de contactos
Contactos
Gestiona personas y leads del CRM, sus datos, relaciones, comunicaciones y actividad comercial.
Para que sirve
- Una clínica reúne los datos y el historial de cada paciente para dar seguimiento antes y después de una cita.
- Una inmobiliaria clasifica prospectos, los vincula a empresas y distribuye su atención entre asesores.
- Un e-commerce identifica el origen de cada comprador y conserva su consentimiento de mensajería.
- Una academia importa interesados de ferias o formularios y los segmenta para sus procesos de admisión.
- Un concesionario contacta a un prospecto por WhatsApp, SMS, Instagram o llamada desde la misma ficha.
Que lo hace diferente
- Un contacto único conecta datos CRM con conversaciones de WhatsApp, SMS e Instagram y llamadas de voz.
- Desde el perfil se puede iniciar una llamada con un asistente de voz y enviar variables dinámicas del contacto.
- Los segmentos de contactos alimentan el procesamiento de campañas; no quedan como filtros aislados.
- El historial reúne actividades, notas, fuentes y cambios de responsable en la misma ficha.
- La gestión de STOP/START de SMS se refleja en el contacto y limita los envíos desde los canales integrados.
Acceso
- Ruta principal:
/[orgId]/contacts - Como se llega:
Sidebar > CRM > Contacts - Permiso requerido: permisos granulares de contactos
Alcance tecnico
- Frontend: rutas de lista y perfil de contactos;
ContactsView,ContactHeader,ContactSidebaryCRMMainContent - Backend:
contacts,contacts-bulk-actions,contacts-import-error-logs,contacts-segments-*,contacts-sources,notes,tagsycustom-fields - Superficies publicas: ninguna
- Integraciones externas: WhatsApp, Instagram, SMS, voz, Meta y S3
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Lista y busqueda | contact-list.md | Consulta y abre contactos. |
| Crear contacto | create-contact.md | Alta con deteccion de duplicados. |
| Editar perfil | edit-contact.md | Actualiza datos, avatar y tipo. |
| Importar CSV | import-contacts.md | Mapea y carga contactos desde CSV. |
| Acciones masivas | bulk-contact-actions.md | Cambia propietarios y opera por lote. |
| Vistas guardadas | contact-views.md | Guarda filtros y columnas de lista. |
| Exportar contactos | export-contacts.md | Genera descargas desde selecciones, vistas o filtros. |
| Segmentos | contact-segments.md | Define y consulta segmentos. |
| Timeline CRM | contact-timeline.md | Revisa el historial relacionado. |
| Notas y archivos | contact-notes-files.md | Registra notas y adjuntos. |
| Etiquetas | contact-tags.md | Clasifica contactos con tags. |
| Empresa asociada | contact-company.md | Vincula el contacto a una empresa. |
| Campos personalizados | contact-custom-fields.md | Captura datos configurables. |
| Atajos de comunicacion | contact-communication.md | Abre llamadas y conversaciones. |
| Llamada con IA | contact-ai-call.md | Inicia llamadas salientes con asistente. |
| Fuentes de contacto | contact-sources.md | Registra procedencia, campañas y UTM. |
| Consentimiento y blacklist | contact-message-consent.md | Refleja bajas y altas SMS y estado de WhatsApp. |
| Smart Links en el contacto | contact-smart-links.md | Registra la integración pendiente de confirmar. |
| Permisos de contactos | contact-permissions.md | Describe el acceso granular y alcance de miembros. |
Relaciones
- Depende de: Compañías, Etiquetas y Campos personalizados.
- Usado por: Deals, Conversaciones, Tickets legacy, Automatizaciones y Formularios.
Limitaciones y notas
- Un contacto de WhatsApp puede tener
@usernamesin teléfono; el nombre de usuario no se edita desde AchieveApex. - Por confirmar: la superficie exacta desde la que se administra manualmente la blacklist SMS/email y si el detalle ofrece Smart Links.
- No se verificó un flujo de fusión de duplicados en las rutas, componentes y servicios indicados.
id: bulk-contact-actions modulo: contactos app: crm nombre: Acciones masivas de contactos tipo: accion
Acciones masivas de contactos
Permite organizar, editar datos seguros, suscribir a series y depurar contactos seleccionados, una vista o un filtro.
Que se logra
- Resultado: aplica el mismo cambio a un grupo de contactos sin abrir cada perfil.
- Caso de uso: etiquetar los leads de una campaña, cambiarles el tipo a contacto y sumarlos a una serie.
- Se combina con: Vistas guardadas de contactos y Permisos de contactos.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Contacts > seleccionar filas o una vista > Bulk Actions - Componente(s):
ContactsView.tsx,BulkContactActionsMenu.tsx,BulkChangeOwnerDialog.tsx
Como funciona
- Selecciona filas, todos los de la vista, o todos los que coinciden con el filtro.
- Abre Bulk Actions y elige la acción.
- Confirma el alcance. El diálogo muestra el conteo y algunos nombres.
- La lista se actualiza. Si hay más de 200 contactos, el trabajo sigue en segundo plano y la pantalla espera el resultado.
Acciones
- Organizar: cambiar propietario, agregar o quitar tag, asignar o quitar compañía, cambiar tipo Lead/Contact.
- Datos: asignar o limpiar un campo personalizado (no archivos).
- Comunicación: agregar o quitar de una serie, opt-out o permitir WhatsApp, SMS y voz.
- Exportar y eliminar. Eliminar más de 100 contactos pide escribir DELETE.
Reglas y validaciones
- Owners, admins y miembros que pueden editar todos los contactos ejecutan las acciones de edición.
- Eliminar en lote requiere poder borrar todos los contactos.
- No se editan en lote nombre, email ni teléfono.
- Los cambios masivos no disparan la automatización de contacto actualizado.
Backend
- Servicios:
contacts-bulk-actions(método: create, get para el progreso) - Hooks relevantes: resuelve selección por filtros o vistas y procesa la acción.
id: contact-ai-call modulo: contactos app: crm nombre: Llamada con IA tipo: integracion
Llamada con IA
Programa una llamada saliente atendida por un asistente de voz.
Que se logra
- Resultado: pone en cola una llamada personalizada de un asistente de voz, con variables tomadas o completadas desde el contacto.
- Caso de uso: una clínica agenda llamadas de confirmación para pacientes que aún no han confirmado su cita.
- Se combina con: Asistentes IA de voz, canales de voz y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Contact profile > Contact Details > AI Call - Componente(s):
ContactAiCallPopover.tsx
Como funciona
- Abre un contacto con teléfono.
- Selecciona
AI Call. - Elige el asistente de voz y número de salida.
- Confirma la llamada.
Reglas y validaciones
- Requiere un contacto con número telefónico.
Backend
- Servicios:
voice-outbound-requests(método: create),ai-assistants(método: get)
Relaciones
- Requiere: AI Voices y canal de voz.
- Dispara / afecta: Historial del contacto.
Notas
Call Contactusa el canal de voz;AI Callinicia una llamada mediante asistente.
id: contact-communication modulo: contactos app: crm nombre: Atajos de comunicación del contacto tipo: integracion
Atajos de comunicación del contacto
Abre llamadas y conversaciones de WhatsApp, SMS e Instagram desde el perfil.
Que se logra
- Resultado: el equipo inicia o retoma la comunicación desde la ficha que reúne la identidad del contacto.
- Caso de uso: un concesionario responde por el canal preferido de un prospecto sin copiar teléfonos entre herramientas.
- Se combina con: Conversaciones omnicanal y canales de voz.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Contact profile > Contact Details - Componente(s):
ContactSidebar.tsx
Como funciona
- Abre un contacto.
- Usa
Call Contact,OpenoInitiatepara el canal disponible. - Si hay varias líneas SMS, elige el número emisor.
Reglas y validaciones
- Llamadas y SMS requieren teléfono; SMS requiere canal habilitado y número activo.
- Un usuario solo puede iniciar WhatsApp por
@usernamesi ya existe relación con el negocio.
Backend
- Servicios:
contactsy servicios de conversaciones por canal (método: find/create)
Relaciones
- Requiere: Conversaciones y configuración de canales.
- Dispara / afecta: Conversaciones y llamadas.
Notas
- Una conversación existente se abre en una hoja dentro del perfil y también puede abrirse en otra pestaña.
id: contact-company modulo: contactos app: crm nombre: Asociar contacto a compañía tipo: accion
Asociar contacto a compañía
Vincula un contacto existente con una cuenta B2B.
Que se logra
- Resultado: sitúa a cada interlocutor dentro de su cuenta para consultar su relación comercial completa.
- Caso de uso: una agencia asocia a los decisores de un cliente corporativo con la misma compañía.
- Se combina con: Perfil de compañía y Deals.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Contact profile > Contact Details > Assign Company - Componente(s):
AssignCompanyDialog.tsx
Como funciona
- Abre el contacto.
- Selecciona
Assign Company. - Busca y elige la compañía.
- Confirma la asociación.
Reglas y validaciones
- Por confirmar: si el contacto puede permanecer sin compañía o cambiarla desde este diálogo.
Backend
- Servicios:
contacts,companies(método: patch/find)
Relaciones
- Requiere: Compañías.
- Dispara / afecta: Perfil de compañía y deals relacionados.
Notas
- La creación de contacto permite también elegir o crear una compañía.
id: contact-custom-fields modulo: contactos app: crm nombre: Campos personalizados de contacto tipo: configuracion
Campos personalizados de contacto
Captura datos definidos por cada organización.
Que se logra
- Resultado: adapta la ficha de contacto a los datos operativos que el negocio realmente necesita recopilar.
- Caso de uso: una academia guarda nivel de interés, programa elegido y fecha preferida de inicio en cada aspirante.
- Se combina con: Crear contacto, Editar perfil de contacto y Vistas guardadas.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Edit Contact > Custom Fields - Componente(s):
CustomFieldInput.tsx,EditContactDialog.tsx
Como funciona
- Configura campos de tipo Contact en
Settings. - Abre un contacto y selecciona
Edit Contact. - Completa la pestaña
Custom Fields. - Guarda los cambios.
Reglas y validaciones
- Los campos requeridos deben completarse al crear o editar.
Backend
- Servicios:
custom-fields,contacts(método: find/patch)
Relaciones
- Requiere: Configuración de campos personalizados.
- Dispara / afecta: Creación y edición del contacto.
Notas
- El alta de contactos recupera los campos paginados de la organización.
id: contact-list modulo: contactos app: crm nombre: Lista y búsqueda de contactos tipo: vista
Lista y búsqueda de contactos
Consulta los contactos de la organización y abre su perfil.
Que se logra
- Resultado: localiza una persona o lead y llega a su historial comercial sin buscar en sistemas separados.
- Caso de uso: una clínica encuentra al paciente que escribió por WhatsApp antes de revisar sus citas y conversaciones.
- Se combina con: Timeline del contacto y Atajos de comunicación.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Sidebar > CRM > Contacts - Componente(s):
ContactsView.tsx
Como funciona
- Abre
Contacts. - Busca por nombre, email, teléfono o
@usernamede WhatsApp. - Selecciona una fila para abrir el perfil.
Reglas y validaciones
- La búsqueda acepta el nombre de usuario con o sin
@.
Backend
- Servicios:
contacts(método: find/get)
Relaciones
- Requiere: Contactos.
- Dispara / afecta: Perfil del contacto.
Notas
- El teléfono puede mostrarse como
@usernamecuando WhatsApp no comparte el número.
id: contact-message-consent modulo: contactos app: crm nombre: Consentimiento y blacklist de mensajería tipo: integracion
Consentimiento y blacklist de mensajería
Refleja la baja y reactivación SMS recibidas mediante palabras clave y conserva la restricción de WhatsApp en la lista de contactos.
Que se logra
- Resultado: respeta las bajas de mensajería y evita que el equipo contacte por SMS a quien se retiró.
- Caso de uso: un restaurante deja de enviar promociones SMS a un cliente que respondió STOP y permite su reactivación con START.
- Se combina con: Conversaciones SMS, Campañas y configuración de cumplimiento de SMS.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Contacts > columnas y filtrospara el estado de blacklist de WhatsApp. - Componente(s):
ContactsView.tsx
Como funciona
- Un contacto responde STOP a un SMS y el sistema marca la baja.
- Una respuesta START o UNSTOP reestablece el consentimiento SMS.
- La lista puede mostrar y filtrar el estado de blacklist de WhatsApp.
Reglas y validaciones
- La baja SMS se procesa desde mensajes entrantes, no desde un control de edición de contacto identificado.
- Al reactivar SMS se registra el origen como palabra clave y se elimina la restricción SMS.
- Por confirmar: ubicación de administración manual para blacklist de email y SMS.
Backend
- Servicios:
telnyx-webhooks,public-sms-opt-in,voice-channels(método: create)
Relaciones
- Requiere: Canal SMS/Telnyx.
- Dispara / afecta: Posibilidad de mensajería SMS y cumplimiento de opt-in.
Notas
- No se localizó un servicio separado llamado
sms_blacklist; la blacklist SMS se administra en el contacto a través de los flujos anteriores.
id: contact-notes-files modulo: contactos app: crm nombre: Notas y archivos del contacto tipo: accion
Notas y archivos del contacto
Centraliza anotaciones y archivos en el espacio de actividad del perfil.
Que se logra
- Resultado: conserva instrucciones, documentos y evidencia junto a la persona a la que corresponden.
- Caso de uso: una clínica adjunta una autorización y deja una nota para que recepción conozca el contexto del paciente.
- Se combina con: Timeline del contacto y Actividades.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Contact profile > NotesoFiles - Componente(s):
CRMMainContent.tsx
Como funciona
- Abre el contacto.
- Selecciona
Notespara registrar una nota oFilespara gestionar adjuntos. - Revisa los elementos también en
Timeline.
Reglas y validaciones
- Por confirmar: límites y tipos de archivos permitidos en el panel CRM.
Backend
- Servicios:
notes(método: find/create/patch/remove)
Relaciones
- Requiere: Contactos.
- Dispara / afecta: Timeline del contacto.
Notas
- La grabación de audio se gestiona en la pestaña
Recording, separada de archivos.
id: contact-permissions modulo: contactos app: crm nombre: Permisos de contactos tipo: configuracion
Permisos de contactos
El acceso a contactos se controla por permisos granulares de la organización y por el alcance de cada miembro.
Que se logra
- Resultado: cada miembro accede a los contactos y acciones acordes con su rol sin exponer innecesariamente el CRM.
- Caso de uso: una agencia permite a un ejecutivo gestionar su cartera, mientras los administradores coordinan el conjunto.
- Se combina con: Acciones masivas de contactos y permisos de organizaciones.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Avatar menu > Settings > Teampara administrar permisos. - Componente(s):
ContactsView.tsx,ContactSidebar.tsx
Como funciona
- Un administrador configura los permisos del miembro en la organización.
- El miembro abre la lista o el perfil de contactos dentro del alcance permitido.
- Las secciones relacionadas del perfil muestran una nota de acceso cuando el módulo dependiente está restringido.
Reglas y validaciones
- El módulo declara permisos granulares de contactos.
- Por confirmar: nombres de permiso y distinción exacta entre alcance
ownyallen las pantallas de configuración.
Backend
- Servicios:
contacts(método: find/get/create/patch/remove) - Hooks relevantes: la capa global de abilities limita las operaciones según organización y permisos del miembro.
Relaciones
- Requiere: Miembros, roles y permisos.
- Dispara / afecta: Lista, perfil y acciones masivas de contactos.
Notas
- Las restricciones de Deals, Tickets, Estimates y Reservations se comunican dentro de sus secciones del perfil, sin bloquear toda la ficha de contacto.
id: contact-segments modulo: contactos app: crm nombre: Segmentos de contactos tipo: vista
Segmentos de contactos
Permite definir y ejecutar consultas segmentadas sobre contactos.
Que se logra
- Resultado: obtiene una audiencia de contactos que cumple criterios definidos para consultarla o reutilizarla en procesos comerciales.
- Caso de uso: un restaurante identifica clientes sin visita reciente para preparar una campaña de reactivación.
- Se combina con: Campañas y Vistas guardadas de contactos.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Contacts > filtros y vistas - Componente(s):
ContactsView.tsx
Como funciona
- Abre la lista de contactos.
- Define criterios de filtrado disponibles.
- Consulta los resultados del segmento.
Reglas y validaciones
- Por confirmar: la ubicación exacta del constructor de segmentos en la interfaz.
Backend
- Servicios:
contacts-segments-schema-builder,contacts-segments-json-to-sql,contacts-segments-run-query(método: create)
Relaciones
- Requiere: Contactos.
- Dispara / afecta: Audiencias y vistas de contactos.
Notas
- El backend expone servicios separados para construir, transformar y ejecutar segmentos.
id: contact-smart-links modulo: contactos app: crm nombre: Smart Links en el contacto tipo: vista
Smart Links en el contacto
Relaciona el perfil de contacto con el módulo Smart Links cuando haya una superficie disponible.
Que se logra
- Resultado: no hay un resultado operativo confirmado; la relación con Smart Links está documentada como una posibilidad pendiente.
- Caso de uso: una agencia podría consultar enlaces de campaña por contacto cuando exista una superficie integrada confirmada.
Donde esta
- Ruta: Por confirmar: no se identificó una sección
Smart Linksen el perfil revisado. - Acceso en UI: Por confirmar.
- Componente(s): Por confirmar.
Como funciona
- Por confirmar: flujo de consulta o creación de enlaces desde el detalle de contacto.
Reglas y validaciones
- Por confirmar: condiciones de asociación, métricas visibles y permisos.
Backend
- Servicios: Por confirmar: no se confirmó una llamada de Smart Links desde los componentes de detalle revisados.
Relaciones
- Requiere: Módulo Smart Links.
- Dispara / afecta: Por confirmar.
Notas
- La relación fue solicitada como capacidad pendiente, pero no está presente en
ContactSidebar.tsxni en las metas de soporte del detalle; requiere confirmación de producto antes de documentarla como flujo operativo.
id: contact-sources modulo: contactos app: crm nombre: Fuentes de contacto tipo: accion
Fuentes de contacto
Registra y consulta cómo llegó un contacto, incluido canal, campaña y datos UTM.
Que se logra
- Resultado: conserva el origen atribuible de un lead para distinguir qué canales y campañas aportan contactos.
- Caso de uso: un e-commerce registra que un comprador llegó por una campaña UTM y lo compara con referidos.
- Se combina con: Timeline del contacto y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Contact profile > Sources - Componente(s):
ContactSourcesSection.tsx
Como funciona
- Expande
Sourcesen el perfil. - Selecciona
Add Source. - Elige el tipo e introduce la información disponible.
- Selecciona
Save; la lista muestra las cinco fuentes más recientes.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Tipo de fuente | selección | Sí | Manual, Facebook lead, CTWA, UTM, campaña, referencia o personalizada. |
| Canal, campaña, URL e identificador | texto | No | Contexto del origen. |
| UTM source, medium y campaign | texto | No | Parámetros de atribución. |
| Metadata | objeto | No | Debe ser un objeto válido. |
Reglas y validaciones
- No permite guardar si falta el tipo o si metadata no es un objeto válido.
- Se muestran como máximo cinco registros en el panel.
Backend
- Servicios:
contacts-sources(método: find/create)
Relaciones
- Requiere: Perfil de contacto.
- Dispara / afecta: Timeline y atribución del contacto.
Notas
- No se encontró una acción de edición o eliminación en el panel revisado.
id: contact-tags modulo: contactos app: crm nombre: Etiquetas de contacto tipo: configuracion
Etiquetas de contacto
Clasifica contactos mediante tags de la organización.
Que se logra
- Resultado: añade una clasificación transversal que facilita reconocer y seleccionar grupos de contactos.
- Caso de uso: una inmobiliaria etiqueta propietarios, compradores e inversionistas para orientar el seguimiento.
- Se combina con: Lista y búsqueda de contactos y Creación de contacto.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Contact profile > Contact Details > tags > lápiz - Componente(s):
ContactSidebar.tsx
Como funciona
- Abre el perfil.
- Edita la fila de tags.
- Añade o quita las etiquetas disponibles.
Reglas y validaciones
- Solo usa etiquetas de la organización.
Backend
- Servicios:
tags,contacts(método: find/patch)
Relaciones
- Requiere: Etiquetas.
- Dispara / afecta: Clasificación del contacto.
Notas
- Las tags también se administran desde otras superficies CRM.
id: contact-timeline modulo: contactos app: crm nombre: Timeline del contacto tipo: vista
Timeline del contacto
Muestra la historia CRM y permite filtrarla por tipo de evento.
Que se logra
- Resultado: reconstruye el recorrido de un contacto para continuar la atención con contexto verificable.
- Caso de uso: un despacho legal revisa llamadas, notas y cambios de responsable antes de responder a un cliente.
- Se combina con: Actividades, Notas y Fuentes de contacto.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Contact profile > Timeline - Componente(s):
CRMMainContent.tsx
Como funciona
- Abre un perfil de contacto.
- Selecciona
Timeline. - Filtra
All, actividades, notas, emails, grabaciones, llamadas, fuentes o propietario.
Reglas y validaciones
- La vista móvil separa
Contact DetailsyActivity.
Backend
- Servicios:
activities,notes,contacts-sources,owner-changes(método: find)
Relaciones
- Requiere: Actividades, Notas y Fuentes.
- Dispara / afecta: Ninguna.
Notas
- Incluye el historial de cambios de propietario y comunicaciones relacionadas.
id: contact-views modulo: contactos app: crm nombre: Vistas guardadas de contactos tipo: configuracion
Vistas guardadas de contactos
Guarda filtros y columnas de la lista como vistas personales o compartidas.
Que se logra
- Resultado: cada equipo vuelve a una lista de trabajo con los contactos y columnas que necesita.
- Caso de uso: una agencia comparte una vista de leads sin atender con su equipo de captación.
- Se combina con: Lista y búsqueda de contactos y Acciones masivas de contactos.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Contacts > selector de vista - Componente(s):
ContactViewManager.tsx,ContactViewFormDialog.tsx,ContactsView.tsx
Como funciona
- Abre el selector de vistas, inicialmente
All Contacts. - Selecciona una vista personal o compartida.
- Usa
Create New Viewpara guardar una nueva configuración. - Desde una vista propia, usa el lápiz para editarla o eliminarla.
Reglas y validaciones
- Una búsqueda escrita limpia la vista seleccionada.
- Al activar una vista se restauran sus columnas visibles.
- Las vistas compartidas muestran el autor y no ofrecen el lápiz en este selector.
Backend
- Servicios:
views,contacts(método: find/create/patch/remove)
Relaciones
- Requiere: Lista de contactos.
- Dispara / afecta: Filtros, columnas y acciones masivas de contactos.
Notas
- Por confirmar: criterios exactos que distinguen vista personal y compartida al crear.
id: create-contact modulo: contactos app: crm nombre: Crear contacto tipo: accion
Crear contacto
Da de alta un contacto con relaciones y datos configurables.
Que se logra
- Resultado: incorpora un lead con su empresa, clasificación y datos requeridos listo para seguimiento comercial.
- Caso de uso: una inmobiliaria registra un prospecto de una visita y lo relaciona con la constructora que representa.
- Se combina con: Compañías, Etiquetas y Campos personalizados.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Contacts > New Contact - Componente(s):
AddContactDialog.tsx
Como funciona
- Abre
New Contact. - Introduce
Namey los datos opcionales. - Revisa duplicados, tags, empresa y campos personalizados.
- Selecciona
Add Contact.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | Mínimo dos caracteres. |
Email |
No | Se valida si se proporciona. | |
Phone |
teléfono | No | Solo dígitos. |
Company |
búsqueda | No | Puede elegir o crear una compañía. |
Tags |
selección múltiple | No | Alterna etiquetas existentes. |
Reglas y validaciones
- Muestra posibles duplicados por nombre, email, teléfono o compañía.
- Los campos personalizados obligatorios bloquean el alta.
Backend
- Servicios:
contacts(método: create),companies(método: find/create),tags(método: find),custom-fields(método: find)
Relaciones
- Requiere: Compañías, Etiquetas y Campos personalizados.
- Dispara / afecta: Perfil del contacto.
Notas
- Puede abrir el perfil recién creado tras guardarlo.
id: edit-contact modulo: contactos app: crm nombre: Editar perfil de contacto tipo: accion
Editar perfil de contacto
Actualiza la información principal, avatar y tipo de un contacto.
Que se logra
- Resultado: mantiene una ficha de cliente actualizada para que ventas y atención trabajen con los mismos datos.
- Caso de uso: una academia corrige el correo y el tipo de registro de un interesado antes de enviarle seguimiento.
- Se combina con: Campos personalizados y Atajos de comunicación.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
Contact profile > Edit Contact - Componente(s):
EditContactDialog.tsx,ContactHeader.tsx
Como funciona
- Abre un perfil.
- Selecciona
Edit Contact. - Modifica detalles o
Custom Fields. - Selecciona
Save Changes.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Avatar |
archivo | No | JPEG o PNG de hasta 5 MB. |
First Name / Last Name |
texto | No | Datos de identificación. |
Email |
No | Se valida si se proporciona. | |
System Type |
selección | No | contact, lead o conversation. |
WhatsApp Username |
texto | No | Solo lectura cuando existe. |
Reglas y validaciones
- El
WhatsApp Usernamelo asigna WhatsApp y no puede editarse.
Backend
- Servicios:
contacts(método: get/patch),custom-fields(método: find)
Relaciones
- Requiere: Campos personalizados.
- Dispara / afecta: Perfil y comunicaciones del contacto.
Notas
- El avatar se carga al seleccionarlo.
id: export-contacts modulo: contactos app: crm nombre: Exportar contactos tipo: accion
Exportar contactos
Genera una exportación de contactos seleccionados o del resultado de una vista o filtro.
Que se logra
- Resultado: entrega una lista filtrada de contactos para análisis, respaldo u operaciones fuera de Apex.
- Caso de uso: un e-commerce exporta los compradores de una campaña para conciliarlos con su proveedor de envíos.
- Se combina con: Vistas guardadas de contactos y Segmentos de contactos.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Contacts > acciones masivas > Export - Componente(s):
ContactsView.tsx, diálogo de exportación integrado
Como funciona
- Selecciona contactos o trabaja con una vista o filtro activo.
- Ejecuta
Export. - Espera el estado
Exporting Contacts.... - Al finalizar, abre el archivo desde el diálogo de resultado.
Reglas y validaciones
- La interfaz restringe la exportación según el plan; el plan Free no tiene acceso.
- Puede exportar selección explícita, una vista o todos los resultados de un filtro.
- Para volúmenes grandes la interfaz informa una salida CSV.
Backend
- Servicios:
export-data(método: create)
Relaciones
- Requiere: Lista o vista de contactos.
- Dispara / afecta: Descarga de datos de contactos.
Notas
- Por confirmar: columnas definitivas y formatos elegibles por el usuario.
id: import-contacts modulo: contactos app: crm nombre: Importar contactos desde CSV tipo: accion
Importar contactos desde CSV
Carga contactos mediante un flujo de archivo, previsualización y mapeo.
Que se logra
- Resultado: convierte una base externa en contactos utilizables por el CRM con correspondencia explícita de sus datos.
- Caso de uso: una agencia carga los leads de una feria desde CSV para asignarlos y empezar su seguimiento.
- Se combina con: Etiquetas, Segmentos y Acciones masivas de contactos.
Donde esta
- Ruta:
/[orgId]/contacts - Acceso en UI:
Contacts > Import - Componente(s):
ImportContactsDialog.tsx,UploadStep.tsx,ColumnMappingStep.tsx
Como funciona
- Abre
Import. - Carga un archivo CSV.
- Revisa la vista previa y relaciona columnas.
- Inicia la importación y consulta el resultado.
Reglas y validaciones
- Los errores de la carga se presentan en el flujo de resultados.
Backend
- Servicios:
contacts,contacts-import-error-logs(método: find)
Relaciones
- Requiere: Contactos.
- Dispara / afecta: Creación masiva de contactos.
Notas
- Por confirmar: la política exacta para duplicados durante la importación.
id: conversaciones app: crm nombre: Conversaciones estado: shipped permiso: can_access_crm
Conversaciones
Inbox omnicanal para atender, organizar y automatizar comunicaciones con contactos.
Para que sirve
- Una clínica centraliza consultas de WhatsApp, Instagram y email para que recepción responda sin perder el historial del paciente.
- Una inmobiliaria asigna prospectos entrantes a asesores y relaciona cada conversación con sus oportunidades de venta.
- Un e-commerce responde preguntas, comparte productos y usa plantillas cuando necesita contactar fuera de la ventana de WhatsApp.
- Una academia distribuye conversaciones entre su equipo y asistentes de IA para atender inscripciones y seguimientos.
Que lo hace diferente
- Reúne WhatsApp, Instagram, Messenger, SMS, webchat y email en el mismo hilo, asociado al contacto del CRM.
- El panel del hilo conecta directamente con Deals, Tickets, Reservations, Meetings y Series, sin trasladar manualmente al cliente entre herramientas.
- Permite asignar conversaciones a personas o asistentes de IA, reanudar la IA con instrucciones concretas y ejecutar automatizaciones desde el compositor.
- Comparte catálogo de Productos y enlaces públicos de catálogo al responder desde el inbox.
Acceso
- Ruta principal:
/[orgId]/conversations - Como se llega:
Sidebar > Conversations - Permiso requerido:
can_access_crm; las acciones administrativas requieren admin u owner.
Alcance tecnico
- Frontend: rutas de
conversationsyConversationsView,MessageInput,ChatHeader - Backend:
conversations,conversation-messages-*,conversations-bulk-actions,conversation-ai-resume,conversation-files - Superficies publicas: ninguna confirmada
- Integraciones externas: Meta, Telnyx, S3 y asistentes de IA
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Vista de inbox omnicanal | inbox-view.md | Lista, hilo y ficha. |
| Filtrar y buscar | filter-and-search.md | Filtros y búsquedas. |
| Enviar mensajes y notas | send-message.md | Respuestas y notas. |
| Enviar adjuntos | send-attachments.md | Archivos y ubicación. |
| Respuestas citadas | quoted-replies.md | Réplicas contextualizadas. |
| Plantillas WhatsApp | whatsapp-templates.md | Mensajes aprobados. |
| Mensajes predefinidos | predefined-messages.md | Fragmentos reutilizables. |
| Escritura con IA | ai-writing-assistant.md | Borradores y mejoras. |
| Asignar conversación | assign-conversation.md | Responsable humano o IA. |
| Reanudar con IA | resume-with-ai.md | Instrucción puntual. |
| Plantillas IA | resume-templates.md | Instrucciones reutilizables. |
| Estado de conversación | conversation-status.md | Abrir, cerrar o no leída. |
| Acciones masivas | bulk-actions.md | Cambios por lote. |
| Detalles del contacto | conversation-details.md | Relaciones CRM. |
| Ejecutar automatización | conversation-automation.md | Ejecuta flujos desde el hilo. |
| Bloquear y cortar contexto | manage-conversation-access.md | Acciones administrativas. |
| Enviar productos | send-products.md | Productos y catálogos. |
Relaciones
- Depende de: Contactos, Canales de mensajería, Productos y Automatizaciones.
- Usado por: Deals, Tickets, Reservations, Meetings y asistentes de IA.
Limitaciones y notas
- Meta limita mensajes libres a una ventana de 24 horas.
id: ai-writing-assistant modulo: conversaciones app: crm nombre: Asistente de escritura con IA tipo: integracion
Asistente de escritura con IA
Genera y mejora borradores de respuestas dentro del compositor.
Que se logra
- Resultado: el agente obtiene un borrador basado en el hilo reciente y el contacto, pero conserva la revisión y el envío final.
- Caso de uso: una inmobiliaria transforma la nota breve de un asesor en una respuesta clara para un prospecto que compara inmuebles.
- Se combina con: Enviar mensajes y Asistentes de IA.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
MessageInput > icono de destellos - Componente(s):
ConversationMessageAIAssistant.tsx
Como funciona
- Abrir una conversación y, opcionalmente, escribir un borrador.
- Elegir
Draft Replyo una acción rápida. - Para una petición libre, abrir
Custom Prompt. - Revisar el resultado y elegir
Applyo descartarlo.
Reglas y validaciones
Fix Spelling,Fix Grammar,Improve,ShortenyExpandrequieren texto ya escrito.
Backend
- Servicios:
ai-assistant-system(método: create) - Efectos: usa el contexto reciente del hilo y del contacto.
Relaciones
- Requiere: conversación seleccionada.
- Dispara / afecta: Enviar mensajes.
Notas
- La sugerencia no se envía hasta que el usuario la aplica y envía el mensaje.
id: assign-conversation modulo: conversaciones app: crm nombre: Asignar conversación tipo: accion
Asignar conversación
Asigna o desasigna una conversación a un miembro del equipo o a un asistente de IA.
Que se logra
- Resultado: cada hilo tiene un responsable humano o IA identificable, evitando que la atención quede sin seguimiento.
- Caso de uso: un concesionario envía las consultas de prueba de manejo a un asesor y delega preguntas repetitivas a su asistente de IA.
- Se combina con: Reanudar conversación con IA, Automatizaciones y Enrutamiento de llamadas.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
ChatHeader > icono de usuariooicono de bot - Componente(s):
ChatHeader.tsx
Como funciona
- Abrir una conversación.
- Elegir el icono de usuario o de bot.
- Buscar y seleccionar un responsable o asistente, o elegir desasignar.
Reglas y validaciones
- El selector individual de IA excluye asistentes de tipo
ai-chat. - Un conflicto de IA asignada con autoasignación desactivada exige reactivarla o desasignar la IA.
Backend
- Servicios:
conversations,ai-assistants,user-presence(método: find/patch)
Relaciones
- Requiere: miembros de organización o asistentes de IA.
- Dispara / afecta: enrutamiento y autoasignación.
Notas
Takeover and Sendtambién puede asignar la conversación al usuario actual.
id: bulk-actions modulo: conversaciones app: crm nombre: Acciones masivas de conversaciones tipo: accion
Acciones masivas de conversaciones
Actualiza el estado o el asistente de IA de varias conversaciones seleccionadas.
Que se logra
- Resultado: se reorganiza una cola completa sin abrir hilo por hilo, manteniendo una decisión consistente para el grupo seleccionado.
- Caso de uso: una academia asigna su asistente de admisiones a todas las consultas abiertas de una campaña antes de iniciar el horario nocturno.
- Se combina con: Filtrar y buscar conversaciones, Gestionar estado de conversación y Asignar conversación.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
Conversations > List view > seleccionar > Bulk Actions - Componente(s):
BulkChangeStatusDialog.tsx,BulkChangeAiAssistantDialog.tsx,BulkMoveConversationsDialog.tsx
Como funciona
- Cambiar a
List view. - Seleccionar filas o usar selección total del filtro actual.
- Abrir
Bulk Actions. - Elegir cambio de estado, asistente de IA o movimiento de pipeline y confirmar.
Reglas y validaciones
- Para cambiar estado se debe elegir al menos una conversación y el estado de destino.
- El asistente puede desasignarse eligiendo
None (unassign).
Backend
- Servicios:
conversations-bulk-actions(método: create)
Relaciones
- Requiere: filtros del inbox, pipelines o asistentes de IA según la acción.
- Dispara / afecta: estado, pipeline y asignación de conversaciones.
Notas
- Por confirmar: las reglas exactas de permisos para mover entre pipelines no se centralizan en los componentes revisados.
id: conversation-automation modulo: conversaciones app: crm nombre: Ejecutar automatización desde conversación tipo: automatizacion
Ejecutar automatización desde conversación
Inicia una automatización disponible usando la conversación abierta como contexto.
Que se logra
- Resultado: el equipo desencadena un proceso ya diseñado desde el caso que lo necesita, conservando la conversación como referencia.
- Caso de uso: un despacho legal inicia desde el chat el flujo que crea una tarea de revisión cuando un cliente envía documentos.
- Se combina con: Automatizaciones, Detalles del contacto y Enviar mensajes.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
MessageInput > Run automation - Componente(s):
ConversationAutomationRunPopover.tsx
Como funciona
- Abrir una conversación.
- Elegir
Run automation. - Seleccionar una automatización disponible.
- Confirmar la ejecución.
Reglas y validaciones
- No se pueden ejecutar automatizaciones inactivas ni bloqueadas por ciclo.
- La acción solo está disponible para canales con servicio de mensajes compatible.
Backend
- Servicios:
automations,automations-webhooks(método: find/create)
Relaciones
- Requiere: Automatizaciones.
- Dispara / afecta: el flujo configurado por la automatización elegida.
Notas
- La acción se ofrece como herramienta del compositor.
id: conversation-details modulo: conversaciones app: crm nombre: Consultar detalles del contacto tipo: vista
Consultar detalles del contacto
Abre un panel lateral con información y relaciones del contacto de la conversación.
Que se logra
- Resultado: quien atiende puede consultar y gestionar el contexto comercial y operativo del contacto sin salir del hilo.
- Caso de uso: una inmobiliaria abre los Deals de un prospecto desde su chat para continuar la negociación con el historial a la vista.
- Se combina con: Contactos, Deals, Tickets, Reservations y Meetings.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
ChatHeader > More options - Componente(s):
ChatHeader.tsx,ConversationSheet.tsx
Como funciona
- Abrir el menú
More options. - Expandir
Tags,Fields,Deals,Tickets,Reservations,Meetings,SourcesoSeries. - Desde la ficha se puede abrir o editar el contacto y gestionar relaciones disponibles.
Reglas y validaciones
- Solo una sección expandida permanece abierta a la vez.
- Reservations depende de permiso específico de consulta; su creación requiere permiso de creación.
Backend
- Servicios:
contacts,deals,tickets,reservations,meetings,series(método: find/get/create/patch)
Relaciones
- Requiere: Contactos.
- Dispara / afecta: relaciones CRM desde el contexto de la conversación.
Notas
ConversationSheetofrece una variante con chat y ficha del contacto sin abandonar una lista o pipeline.
id: conversation-status modulo: conversaciones app: crm nombre: Gestionar estado de conversación tipo: accion
Gestionar estado de conversación
Abre, cierra o marca como no leída una conversación desde su cabecera.
Que se logra
- Resultado: la cola refleja qué casos requieren atención, cuáles terminaron y cuáles deben volver a revisarse.
- Caso de uso: un restaurante cierra una conversación al confirmar la reserva y la marca no leída si necesita que el turno siguiente la verifique.
- Se combina con: Filtrar y buscar conversaciones, Acciones masivas de conversaciones y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
ChatHeader > Mark as Closed,Mark as Openo icono de correo - Componente(s):
ChatHeader.tsx
Como funciona
- Abrir el hilo.
- Elegir
Mark as ClosedoMark as Open. - Usar el icono de correo si se desea marcar como no leída.
Reglas y validaciones
- Un cambio de estado puede hacer desaparecer la conversación si no coincide con el filtro activo.
Backend
- Servicios:
conversations(método: patch) - Efectos: dispara automatizaciones de actualización de conversación.
Relaciones
- Requiere: inbox.
- Dispara / afecta: filtros y automatizaciones.
Notas
- El estado no elimina el historial.
id: filter-and-search modulo: conversaciones app: crm nombre: Filtrar y buscar conversaciones tipo: vista
Filtrar y buscar conversaciones
Permite reducir la lista del inbox por estado, canal, asignación, etiquetas y actividad, además de buscar conversaciones y mensajes.
Que se logra
- Resultado: se localizan hilos o mensajes relevantes y se forma una cola de trabajo basada en estado, canal o responsable.
- Caso de uso: una inmobiliaria filtra conversaciones abiertas y sin asignar para repartir nuevos prospectos antes de que se enfríen.
- Se combina con: Acciones masivas de conversaciones y Gestionar estado de conversación.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
Conversations > Filter bar - Componente(s):
ConversationsView.tsx,FilterBar.tsx
Como funciona
- Abrir el inbox.
- Elegir estado
Open,Closedo todos. - Filtrar por canal, responsable, etiquetas, no leídas o espera de respuesta.
- Escribir nombre, teléfono o
@usernameenSearch conversations. - Usar la búsqueda de mensajes cuando se requiera localizar contenido del hilo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Estado | selección | No | open, closed o todos. |
| Canal | selección | No | Incluye canales de conversación disponibles. |
| Responsable | selección | No | Incluye usuario actual, equipo y sin asignar. |
| Etiquetas | selección múltiple | No | Etiquetas del contacto. |
| Buscar conversaciones | texto | No | Busca nombre, teléfono y usuario de WhatsApp. |
Reglas y validaciones
- La búsqueda de mensajes requiere al menos tres caracteres.
- Un
@usernamepuede buscarse con o sin@.
Backend
- Servicios:
conversations(método: find) - Hooks relevantes: búsqueda por término.
Relaciones
- Requiere: Contactos y Canales de mensajería.
- Dispara / afecta: la selección usada por acciones masivas.
Notas
- Los filtros determinan el conjunto usado por
Select allen la vista de lista.
id: inbox-view modulo: conversaciones app: crm nombre: Vista de inbox omnicanal tipo: vista
Vista de inbox omnicanal
Muestra las conversaciones de WhatsApp, Instagram, Messenger, SMS, webchat y email en un inbox de tres paneles.
Que se logra
- Resultado: el equipo consulta y atiende los distintos canales desde una sola cola y conserva el contexto del contacto.
- Caso de uso: una clínica hace que recepción vea en el mismo lugar el mensaje de WhatsApp de un paciente y su correo de seguimiento.
- Se combina con: Detalles del contacto, Asignar conversación y Canales de mensajería.
Donde esta
- Ruta:
/[orgId]/conversationsy/[orgId]/conversations/[id] - Acceso en UI:
Sidebar > Conversations - Componente(s):
ConversationsViewWithPipeline.tsx,ConversationsView.tsx
Como funciona
- Abrir
Conversationsdesde la barra lateral. - Elegir una conversación de la lista para abrir el hilo.
- Usar el panel derecho desde
More optionspara revisar datos del contacto. - En móvil, usar la flecha de regreso para volver a la lista.
Reglas y validaciones
- Si no hay una conversación elegida se muestra el estado
No conversation selected. - La identidad puede mostrar nombre, perfil de WhatsApp,
@usernameo teléfono, según la información disponible.
Backend
- Servicios:
conversations(método: find/get/patch) - Efectos: aplica permisos de organización y oculta registros eliminados.
Relaciones
- Requiere: Canales de mensajería.
- Dispara / afecta: Contactos, Deals, Tickets, Reservations, Meetings y Series.
Notas
- La ruta con identificador y la ruta principal comparten la misma experiencia de inbox.
id: manage-conversation-access modulo: conversaciones app: crm nombre: Bloquear, eliminar y cortar contexto tipo: accion
Bloquear, eliminar y cortar contexto
Ofrece acciones administrativas sobre una conversación y su contexto de IA.
Que se logra
- Resultado: los administradores detienen contactos no deseados, retiran hilos de la vista operativa y delimitan qué historial puede usar la IA.
- Caso de uso: un e-commerce bloquea un número que reporta spam y corta el contexto anterior antes de que la IA atienda una nueva consulta legítima.
- Se combina con: Asignar conversación, Reanudar conversación con IA y Canales de mensajería.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
ChatHeader > iconos de escudo, papelera y tijeras - Componente(s):
ChatHeader.tsx
Como funciona
- Abrir una conversación.
- Como admin u owner, usar el escudo para bloquear o desbloquear y la papelera para eliminar.
- Usar las tijeras para definir desde dónde reiniciar la memoria de IA.
Reglas y validaciones
- Solo admins y owners ven las acciones de bloquear y eliminar.
- El bloqueo de WhatsApp puede volver a activarse desde Meta si el contacto bloqueó o reportó el número.
Backend
- Servicios:
conversations(método: patch/remove) - Hooks relevantes: corte de contexto de IA.
Relaciones
- Requiere: permisos administrativos para bloqueo y eliminación.
- Dispara / afecta: envío de mensajes y contexto de IA.
Notas
- La eliminación sigue el comportamiento de ocultar del sistema, no borra necesariamente los mensajes.
id: predefined-messages modulo: conversaciones app: crm nombre: Mensajes predefinidos tipo: configuracion
Mensajes predefinidos
Administra fragmentos reutilizables para completar el compositor.
Que se logra
- Resultado: el equipo inserta respuestas consistentes con variables del contacto, responsable u organización sin volver a redactarlas.
- Caso de uso: una academia guarda una respuesta de requisitos de matrícula y la adapta automáticamente al nombre de cada aspirante.
- Se combina con: Enviar mensajes y Plantillas de instrucciones para IA.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
MessageInput > icono de mensajes predefinidoso escribir/ - Componente(s):
PredefinedMessagesDialog.tsx
Como funciona
- Abrir el diálogo y elegir
New. - Definir título, tipo y contenido; opcionalmente insertar variables.
- Guardar, buscar o filtrar mensajes existentes.
- Elegir
Selectpara llenar el compositor.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Title | texto | Sí | Identifica el fragmento. |
| Type | selección | No | Texto, imagen, video, documento, audio o ubicación. |
| Content | área de texto | Sí | Admite variables del contacto, responsable y organización. |
Reglas y validaciones
- Los valores vacíos de variables se reemplazan por texto vacío; los desconocidos se conservan para editarse.
Backend
- Servicios:
conversation-predefined-messages(método: find/create/patch/remove)
Relaciones
- Requiere: conversación abierta para sustituir variables.
- Dispara / afecta: Enviar mensajes.
Notas
- La sustitución de variables se realiza al seleccionar el mensaje.
id: quoted-replies modulo: conversaciones app: crm nombre: Responder citando un mensaje tipo: accion
Responder citando un mensaje
Permite contestar un mensaje específico conservando su referencia visual en el inbox.
Que se logra
- Resultado: el contacto y el equipo identifican con precisión cuál mensaje se está respondiendo dentro de un hilo activo.
- Caso de uso: un restaurante cita la pregunta sobre alergias de un comensal y responde sin confundirla con otra solicitud de reserva.
- Se combina con: Enviar mensajes y Canales de mensajería.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
Conversations > mensaje > Reply - Componente(s):
ChatMessages.tsx,MessageInput.tsx
Como funciona
- Abrir el hilo.
- Elegir
Replyen el mensaje que se quiere citar. - Escribir la respuesta en el compositor.
- Enviar o cancelar la cita desde la franja
Replying to….
Reglas y validaciones
- Está disponible para WhatsApp e Instagram.
- En Instagram Login la cita se conserva dentro de AchieveApex, pero el destinatario recibe un DM normal.
Backend
- Servicios:
conversation-messages-whatsapp,conversation-messages-instagram(método: create) - Efectos: WhatsApp recibe la referencia del mensaje original.
Relaciones
- Requiere: Enviar mensajes y una conversación WhatsApp o Instagram.
- Dispara / afecta: historial del hilo.
Notas
- Las citas recibidas se muestran como una vista previa encima de la burbuja.
id: resume-templates modulo: conversaciones app: crm nombre: Plantillas de instrucciones para IA tipo: configuracion
Plantillas de instrucciones para IA
Crea y mantiene instrucciones reutilizables para reanudar conversaciones con un asistente concreto.
Que se logra
- Resultado: el equipo aplica instrucciones recurrentes de forma uniforme al devolver hilos a un asistente de IA.
- Caso de uso: una agencia guarda la instrucción de pedir el presupuesto del cliente antes de que la IA retome cualquier consulta comercial.
- Se combina con: Reanudar conversación con IA y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
Resume with AI > instruction > / > Manage - Componente(s):
ResumeTemplatesDialog.tsx
Como funciona
- Seleccionar un asistente en
Resume with AI. - Escribir
/y elegirManage. - Crear, editar o eliminar una plantilla.
- Elegirla para insertar su instrucción.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Title | texto | Sí | Nombre corto. |
| Instruction | área de texto | Sí | Instrucción reutilizable. |
Reglas y validaciones
- Las plantillas están separadas por asistente y organización.
Backend
- Servicios:
ai-conversation-resume-templates(método: find/create/patch/remove)
Relaciones
- Requiere: Reanudar conversación con IA.
- Dispara / afecta: respuestas de IA.
Notas
- También aparecen en el nodo de automatización de reanudación cuando se fija un asistente.
id: resume-with-ai modulo: conversaciones app: crm nombre: Reanudar conversación con IA tipo: accion
Reanudar conversación con IA
Devuelve una conversación a una IA con una instrucción puntual, de inmediato o al siguiente mensaje entrante.
Que se logra
- Resultado: una conversación que atendía una persona vuelve a ser gestionada por una IA con una indicación específica y control sobre su contexto.
- Caso de uso: una clínica pide a su asistente retomar un hilo al recibir el próximo mensaje y confirmar los documentos necesarios para una cita.
- Se combina con: Asignar conversación, Plantillas de instrucciones para IA y Asistentes de IA.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
ChatHeader > icono de bot > Resume with AI… - Componente(s):
ResumeWithAiDialog.tsx
Como funciona
- Elegir
Resume with AI…. - Seleccionar el asistente y escribir una instrucción.
- Configurar
Send a message nowy, si aplica,Reset AI context. - Confirmar
Resume with AI.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| AI Assistant | selección | Sí | Asistente conversacional. |
| Resume instruction | área de texto | Sí | Admite plantillas con /. |
| Send a message now | interruptor | No | Envía una respuesta de IA inmediatamente. |
| Reset AI context | interruptor | No | Reinicia el contexto de IA. |
Reglas y validaciones
- Sin envío inmediato, la instrucción queda armada para el siguiente mensaje del contacto.
Backend
- Servicios:
conversation-ai-resume,ai-conversation-follow-up(método: create) - Hooks relevantes: reanudar conversación.
Relaciones
- Requiere: Asistentes de IA.
- Dispara / afecta: asignación de IA y respuestas automatizadas.
Notas
- No equivale a reglas automáticas de seguimiento del asistente.
id: send-attachments modulo: conversaciones app: crm nombre: Enviar adjuntos y ubicación tipo: accion
Enviar adjuntos y ubicación
Permite adjuntar imágenes, video, documentos, audio o ubicación a un mensaje del inbox.
Que se logra
- Resultado: la respuesta incluye el archivo o ubicación que necesita el contacto, conservado en el historial del hilo.
- Caso de uso: una agencia envía a un cliente una propuesta en PDF por WhatsApp y la conserva junto a los mensajes de aprobación.
- Se combina con: Enviar mensajes y Canales de mensajería.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
Conversations > hilo activo > MessageInput > menú de adjuntos - Componente(s):
MessageInput.tsx
Como funciona
- Abrir una conversación y permanecer en
Message. - Elegir el tipo de adjunto desde la barra del compositor, pegarlo o arrastrarlo.
- Revisar el adjunto y enviar el mensaje.
- Para ubicación, seleccionar la opción disponible en el compositor.
Reglas y validaciones
- Las notas internas no aceptan arrastrar, pegar ni adjuntar archivos.
- Las imágenes admitidas son JPEG y PNG hasta 5 MB; los videos MP4 hasta 16 MB.
- La ubicación no está disponible en Instagram.
Backend
- Servicios:
conversation-files(método: create),conversation-messages-whatsapp,conversation-messages-instagram,conversation-messages-webchat,conversation-messages-sms(método: create) - Hooks relevantes: procesamiento de media entrante y saliente.
- Efectos: los archivos de SMS y webchat se conservan para mostrarlos en el hilo.
Relaciones
- Requiere: Canales de mensajería.
- Dispara / afecta: historial de conversación.
Notas
- El audio se limita a 16 MB. Por confirmar: los límites de documentos y otros formatos no están centralizados en la interfaz revisada.
id: send-message modulo: conversaciones app: crm nombre: Enviar mensajes y notas tipo: accion
Enviar mensajes y notas
Envía respuestas de texto o notas internas desde el hilo de una conversación.
Que se logra
- Resultado: el equipo responde al contacto por su canal y deja decisiones o contexto interno sin exponerlo al cliente.
- Caso de uso: un despacho legal responde una consulta por email y añade una
Notepara que el abogado vea la información antes de continuar. - Se combina con: Asignar conversación, Automatizaciones y Estado de conversación.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
Conversations > hilo activo > MessageInput - Componente(s):
MessageInput.tsx
Como funciona
- Abrir una conversación.
- Elegir
Messagepara contactar al cliente oNotepara una nota interna. - Escribir el contenido.
- En escritorio, usar Enter para enviar o Shift+Enter para una línea nueva; en móvil usar
Send. - Cuando no hay responsable, elegir
SendoTakeover and Send.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Message / Note | pestañas | Sí | La nota no se entrega al contacto. |
| Mensaje | área de texto | Sí | Puede contener saltos de línea. |
| Takeover and Send | acción | No | Asigna la conversación al usuario actual antes de enviar. |
Reglas y validaciones
- En WhatsApp, Instagram y Messenger, los mensajes libres requieren que la ventana de 24 horas esté vigente.
- Las notas pueden enviarse fuera de esa ventana.
- SMS y webchat no tienen esa restricción de ventana.
Backend
- Servicios:
conversation-messages-whatsapp,conversation-messages-instagram,conversation-messages-webchat,conversation-messages-sms,crm-emails(método: create) - Efectos: entrega por el canal correspondiente y actualiza el hilo.
Relaciones
- Requiere: una conversación y un canal conectado.
- Dispara / afecta: automatizaciones y estado de la conversación.
Notas
- El contador junto a
Noteindica el tiempo restante de la ventana de Meta.
id: send-products modulo: conversaciones app: crm nombre: Enviar productos desde el inbox tipo: accion
Enviar productos desde el inbox
Envía productos del catálogo CRM como mensajes individuales o enlaces públicos de catálogo.
Que se logra
- Resultado: el contacto recibe productos o una selección navegable desde la misma conversación donde expresó su interés.
- Caso de uso: una tienda de muebles comparte por WhatsApp una categoría de sofás con varios productos para que el cliente compare opciones.
- Se combina con: Productos, Catálogos públicos y Enviar mensajes.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
MessageInput > icono de paquete - Componente(s):
SendProductDialog.tsx
Como funciona
- Abrir el panel de productos.
- Elegir producto único, múltiples individuales, enlace de catálogo o categoría.
- Seleccionar productos o categoría, configurar la previsualización y enviar.
Reglas y validaciones
- El enlace compartido de varios productos requiere al menos dos productos y un catálogo público.
- SMS se envía solo como texto.
- Admins y owners pueden activar un enlace de catálogo o crear plantillas desde el panel.
Backend
- Servicios:
products,product-categories,catalog-links, servicios de mensajes del canal (método: find/create)
Relaciones
- Requiere: Productos y Catálogos públicos.
- Dispara / afecta: Enviar mensajes.
Notas
- No es mensajería nativa de catálogo de WhatsApp.
id: whatsapp-templates modulo: conversaciones app: crm nombre: Enviar plantillas de WhatsApp tipo: accion
Enviar plantillas de WhatsApp
Permite buscar, previsualizar y enviar plantillas aprobadas de WhatsApp desde una conversación.
Que se logra
- Resultado: se puede volver a contactar por WhatsApp usando contenido aprobado cuando no se permite un mensaje libre.
- Caso de uso: un e-commerce envía una plantilla de actualización de pedido a un comprador que escribió el día anterior.
- Se combina con: Crear plantillas de WhatsApp y Enviar mensajes.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
Conversations > conversación WhatsApp > MessageInput > icono de plantilla - Componente(s):
MessageTemplatesDialog.tsx
Como funciona
- Abrir una conversación de WhatsApp.
- Elegir el icono de plantilla o
Send Template Message. - Buscar y seleccionar una plantilla aprobada.
- Revisar encabezado, cuerpo, pie y variables.
- Elegir
Send WhatsApp.
Reglas y validaciones
- Solo aparecen plantillas
APPROVEDdisponibles para conversaciones. - Es la alternativa disponible para WhatsApp cuando vence la ventana de 24 horas.
Backend
- Servicios:
conversation-messages-whatsapp(método: create),whatsapp-channels(método: find) - Hooks relevantes: envío de plantilla de WhatsApp.
Relaciones
- Requiere: Canal de WhatsApp y plantillas aprobadas.
- Dispara / afecta: envío de mensajes del inbox.
Notas
- No se usa para Instagram ni Messenger.
id: deals app: crm nombre: Deals estado: shipped permiso: permisos granulares de deals
Deals
Organiza oportunidades comerciales por pipeline, etapa, responsable y valor.
Para que sirve
- Una inmobiliaria sigue cada negocio desde el primer interés hasta la compra o pérdida.
- Una agencia separa ventas nuevas y renovaciones en pipelines con acceso por equipo.
- Un concesionario calcula el valor de una oportunidad a partir de los vehículos o servicios negociados.
- Una consultora convierte propuestas aceptadas en oportunidades ganadas vinculadas a sus estimates.
- Una academia registra motivos de pérdida para corregir su proceso de admisiones.
Que lo hace diferente
- Cada deal relaciona el contacto, la compañía, los productos, la actividad y la conversación comercial en una sola ficha.
- Los pipelines pueden restringirse por miembro, además de aplicar los permisos granulares de deals.
- El sistema conserva automáticamente la duración y los cambios de cada etapa.
- Un deal ganado puede tratar los estimates vinculados y sincronizar su valor comercial.
- Los documentos comerciales abarcan estimates, invoices y Smart Links desde el contexto de la oportunidad.
- Los watchers del deal se convierten en sugerencias de invitados al crear actividades sincronizables.
Acceso
- Ruta principal:
/[orgId]/deals - Como se llega:
Sidebar > CRM > Deals - Permiso requerido: permisos granulares de deals; la configuración de acceso de pipelines requiere propietario o administrador
Alcance tecnico
- Frontend: lista, tablero y detalle;
DealsView,PipelineView,DealSidebaryCRMMainContent - Backend:
deals,pipelines,pipeline-stages,pipeline-members,deal-products,deal-watchers,deal-stage-history,deal-duplicate,deals-bulk-actions,deals-lost-reasonsyowner-changes - Superficies publicas: ninguna
- Integraciones externas: SMS, WhatsApp, Instagram, voz y S3
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Lista y busqueda | deal-list.md | Consulta y filtra oportunidades. |
| Tablero kanban | deal-kanban.md | Gestiona deals por columna de etapa. |
| Crear deal | create-deal.md | Crea oportunidades y sus relaciones. |
| Editar deal | edit-deal.md | Actualiza los datos de la oportunidad. |
| Cambiar etapa | deal-stage-change.md | Mueve la oportunidad entre etapas. |
| Marcar ganado | deal-won.md | Cierra como ganada y trata estimates. |
| Marcar perdido | deal-lost.md | Registra una perdida con motivo opcional. |
| Gestión de pipelines | pipeline-management.md | Crea, configura, restringe y elimina pipelines. |
| Gestión de etapas | pipeline-stages.md | Administra columnas, orden y traslado al borrar una etapa. |
| Productos y totales | deal-products.md | Vincula productos que determinan el valor comercial. |
| Watchers | deal-watchers.md | Agrega contactos observadores e invitados sugeridos. |
| Historial de etapas | deal-stage-history.md | Registra permanencia y cambios entre etapas. |
| Duplicar deal | duplicate-deal.md | Crea una copia con relaciones opcionales. |
| Acciones masivas | deals-bulk-actions.md | Opera varios deals por selección, vista o filtro. |
| Filtros, búsqueda y vistas | deal-filters-views.md | Filtra, busca, ordena y guarda vistas. |
| Cambio de responsable | deal-owner-change.md | Reasigna deals y conserva su trazabilidad. |
| Motivos de pérdida | lost-reasons.md | Configura los motivos disponibles al perder un deal. |
| Campos personalizados | deal-custom-fields.md | Amplía formularios y columnas de deals. |
| Registros relacionados | deal-related-records.md | Reúne actividad, notas, archivos y conversación. |
| Documentos comerciales y enlaces | deal-sales-documents.md | Vincula estimates, invoices y smart links. |
Relaciones
- Depende de: Contactos, Compañías, Productos, Currencies y Estimates.
- Usado por: Automatizaciones, reportes comerciales y Actividades.
Limitaciones y notas
- Los pipelines restringidos se ocultan de selectores para miembros sin acceso, aunque un deal permitido puede seguir visible.
- El valor manual se bloquea cuando el deal tiene productos asociados.
id: create-deal modulo: deals app: crm nombre: Crear deal tipo: accion
Crear deal
Crea una oportunidad vinculada a contacto, compañía, pipeline y etapa.
Que se logra
- Resultado: formaliza un interés comercial como una oportunidad con valor, responsable y fecha de cierre esperada.
- Caso de uso: una agencia convierte la solicitud de un cliente en un deal con el servicio cotizado y el ejecutivo asignado.
- Se combina con: Contactos, Compañías, Pipelines y Productos.
Donde esta
- Ruta:
/[orgId]/deals - Acceso en UI:
Deals > New Deal - Componente(s):
AddDealButton.tsx,NewDealForm.tsx
Como funciona
- Selecciona
New Deal. - Busca o crea contacto y compañía.
- Indica nombre, valor, currency, pipeline, etapa, fecha y responsable.
- Selecciona
Create Deal.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Contact |
búsqueda | Sí | Permite crear uno. |
Deal Value |
número | Sí | Requiere currency. |
Pipeline / Pipeline Stage |
selección | No | Puede venir fijado por columna. |
Expected Close Date |
fecha | No | Fecha prevista de cierre. |
Reglas y validaciones
- El contacto es obligatorio y los campos personalizados requeridos bloquean el guardado.
Backend
- Servicios:
deals,contacts,companies(método: create/find)
Relaciones
- Requiere: Contactos, Compañías y Currencies.
- Dispara / afecta: Pipeline seleccionado.
Notas
- Phone y Email editados tras seleccionar contacto se guardan en ese contacto.
id: deal-custom-fields modulo: deals app: crm nombre: Campos personalizados de deals tipo: configuracion
Campos personalizados de deals
Incorpora información configurada para la organización al crear, editar y listar deals.
Que se logra
- Resultado: incorpora los criterios propios de calificación y entrega al proceso de cada oportunidad.
- Caso de uso: una empresa de software registra licencias, fecha de renovación y nivel de prioridad en cada deal.
- Se combina con: Crear deal, Editar deal y Filtros, búsqueda y vistas.
Donde esta
- Ruta:
/[orgId]/dealsy/[orgId]/deals/[id] - Acceso en UI:
New DealoEdit Deal > Custom Fields; selector de columnas deList View - Componente(s):
DealCustomFieldsInput.tsx,NewDealForm.tsx,EditDealDialog.tsx,DealListView.tsx
Como funciona
- Configura los campos para la entidad deal desde el módulo de campos personalizados.
- Completa los campos al crear o editar un deal.
- En
List View, usa el selector de columnas para mostrar u ocultar los campos disponibles.
Reglas y validaciones
- Los campos personalizados requeridos bloquean la creación del deal.
- La lista recupera los campos configurados para la organización y los puede incluir en una vista guardada.
Backend
- Servicios:
custom-fields(método: find),deals(método: create/get/patch) - Hooks relevantes solo si cambian el comportamiento visible: la consulta rápida de deals incorpora los valores preparados para la lista.
- Efectos: amplía los datos disponibles en deals y en sus vistas.
Relaciones
- Requiere: Campos personalizados.
- Dispara / afecta: Crear, editar, listar y guardar vistas de deals.
Notas
- Por confirmar: el acceso exacto a la configuración global de campos personalizados para deals.
id: deal-filters-views modulo: deals app: crm nombre: Filtros, búsqueda y vistas de deals tipo: vista
Filtros, búsqueda y vistas de deals
Permite limitar el listado o kanban por pipeline, estado, responsable, texto y vistas guardadas.
Que se logra
- Resultado: convierte el pipeline o la lista en una cola de trabajo enfocada para cada responsable comercial.
- Caso de uso: una inmobiliaria guarda una vista de oportunidades abiertas que vencen este mes para revisarla semanalmente.
- Se combina con: Tablero kanban de deals y Acciones masivas de deals.
Donde esta
- Ruta:
/[orgId]/deals - Acceso en UI:
Deals > barra superior - Componente(s):
DealsView.tsx,DealListView.tsx,PipelineView.tsx,EntityViewManager.tsx
Como funciona
- Selecciona un pipeline y el estado
Open,Won,LostoAll. - Elige un responsable o
All owners. - Escribe en la búsqueda; se aplica después de una breve espera.
- Cambia entre
Pipeline ViewyList View. - Guarda o selecciona una vista desde el administrador de vistas y ajusta las columnas de la lista.
Reglas y validaciones
- Una búsqueda activa cancela la selección de una vista; una vista activa deshabilita la búsqueda.
- El filtro de responsable y el pipeline seleccionado se conservan localmente por organización.
- La preferencia entre vista kanban y lista se guarda en el perfil del usuario.
- La lista permite ordenar por nombre y fecha de creación; la paginación ofrece hasta 50 filas por página.
Backend
- Servicios:
deals(método: find),pipelines(método: find),custom-fields(método: find),entity-views(método: find/create/patch/remove) - Hooks relevantes solo si cambian el comportamiento visible: la consulta rápida incluye datos relacionados necesarios para lista y kanban.
- Efectos: determina los registros que se pueden seleccionar, exportar o procesar en masa.
Relaciones
- Requiere: Pipelines, miembros de organización, campos personalizados y vistas de entidad.
- Dispara / afecta: Acciones masivas y exportación.
Notas
- Por confirmar: los operadores de filtro avanzados que una vista guardada puede admitir.
id: deal-kanban modulo: deals app: crm nombre: Tablero kanban de deals tipo: vista
Tablero kanban de deals
Visualiza deals como tarjetas agrupadas por la etapa del pipeline.
Que se logra
- Resultado: hace visible el avance de cada oportunidad y permite moverla al siguiente punto del proceso comercial.
- Caso de uso: un concesionario detecta en qué etapa se estancan las cotizaciones y reasigna las tarjetas prioritarias.
- Se combina con: Cambio de etapa del deal e Historial de etapas.
Donde esta
- Ruta:
/[orgId]/deals - Acceso en UI:
Deals > Pipeline view - Componente(s):
PipelineView.tsx,DealCard.tsx
Como funciona
- Selecciona un pipeline.
- Revisa las columnas de etapas.
- Arrastra tarjetas, abre un deal o selecciónalo para acciones masivas.
Reglas y validaciones
- Al mover a una etapa perdida se solicita un motivo opcional.
Backend
- Servicios:
deals,pipeline-stages,deal-stage-history(método: find/patch/create)
Relaciones
- Requiere: Pipelines y etapas.
- Dispara / afecta: Cambio de etapa e historial.
Notas
- Admite carga progresiva por columna y selección con Shift.
id: deal-list modulo: deals app: crm nombre: Lista y búsqueda de deals tipo: vista
Lista y búsqueda de deals
Consulta oportunidades por pipeline, estado, responsable y texto de búsqueda.
Que se logra
- Resultado: encuentra las oportunidades que requieren atención y el contexto de su cuenta o contacto.
- Caso de uso: una inmobiliaria revisa los negocios abiertos de un asesor antes de su reunión diaria.
- Se combina con: Filtros, búsqueda y vistas de deals y Perfil del deal.
Donde esta
- Ruta:
/[orgId]/deals - Acceso en UI:
Sidebar > CRM > Deals - Componente(s):
DealsView.tsx,DealListView.tsx
Como funciona
- Abre
Deals. - Cambia filtros y busca por deal, contacto o compañía.
- Selecciona un resultado para abrir el perfil.
Reglas y validaciones
- Un pipeline restringido puede no aparecer para un miembro sin acceso.
Backend
- Servicios:
deals,pipelines(método: find)
Relaciones
- Requiere: Contactos y Compañías.
- Dispara / afecta: Perfil del deal.
Notas
- La búsqueda cubre nombre de deal, contacto y compañía.
id: deal-lost modulo: deals app: crm nombre: Marcar deal como perdido tipo: accion
Marcar deal como perdido
Cierra un deal como perdido y permite registrar el motivo.
Que se logra
- Resultado: cierra una oportunidad sin éxito con información reutilizable para entender pérdidas comerciales.
- Caso de uso: una inmobiliaria registra que un comprador eligió otra propiedad y conserva el motivo para análisis posterior.
- Se combina con: Gestión de motivos de pérdida y Acciones masivas de deals.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > Lost - Componente(s):
LostReasonDialog.tsx
Como funciona
- Selecciona
Losto mueve el deal a una etapa perdida. - Elige un motivo,
OtheroSkip. - Guarda el motivo o continúa sin él.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Lost reason |
selección | No | Motivos de la organización u Other. |
Custom reason |
texto largo | No | Disponible para Other. |
Reglas y validaciones
- El motivo no es obligatorio.
- Propietarios y administradores pueden crear un motivo en línea.
Backend
- Servicios:
deals,deals-lost-reasons(método: patch/find/create)
Relaciones
- Requiere: Motivos de pérdida.
- Dispara / afecta: Estado y timeline del deal.
Notas
- En un deal ya perdido se puede agregar o modificar el motivo.
id: deal-owner-change modulo: deals app: crm nombre: Cambio de responsable del deal tipo: accion
Cambio de responsable del deal
Asigna uno o varios deals a otro miembro de la organización.
Que se logra
- Resultado: transfiere responsabilidad comercial conservando el registro de quién atendió la oportunidad.
- Caso de uso: una agencia redistribuye la cartera de un ejecutivo ausente entre los demás miembros del equipo.
- Se combina con: Acciones masivas de deals y Filtros por responsable.
Donde esta
- Ruta:
/[orgId]/deals - Acceso en UI:
Deals > seleccionar deals > Bulk Actions > Change Owner - Componente(s):
BulkChangeOwnerDialog.tsx
Como funciona
- Selecciona deals, una vista guardada o todos los resultados filtrados.
- Elige
Change Owner. - Selecciona un miembro de la organización.
- Confirma con
Assign Owner.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Select Owner |
selección | Sí | Lista los miembros de la organización. |
Reglas y validaciones
- Debe existir al menos un deal en el alcance seleccionado.
- Si se reasignan deals de una vista filtrada, pueden dejar de aparecer en ella.
- El historial de propietarios se registra mediante el servicio
owner-changes.
Backend
- Servicios:
deals-bulk-actions(método: create),owner-changes(método: create/find),organizations-users(método: find) - Hooks relevantes solo si cambian el comportamiento visible: el procesamiento masivo resuelve el alcance antes de reasignar.
- Efectos: cambia el responsable y conserva su trazabilidad.
Relaciones
- Requiere: Miembros de la organización y deals seleccionados.
- Dispara / afecta: Filtro por responsable y acciones masivas.
Notas
- Por confirmar: la acción individual exacta de cambio de propietario desde el perfil del deal.
id: deal-products modulo: deals app: crm nombre: Productos y totales del deal tipo: accion
Productos y totales del deal
Asocia productos a una oportunidad para que su valor se calcule a partir de las líneas comerciales.
Que se logra
- Resultado: convierte el valor de una oportunidad en un total respaldado por los productos o servicios que se negocian.
- Caso de uso: un e-commerce B2B añade artículos y cantidades a un deal para que ventas trabaje con un valor consistente.
- Se combina con: Productos, Crear deal y Duplicar deal.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > Products - Componente(s):
DealDetailsView.tsx
Como funciona
- Abre un deal.
- Añade o administra sus productos desde la sección correspondiente.
- El valor del deal se actualiza a partir de los productos asociados.
Reglas y validaciones
- Cuando un deal tiene productos asociados,
Deal Valuequeda deshabilitado en la edición del deal. - Al duplicar un deal se pueden incluir sus productos.
Backend
- Servicios:
deal-products(método: find/create/patch/remove),deals(método: get/patch) - Hooks relevantes solo si cambian el comportamiento visible: los productos se clonan opcionalmente al duplicar un deal.
- Efectos: el total comercial del deal deja de depender del valor manual.
Relaciones
- Requiere: Productos, Currencies y el deal.
- Dispara / afecta: Edición y duplicación de deals.
Notas
- Por confirmar: los controles de UI y las reglas exactas de descuentos, impuestos y redondeos.
id: deal-related-records modulo: deals app: crm nombre: Registros relacionados del deal tipo: vista
Registros relacionados del deal
Reúne la actividad comercial y los recursos vinculados a una oportunidad dentro de su perfil.
Que se logra
- Resultado: permite trabajar una oportunidad sin perder sus tareas, notas, archivos y conversación asociados.
- Caso de uso: una consultora prepara una llamada de cierre revisando la última actividad y los documentos del deal.
- Se combina con: Actividades, Conversaciones, Notas y archivos.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > Activity,Notes,Files,EmailyHistory - Componente(s):
DealDetailsView.tsx,CRMMainContent.tsx,CRMTimeline.tsx,ActivityForm.tsx
Como funciona
- Abre un deal.
- Consulta la actividad, notas, archivos y cronología desde el área principal.
- Crea una actividad desde el deal para que quede vinculada a la oportunidad.
- Abre la conversación asociada desde la tarjeta del kanban cuando existe.
Reglas y validaciones
- Las actividades creadas desde el deal conservan su vínculo con él.
- La conversación disponible en el kanban se actualiza en tiempo real cuando cambia.
Backend
- Servicios:
activities,notes,files,conversationsydeals(método: find/get/create/patch) - Hooks relevantes solo si cambian el comportamiento visible: la consulta de kanban adjunta el resumen de actividad y la conversación vinculada.
- Efectos: centraliza la trazabilidad comercial en el perfil.
Relaciones
- Requiere: Actividades, Notas, Archivos, Contactos y Conversaciones.
- Dispara / afecta: Timeline CRM y composición de invitaciones de actividades.
Notas
- Por confirmar: los controles exactos de carga y eliminación de archivos dentro del perfil.
id: deal-sales-documents modulo: deals app: crm nombre: Documentos comerciales y enlaces del deal tipo: vista
Documentos comerciales y enlaces del deal
Conecta una oportunidad con estimates, invoices y smart links que forman parte de su proceso comercial.
Que se logra
- Resultado: relaciona el avance de una venta con sus cotizaciones, facturas y enlaces compartibles.
- Caso de uso: una agencia consulta desde el deal el estimate enviado y la factura generada para preparar el cierre.
- Se combina con: Estimates, Invoices, Smart Links y Marcar deal como ganado.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > secciones de documentos y enlaces - Componente(s):
DealDetailsView.tsx,DealHeader.tsx
Como funciona
- Abre el perfil del deal.
- Consulta o crea los documentos comerciales y enlaces asociados desde sus secciones.
- Al marcar el deal como
Won, decide si aceptar estimates vinculados y sincronizar el valor.
Reglas y validaciones
- La elección relacionada con estimates solo se presenta si el deal tiene estimates vinculados.
- El valor del deal puede sincronizarse en el cierre ganado según la opción elegida.
Backend
- Servicios:
deals,estimates,invoicesysmart-links(método: find/create/patch) - Hooks relevantes solo si cambian el comportamiento visible: el cierre ganado trata los estimates vinculados.
- Efectos: relaciona el avance del deal con documentos de venta y enlaces compartibles.
Relaciones
- Requiere: Estimates, Invoices y Smart Links.
- Dispara / afecta: Marcar deal como ganado.
Notas
- Por confirmar: los botones y flujos específicos para crear invoices y smart links desde el perfil.
id: deal-stage-change modulo: deals app: crm nombre: Cambiar etapa del deal tipo: accion
Cambiar etapa del deal
Mueve una oportunidad entre las etapas de su pipeline.
Que se logra
- Resultado: actualiza el estado operativo del deal y deja una huella de su avance por el proceso de ventas.
- Caso de uso: un despacho legal mueve una propuesta de revisión a negociación cuando el cliente responde.
- Se combina con: Tablero kanban de deals e Historial de etapas del deal.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > barra de etapas, o arrastre en kanban - Componente(s):
DealStatusBar.tsx,PipelineView.tsx
Como funciona
- Selecciona una flecha de etapa o arrastra la tarjeta.
- Elige la etapa de destino.
- Registra un motivo si corresponde a pérdida.
Reglas y validaciones
- Las etapas muestran el tiempo transcurrido al pasar el cursor.
Backend
- Servicios:
deals,pipeline-stages,deal-stage-history(método: patch/find/create)
Relaciones
- Requiere: Pipelines.
- Dispara / afecta: Historial de etapas.
Notas
- También se puede cambiar el pipeline desde su nombre en la barra de estado.
id: deal-stage-history modulo: deals app: crm nombre: Historial de etapas del deal tipo: vista
Historial de etapas del deal
Conserva el registro de entrada, salida y duración de cada etapa por la que pasa un deal.
Que se logra
- Resultado: evidencia cuánto tiempo permanecen las oportunidades en cada etapa y quién realizó los movimientos cuando está disponible.
- Caso de uso: un gerente de ventas detecta que las propuestas de una agencia se demoran más de lo previsto en negociación.
- Se combina con: Cambio de etapa del deal y Gestión de etapas del pipeline.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > Historyy tiempo mostrado al pasar por una etapa - Componente(s):
DealStatusBar.tsx,CRMTimeline.tsx
Como funciona
- Crea un deal o muévelo a una nueva etapa.
- El sistema abre una entrada para la etapa de destino.
- Al salir de la etapa, cierra la entrada anterior y calcula su duración.
- Consulta la cronología del deal para revisar sus cambios.
Reglas y validaciones
- Solo se agrega historial cuando cambia la etapa, no con cualquier edición del deal.
- Si se elimina una etapa que contiene deals, el traslado a la etapa elegida también cierra y crea entradas de historial.
Backend
- Servicios:
deal-stage-history(método: find/create/patch),deals(método: create/patch),pipeline-stages(método: remove) - Hooks relevantes solo si cambian el comportamiento visible: el seguimiento se ejecuta al crear o cambiar de etapa.
- Efectos: conserva el tiempo por etapa y el autor del cambio cuando está disponible.
Relaciones
- Requiere: Deals, pipelines y etapas.
- Dispara / afecta: Kanban y timeline del deal.
Notas
- Por confirmar: el formato y la superficie exacta de consulta completa del historial en el perfil.
id: deal-watchers modulo: deals app: crm nombre: Watchers del deal tipo: accion
Watchers del deal
Permite asociar contactos observadores a un deal y usarlos como sugerencias de invitados al crear una actividad.
Que se logra
- Resultado: incorpora a los interesados de una oportunidad y acelera la preparación de reuniones con ellos.
- Caso de uso: una consultora añade al director financiero como watcher para sugerirlo al convocar una reunión del deal.
- Se combina con: Crear y editar actividades e Invitados y enlace de reunión.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > Watchers > Add - Componente(s):
DealWatchers.tsx
Como funciona
- Abre el perfil del deal.
- En
Watchers, seleccionaAdd. - Busca un contacto por nombre y, opcionalmente, escribe su rol.
- Guarda el watcher o usa
×junto a uno existente para eliminarlo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Contacto | búsqueda | Sí | La búsqueda comienza desde dos caracteres. |
| Rol | texto | No | Se muestra como etiqueta junto al contacto. |
Reglas y validaciones
- La UI excluye del selector al contacto principal del deal y a los watchers ya asociados.
- Al duplicar un deal, sus watchers se copian siempre.
Backend
- Servicios:
deal-watchers(método: find/create/remove),contacts(método: búsqueda) - Hooks relevantes solo si cambian el comportamiento visible: valida la asociación de watcher.
- Efectos: los watchers con correo se sugieren como invitados de actividades del deal.
Relaciones
- Requiere: Contactos y deals.
- Dispara / afecta: Invitados de actividades y duplicación de deals.
Notas
- Por confirmar: si ser watcher produce notificaciones propias fuera de las invitaciones sugeridas.
id: deal-won modulo: deals app: crm nombre: Marcar deal como ganado tipo: accion
Marcar deal como ganado
Cierra una oportunidad abierta como ganada.
Que se logra
- Resultado: registra una venta conseguida y alinea su valor con los estimates que la respaldan cuando existen.
- Caso de uso: una agencia marca ganada una propuesta aceptada y confirma el estimate que se convirtió en el acuerdo.
- Se combina con: Estimates y Documentos comerciales y enlaces del deal.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > Won - Componente(s):
DealHeader.tsx
Como funciona
- Abre un deal abierto.
- Selecciona
Won. - Si tiene estimates vinculados, elige si aceptarlos y sincronizar el valor.
Reglas y validaciones
- La opción de estimates solo aparece cuando hay estimates vinculados.
Backend
- Servicios:
deals(método: patch)
Relaciones
- Requiere: Estimates cuando existen vínculos.
- Dispara / afecta: Estado del deal y estimates elegidos.
Notas
- Puede reabrirse posteriormente.
id: deals-bulk-actions modulo: deals app: crm nombre: Acciones masivas de deals tipo: accion
Acciones masivas de deals
Permite reasignar, mover, marcar como ganados o perdidos, eliminar y exportar varias oportunidades.
Que se logra
- Resultado: actualiza una cartera completa o extrae sus datos sin repetir la misma operación deal por deal.
- Caso de uso: un concesionario mueve todos los leads calificados de una campaña a la etapa de prueba de manejo.
- Se combina con: Filtros, búsqueda y vistas, Cambio de responsable y Cambio de etapa.
Donde esta
- Ruta:
/[orgId]/deals - Acceso en UI:
Deals > seleccionar deals > Bulk Actions - Componente(s):
DealsView.tsx,BulkChangeOwnerDialog.tsx,BulkMoveDealsDialog.tsx
Como funciona
- Selecciona deals de una página o elige todos los resultados de la vista.
- Abre
Bulk Actions. - Elige
Change Owner,Move Deals, marcar como ganado, marcar como perdido, eliminar o exportar. - Completa la selección de responsable o de pipeline y etapa cuando corresponda, y confirma.
Reglas y validaciones
- Las acciones pueden aplicarse a IDs seleccionados, una vista guardada o los resultados del filtro actual.
- Mover exige elegir pipeline y etapa.
- Marcar como perdido permite indicar motivo y texto personalizado.
- El procesamiento masivo requiere propietario o administrador.
- La exportación está disponible para planes de pago;
Freemuestra la restricción de plan.
Backend
- Servicios:
deals-bulk-actions(método: create),export-data(método: create) - Hooks relevantes solo si cambian el comportamiento visible: resuelve los deals por filtro o vista antes de procesar la acción.
- Efectos: actualiza o elimina múltiples deals y puede generar un archivo de exportación.
Relaciones
- Requiere: Lista, filtros o vistas de deals.
- Dispara / afecta: Cambio de responsable, cambio de etapa, cierre y exportación.
Notas
- Por confirmar: el detalle de resultados parciales para cada acción procesada por el backend.
id: duplicate-deal modulo: deals app: crm nombre: Duplicar deal tipo: accion
Duplicar deal
Crea una copia de un deal y permite incluir parte de sus registros relacionados.
Que se logra
- Resultado: reutiliza una oportunidad repetible sin reconstruir manualmente sus productos, notas, actividades y archivos.
- Caso de uso: una agencia replica una propuesta estándar para un nuevo cliente y conserva solo las relaciones necesarias.
- Se combina con: Productos y totales, Notas y archivos y Actividades.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > More actions > Duplicate Deal - Componente(s):
DuplicateDealDialog.tsx
Como funciona
- Abre el deal y selecciona
Duplicate Deal. - Elige si incluir notas, archivos, actividades o productos.
- Confirma la duplicación.
- La aplicación abre el perfil de la nueva copia.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Include Notes |
casilla | No | Copia las notas relacionadas. |
Include Files |
casilla | No | Copia las referencias de archivos relacionadas. |
Include Activities |
casilla | No | Copia las actividades sin sincronizarlas al calendario. |
Include Products |
casilla | No | Copia las líneas de producto. |
Reglas y validaciones
- Requiere autenticación y pertenecer a la organización del deal.
- La copia se crea abierta y su nombre añade
(Copy). - Los watchers se copian siempre, aunque no aparezcan como opción de la UI.
Backend
- Servicios:
deal-duplicate(método: create),deals,notes,files,activities,deal-productsydeal-watchers - Hooks relevantes solo si cambian el comportamiento visible: las actividades copiadas omiten la sincronización externa y la creación del deal omite automatizaciones.
- Efectos: crea una nueva oportunidad y sus relaciones seleccionadas.
Relaciones
- Requiere: Deal de origen y pertenencia a la organización.
- Dispara / afecta: Productos, notas, archivos, actividades y watchers.
Notas
- No copia el estado de cierre: la nueva oportunidad queda abierta.
id: edit-deal modulo: deals app: crm nombre: Editar deal tipo: accion
Editar deal
Actualiza los datos y campos configurables de una oportunidad.
Que se logra
- Resultado: mantiene vigente el pronóstico y la información comercial de una oportunidad durante su negociación.
- Caso de uso: una consultora ajusta la fecha prevista y los datos de alcance de una propuesta tras una reunión con el cliente.
- Se combina con: Campos personalizados de deals y Productos y totales del deal.
Donde esta
- Ruta:
/[orgId]/deals/[id] - Acceso en UI:
Deal profile > icono de lápiz - Componente(s):
EditDealDialog.tsx
Como funciona
- Abre el perfil.
- Selecciona el lápiz junto al nombre.
- Actualiza detalles o
Custom Fields. - Guarda los cambios.
Reglas y validaciones
- El contacto es obligatorio.
Deal Valuese deshabilita cuando existen productos asociados.
Backend
- Servicios:
deals,contacts,custom-fields(método: get/patch/find)
Relaciones
- Requiere: Contactos y productos.
- Dispara / afecta: Detalle y pipeline del deal.
Notas
- Los productos calculan el valor de forma independiente.
id: lost-reasons modulo: deals app: crm nombre: Gestión de motivos de pérdida tipo: configuracion
Gestión de motivos de pérdida
Permite consultar y administrar los motivos que se pueden registrar al cerrar un deal como perdido.
Que se logra
- Resultado: estandariza el registro de pérdidas para que los cierres fallidos sean comparables.
- Caso de uso: una academia separa pérdidas por precio, horario y elección de competidor al cerrar sus inscripciones.
- Se combina con: Marcar deal como perdido y Acciones masivas de deals.
Donde esta
- Ruta:
/[orgId]/settings/deals-lost-reasons - Acceso en UI:
Settings > Deals Lost Reasons - Componente(s):
DealsLostReasonsList.tsx,LostReasonDialog.tsx
Como funciona
- Abre
Deals Lost Reasonsen configuración. - Crea, edita o elimina los motivos disponibles para la organización.
- Al marcar un deal como
Lost, selecciona un motivo, usaOtherpara escribirlo o continúa conSkip.
Reglas y validaciones
- El motivo es opcional al cerrar un deal como perdido.
- Propietarios y administradores pueden crear un motivo desde el diálogo de pérdida.
- El backend evita motivos duplicados.
Backend
- Servicios:
deals-lost-reasons(método: find/create/patch/remove),deals(método: patch) - Hooks relevantes solo si cambian el comportamiento visible: evita duplicados y puede asignar automáticamente el motivo al deal.
- Efectos: aporta el motivo registrado al cierre y a su timeline.
Relaciones
- Requiere: Deals.
- Dispara / afecta: Marcar deal como perdido y acciones masivas de deals.
Notas
- Por confirmar: los permisos granulares específicos para modificar la lista desde configuración.
id: pipeline-management modulo: deals app: crm nombre: Gestión de pipelines de deals tipo: configuracion
Gestión de pipelines de deals
Permite crear, renombrar, configurar el estado inicial y eliminar pipelines para organizar oportunidades.
Que se logra
- Resultado: modela procesos comerciales distintos y controla qué equipos pueden trabajar cada pipeline.
- Caso de uso: una agencia separa su pipeline de nuevos clientes del pipeline de renovaciones y limita cada uno a su equipo.
- Se combina con: Gestión de etapas del pipeline, Tablero kanban de deals y permisos de organizaciones.
Donde esta
- Ruta:
/[orgId]/deals - Acceso en UI:
Deals > selector de pipeline > Add New Pipelineo menú⋯de un pipeline - Componente(s):
DealsView.tsx,CreatePipelineDialog.tsx,DeletePipelineDialog.tsx,PipelineAccessSection.tsx
Como funciona
- Abre el selector de pipeline.
- Elige
Add New Pipeline, escribe el nombre y selecciona el estado predeterminado. - Para uno existente, usa
⋯paraRename, abrirPipeline Settingso eliminarlo. - Desde
Pipeline Settings > Accessconfigura quién puede acceder al pipeline.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Pipeline Name |
texto | Sí | El botón de creación se habilita cuando tiene contenido. |
Default Deal Status |
selección | Sí | Ofrece Open, Won, Lost y All. |
Access |
configuración | No | Disponible en los ajustes del pipeline. |
Reglas y validaciones
- Los miembros no ven las acciones para crear, renombrar, ajustar o eliminar pipelines.
- En el plan
Freesolo se permite un pipeline; los planes de pago no tienen ese límite en la UI. - Los pipelines restringidos solo son visibles para los miembros con acceso; propietarios y administradores ven todos.
Backend
- Servicios:
pipelines(método: find/create/patch/remove),pipeline-members(método: find/create/patch/remove) - Hooks relevantes solo si cambian el comportamiento visible: la asignación del creador se realiza al crear un pipeline.
- Efectos: el pipeline elegido determina las etapas y deals mostrados.
Relaciones
- Requiere: Etapas de pipeline y miembros de la organización.
- Dispara / afecta: Tablero kanban, creación de deals y filtros de deals.
Notas
- Por confirmar: el flujo visible completo para administrar miembros individuales del pipeline dentro de
PipelineAccessSection.
id: pipeline-stages modulo: deals app: crm nombre: Gestión de etapas del pipeline tipo: configuracion
Gestión de etapas del pipeline
Permite crear, renombrar, ordenar y eliminar las columnas que componen un pipeline de deals.
Que se logra
- Resultado: adapta las etapas y tiempos de referencia a la forma real en que el negocio califica y cierra oportunidades.
- Caso de uso: un concesionario crea etapas de prueba de manejo, financiación y entrega para ordenar su proceso comercial.
- Se combina con: Gestión de pipelines de deals, Tablero kanban e Historial de etapas.
Donde esta
- Ruta:
/[orgId]/deals - Acceso en UI:
Deals > selector de pipeline > Edit Pipeline Stages - Componente(s):
PipelineView.tsx
Como funciona
- Selecciona un pipeline y activa
Edit Pipeline Stages. - Usa
Add Stagepara añadir una etapa. - Selecciona el lápiz de una etapa para cambiar su nombre y el plazo
Rotting in. - Arrastra una columna por su asa para cambiar el orden.
- Para eliminar una etapa, selecciona la papelera y, si contiene deals, elige la etapa de destino.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre de etapa | texto | Sí | Se puede modificar en modo de edición. |
Rotting in |
número | No | Define los días mostrados como referencia de antigüedad de la etapa. |
| Etapa de destino | selección | Condicional | Es necesaria si la etapa que se elimina contiene deals. |
Reglas y validaciones
- El plan
Freepermite hasta cinco etapas; los planes de pago no tienen este límite en la UI. - Al borrar una etapa con deals, se exige una etapa de destino válida del mismo pipeline.
- El cambio de orden se guarda para todas las etapas del pipeline.
Backend
- Servicios:
pipeline-stages(método: find/create/patch/remove),deals(método: find) - Hooks relevantes solo si cambian el comportamiento visible: antes de borrar una etapa con deals se trasladan los deals y se actualiza su historial de etapa.
- Efectos: cambia las columnas del kanban y el destino disponible para los deals.
Relaciones
- Requiere: Un pipeline de tipo deal.
- Dispara / afecta: Cambio de etapa e historial de etapas.
Notas
- La probabilidad de una etapa no se expone en el editor encontrado. Por confirmar: si existe otra superficie de UI para configurarla.
id: email-builder app: crm nombre: Constructor de emails estado: shipped permiso: can_access_campaigns
Constructor de emails
Permite crear plantillas de email visuales, reutilizables y preparadas para campañas o envíos directos.
Para que sirve
- Un e-commerce crea emails de lanzamiento con productos, imágenes y llamados a la acción para sus campañas.
- Una clínica prepara recordatorios de cita con su identidad visual y datos personalizados del paciente.
- Una agencia guarda encabezados, pies legales y secciones de marca para reutilizarlos entre clientes o campañas.
- Una organización sin fines de lucro redacta un newsletter con IA y luego revisa los cambios antes de aplicarlos.
Que lo hace diferente
- Convierte un editor visual por bloques en email listo para entrega mediante compilación MJML, HTML y texto plano.
- Las plantillas se usan directamente en campañas de Apex y envíos individuales, con datos de Contactos, Deals, Productos y Compañías.
- La IA propone cambios acotados sobre el documento y el usuario puede aplicar o descartar la propuesta.
- Combina bloques de marketing para productos con recursos visuales de la organización y secciones reutilizables.
- Los envíos de prueba pasan por Email Broadcasting y sus remitentes configurados.
Acceso
- Ruta principal:
/[orgId]/campaigns/email-templates - Como se llega:
Sidebar > Campaigns > Email Templates - Permiso requerido:
can_access_campaigns
Alcance tecnico
- Frontend: rutas de plantillas y assets,
EmailBuildery sus paneles. - Backend: servicios
email-builder-*. - Integraciones externas: MJML, S3, OpenRouter y AWS SES.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Gestionar plantillas | email-template-gallery.md | Crea, filtra, copia y elimina plantillas. |
| Editar documento visual | email-visual-editor.md | Diseña el email y guarda asunto, vista previa y contenido. |
| Agregar bloques | email-content-blocks.md | Inserta bloques de contenido, layout, marketing, marca y avanzados. |
| Usar secciones prediseñadas | email-section-presets.md | Añade estructuras de sección reutilizables. |
| Configurar estilo | email-document-inspector.md | Ajusta propiedades del documento, secciones y bloques. |
| Previsualizar email | email-preview.md | Renderiza el resultado compilado. |
| Crear con IA | email-ai-assistant.md | Propone cambios revisables desde lenguaje natural. |
| Gestionar assets | email-assets-library.md | Sube, selecciona y elimina recursos visuales. |
| Reutilizar bloques | email-reusable-blocks.md | Guarda e inserta bloques o secciones de la organización. |
| Enviar plantilla | email-template-send.md | Envía un email usando variables y remitente verificado. |
Relaciones
- Depende de: Productos, Contactos, Deals, Compañías y Email Broadcasting.
- Usado por: campañas email y Automatizaciones.
Limitaciones y notas
- Las plantillas del sistema se copian al espacio de la organización antes de editarse.
- La previsualización y los envíos compilan el documento antes de entregar el email.
id: email-ai-assistant modulo: email-builder app: crm nombre: Crear y editar emails con IA tipo: integracion
Crear y editar emails con IA
Propone cambios en la plantilla a partir de instrucciones conversacionales.
Que se logra
- Resultado: Una propuesta de email o cambio de contenido se genera desde una instrucción y se revisa antes de aplicarla.
- Caso de uso: Un e-commerce describe una campaña de carrito abandonado y obtiene un borrador visual que su equipo puede ajustar.
- Se combina con: Editor visual, bloques de contenido y plantillas de email.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/[templateId] - Acceso en UI:
Email builder > AI - Componente(s):
AIEmailChatSidebar.tsx
Como funciona
- Seleccione opcionalmente una sección o bloque.
- Elija modelo, escriba una instrucción o use una acción rápida.
- Revise el diff propuesto.
- Use
Applyo descarte los cambios.
Reglas y validaciones
- La IA propone cambios; no se aplican sin confirmación.
Backend
- Servicios:
ai-assistant-system(create),email-builder-assets(find),email-builder-reusable-blocks(find).
Relaciones
- Requiere: plantilla, assets y bloques reutilizables de la organización.
- Dispara / afecta: lienzo, asunto y texto de vista previa.
Notas
- La IA recibe hasta 50 assets y bloques recientes como contexto.
id: email-assets-library modulo: email-builder app: crm nombre: Gestionar recursos visuales de email tipo: configuracion
Gestionar recursos visuales de email
Sube, selecciona y elimina imágenes o archivos para usarlos en plantillas.
Que se logra
- Resultado: Logos e imágenes aprobadas quedan disponibles para reutilizarlos en plantillas de la organización.
- Caso de uso: Una cadena hotelera centraliza fotografías y logotipos para que sus campañas mantengan la misma identidad.
- Se combina con: Editor visual y bloques de contenido.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/assets - Acceso en UI:
Campaigns > Email Templates > Assets - Componente(s):
AssetUploader.tsx,AssetsLibraryDialog.tsx
Como funciona
- Abra
Assetso el selector de una imagen. - Suba un archivo o seleccione un asset existente.
- También puede buscar una imagen de Producto en el selector.
- Elimine assets desde la biblioteca.
Reglas y validaciones
- Los productos sin imagen principal no se pueden seleccionar como imagen.
Backend
- Servicios:
email-builder-assets(find/create/remove),s3-url-signing(create).
Relaciones
- Requiere: almacenamiento de la organización y Productos para el selector alterno.
- Dispara / afecta: bloques de imagen del email.
Notas
- Los assets de la organización aparecen tanto en el selector como en la página completa.
id: email-content-blocks modulo: email-builder app: crm nombre: Agregar bloques de contenido tipo: configuracion
Agregar bloques de contenido
Incorpora contenido y estructuras al email desde Blocks.
Que se logra
- Resultado: El usuario arma emails con componentes de texto, imagen, productos, llamados a la acción y marca.
- Caso de uso: Una tienda incorpora una cuadrícula de productos y un botón de compra en el anuncio de una nueva colección.
- Se combina con: Editor visual, biblioteca de recursos y plantillas.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/[templateId] - Acceso en UI:
Email builder > Blocks - Componente(s):
BlocksPalette.tsx
Como funciona
- Seleccione o arrastre un bloque al lienzo.
- Selecciónelo para editarlo en el inspector.
Reglas y validaciones
- Los bloques se insertan en el elemento o columna seleccionados.
Backend
- Servicios:
email-builder-templates(patch).
Relaciones
- Requiere: editor visual.
- Dispara / afecta: contenido compilado.
Notas
- Incluye encabezado, texto, imagen, botón, lista, cita, social, cuadrícula de imágenes, divisor, espaciador, hero, tarjetas y cuadrículas de productos, testimonio, CTA, pie de cancelación, HTML y referencias reutilizables.
id: email-document-inspector modulo: email-builder app: crm nombre: Configurar estilo de email tipo: configuracion
Configurar estilo de email
Edita las propiedades del documento, sección o bloque seleccionado.
Que se logra
- Resultado: Se define una presentación consistente del email, incluyendo sus estilos generales y los del elemento seleccionado.
- Caso de uso: Una firma de servicios ajusta tipografía y colores para que los correos de todos sus equipos respeten su marca.
- Se combina con: Editor visual, bloques y previsualización.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/[templateId] - Acceso en UI:
Email builder > inspector derecho - Componente(s):
DocumentInspector.tsx,BlockInspector.tsx,SelectionBreadcrumb.tsx
Como funciona
- Seleccione documento, sección o bloque.
- Cambie sus propiedades en el panel derecho.
- Guarde y compruebe el resultado en
Preview.
Reglas y validaciones
- Las opciones visibles cambian según el tipo de selección.
Backend
- Servicios:
email-builder-templates(patch).
Relaciones
- Requiere: editor visual.
- Dispara / afecta: apariencia compilada del email.
Notas
- El documento permite ajustar colores, ancho, tipografía y colores de enlaces; cada bloque ofrece sus propias opciones.
id: email-preview modulo: email-builder app: crm nombre: Previsualizar email tipo: vista
Previsualizar email
Renderiza la plantilla como el email final antes de enviarlo.
Que se logra
- Resultado: El equipo revisa el email compilado antes de usarlo en una campaña o envío.
- Caso de uso: Una organización sin fines de lucro valida que su boletín se vea correctamente antes de enviarlo a donantes.
- Se combina con: Editor visual y envío de plantilla.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/[templateId] - Acceso en UI:
Email builder > Preview - Componente(s):
MjmlPreview.tsx,DeviceFrame.tsx
Como funciona
- Abra una plantilla.
- Cambie de
BuilderaPreview. - Revise el resultado y vuelva a editar si es necesario.
Reglas y validaciones
- El resultado se genera a partir del documento actual.
Backend
- Servicios:
email-builder-render(create).
Relaciones
- Requiere: documento de plantilla.
- Dispara / afecta: validación visual previa a campañas o envíos.
Notas
- El render devuelve advertencias si existen problemas de compilación.
id: email-reusable-blocks modulo: email-builder app: crm nombre: Reutilizar bloques de email tipo: configuracion
Reutilizar bloques de email
Guarda bloques o secciones de la organización y los inserta en nuevas plantillas.
Que se logra
- Resultado: Secciones aprobadas, como encabezados o pies de página, se guardan para insertarse de nuevo sin reconstruirlas.
- Caso de uso: Una franquicia reutiliza el mismo bloque legal y de redes sociales en los correos de todas sus sedes.
- Se combina con: Bloques de contenido, recursos visuales y editor visual.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/[templateId] - Acceso en UI:
Email builder > Blocks > reusable blocks - Componente(s):
SaveAsReusableDialog.tsx,ReusablePalette.tsx,ReusablePicker.tsx
Como funciona
- Seleccione un bloque o sección.
- Guárdelo como reutilizable.
- Abra la paleta de reutilizables e insértelo en otra plantilla.
Reglas y validaciones
- Puede insertarse como copia o como referencia reutilizable.
Backend
- Servicios:
email-builder-reusable-blocks(find/create/patch/remove).
Relaciones
- Requiere: editor visual.
- Dispara / afecta: contenido de otras plantillas.
Notas
- Una referencia reutilizable se mantiene vinculada al elemento de biblioteca.
id: email-section-presets modulo: email-builder app: crm nombre: Usar secciones prediseñadas tipo: configuracion
Usar secciones prediseñadas
Inserta estructuras listas para editar desde la galería del constructor.
Que se logra
- Resultado: El usuario parte de estructuras de secciones listas para adaptar, reduciendo el trabajo de maquetación.
- Caso de uso: Una empresa de eventos agrega una sección de invitación con llamada a la acción y personaliza sus datos.
- Se combina con: Editor visual, bloques de contenido y plantillas.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/[templateId] - Acceso en UI:
Email builder > Gallery - Componente(s):
SectionsPalette.tsx,TemplatesPalette.tsx
Como funciona
- Abra
Gallery. - Seleccione una sección o plantilla prediseñada.
- Ajústela en el lienzo y guarde.
Reglas y validaciones
- Las secciones se añaden como contenido editable de la plantilla.
Backend
- Servicios:
email-builder-presets(find/get).
Relaciones
- Requiere: editor visual.
- Dispara / afecta: diseño de la plantilla.
Notas
- Existen secciones de cabecera, hero, características, imagen-texto, CTA, testimonio y pies de página; las plantillas de sistema se copian desde la galería principal.
id: email-template-gallery modulo: email-builder app: crm nombre: Gestionar plantillas de email tipo: vista
Gestionar plantillas de email
Explora las plantillas de la organización y del sistema, con filtros de origen y categoría.
Que se logra
- Resultado: La organización crea, copia, encuentra y mantiene las plantillas que empleará en comunicaciones comerciales.
- Caso de uso: Una tienda duplica su plantilla de promoción mensual para una nueva categoría de productos.
- Se combina con: Editor visual, campañas de email y Email Broadcasting.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates - Acceso en UI:
Campaigns > Email Templates - Componente(s):
page.tsx
Como funciona
- Busque o filtre las tarjetas.
- Abra una plantilla propia para editarla.
- Seleccione una del sistema y confirme
Copy to My templates. - Use
Create Templatepara crear una plantilla vacía. - Elimine una plantilla propia desde su tarjeta.
Reglas y validaciones
- Las plantillas del sistema se copian antes de editarse.
- Para crear, el nombre no puede estar vacío.
Backend
- Servicios:
email-builder-templates(find/create/remove),email-builder-presets(find/get),email-builder-template-categories(find).
Relaciones
- Requiere: Constructor de emails.
- Dispara / afecta: editor y campañas email.
Notas
- Cada tarjeta puede mostrar miniatura o una vista compilada.
id: email-template-send modulo: email-builder app: crm nombre: Enviar una plantilla de email tipo: accion
Enviar una plantilla de email
Envía una plantilla guardada a un contacto con datos y variables resueltas.
Que se logra
- Resultado: Una plantilla se entrega a un destinatario usando datos personalizados y un remitente configurado.
- Caso de uso: Un despacho profesional envía una comunicación individual con el nombre del cliente y un enlace relevante.
- Se combina con: Contactos, Email Broadcasting y plantillas de email.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/[templateId] - Acceso en UI:
Email builder > Send - Componente(s):
SendTemplateDialog.tsx
Como funciona
- Abra
Send. - Confirme asunto y texto de previsualización.
- Seleccione contacto, canal y remitente.
- Complete deal, compañía o variables personalizadas cuando se pidan.
- Envíe.
Reglas y validaciones
- Contacto, asunto, canal y remitente son obligatorios.
- El contacto debe tener email.
- Solo aparecen remitentes verificados.
Backend
- Servicios:
email-builder-send-template(create),email-broadcast-sends(create). - Efectos: resuelve variables y envía mediante el canal configurado.
Relaciones
- Requiere: Contactos, Email Broadcasting y, según variables, Deals y Compañías.
- Dispara / afecta: entrega de email y wallet.
Notas
contact.*,deal.*,company.*,organization.*y la URL de cancelación se completan automáticamente.
id: email-visual-editor modulo: email-builder app: crm nombre: Editar documento visual de email tipo: configuracion
Editar documento visual de email
Construye el contenido de una plantilla en un lienzo con secciones, columnas y bloques.
Que se logra
- Resultado: El equipo diseña y guarda una plantilla de email visual que se compila para usarse en envíos reales.
- Caso de uso: Un restaurante arma un anuncio de menú semanal con fotos, botones de reserva y contenido propio.
- Se combina con: Bloques de contenido, previsualización, IA y campañas de email.
Donde esta
- Ruta:
/[orgId]/campaigns/email-templates/[templateId] - Acceso en UI:
Email Templates > abrir plantilla - Componente(s):
EmailBuilder.tsx,EmailBuilderCanvas.tsx,EmailBuilderTopbar.tsx
Como funciona
- Abra una plantilla.
- Escriba
SubjectyPreview text. - Inserte o arrastre contenido al lienzo.
- Seleccione elementos para configurar sus propiedades.
- Use
Savepara persistir yBuilderoPreviewpara cambiar de modo.
Reglas y validaciones
- El envío guarda automáticamente la plantilla antes de entregarla.
Backend
- Servicios:
email-builder-templates(get/patch). - Efectos: al guardar contenido se compila para previsualización y envío.
Relaciones
- Requiere: bloques, secciones, assets y estilos.
- Dispara / afecta: campañas y envíos de email.
Notas
Outlinepermite recorrer el árbol de contenido.
id: formularios app: crm nombre: Formularios estado: shipped permiso: permisos de formularios
Formularios
Permite crear formularios para compartirlos públicamente, recibir respuestas y analizarlas desde el CRM.
Para que sirve
- Una clínica publica un formulario de solicitud para captar datos previos de pacientes y revisar cada respuesta en el CRM.
- Una inmobiliaria crea un formulario de calificación de prospectos con preguntas que cambian según el tipo de propiedad buscada.
- Una agencia inserta un formulario en su sitio y recibe una notificación por cada nueva solicitud comercial.
- Un equipo comercial vincula un formulario a un contacto o conversación existente para incorporar información sin perder el contexto.
- Una empresa activa una automatización al llegar una respuesta para iniciar tareas o comunicaciones posteriores.
- Un negocio exporta las respuestas filtradas para analizarlas fuera de la plataforma.
Que lo hace diferente
- Los formularios públicos, embeds y widgets comparten el mismo constructor y configuración; no se mantiene una versión distinta para cada canal.
- Cada respuesta puede asociarse de forma segura a un contacto o conversación existente mediante el contexto compartido, sin crear contactos automáticamente.
- La creación de una respuesta puede ejecutar automatizaciones activas vinculadas a un formulario específico o a cualquier formulario.
- El constructor incluye IA que propone una estructura editable; el equipo revisa y guarda el resultado antes de publicarlo.
- Las notificaciones por respuesta se envían mediante el correo transaccional de Apex y no bloquean el registro si el correo falla.
Acceso
- Ruta principal:
/[orgId]/forms - Como se llega:
Sidebar > Forms - Permiso requerido: permisos de formularios
Alcance tecnico
- Frontend: rutas
forms/page.tsx,forms/[id]/page.tsx,forms/[id]/responses/page.tsxyf/[formId]/page.tsx; componentesFormsView,FormDetail,FormBuilderyFormAnalytics - Backend:
formsyform-submissions - Superficies publicas:
/f/[formId] - Integraciones externas: correo transaccional mediante SES para notificaciones de respuestas
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Constructor | form-builder.md | Diseña el formulario mediante arrastre, árbol, vista previa y guardado. |
| IA del constructor | form-builder-ai.md | Genera o modifica la estructura del formulario a partir de instrucciones. |
| Tipos de campo | form-field-types.md | Añade campos de entrada, contenido y estructuras de diseño. |
| Validaciones de campo | field-validation.md | Configura obligatoriedad, reglas de formato y límites por campo. |
| Lógica condicional | conditional-logic.md | Muestra u oculta elementos según respuestas anteriores. |
| Ajustes y publicación | form-settings-publishing.md | Configura el comportamiento público y publica o despublica el formulario. |
| Presentación pública | form-display.md | Ajusta tamaño, ancho y la visualización de errores del formulario público. |
| Compartir | form-sharing.md | Obtiene enlace público, iframe y código de inserción. |
| Formulario público | public-form.md | Recoge respuestas sin requerir inicio de sesión. |
| Asociación contextual | submission-association.md | Vincula una respuesta a un contacto o conversación existentes. |
| Notificaciones de respuestas | submission-notifications.md | Envía un correo a destinatarios configurados tras un envío. |
| Automatizaciones por respuesta | automation-trigger.md | Inicia automatizaciones cuando se crea una respuesta. |
| Respuestas y analítica | form-responses.md | Consulta métricas, respuestas individuales y estado de spam. |
| Exportar respuestas | response-export.md | Descarga las respuestas visibles en formato CSV. |
Relaciones
- Depende de: Contactos y Conversaciones para asociaciones contextuales.
- Usado por: Automatizaciones, Nova y CRM.
Limitaciones y notas
- Solo los formularios publicados aceptan envíos públicos.
- Por confirmar: no se encontró una función que cree, actualice o mapee automáticamente contactos o campos personalizados al enviar una respuesta.
- Por confirmar: el formulario conserva contexto de URL y referencia de origen, pero no se encontró una configuración específica para capturar UTM.
- Por confirmar: existe un elemento visual de CAPTCHA, pero no se encontró validación de CAPTCHA en el flujo de envío público.
id: automation-trigger modulo: formularios app: crm nombre: Automatizaciones por respuesta tipo: automatizacion
Automatizaciones por respuesta
Inicia automatizaciones activas cuando se crea una respuesta de formulario.
Que se logra
- Resultado: cada respuesta compatible inicia automáticamente el flujo operativo configurado por el negocio.
- Caso de uso: una inmobiliaria recibe un formulario de valoración y crea el seguimiento comercial definido en Automatizaciones.
- Se combina con: formulario público, respuestas y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Forms > formulario > Settings > Automations - Componente(s):
FormSettings.tsx,AutomationCanvas.tsx
Como funciona
- Abre
Settingsdel formulario. - En
Automations, seleccionaCreate Automation. - El sistema crea una automatización activa vinculada a ese formulario.
- Configura sus acciones desde el editor de automatizaciones.
- Cada nueva respuesta del formulario inicia la automatización vinculada.
Reglas y validaciones
- Una automatización puede vincularse a un formulario específico o a cualquier formulario.
- Solo se ejecutan automatizaciones activas cuyo vínculo coincide con la respuesta creada.
- Desde los ajustes se pueden previsualizar o abrir las automatizaciones vinculadas.
Backend
- Servicios:
automations(método: find/create/patch),automations-webhooks(método: find/create),form-submissions(método: create),automation-run(método: create) - Efectos: inicia una ejecución por cada automatización coincidente.
Relaciones
- Requiere: Respuestas de formularios y Automatizaciones.
- Dispara / afecta: Ejecuciones de automatización.
Notas
- Si una automatización falla al iniciarse, la respuesta del formulario se conserva.
id: conditional-logic modulo: formularios app: crm nombre: Lógica condicional tipo: configuracion
Lógica condicional
Muestra u oculta un elemento según el valor de uno o varios campos del formulario.
Que se logra
- Resultado: cada visitante ve solo preguntas pertinentes a sus respuestas, evitando formularios extensos e irrelevantes.
- Caso de uso: una inmobiliaria muestra preguntas de financiación solo a quienes indicaron que requieren crédito.
- Se combina con: tipos de campo, validaciones y formulario público.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Forms > formulario > elemento > Conditions - Componente(s):
ElementEditor.tsx,page.tsx
Como funciona
- Selecciona el elemento que debe mostrarse de forma condicional.
- Abre
Conditions. - Elige el campo que se evaluará, el operador y el valor.
- Añade condiciones o grupos con
ANDuORsi es necesario. - Guarda y verifica el resultado en
Previewo en el formulario público.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Campo | selección | Sí | Debe ser otro elemento del formulario. |
| Operador | selección | Sí | Incluye igualdad, contenido, vacío, comparación y coincidencia de inicio o fin. |
| Valor | texto | Condicional | No se solicita con Is empty ni Is not empty. |
| Grupo | lista | No | Combina sus condiciones con AND u OR. |
Reglas y validaciones
- Un campo no puede condicionarse a sí mismo.
- Los campos ocultos no bloquean la validación de requeridos.
- Cuando hay grupos, todos los grupos configurados deben cumplirse.
Backend
- Servicios:
forms(método: patch) - Efectos: modifica qué elementos puede ver y completar el visitante.
Relaciones
- Requiere: Tipos de campo y elementos.
- Dispara / afecta: Validaciones de campo y formulario público.
Notas
- Existe compatibilidad con condiciones simples y con grupos de condiciones.
id: field-validation modulo: formularios app: crm nombre: Validaciones de campo tipo: configuracion
Validaciones de campo
Permite exigir respuestas y definir reglas de formato, longitud o valor para los campos del formulario.
Que se logra
- Resultado: se reduce la recepción de respuestas incompletas o con formato incorrecto antes de que lleguen al equipo.
- Caso de uso: una financiera exige correo válido, número de identificación con longitud definida y datos obligatorios de un solicitante.
- Se combina con: tipos de campo, presentación y formulario público.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Forms > formulario > elemento > Validation - Componente(s):
ElementEditor.tsx,page.tsx
Como funciona
- Selecciona un campo en el lienzo.
- Activa
Requiredsi debe completarse. - En
Validation, define patrón, mensaje o reglas adicionales. - Guarda y prueba el comportamiento desde
Previewo el formulario público.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Required |
interruptor | No | Impide avanzar o enviar sin una respuesta válida. |
Pattern |
texto | No | Define una expresión regular. |
Error message |
texto | No | Personaliza el mensaje de error. |
Rules |
lista | No | Admite mínimo, máximo, longitud, email, URL y patrón. |
Reglas y validaciones
- Los campos obligatorios visibles se validan antes de avanzar o enviar.
- La validación puede mostrarse durante la interacción si está habilitada en los ajustes del formulario.
- Los elementos de diseño y botones no muestran el panel de validación.
Backend
- Servicios:
forms(método: patch),form-submissions(método: create) - Efectos: el formulario público bloquea el avance o envío cuando detecta errores.
Relaciones
- Requiere: Tipos de campo y elementos.
- Dispara / afecta: Formulario público.
Notas
- Las reglas se evalúan en la interfaz pública.
id: form-builder-ai modulo: formularios app: crm nombre: IA del constructor de formularios tipo: integracion
IA del constructor de formularios
Genera una estructura nueva o propone cambios sobre los elementos actuales a partir de instrucciones en lenguaje natural.
Que se logra
- Resultado: una instrucción en lenguaje natural se convierte en una propuesta editable de estructura para acelerar el diseño.
- Caso de uso: una academia pide a la IA un formulario de inscripción y ajusta las preguntas antes de guardarlo.
- Se combina con: constructor, tipos de campo, validaciones y lógica condicional.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Forms > formulario > AI - Componente(s):
AIChatSidebar.tsx,AIPromptDialog.tsx
Como funciona
- Abre un formulario y selecciona la pestaña
AI. - Describe el formulario o el cambio que necesitas.
- Revisa la propuesta de elementos, explicación y sugerencias.
- Selecciona
Apply to Formpara llevar el resultado al lienzo. - Guarda el formulario para conservar los cambios.
Reglas y validaciones
- Puede crear un formulario nuevo o modificar los elementos existentes.
- La propuesta no se guarda automáticamente al aplicarse al lienzo; requiere guardar el formulario.
- La respuesta incluye el consumo de tokens cuando está disponible.
Backend
- Servicios:
ai-assistant-system(método: create),forms(método: patch) - Efectos: genera o modifica la estructura editable del formulario.
Relaciones
- Requiere: Constructor de formularios.
- Dispara / afecta: Tipos de campo, validaciones y lógica condicional presentes en la propuesta.
Notas
- La IA utiliza los tipos de elemento registrados por el constructor.
id: form-builder modulo: formularios app: crm nombre: Constructor de formularios tipo: accion
Constructor de formularios
Diseña el contenido mediante elementos arrastrables, árbol y vista previa.
Que se logra
- Resultado: un equipo puede diseñar y revisar formularios de varios pasos sin programar la estructura.
- Caso de uso: una consultora construye un diagnóstico inicial con secciones, preguntas y una página final de envío.
- Se combina con: tipos de campo, validaciones, lógica condicional y formulario público.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Forms > formulario - Componente(s):
FormBuilder.tsx,ElementPalette.tsx,ElementEditor.tsx
Como funciona
- Abre un formulario.
- Arrastra campos, contenido estático o estructuras al lienzo.
- Selecciona un elemento para configurarlo.
- Usa
Preview,Save,UndooRedo.
Reglas y validaciones
- Existe guardado automático aproximado de 30 segundos y guardado manual.
Backend
- Servicios:
forms(método: get/patch)
Relaciones
- Requiere: Formularios.
- Dispara / afecta: Formulario público.
Notas
Page Breakcrea flujos de varios pasos.
id: form-display modulo: formularios app: crm nombre: Presentación del formulario público tipo: configuracion
Presentación del formulario público
Configura el tamaño visual, el ancho y la forma de mostrar errores en el formulario público y en su iframe.
Que se logra
- Resultado: el formulario público y su embed se presentan con una escala y mensajes de error adecuados para el sitio donde se publica.
- Caso de uso: una empresa adapta un formulario compacto para una landing móvil y activa validación inmediata.
- Se combina con: ajustes y publicación, validaciones y compartir formularios.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Forms > formulario > Settings > Form Display - Componente(s):
FormSettings.tsx,page.tsx
Como funciona
- Abre el formulario y selecciona
Settings. - En
Form Display, elige el tamaño y, si hace falta, define un ancho. - Activa o desactiva la validación en vivo y el resumen de errores.
- Selecciona
Save Settings.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Form size |
selección | No | Ofrece Small, Medium y Large. |
Form width |
texto | No | Define un ancho personalizado. |
Live validation |
interruptor | No | Está activado de forma predeterminada. |
Display errors above |
interruptor | No | Muestra un resumen de campos pendientes encima del formulario. |
Reglas y validaciones
- Estos ajustes se aplican al formulario público.
- La vista previa del constructor permite comprobar escritorio, tableta y móvil.
Backend
- Servicios:
forms(método: patch) - Efectos: cambia la presentación y validación de la experiencia pública.
Relaciones
- Requiere: Ajustes y publicación de formularios.
- Dispara / afecta: Formulario público y compartir formularios.
Notas
- El iframe usa la misma página pública con el parámetro
embed=true.
id: form-field-types modulo: formularios app: crm nombre: Tipos de campo y elementos tipo: configuracion
Tipos de campo y elementos
El constructor ofrece campos de entrada, contenido estático y estructuras para organizar el formulario.
Que se logra
- Resultado: el formulario puede recoger datos, presentar contenido y organizar recorridos de varios pasos según la necesidad.
- Caso de uso: una clínica combina datos de contacto, consentimiento, archivos y una sección explicativa en una sola solicitud.
- Se combina con: constructor, validaciones y lógica condicional.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Forms > formulario > Elements - Componente(s):
ElementPalette.tsx,ElementRenderer.tsx
Como funciona
- Abre un formulario y selecciona
Elements. - Arrastra un elemento al lienzo o dentro de una estructura compatible.
- Selecciona el elemento para editar sus propiedades.
- Guarda para publicar los cambios en el formulario.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Entrada de datos | texto, email, teléfono, número, URL, fecha, hora, selección, archivo, firma y otros | No | La obligatoriedad se configura por elemento. |
| Contenido | encabezado, párrafo, imagen, video, enlace, HTML, alerta y botones | No | Se usa para presentar información o acciones. |
| Estructura | salto de página, columnas, cuadrícula, pestañas, pasos, secciones, listas, acordeón y tarjeta | No | Organiza el contenido y permite flujos de varios pasos. |
Reglas y validaciones
- Cada elemento debe tener un identificador único.
- Los elementos anidados se pueden seleccionar desde
Tree. Page Breakdivide el formulario en pasos.
Backend
- Servicios:
forms(método: patch) - Efectos: guarda la composición que verá el visitante en el formulario público.
Relaciones
- Requiere: Constructor de formularios.
- Dispara / afecta: Formulario público y respuestas.
Notas
- El elemento
Captchaestá disponible en el constructor. Por confirmar: no se encontró validación de su respuesta al enviar el formulario.
id: form-responses modulo: formularios app: crm nombre: Respuestas y analítica de formularios tipo: vista
Respuestas y analítica de formularios
Consulta métricas, respuestas, filtros, detalle y exportación.
Que se logra
- Resultado: el equipo conoce el volumen y estado de los envíos y puede revisar cada respuesta para actuar sobre ella.
- Caso de uso: una empresa de eventos detecta registros incompletos o spam antes de preparar su lista de asistentes.
- Se combina con: formulario público, asociación contextual y exportar respuestas.
Donde esta
- Ruta:
/[orgId]/forms/[id]/responses - Acceso en UI:
Form detail > View responses - Componente(s):
FormAnalytics.tsx
Como funciona
- Abre
View responses. - Consulta las tarjetas y
Summary. - Usa
Responsespara buscar, filtrar, abrir o eliminar envíos. - Selecciona
Export CSVpara descargar resultados.
Reglas y validaciones
- Clasifica respuestas como completadas, parciales o spam.
Backend
- Servicios:
forms,form-submissions(método: get/find/remove)
Relaciones
- Requiere: Envíos públicos.
- Dispara / afecta: Ninguna.
Notas
View Formsolo aparece cuando el formulario está publicado.
id: form-settings-publishing modulo: formularios app: crm nombre: Ajustes y publicación de formularios tipo: configuracion
Ajustes y publicación de formularios
Configura comportamiento del envío y alterna entre borrador y publicación.
Que se logra
- Resultado: el equipo controla cuándo un formulario acepta envíos y qué sucede después de responderlo.
- Caso de uso: una marca prepara un formulario en borrador, configura la confirmación y lo publica al comenzar una campaña.
- Se combina con: formulario público, notificaciones y automatizaciones por respuesta.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Form detail > SettingsyPublish/Unpublish - Componente(s):
FormDetail.tsx,FormSettings.tsx
Como funciona
- Abre
Settings. - Ajusta mensaje, redirección, notificaciones y presentación.
- Guarda los ajustes.
- Selecciona
Publishpara habilitar el formulario público.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Form name |
texto | Sí | Identifica el formulario. |
Redirect URL |
URL | No | Tiene prioridad sobre mensaje de éxito. |
Enable email notifications |
interruptor | No | Activa destinatarios configurables. |
Reglas y validaciones
- Solo un formulario
publishedestá disponible públicamente.
Backend
- Servicios:
forms(método: patch)
Relaciones
- Requiere: Formulario público.
- Dispara / afecta: Recepción de respuestas.
Notas
- Duplicar y eliminar se encuentran en el menú de más acciones.
id: form-sharing modulo: formularios app: crm nombre: Compartir formularios tipo: publico
Compartir formularios
Proporciona enlace público, iframe y código de widget para distribuir un formulario.
Que se logra
- Resultado: el mismo formulario puede distribuirse como enlace, iframe o widget y recibir respuestas en Apex.
- Caso de uso: una agencia inserta el formulario de contacto en el sitio de un cliente sin reconstruirlo fuera del CRM.
- Se combina con: publicación, formulario público y asociación contextual.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Form detail > Share - Componente(s):
ShareFormDialog.tsx
Como funciona
- Abre el formulario.
- Selecciona
Share. - Copia el enlace directo, iframe o código de embed.
- Publica antes de recibir envíos reales.
Reglas y validaciones
- Se muestra advertencia cuando el formulario no está publicado.
- Los parámetros que coinciden con Field IDs permiten prellenar valores.
Backend
- Servicios:
forms(método: get)
Relaciones
- Requiere: Publicación del formulario.
- Dispara / afecta: Formulario público.
Notas
- El iframe usa el parámetro
embed=true.
id: public-form modulo: formularios app: crm nombre: Formulario público tipo: publico
Formulario público
Presenta y recibe un formulario publicado sin requerir inicio de sesión.
Que se logra
- Resultado: visitantes sin cuenta pueden completar un formulario publicado y recibir una confirmación o redirección definida.
- Caso de uso: una escuela comparte una solicitud de admisión por enlace y recoge respuestas de familias interesadas.
- Se combina con: validaciones, lógica condicional, respuestas y automatizaciones.
Donde esta
- Ruta:
/f/[formId] - Acceso en UI: enlace directo, iframe o widget
- Componente(s):
page.tsx
Como funciona
- El visitante abre el enlace.
- Completa campos visibles y avanza pasos si corresponde.
- Envía el formulario.
- Ve el mensaje de éxito o es redirigido.
Reglas y validaciones
- Rechaza formularios no publicados.
- Valida campos requeridos y reglas de cada campo.
- La redirección configurada prevalece sobre el mensaje de éxito.
Backend
- Servicios:
forms,form-submissions(método: get/create)
Relaciones
- Requiere: Publicación y configuración del formulario.
- Dispara / afecta: Respuestas de formularios.
Notas
- Admite prellenado y asociación contextual con contacto o conversación mediante parámetros URL.
id: response-export modulo: formularios app: crm nombre: Exportar respuestas tipo: accion
Exportar respuestas
Descarga en CSV las respuestas disponibles del formulario para analizarlas fuera de AchieveApex.
Que se logra
- Resultado: las respuestas filtradas se convierten en un archivo utilizable para análisis o procesos externos.
- Caso de uso: un centro de formación exporta solo las inscripciones completadas para preparar la convocatoria.
- Se combina con: respuestas y analítica de formularios.
Donde esta
- Ruta:
/[orgId]/forms/[id]/responses - Acceso en UI:
Forms > formulario > View responses > Export CSV - Componente(s):
FormAnalytics.tsx
Como funciona
- Abre
View responsesen un formulario. - Opcionalmente busca respuestas o filtra por estado.
- Selecciona
Export CSV. - El navegador descarga el archivo con las respuestas.
Reglas y validaciones
Export CSVpermanece deshabilitado cuando no hay respuestas.- Si hay búsqueda o filtro activos, se exportan las respuestas visibles tras aplicar esos criterios.
- Los archivos de firma se representan como imagen en la exportación.
Backend
- Servicios:
form-submissions(método: find) - Efectos: genera la descarga localmente en el navegador.
Relaciones
- Requiere: Respuestas y analítica de formularios.
- Dispara / afecta: Ninguna.
Notas
- La exportación usa los nombres de los campos como encabezados.
id: submission-association modulo: formularios app: crm nombre: Asociación contextual de respuestas tipo: integracion
Asociación contextual de respuestas
Vincula una respuesta a un contacto o una conversación que ya existan en la misma organización.
Que se logra
- Resultado: la información enviada se conserva dentro del historial del contacto o conversación correctos, cuando se comparte contexto válido.
- Caso de uso: un asesor envía por chat un formulario de actualización a un cliente y su respuesta queda vinculada a ese hilo.
- Se combina con: formulario público, Contactos, Conversaciones y respuestas de formularios.
Donde esta
- Ruta:
/f/[formId] - Acceso en UI: enlace público o embed con contexto incluido
- Componente(s):
page.tsx,urlPrefill.ts
Como funciona
- Comparte el formulario con el identificador de contacto o conversación como parámetro de URL, o incluye campos ocultos con esos identificadores.
- El visitante completa y envía el formulario.
- El sistema valida que los recursos indicados pertenezcan a la organización del formulario.
- La respuesta queda asociada al contacto y/o a la conversación válidos.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
contact_id |
parámetro URL o campo oculto | No | Debe identificar un contacto existente de la organización. |
conversation_id |
parámetro URL o campo oculto | No | Puede resolver el contacto asociado a la conversación. |
Reglas y validaciones
- Se rechazan identificadores inválidos o pertenecientes a otra organización.
- Los valores enviados explícitamente prevalecen sobre el contexto encontrado en la URL.
Backend
- Servicios:
form-submissions(método: create),contacts(método: get),conversations(método: get) - Efectos: guarda la asociación contextual en la respuesta.
Relaciones
- Requiere: Formulario público, Contactos o Conversaciones existentes.
- Dispara / afecta: Respuestas y analítica; consultas de Nova sobre respuestas.
Notas
- No crea ni actualiza contactos automáticamente.
id: submission-notifications modulo: formularios app: crm nombre: Notificaciones de respuestas tipo: configuracion
Notificaciones de respuestas
Envía un correo transaccional con los valores enviados cada vez que se recibe una respuesta.
Que se logra
- Resultado: los responsables reciben por correo el contenido de cada respuesta sin tener que vigilar el panel de formularios.
- Caso de uso: una clínica avisa a recepción cuando llega una solicitud de cita desde su web.
- Se combina con: ajustes y publicación, formulario público y correo transaccional.
Donde esta
- Ruta:
/[orgId]/forms/[id] - Acceso en UI:
Forms > formulario > Settings > Email Notifications - Componente(s):
FormSettings.tsx
Como funciona
- Abre
Settingsen el formulario. - Activa
Enable email notifications. - Indica uno o más destinatarios en
Notification emails. - Selecciona
Save Settings. - Al recibirse una respuesta, los destinatarios configurados reciben el correo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Enable email notifications |
interruptor | No | Habilita el envío de correos por respuesta. |
Notification emails |
texto | Condicional | Acepta destinatarios separados por comas cuando las notificaciones están activas. |
Reglas y validaciones
- No se envía correo si las notificaciones están desactivadas o no hay destinatarios configurados.
- El correo incluye el nombre del formulario, los valores enviados y el momento del envío.
Backend
- Servicios:
form-submissions(método: create) - Efectos: envía correo transaccional mediante SES después de crear la respuesta.
Relaciones
- Requiere: Ajustes y publicación de formularios.
- Dispara / afecta: Correo transaccional.
Notas
- Un error al enviar el correo no detiene la creación de la respuesta.
id: productos app: crm nombre: Productos estado: shipped permiso: permisos granulares de productos
Productos
Administra productos y servicios reutilizables en ventas y conversaciones. Permite preparar su información comercial, media, categorías e indexación para IA.
Para que sirve
- Una tienda de equipos comerciales centraliza productos, precios y material visual para que ventas comparta siempre la oferta vigente.
- Una empresa de servicios recurrentes registra planes y frecuencias de cobro para reutilizarlos en propuestas comerciales.
- Una distribuidora importa su catálogo y clasifica las referencias para reducir la carga manual de alta.
- Un negocio que vende por chat envía fichas y enlaces de productos desde una conversación, sin copiar datos entre herramientas.
- Un equipo de preventa hace que el asistente IA encuentre ofertas habilitadas al responder preguntas de clientes.
Que lo hace diferente
- El mismo catálogo alimenta
Dealsy estimates, de modo que una oferta comercial se reutiliza en ventas y documentos. - Desde el composer del Inbox se pueden enviar productos, categorías o enlaces de catálogo con plantillas específicas por modo de envío.
- Los productos habilitados para IA y sus campos personalizados se indexan para que asistentes IA y automatizaciones localicen la oferta adecuada.
- La media se gestiona en la ficha y se aprovecha al compartir productos cuando el canal admite imágenes.
- Las categorías y los productos pueden alimentar Catálogos públicos sin duplicar el catálogo.
Acceso
- Ruta principal:
/[orgId]/products - Como se llega:
Sidebar > CRM > Products - Permiso requerido: permisos granulares de productos
Alcance tecnico
- Frontend:
ProductsView,ProductDetailsView,ProductMediaUploady categorías. - Backend:
products,products-categories,products-media,product-send-message-templatesyproduct-embeddings. - Superficies publicas: ninguna.
- Integraciones externas: S3 e IA.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Catálogo | product-catalog.md | Consulta, filtra y abre productos y servicios. |
| Crear producto o servicio | create-product.md | Da de alta una oferta y abre su detalle. |
| Detalle de producto | product-detail.md | Configura precio, estado y facturación. |
| Editar producto | edit-product.md | Actualiza información comercial y organización. |
| Eliminar producto | delete-product.md | Retira una oferta mediante confirmación. |
| Categorías de producto | product-categories.md | Crea, renombra y elimina categorías. |
| Media de producto | product-media.md | Añade imágenes y videos. |
| Importar productos | import-products.md | Carga una hoja, mapea datos y revisa resultados. |
| IA y campos personalizados | product-ai-custom-fields.md | Configura indexación y datos de producto. |
| Búsqueda de productos con IA | product-ai-search.md | Expone ofertas indexables a asistentes y automatizaciones. |
| Plantillas para enviar productos | product-message-templates.md | Define textos reutilizables por modo de envío. |
| Enviar productos desde una conversación | send-products-from-conversation.md | Comparte productos CRM como mensajes del canal. |
Relaciones
- Depende de: Campos personalizados y categorías.
- Usado por: Deals, Estimates y asistentes IA.
Limitaciones y notas
- Catalog Links pertenece al módulo
catalogos-publicos, no a este. - No se confirmó una función separada para exportación o acciones masivas de productos.
- Por confirmar: impuestos, variantes/SKU avanzados y orden manual de categorías.
id: create-product modulo: productos app: crm nombre: Crear producto o servicio tipo: accion
Crear producto o servicio
Crea una oferta inicial y abre su ficha para completar el catálogo.
Que se logra
- Resultado: una nueva oferta queda disponible como producto o servicio, con precio y modalidad de cobro definidos.
- Caso de uso: una agencia crea su plan mensual de gestión de redes antes de incluirlo en propuestas a clientes.
- Se combina con: detalle de producto y estimates.
Donde esta
- Ruta:
/[orgId]/products - Acceso en UI:
Products > Add Product - Componente(s):
AddProductDialog.tsx
Como funciona
- Selecciona
Add Product. - Elige
ProductoService. - Indica nombre, descripción, precio, estado y modalidad de cobro.
- Selecciona
Add Product; la aplicación abre el detalle creado.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | Debe tener al menos dos caracteres. |
Type |
selección | Sí | Product o Service. |
Price |
número | Sí | No acepta valores negativos. |
Billing |
selección | Sí | One-time o Recurring. |
Interval |
selección y número | Condicional | Se muestra para cobro recurrente. |
Status |
selección | Sí | Active o Inactive. |
Reglas y validaciones
- El intervalo recurrente predeterminado es mensual y su cantidad mínima es uno.
- La categoría, SKU, media y campos personalizados se completan después en el detalle.
Backend
- Servicios:
products(método: create)
Relaciones
- Requiere: Productos.
- Dispara / afecta: Detalle de producto.
Notas
- Por confirmar: si la creación inicial permite seleccionar moneda distinta de la base.
id: delete-product modulo: productos app: crm nombre: Eliminar producto tipo: accion
Eliminar producto
Retira un producto o servicio desde su ficha mediante una confirmación explícita.
Que se logra
- Resultado: una oferta deja de estar disponible en el catálogo y se retira su media asociada tras confirmación.
- Caso de uso: una tienda descontinúa una línea de productos para que el equipo no vuelva a compartirla con clientes.
- Se combina con: detalle y media de producto.
Donde esta
- Ruta:
/[orgId]/products/[id] - Acceso en UI:
Product Details > … > Delete - Componente(s):
ProductDetailsView.tsx
Como funciona
- Abre el menú
…. - Selecciona
Delete. - Confirma la acción en el diálogo.
- La aplicación vuelve al catálogo.
Reglas y validaciones
- La interfaz exige confirmación antes de enviar la eliminación.
- El backend aplica la eliminación en cascada de los recursos de media asociados.
Backend
- Servicios:
products,products-media(método: remove) - Hooks relevantes: la eliminación del producto limpia sus relaciones de media.
Relaciones
- Requiere: Detalle de producto.
- Dispara / afecta: Media de producto y la disponibilidad de la oferta en el catálogo.
Notas
- Por confirmar: el comportamiento de líneas históricas de deals y estimates después de eliminar la oferta.
id: edit-product modulo: productos app: crm nombre: Editar producto tipo: accion
Editar producto
Actualiza la información comercial, organización y facturación de un producto o servicio.
Que se logra
- Resultado: las condiciones comerciales de una oferta se actualizan en un único lugar antes de reutilizarla en ventas.
- Caso de uso: una empresa SaaS cambia un plan de anual a mensual y ajusta su precio sin crear una referencia nueva.
- Se combina con: categorías, monedas de la organización y estimates.
Donde esta
- Ruta:
/[orgId]/products/[id] - Acceso en UI:
Products > fila de producto - Componente(s):
ProductDetailsView.tsx
Como funciona
- Abre la ficha de un producto.
- Edita nombre, SKU o descripción.
- Ajusta estado, categoría, tipo, existencias, precio o facturación en el panel lateral.
- Selecciona
Save Changes.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
SKU |
texto | No | Identificador comercial visible en la ficha. |
Status |
selección | Sí | Permite activar o desactivar la oferta. |
Category |
selección | No | Puede administrarse desde el mismo control. |
Type |
selección | Sí | Producto o servicio. |
Price |
importe | Sí | Se presenta con la moneda de la organización. |
Billing |
selección | Sí | Único o recurrente, con intervalo. |
Reglas y validaciones
- Los cambios de
Custom Fieldsse guardan por campo, aparte deSave Changes. - El detalle muestra los estimates relacionados que incluyen el producto.
Backend
- Servicios:
products,products-categories,organization-currencies(método: get/find/patch)
Relaciones
- Requiere: Categorías y monedas de la organización.
- Dispara / afecta: Deals y estimates que ya usan la oferta.
Notas
- Por confirmar: el alcance de impuestos y variantes en la interfaz actual.
id: import-products modulo: productos app: crm nombre: Importar productos tipo: accion
Importar productos
Carga productos desde un archivo y guía el mapeo de datos, categorías y opciones de importación.
Que se logra
- Resultado: una hoja existente se convierte en productos organizados, con categorías y búsqueda IA opcionales.
- Caso de uso: un mayorista incorpora cientos de referencias desde su lista comercial y revisa los registros con errores.
- Se combina con: categorías y búsqueda de productos con IA.
Donde esta
- Ruta:
/[orgId]/products - Acceso en UI:
Products > Import - Componente(s):
ImportProductsDialog.tsx,ImportProcessor.ts
Como funciona
- Carga un archivo en
Upload File. - En
Map Columns, asocia como mínimo la columna de nombre. - En
Map Categories, revisa las categorías detectadas. - En
Configure Options, decide si genera búsqueda IA y el tratamiento de duplicados. - Selecciona
Start Importy revisa el progreso, avisos y errores.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Mapeo de nombre | selección | Sí | Debe quedar asignado antes de continuar. |
| Categorías | mapeo | No | Es un paso opcional. |
| Generar IA | casilla | No | Está activada inicialmente. |
| Duplicados | selección | No | Inicialmente se omiten. |
Reglas y validaciones
- No se puede cerrar el diálogo mientras la importación está en curso.
- Los problemas encontrados pueden exportarse como CSV desde el resultado.
Backend
- Servicios:
products,products-categories,product-embeddings(método: create/find)
Relaciones
- Requiere: Catálogo y categorías.
- Dispara / afecta: Búsqueda IA cuando se selecciona su generación.
Notas
- Admite archivos XLSX, XLS y CSV.
id: product-ai-custom-fields modulo: productos app: crm nombre: IA y campos personalizados del producto tipo: configuracion
IA y campos personalizados del producto
Expone datos configurables del producto a búsquedas de asistentes IA.
Que se logra
- Resultado: los atributos relevantes de cada oferta pasan a formar parte de la información que puede recuperar la IA.
- Caso de uso: una inmobiliaria añade zona, habitaciones y tipo de inmueble para que el asistente encuentre opciones adecuadas.
- Se combina con: campos personalizados y búsqueda de productos con IA.
Donde esta
- Ruta:
/[orgId]/products/[id] - Acceso en UI:
Product detail > Make searchable by AIyCustom Fields - Componente(s):
ProductDetailsView.tsx,ProductEmbeddingsReprocessDialog.tsx
Como funciona
- Define campos de tipo Product en
Settings. - Completa valores en el producto.
- Activa
Make searchable by AIsi debe aparecer en búsquedas IA.
Reglas y validaciones
- Los cambios de campos de un producto indexable actualizan el índice de IA.
Backend
- Servicios:
custom-fields,product-embeddings,products(método: find/create/patch)
Relaciones
- Requiere: Campos personalizados y asistentes IA.
- Dispara / afecta: Búsqueda de productos por IA.
Notas
- El mantenimiento de índices permite procesar embeddings faltantes, reprocesar todos los productos habilitados y eliminar embeddings huérfanos.
id: product-ai-search modulo: productos app: crm nombre: Búsqueda de productos con IA tipo: configuracion
Búsqueda de productos con IA
Permite que asistentes y automatizaciones encuentren productos configurados como buscables por IA.
Que se logra
- Resultado: asistentes IA y automatizaciones pueden localizar productos habilitados para responder con ofertas pertinentes.
- Caso de uso: una academia permite que su asistente recomiende el curso que corresponde a la pregunta de un prospecto.
- Se combina con: asistentes IA, automatizaciones y campos personalizados de producto.
Donde esta
- Ruta:
/[orgId]/products/[id] - Acceso en UI:
Product Details > Make searchable by AI - Componente(s):
ProductDetailsView.tsx,ProductEmbeddingsReprocessDialog.tsx,SearchProductDialog.tsx
Como funciona
- Abre una ficha de producto.
- Activa
Make searchable by AI. - Completa información comercial y campos personalizados relevantes.
- Usa el flujo de reprocesamiento cuando esté disponible para renovar el índice.
Reglas y validaciones
- La búsqueda del selector de productos clasifica coincidencias por nombre y SKU.
- Los valores de campos personalizados participan en texto de búsqueda y, cuando se actualiza un producto indexable, en la actualización de IA.
- Por confirmar: qué roles y controles exponen el reprocesamiento masivo.
Backend
- Servicios:
products,product-embeddings(método: find/create/patch) - Hooks relevantes: los cambios de buscabilidad o campos personalizados actualizan el índice de ofertas indexables.
Relaciones
- Requiere: Asistentes IA y campos personalizados de producto.
- Dispara / afecta: Búsquedas de productos de Nova y automatizaciones.
Notas
- No se identificó una superficie de búsqueda semántica independiente para usuarios fuera de asistentes o automatizaciones.
id: product-catalog modulo: productos app: crm nombre: Catálogo de productos tipo: vista
Catálogo de productos
Consulta, crea y organiza productos y servicios.
Que se logra
- Resultado: un inventario comercial consultable que permite al equipo encontrar, crear y clasificar productos y servicios.
- Caso de uso: una distribuidora separa repuestos y servicios de instalación para que ventas elija rápidamente la oferta correcta.
- Se combina con: detalle de producto, categorías y
Deals.
Donde esta
- Ruta:
/[orgId]/products - Acceso en UI:
Sidebar > CRM > Products - Componente(s):
ProductsView.tsx,AddProductDialog.tsx,ProductCategoryManagement.tsx
Como funciona
- Abre
Products. - Busca o filtra el catálogo.
- Crea un producto o abre uno existente.
- Gestiona categorías desde el control correspondiente.
Reglas y validaciones
- Por confirmar: los límites de acciones masivas e importación.
Backend
- Servicios:
products,products-categories(método: find/create/patch/remove)
Relaciones
- Requiere: Categorías.
- Dispara / afecta: Detalle de producto.
Notas
- El catálogo admite productos y servicios.
id: product-categories modulo: productos app: crm nombre: Categorías de producto tipo: configuracion
Categorías de producto
Crea, renombra y elimina categorías para clasificar productos del catálogo.
Que se logra
- Resultado: el catálogo se agrupa con categorías reutilizables que facilitan la búsqueda y selección de ofertas.
- Caso de uso: una empresa de bienestar agrupa membresías, sesiones individuales y bonos para ordenarlas al vender.
- Se combina con: catálogo de productos y Catálogos públicos.
Donde esta
- Ruta:
/[orgId]/products/[id] - Acceso en UI:
Product Details > Category > icono de configuración - Componente(s):
ProductCategoryManagement.tsx
Como funciona
- Abre el administrador de categorías.
- Escribe un nombre y selecciona
Add. - Usa el icono de lápiz para editar una categoría.
- Usa el icono de papelera y confirma para eliminarla.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Category name |
texto | Sí | No permite guardar un valor vacío. |
Reglas y validaciones
- La lista se ordena alfabéticamente y está paginada.
- La interfaz permite elegir 5, 10, 20 o 50 filas por página.
- Por confirmar: si el backend impide eliminar una categoría en uso.
Backend
- Servicios:
products-categories(método: find/create/patch/remove)
Relaciones
- Requiere: Productos.
- Dispara / afecta: Selector
Categorydel detalle de producto.
Notas
- No se encontró control de orden manual de categorías; se muestran por nombre.
id: product-detail modulo: productos app: crm nombre: Detalle de producto tipo: accion
Detalle de producto
Edita información comercial, precio, categoría, estado y facturación.
Que se logra
- Resultado: una ficha comercial completa y mantenible para que la misma oferta conserve información, precio, categoría y estado consistentes.
- Caso de uso: una clínica actualiza el valor y la modalidad de un tratamiento antes de que su equipo lo cotice.
- Se combina con: media, campos personalizados,
Dealsy estimates.
Donde esta
- Ruta:
/[orgId]/products/[id] - Acceso en UI:
Products > fila de producto - Componente(s):
ProductDetailsView.tsx
Como funciona
- Abre un producto.
- Modifica detalles y organización.
- Selecciona
Save Changes. - Usa
DuplicateoDeleteen el menú.
Reglas y validaciones
- Los cambios de campos personalizados se guardan de forma independiente.
Backend
- Servicios:
products,products-categories(método: get/patch/find/remove)
Relaciones
- Requiere: Categorías y campos personalizados.
- Dispara / afecta: Deals y estimates que usan el producto.
Notas
- Admite tipos producto y servicio, y cobro único o recurrente.
id: product-media modulo: productos app: crm nombre: Media de producto tipo: accion
Media de producto
Adjunta imágenes y videos a un producto del catálogo.
Que se logra
- Resultado: cada oferta puede mostrar imágenes o videos que ayudan a reconocerla y explicarla visualmente.
- Caso de uso: un concesionario añade fotos y videos a cada vehículo para compartirlos desde conversaciones.
- Se combina con: detalle de producto y envío de productos desde conversaciones.
Donde esta
- Ruta:
/[orgId]/products/[id] - Acceso en UI:
Product detail > Media - Componente(s):
ProductMediaUpload.tsx
Como funciona
- Abre el producto.
- Arrastra o selecciona archivos en
Media. - Guarda el producto.
Reglas y validaciones
- Admite JPEG, PNG, WebP, MP4 y MOV.
- Las imágenes admiten hasta 5 MB y los videos hasta 100 MB.
Backend
- Servicios:
products-media,products(método: create/find/patch)
Relaciones
- Requiere: Producto.
- Dispara / afecta: Presentación del producto.
Notas
- El orden de la media se modifica arrastrando los elementos en la interfaz.
id: product-message-templates modulo: productos app: crm nombre: Plantillas para enviar productos tipo: configuracion
Plantillas para enviar productos
Define textos reutilizables para los distintos modos de compartir productos en conversaciones.
Que se logra
- Resultado: el equipo reutiliza mensajes coherentes al enviar productos, categorías o catálogos en una conversación.
- Caso de uso: una tienda define una plantilla con precio, descripción y enlace para responder consultas de WhatsApp con rapidez.
- Se combina con: envío de productos desde conversaciones y Catálogos públicos.
Donde esta
- Ruta:
/[orgId]/settings/products/product-message-templates - Acceso en UI:
Avatar menu > Settings > Products > Product Message Templates - Componente(s):
ProductMessageTemplatesList.tsx,AddEditProductMessageTemplateDialog.tsx
Como funciona
- Abre la configuración.
- Selecciona la pestaña del modo de envío.
- Selecciona
Add, redacta la plantilla y guárdala. - Usa el lápiz para editar o la papelera para eliminar una plantilla.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre | texto | Sí | Identifica la plantilla. |
| Contenido | texto | Sí | Se usa como vista previa y mensaje enviado. |
| Predeterminada | opción | No | Se prioriza en el composer del mismo modo. |
Reglas y validaciones
- Los modos son
single_product,multi_individual,multi_catalog_linkycategory_link. - La lista muestra únicamente las plantillas del modo activo.
- Los campos personalizados de producto pueden utilizarse como marcadores de texto.
Backend
- Servicios:
product-send-message-templates,custom-fields(método: find/create/patch/remove)
Relaciones
- Requiere: Enviar productos desde conversaciones.
- Dispara / afecta: Vista previa de mensajes de producto.
Notas
- Por confirmar: la regla exacta que garantiza una única plantilla predeterminada por modo.
id: send-products-from-conversation modulo: productos app: crm nombre: Enviar productos desde una conversación tipo: integracion
Enviar productos desde una conversación
Comparte productos CRM como texto y, cuando el canal lo permite, imagen y enlace de catálogo.
Que se logra
- Resultado: un agente comparte una oferta seleccionada del CRM con su información y enlace, directamente en el hilo del cliente.
- Caso de uso: una tienda de muebles responde una consulta de WhatsApp con dos productos y el enlace de su catálogo público.
- Se combina con: Conversaciones, plantillas para enviar productos y Catálogos públicos.
Donde esta
- Ruta:
/[orgId]/conversations/[id] - Acceso en UI:
MessageInput > icono Products - Componente(s):
SendProductDialog.tsx,ProductSendTemplatePicker.tsx
Como funciona
- Abre el composer de una conversación y selecciona
Products. - Elige el modo, productos o categoría y, cuando aplica, un
Catalog Link. - Ajusta imagen, precio, descripción y enlace; selecciona una plantilla o edita el
Preview. - Selecciona
Send.
Reglas y validaciones
single_productrequiere un producto;multi_catalog_linkrequiere al menos dos;category_linkrequiere una categoría.- Los modos de catálogo o categoría requieren enlace público activo.
- En SMS solo se envía texto; no ofrece imagen.
- Solo administradores o propietarios pueden activar un catálogo o crear plantillas desde el composer.
Backend
- Servicios:
products,products-categories,product-send-message-templates,catalog-links,organization-currencies(método: find/create)
Relaciones
- Requiere: Conversaciones, productos y, para enlaces, Catalog Links.
- Dispara / afecta: Mensajes salientes de la conversación.
Notas
- No es WhatsApp Commerce ni crea deals automáticamente.
id: series app: crm nombre: Series estado: shipped permiso: can_access_campaigns
Series
Secuencias de automatizaciones que avanzan a cada contacto de forma independiente según sus propios tiempos y condiciones.
Para que sirve
- Una academia incorpora nuevos alumnos a una secuencia de bienvenida con mensajes y tareas separadas por días.
- Una inmobiliaria nutre prospectos que descargaron una guía y detiene la secuencia cuando agendan una visita.
- Un SaaS programa seguimientos comerciales que respetan la hora y los días permitidos para cada contacto.
- Una agencia revisa qué paso de una secuencia falló antes de volver a contactar a un lead.
Que lo hace diferente
- Cada contacto avanza en su propio calendario; no recibe todos los pasos al mismo tiempo que el resto de la audiencia.
- Cada paso ejecuta una automatización existente, conectando la secuencia con acciones del CRM y canales disponibles.
- Las automatizaciones pueden suscribir o retirar contactos de series según eventos del negocio.
- Pausar una serie congela los tiempos restantes y reanudarla los recupera, sin eliminar suscripciones.
- Incluye registros por paso para rastrear ejecuciones enviadas, fallidas u omitidas.
Acceso
- Ruta principal:
/[orgId]/campaigns/series - Como se llega:
Sidebar > Campaigns > Series - Permiso requerido:
can_access_campaigns
Alcance tecnico
- Frontend: rutas
/[orgId]/campaigns/series/**y componentesSeriesListView,SeriesStepEditorySeriesSubscribersTable. - Backend:
series,series-steps,series-subscriptions,series-subscription-logs,series-statsyprocess-series-step. - Integraciones externas: AWS EventBridge para las esperas programadas.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Gestionar series | series-management.md | Crea, activa, pausa y elimina secuencias. |
| Configurar pasos | series-step-editor.md | Vincula automatizaciones, demoras y ventanas de envío. |
| Consultar registros de pasos | series-step-logs.md | Audita ejecuciones enviadas, fallidas u omitidas. |
| Suscribir contactos | series-subscriptions.md | Agrega contactos individual o masivamente. |
| Gestionar suscriptores | series-subscriber-management.md | Filtra, ejecuta, completa o retira suscripciones. |
| Pausar y reanudar series | series-pause-resume.md | Congela y recupera las esperas pendientes. |
| Integrar series en automatizaciones | series-automation-nodes.md | Suscribe o retira contactos desde nodos de automatización. |
Relaciones
- Depende de: Automatizaciones y Contactos.
- Usado por: Automatizaciones, Contactos y Conversaciones.
Limitaciones y notas
- Una serie inactiva no admite suscripciones nuevas ni ejecuta pasos.
- Pausar no elimina contactos; eliminar la serie sí cancela suscripciones activas.
id: series-automation-nodes modulo: series app: crm nombre: Integrar series en automatizaciones tipo: automatizacion
Integrar series en automatizaciones
Permite suscribir o retirar contactos de una serie desde un flujo de automatización.
Que se logra
- Resultado: Las automatizaciones pueden incorporar o retirar contactos de secuencias de seguimiento según eventos reales.
- Caso de uso: Una inmobiliaria inscribe un lead en una serie de nutrición cuando completa un formulario y lo retira al agendar visita.
- Se combina con: Automatizaciones, Contactos y series.
Donde esta
- Ruta:
/[orgId]/automations/[automationId] - Acceso en UI:
Automation editor > Series - Componente(s):
SubscribeToSeriesDialog.tsx,UnsubscribeFromSeriesDialog.tsx
Como funciona
- Agregue un nodo de suscripción o retirada.
- Seleccione una serie; para retirada puede marcar todas.
- Guarde y publique la automatización.
- Cuando el flujo se ejecute, el contacto se suscribe o se retira.
Reglas y validaciones
- Suscribir omite contactos ya activos y series inactivas.
- Retirar cancela programaciones antes de marcar la suscripción retirada.
Backend
- Servicios:
automation-node-system-subscribe-to-series,automation-node-system-unsubscribe-from-series,series-subscriptions.
Relaciones
- Requiere: Automatizaciones, Series y Contactos.
- Dispara / afecta: avance en la secuencia.
Notas
Unsubscribepermite apuntar a una serie o a todas las series activas del contacto.
id: series-management modulo: series app: crm nombre: Gestionar series tipo: vista
Gestionar series
Crea, visualiza y elimina secuencias de automatización.
Que se logra
- Resultado: El equipo mantiene secuencias activas, pausadas o eliminadas sin perder visibilidad de sus contactos.
- Caso de uso: Una academia activa una serie de bienvenida para nuevos alumnos y la pausa durante vacaciones.
- Se combina con: Suscripciones de series, Automatizaciones y Contactos.
Donde esta
- Ruta:
/[orgId]/campaigns/series - Acceso en UI:
Campaigns > Series - Componente(s):
SeriesListView.tsx
Como funciona
- Cree una serie y asigne nombre.
- Abra la serie para añadir pasos y contactos.
- Active o pause mediante el interruptor.
- Elimine desde las acciones de la serie.
Reglas y validaciones
- Una serie inactiva no acepta contactos nuevos.
- Al eliminarla se cancelan las agendas de suscriptores activos y quedan retirados.
Backend
- Servicios:
series(find/create/patch/remove). - Efectos: al borrar, se cancelan programaciones de suscripciones activas.
Relaciones
- Requiere: Automatizaciones.
- Dispara / afecta: pasos, suscripciones y agendas.
Notas
- La activación se controla tanto desde la lista como desde la cabecera del detalle.
id: series-pause-resume modulo: series app: crm nombre: Pausar y reanudar una serie tipo: accion
Pausar y reanudar una serie
Detiene temporalmente una secuencia sin retirar a sus contactos.
Que se logra
- Resultado: Las esperas pendientes se congelan y continúan después, sin sacar a los contactos de la secuencia.
- Caso de uso: Una agencia pausa una serie durante una contingencia comercial y la reanuda respetando el avance de cada lead.
- Se combina con: Gestión de series y suscriptores.
Donde esta
- Ruta:
/[orgId]/campaigns/seriesy/[orgId]/campaigns/series/[id] - Acceso en UI:
Series row o header > status switch - Componente(s):
SeriesStatusToggle.tsx
Como funciona
- Desactive el interruptor.
- Confirme si existen contactos activos.
- Vuelva a activarlo para recuperar la ejecución.
Reglas y validaciones
- Pausar conserva la posición de los contactos y congela la espera restante.
- Mientras está inactiva no admite contactos ni ejecuta pasos.
Backend
- Servicios:
series(patch). - Efectos: cancela agendas al pausar y las recrea al reanudar.
Relaciones
- Requiere: serie existente.
- Dispara / afecta: suscripciones y programación.
Notas
- Pausar no equivale a eliminar.
id: series-step-editor modulo: series app: crm nombre: Configurar pasos de una serie tipo: configuracion
Configurar pasos de una serie
Construye una secuencia de automatizaciones con demora, horario y días permitidos por paso.
Que se logra
- Resultado: Cada contacto recibe acciones encadenadas con demoras, días y ventanas de envío definidos para cada paso.
- Caso de uso: Un SaaS programa un email de bienvenida, una tarea comercial dos días después y un recordatorio una semana más tarde.
- Se combina con: Automatizaciones, registros de pasos y suscripciones.
Donde esta
- Ruta:
/[orgId]/campaigns/series/[id] - Acceso en UI:
Campaigns > Series > abrir serie > Schedule - Componente(s):
SeriesStepEditor.tsx
Como funciona
- Use
Add Stepy seleccione una automatización. - Abra el icono de engranaje del paso.
- Configure demora, ventana horaria y días permitidos.
- Guarde y active o desactive el paso.
- Previsualice la automatización o elimine el paso.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Automation | selector | Sí | Automatización ejecutada por el paso. |
| Delay type | selector | No | Inmediato, minutos, horas o días. |
| Delay value | número | Condicional | Obligatorio si no es inmediato. |
| Send window | selector | No | anytime o intervalo horario. |
| Allowed days | selección múltiple | No | Días no elegidos aplazan el envío. |
| Step active | interruptor | No | Un paso inactivo se omite. |
Reglas y validaciones
- Al borrar un paso con contactos esperando, debe moverlos, completarlos o retirarlos.
Backend
- Servicios:
series-steps(create/patch/remove),series-stats(find). - Efectos: crea o ajusta la próxima programación individual.
Relaciones
- Requiere: Automatizaciones.
- Dispara / afecta: suscripciones activas y ejecución de automatizaciones.
Notas
- La ejecución inmediata no espera programación externa.
id: series-step-logs modulo: series app: crm nombre: Consultar registros de pasos tipo: vista
Consultar registros de pasos
Permite auditar las ejecuciones de un paso de serie y abrir su recorrido de automatización.
Que se logra
- Resultado: Se puede auditar si cada paso se envió, falló o fue omitido y vincularlo a su ejecución.
- Caso de uso: Un equipo de ventas revisa por qué un lead no recibió el segundo seguimiento de una serie.
- Se combina con: Automatizaciones, pasos de series y Contactos.
Donde esta
- Ruta:
/[orgId]/campaigns/series/[id] - Acceso en UI:
Series step > icono de registros - Componente(s):
SeriesStepLogsDrawer.tsx
Como funciona
- Abra el registro de un paso.
- Filtre por estado.
- Consulte fecha, contacto y estado.
- Abra la ejecución vinculada cuando esté disponible.
Reglas y validaciones
- Registra ejecuciones enviadas, fallidas u omitidas.
Backend
- Servicios:
series-subscription-logs(find).
Relaciones
- Requiere: pasos y suscripciones de Series.
- Dispara / afecta: auditoría de Automatizaciones.
Notas
- La vista tiene paginación.
id: series-subscriber-management modulo: series app: crm nombre: Gestionar suscriptores de series tipo: vista
Gestionar suscriptores de series
Consulta el avance de contactos suscritos y permite intervenir sobre sus ejecuciones activas.
Que se logra
- Resultado: El equipo identifica contactos en espera, completados o retirados y actúa sobre su participación.
- Caso de uso: Una consultora retira a un prospecto que ya firmó del flujo automático de seguimiento.
- Se combina con: Series, Contactos y registros de pasos.
Donde esta
- Ruta:
/[orgId]/campaigns/series/[id]/subscribers - Acceso en UI:
Series > Subscribers - Componente(s):
SeriesSubscribersTable.tsx
Como funciona
- Filtre por estado o paso actual.
- Abra el contacto desde su fila.
- Para una suscripción activa use
Run Now,Mark CompleteoRemove.
Reglas y validaciones
- Las acciones solo aparecen para suscripciones
active. Run Nowpuede ejecutar, reprogramar, omitir o completar según las condiciones del paso.
Backend
- Servicios:
series-subscriptions(find/patch),process-series-step(create). - Efectos: retirar o completar cancela la programación pendiente.
Relaciones
- Requiere: Series y suscripciones.
- Dispara / afecta: ejecución del siguiente paso.
Notas
- Lista 20 suscripciones por página, con las más recientes primero.
id: series-subscriptions modulo: series app: crm nombre: Suscribir contactos a una serie tipo: accion
Suscribir contactos a una serie
Agrega uno o varios contactos a una secuencia.
Que se logra
- Resultado: Contactos individuales o grupos entran a una secuencia y avanzan con un calendario propio.
- Caso de uso: Una escuela añade todos los inscritos a un programa de orientación sin enviar el mismo paso al mismo tiempo.
- Se combina con: Contactos, series y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/campaigns/series/[id] - Acceso en UI:
Series > Add Contact - Componente(s):
AddToSeriesDialog.tsx,ContactSeriesSection.tsx
Como funciona
- Abra
Add Contact. - Seleccione una serie si no estaba preseleccionada.
- Busque un contacto por nombre o agregue contactos preseleccionados.
- Confirme la suscripción.
Reglas y validaciones
- La búsqueda requiere dos caracteres.
- Una serie inactiva no admite suscriptores.
- Suscripciones activas duplicadas no se crean; reingreso depende de la configuración de la serie.
Backend
- Servicios:
series-subscriptions(create). - Efectos: ejecuta el primer paso o crea su programación.
Relaciones
- Requiere: Series activa y Contactos.
- Dispara / afecta: pasos y agendas individuales.
Notas
- Puede abrirse desde detalle de contacto o acciones masivas.
id: tickets-legacy app: crm nombre: Tickets legacy estado: shipped permiso: permisos granulares de tickets
Tickets legacy
Customer Service original basado en correo para atender solicitudes vinculadas con contactos. Convive con la app Helpdesk, que tiene su propio módulo y flujos.
Para que sirve
- Una empresa que recibe solicitudes por correo reúne los casos de clientes en una bandeja operativa vinculada a sus contactos.
- Un equipo de soporte clasifica prioridades, responsables y etapas para que las solicitudes no queden sin seguimiento.
- Una mesa de ayuda procesa lotes de casos para asignar, cerrar o marcar tickets sin repetir la acción uno por uno.
- Una organización migra un histórico de solicitudes desde una hoja para conservar la continuidad de atención.
- Un miembro del equipo abre un caso de soporte sobre AchieveApex desde
Support, incluso sin acceso a CRM.
Que lo hace diferente
- Los tickets legacy se vinculan con Contactos, etiquetas, pipelines y campos personalizados del CRM en lugar de vivir como correos aislados.
- El hilo usa el Inbox Channel que originó el ticket y enruta las respuestas por Gmail u Outlook, manteniendo el proveedor del caso.
- Puede asignarse un asistente IA y una regla de seguimiento directamente en las propiedades del ticket.
- El módulo legacy y Helpdesk coexisten pero son productos distintos: Helpdesk tiene sus propios tickets, fuentes y flujos; no se confunden las rutas ni los datos.
- El portal
Supportse destina a casos sobre AchieveApex y permite creación manual o asistida por Nova, separado de la bandeja de correo legacy.
Acceso
- Ruta principal:
/[orgId]/customer-service - Como se llega:
Sidebar > Tickets - Permiso requerido: permisos granulares de tickets
Alcance tecnico
- Frontend:
CustomerServiceView, detalle y componentestickets. - Backend:
support-tickets,support-tickets-batch-actions,support-ticket-email-templates,ticket-messages-*eimport-support-tickets. - Superficies publicas: ninguna.
- Integraciones externas: Gmail y Outlook.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Bandeja y filtros | ticket-inbox.md | Consulta tickets, vistas y criterios de búsqueda. |
| Crear ticket | create-ticket.md | Crea un ticket para un contacto. |
| Propiedades y seguimiento | ticket-properties.md | Gestiona estado, prioridad, responsables y seguimiento. |
| Responder por email | ticket-email-replies.md | Envía respuestas o notas internas. |
| Mensajes por Gmail y Outlook | ticket-email-channels.md | Integra el hilo con el proveedor conectado. |
| Acciones masivas | ticket-batch-actions.md | Opera varios tickets seleccionados. |
| Tablero Kanban | ticket-kanban.md | Mueve tickets por etapas de pipeline. |
| Importar tickets | import-tickets.md | Carga y mapea tickets desde una hoja. |
| Plantillas de email | ticket-email-templates.md | Registra la capacidad backend de plantillas. |
| Portal de casos de soporte | support-portal.md | Describe la superficie /support y Nova Support. |
Relaciones
- Depende de: Contactos, Inbox Channels, Tags y asistentes IA.
- Usado por: Contactos y Automatizaciones.
Limitaciones y notas
- Es el sistema legacy y no reemplaza el módulo Helpdesk.
- Convive con la app Helpdesk; sus tickets, rutas y flujos no deben asumirse equivalentes.
- No se identificó una interfaz independiente para administrar plantillas de email; estas se utilizan en seguimientos de asistentes de tickets.
- Los tickets creados manualmente no permiten seleccionar un proveedor de correo en el formulario.
id: create-ticket modulo: tickets-legacy app: crm nombre: Crear ticket tipo: accion
Crear ticket
Abre un ticket asociado a un contacto existente o creado durante el flujo.
Que se logra
- Resultado: una solicitud queda registrada y vinculada a un contacto, con una etapa de trabajo opcional.
- Caso de uso: una empresa B2B registra una incidencia reportada por teléfono para mantenerla junto al historial del cliente.
- Se combina con: Contactos, pipelines y bandeja de tickets.
Donde esta
- Ruta:
/[orgId]/customer-service - Acceso en UI:
Tickets > New Ticket - Componente(s):
NewTicketDialog.tsx
Como funciona
- Selecciona
New Ticket. - Escribe el asunto.
- Busca un contacto o crea uno desde el selector.
- Si eliges pipeline, selecciona también una etapa.
- Selecciona
Create Ticket.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Subject |
texto | Sí | Identifica el ticket. |
Contact |
búsqueda | Sí | Puede crear un contacto nuevo. |
Contact Email |
Condicional | Se ofrece si el contacto elegido no tiene email. | |
Pipeline y Pipeline Stage |
selección | No / condicional | La etapa es obligatoria al elegir pipeline. |
Reglas y validaciones
- La búsqueda de contacto comienza con dos caracteres.
- No permite crear si falta asunto, contacto o etapa requerida.
Backend
- Servicios:
support-tickets,contacts,pipelines,pipeline-stages(método: find/create/patch)
Relaciones
- Requiere: Contactos; opcionalmente Pipelines.
- Dispara / afecta: Bandeja y detalle de tickets.
Notas
- La creación manual no permite seleccionar ni asigna un canal de correo en el formulario.
id: import-tickets modulo: tickets-legacy app: crm nombre: Importar tickets tipo: accion
Importar tickets
Importa tickets desde una hoja de cálculo mediante carga, mapeo y procesamiento.
Que se logra
- Resultado: un histórico de solicitudes se incorpora al módulo, creando los contactos y tickets necesarios desde una hoja.
- Caso de uso: una empresa que cambia de sistema migra sus casos abiertos para que el equipo continúe su seguimiento.
- Se combina con: Contactos, asistentes IA, pipelines y bandeja de tickets.
Donde esta
- Ruta:
/[orgId]/customer-service - Acceso en UI:
Tickets > Import Tickets - Componente(s):
ImportTicketsButton.tsx,UploadFile.tsx,ColumnsMapper.tsx,ImportTickets.tsx
Como funciona
- Selecciona
Import Ticketsy carga un archivo. - Relaciona columnas de origen con los datos de ticket.
- Completa los campos requeridos mediante mapeo o configuración de IA.
- Configura asistente, seguimiento y pipeline si corresponde.
- Continúa al procesamiento y finaliza el flujo.
Reglas y validaciones
- Deben resolverse
subject, contenido, nombre y email, por mapeo o IA. - El diálogo no permite cerrarse mientras procesa.
Backend
- Servicios:
import-support-tickets,support-tickets,contacts(método: create)
Relaciones
- Requiere: Contactos y tickets legacy.
- Dispara / afecta: Bandeja de tickets.
Notas
- La interfaz admite únicamente archivos XLSX.
- Por confirmar: política de duplicados.
id: support-portal modulo: tickets-legacy app: crm nombre: Portal de casos de soporte tipo: vista
Portal de casos de soporte
Ofrece a miembros de la organización una bandeja de casos propios y un flujo de creación manual o asistido por Nova.
Que se logra
- Resultado: los miembros de una organización pueden abrir y seguir sus propios casos de soporte sobre AchieveApex.
- Caso de uso: un usuario sin acceso CRM solicita ayuda a Nova y confirma la creación del caso desde
Support. - Se combina con: Nova Support y organizaciones.
Donde esta
- Ruta:
/[orgId]/support - Acceso en UI:
Header app switcher > Support - Componente(s):
SupportCasesListView.tsx
Como funciona
- Abre
Support. - Filtra o busca casos por estado, asunto, número o fuente.
- Selecciona
Generate ticket with Novapara pedir ayuda guiada, oCreate manuallypara abrir un caso. - Abre un caso para responder, adjuntar archivos y, si corresponde, marcarlo como resuelto.
Reglas y validaciones
- Está disponible para miembros de la organización sin depender del acceso CRM u Operations.
- Administradores y propietarios ven casos de la organización; miembros ven los creados por ellos.
- Nova crea el ticket después de confirmación o solicitud explícita del usuario.
Backend
- Servicios: Por confirmar: servicios específicos del portal de soporte no incluidos en el inventario solicitado.
Relaciones
- Requiere: Organizaciones y Nova Support.
- Dispara / afecta: Casos de soporte de AchieveApex.
Notas
- Esta superficie es distinta de la bandeja legacy de correo y del módulo Helpdesk.
id: ticket-batch-actions modulo: tickets-legacy app: crm nombre: Acciones masivas de tickets tipo: accion
Acciones masivas de tickets
Aplica cambios operativos a varios tickets seleccionados desde la bandeja.
Que se logra
- Resultado: varios casos reciben una misma actualización operativa en una sola operación.
- Caso de uso: una empresa de envíos cierra y marca como leídos los tickets resueltos de una incidencia masiva.
- Se combina con: bandeja y filtros de tickets, asistentes IA y miembros de equipo.
Donde esta
- Ruta:
/[orgId]/customer-service - Acceso en UI:
Tickets > seleccionar filas > BatchActionBar - Componente(s):
BatchActionBar.tsx
Como funciona
- Selecciona una o varias filas.
- Asigna un asistente IA o miembro de equipo, cambia prioridad, marca como no leído, cierra o elimina.
- Confirma las acciones de cierre o eliminación.
Reglas y validaciones
- La barra muestra el número de tickets seleccionados.
- Las operaciones se ejecutan como una acción única y después se actualiza la bandeja.
Backend
- Servicios:
support-tickets-batch-actions(método: create)
Relaciones
- Requiere: Bandeja de tickets.
- Dispara / afecta: Estado, prioridad, asignación y lectura de tickets.
Notas
- Por confirmar: el modelo de permisos aplicado por el servicio para cada tipo de acción.
id: ticket-email-channels modulo: tickets-legacy app: crm nombre: Mensajes de tickets por Gmail y Outlook tipo: integracion
Mensajes de tickets por Gmail y Outlook
El ticket carga y envía correo según el Inbox Channel conectado.
Que se logra
- Resultado: los mensajes del caso se leen y responden mediante el proveedor de correo conectado al ticket.
- Caso de uso: un despacho legal atiende un correo entrante desde Outlook y conserva copias, adjuntos y el hilo en el caso.
- Se combina con: Inbox Channels, respuestas y notas de tickets.
Donde esta
- Ruta:
/[orgId]/customer-service/[ticketId] - Acceso en UI:
Ticket detail > Reply - Componente(s):
EmailEditor.tsx,EmailActionBar.tsx,EmailContent.tsx
Como funciona
- Abre un ticket procedente de un canal conectado.
- Selecciona
Reply, completa el editor y, opcionalmente,Cc,Bcc, adjuntos o imágenes. - Selecciona
SendoSend and close. - Alternativamente, usa
Add notepara registrar una nota interna.
Reglas y validaciones
- Los tickets cerrados deben reabrirse para responder.
- Las notas son internas y no presentan el control de adjuntos.
- El editor admite formato enriquecido, listas, enlaces, alineación e imágenes.
Backend
- Servicios:
ticket-messages-gmail,ticket-messages-outlook,ticket-messages-transform-incoming-gmail,ticket-messages-transform-incoming-outlook,ticket-messages-transform-outgoing-gmail,ticket-messages-transform-outgoing-outlook(método: find/create)
Relaciones
- Requiere: Gmail u Outlook configurados como Inbox Channel.
- Dispara / afecta: Hilo, archivos y estado del ticket.
Notas
- El canal aplicable se decide por el ticket; no se confirma una selección manual de proveedor en el editor.
id: ticket-email-replies modulo: tickets-legacy app: crm nombre: Respuestas y notas de tickets tipo: accion
Respuestas y notas de tickets
Responde al cliente por email o añade una nota interna en la conversación.
Que se logra
- Resultado: el equipo responde al cliente o deja una nota interna sin salir del contexto del ticket.
- Caso de uso: un proveedor de software contesta una incidencia con un adjunto y la cierra cuando confirma la solución.
- Se combina con: Gmail u Outlook e hilo del ticket.
Donde esta
- Ruta:
/[orgId]/customer-service/[ticketId] - Acceso en UI:
Ticket detail > ReplyoAdd note - Componente(s):
EmailEditor.tsx,EmailActionBar.tsx
Como funciona
- Abre un ticket no cerrado.
- Elige
ReplyoAdd note. - Escribe el contenido y añade adjuntos para una respuesta.
- Selecciona
SendoSend and close.
Reglas y validaciones
- Los tickets cerrados deben reabrirse para permitir una respuesta.
- Las notas son internas y no aceptan adjuntos.
Backend
- Servicios:
ticket-messages-gmailoticket-messages-outlook(método: find/create),support-tickets(método: patch)
Relaciones
- Requiere: Gmail u Outlook configurado.
- Dispara / afecta: Hilo de ticket y estado.
Notas
Send and closeenvía y cierra en una misma acción.
id: ticket-email-templates modulo: tickets-legacy app: crm nombre: Plantillas de email de tickets tipo: configuracion
Plantillas de email de tickets
El backend expone plantillas de email para los flujos de tickets.
Que se logra
- Resultado: el sistema dispone de una capacidad backend para gestionar textos reutilizables de correo en flujos de tickets.
- Caso de uso: una mesa de ayuda puede estandarizar una respuesta inicial cuando su superficie de configuración esté disponible.
- Se combina con: tickets legacy y respuestas por email.
Donde esta
- Ruta: Por confirmar: no se identificó una ruta de configuración en las superficies revisadas.
- Acceso en UI: Por confirmar: componente de administración no localizado.
- Componente(s): Por confirmar.
Como funciona
- Por confirmar: flujo de creación, selección y edición de plantillas.
Reglas y validaciones
- Por confirmar: variables permitidas, destinatarios y permisos.
Backend
- Servicios:
support-ticket-email-templates(método: find/get/create/patch/remove)
Relaciones
- Requiere: Tickets legacy.
- Dispara / afecta: Respuestas de correo de tickets.
Notas
- Se conserva como capacidad backend confirmada; su superficie web no se pudo verificar en el código indicado.
id: ticket-inbox modulo: tickets-legacy app: crm nombre: Bandeja y filtros de tickets tipo: vista
Bandeja y filtros de tickets
Lista los tickets de correo y permite filtrarlos antes de abrir su detalle.
Que se logra
- Resultado: el equipo ve y prioriza la cola de solicitudes de correo usando vistas, búsqueda y filtros operativos.
- Caso de uso: una empresa de mantenimiento filtra los casos urgentes asignados a un técnico antes de iniciar la jornada.
- Se combina con: propiedades del ticket, Inbox Channels y vistas.
Donde esta
- Ruta:
/[orgId]/customer-service - Acceso en UI:
Sidebar > Tickets - Componente(s):
CustomerServiceView.tsx,TicketList.tsx,TicketFilters.tsx
Como funciona
- Abre
Tickets. - Busca o selecciona una vista.
- Filtra por contacto, agente, estado, prioridad, pipeline o etapa.
- Selecciona una fila para abrir el detalle.
Reglas y validaciones
- Cambiar el pipeline elimina el filtro de etapa hasta elegir una nueva.
- La página exige al menos un Inbox Channel activo; en caso contrario muestra la configuración vacía.
Backend
- Servicios:
support-tickets,inbox-channels,views(método: find)
Relaciones
- Requiere: Inbox Channels.
- Dispara / afecta: Detalle de ticket.
Notas
- Por confirmar: los filtros de etiquetas declarados por el tipo de datos no se presentan en el panel revisado.
id: ticket-kanban modulo: tickets-legacy app: crm nombre: Tablero Kanban de tickets tipo: vista
Tablero Kanban de tickets
Visualiza tickets por etapas de un pipeline y permite moverlos entre columnas.
Que se logra
- Resultado: el estado de los casos se visualiza como un flujo y cada ticket puede avanzar entre etapas.
- Caso de uso: una empresa de instalación mueve solicitudes desde diagnóstico hasta visita agendada para detectar cuellos de botella.
- Se combina con: pipelines y propiedades del ticket.
Donde esta
- Ruta:
/[orgId]/customer-service - Acceso en UI:
Tickets > vista Kanban - Componente(s):
TicketKanbanView.tsx,TicketCard.tsx
Como funciona
- Abre la vista Kanban y selecciona un pipeline.
- Aplica condiciones de filtrado si son necesarias.
- Arrastra tarjetas a otra etapa.
- En modo de edición, crea, renombra, ordena o elimina etapas.
Reglas y validaciones
- Al mover una tarjeta se actualiza su etapa de pipeline.
- En plan Free la interfaz limita el pipeline a cinco etapas.
- Al eliminar una etapa, la interfaz mueve sus tickets a la etapa anterior cuando existe.
Backend
- Servicios:
support-tickets,pipelines,pipeline-stages(método: find/create/patch/remove)
Relaciones
- Requiere: Pipelines de tickets.
- Dispara / afecta: Propiedades del ticket.
Notas
- Por confirmar: límites de cantidad de pipelines según plan.
id: ticket-properties modulo: tickets-legacy app: crm nombre: Propiedades y seguimiento del ticket tipo: accion
Propiedades y seguimiento del ticket
Edita estado, prioridad, responsables, etiquetas, pipeline, campos personalizados y seguimiento.
Que se logra
- Resultado: cada caso conserva responsable, prioridad, estado y seguimiento para que el equipo sepa quién debe actuar y cuándo.
- Caso de uso: una aseguradora asigna un reclamo urgente a un especialista y programa una regla de seguimiento con IA.
- Se combina con: etiquetas, campos personalizados, asistentes IA y pipelines.
Donde esta
- Ruta:
/[orgId]/customer-service/[ticketId] - Acceso en UI:
Ticket detail > panel derecho - Componente(s):
TicketProperties.tsx,CustomFieldsDialog.tsx
Como funciona
- Abre un ticket.
- Ajusta las propiedades requeridas.
- Selecciona
Updatepara aplicar los cambios pendientes. - Para seguimiento, asigna un asistente IA con reglas habilitadas y selecciona regla y fecha.
Reglas y validaciones
- Los estados disponibles son
Open,Pending,ClosedyWaiting Customer. - Las prioridades son
Low,Medium,HighyUrgent. - Cambiar el asistente IA borra la regla de seguimiento seleccionada.
- La fecha de seguimiento permanece deshabilitada hasta escoger una regla.
Backend
- Servicios:
support-tickets,tags,custom-fields,ai-assistants,pipelines,pipeline-stages(método: find/get/patch)
Relaciones
- Requiere: Etiquetas, campos personalizados y asistentes IA.
- Dispara / afecta: Estado, responsable y seguimiento del ticket.
Notas
- Las actualizaciones en tiempo real sincronizan el panel cuando otro usuario modifica el ticket.
id: vector-storage app: crm nombre: Almacenamiento vectorial estado: shipped permiso: can_access_ai_assistant
Almacenamiento vectorial
Pantalla para crear y revisar contenedores vectoriales de la organización. Muestra documentos y el avance de embedding que devuelve el servicio.
Para que sirve
- Una empresa con documentación propia crea contenedores separados para controlar el material vectorizado de cada área.
- Un equipo de operaciones revisa cuántos documentos de un contenedor ya están listos para usarse en búsquedas semánticas.
- Una empresa de servicios crea un contenedor inicial para preparar una base de conocimiento vectorial de la organización.
Que lo hace diferente
- El almacenamiento se administra dentro de la organización de AchieveApex y muestra por contenedor los documentos detectados y el avance de embedding.
- El estado visible distingue entre material pendiente y material completamente vectorizado, en vez de ocultar el procesamiento tras una carga de archivos.
- La pantalla actual es una superficie de administración: el código revisado no confirma todavía qué módulos consumen esos contenedores, cómo ingresan los documentos ni el proveedor de embeddings.
Acceso
- Ruta principal:
/[orgId]/ai-vector-storage - Como se llega: URL directa
/[orgId]/ai-vector-storage - Permiso requerido:
can_access_ai_assistant
Alcance tecnico
- Frontend:
ai-vector-storage/page.tsxyVectorStorageView.tsx. - Backend:
vector-storagesse invoca desde frontend, pero no hay implementación de ese servicio en este repositorio;product-embeddingsyproducts-embeddings-adminson servicios internos. - Superficies publicas: ninguna.
- Integraciones externas: ninguna identificada en esta pantalla.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Listado de almacenamientos vectoriales | storage-list.md | Muestra almacenamientos, documentos y progreso de embeddings. |
| Crear almacenamiento vectorial | create-storage.md | Crea un almacenamiento con nombre obligatorio y descripción opcional. |
| Progreso de vectorización | storage-progress.md | Compara documentos totales y documentos con embedding. |
Relaciones
- Depende de: el servicio
vector-storages. - Usado por: la propia pantalla de almacenamiento vectorial.
Limitaciones y notas
Por confirmar: la fuente de documentos, el proveedor de embeddings y los permisos reales de vector-storages; no están implementados en el backend revisado.
id: create-storage modulo: vector-storage app: crm nombre: Crear almacenamiento vectorial tipo: accion
Crear almacenamiento vectorial
Crea un almacenamiento con nombre obligatorio y descripción opcional.
Que se logra
- Resultado: la organización crea un contenedor identificable para separar y seguir su material vectorizado.
- Caso de uso: una red de franquicias abre un contenedor para la documentación de soporte antes de preparar su base de conocimiento.
- Se combina con: Listado de almacenamientos vectoriales y Progreso de vectorización.
Donde esta
- Ruta:
/[orgId]/ai-vector-storage - Acceso en UI:
AI Vector Storage - Componente(s): VectorStorageView.tsx y servicios de embeddings
Como funciona
- Pulsa
Create New Storage. - Escribe
Storage Name;Descriptiones opcional. - Pulsa
Create Storage; la tarjeta nueva se coloca al inicio con cero documentos y cero embeddings. - En una pantalla vacía,
Create First Storagecrea directamente un contenedor llamadoDefault Storage.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Storage Name |
texto | Si | El formulario usa la validación HTML requerida. |
Description |
texto | No | Se muestra debajo del nombre en la tarjeta. |
Reglas y validaciones
- La interfaz registra fallos en consola; no muestra un aviso de error al usuario.
Backend
- Servicios:
vector-storages(create). - Efectos: crea el registro con contadores iniciales en cero.
Relaciones
- Requiere: una organización en la ruta.
- Dispara / afecta:
storage-listystorage-progress.
Notas
Por confirmar: validación de nombre, persistencia y autorización del servicio; el backend no contiene vector-storages.
id: storage-list modulo: vector-storage app: crm nombre: Listado de almacenamientos vectoriales tipo: vista
Listado de almacenamientos vectoriales
Muestra almacenamientos, documentos y progreso de embeddings.
Que se logra
- Resultado: el equipo ve qué contenedores vectoriales existen, cuánto material contienen y si su preparación ya terminó.
- Caso de uso: una empresa de consultoría compara sus contenedores de conocimiento comercial y técnico para detectar cuál sigue pendiente de procesamiento.
Donde esta
- Ruta:
/[orgId]/ai-vector-storage - Acceso en UI:
AI Vector Storage - Componente(s): VectorStorageView.tsx
Como funciona
- Abre la ruta directa
/[orgId]/ai-vector-storage. - Espera el indicador de carga mientras se consulta la lista ordenada por creación descendente.
- Revisa cada tarjeta: nombre, descripción si existe, fecha, número de documentos y avance de embedding.
- Si no hay registros, usa el estado vacío para crear el primero.
Reglas y validaciones
- No hay acciones de editar, eliminar, cargar documentos ni buscar en esta interfaz.
- La consulta usa
orgIdy recibe hasta lo que el servicio devuelva; la pantalla no impone paginación.
Backend
- Servicios:
vector-storages(find).
Relaciones
- Requiere: respuesta del servicio
vector-storages. - Dispara / afecta: muestra el avance descrito en
storage-progress.
Notas
Por confirmar: el servicio backend y sus permisos no existen en este checkout.
id: storage-progress modulo: vector-storage app: crm nombre: Progreso de vectorización tipo: vista
Progreso de vectorización
Compara documentos totales y documentos con embedding.
Que se logra
- Resultado: el equipo sabe si todos los documentos visibles de un contenedor ya cuentan con embedding o si debe esperar procesamiento.
- Caso de uso: un equipo de soporte comprueba que el contenedor de manuales terminó de vectorizarse antes de evaluar su uso posterior.
- Se combina con: Listado de almacenamientos vectoriales y Crear almacenamiento vectorial.
Donde esta
- Ruta:
/[orgId]/ai-vector-storage - Acceso en UI:
AI Vector Storage - Componente(s): VectorStorageView.tsx y servicios de embeddings
Como funciona
- Abre una tarjeta de
Vector Storages. - Compara el valor de
documentsconembedded. - El icono de verificación verde indica que ambos conteos coinciden; el indicador giratorio señala que todavía falta procesamiento.
Reglas y validaciones
- La pantalla considera completo un contenedor cuando los dos conteos son iguales, incluidos los contenedores vacíos.
- No hay acción para iniciar, pausar ni reintentar el procesamiento.
Backend
- Servicios:
vector-storages(find).
Relaciones
- Requiere: contadores de documentos y embeddings provistos por el servicio.
- Dispara / afecta: solo la representación de cada tarjeta.
Notas
Por confirmar: qué proceso incrementa los conteos y cómo se recupera de un error.
id: voice-sms app: crm nombre: Calling y SMS estado: shipped permiso: can_access_crm
Calling y SMS
Administra telefonía Telnyx, SMS, números, agentes, llamadas y cumplimiento A2P por organización.
Para que sirve
- Un concesionario compra un número local y distribuye las llamadas de ventas entre sus asesores disponibles.
- Una clínica define saludo, cola y grabación para que pacientes esperen una respuesta o dejen información útil al equipo.
- Una inmobiliaria enruta llamadas a un asistente de voz y usa agentes humanos como respaldo.
- Un negocio estadounidense registra su campaña 10DLC para enviar SMS A2P desde sus números locales.
- Un despacho legal consulta grabaciones y transcripciones para revisar la atención telefónica y los cargos asociados.
Que lo hace diferente
- Configura llamadas, SMS, números, agentes, cumplimiento y costos en la misma organización que usa el CRM y el inbox.
- Puede enrutar llamadas hacia agentes humanos, asistentes de voz o un esquema humano con respaldo de IA.
- El historial de llamadas incorpora grabaciones, transcripciones y diagnóstico, y se relaciona con Conversaciones para conservar contexto.
- Gestiona el ciclo 10DLC, incluida una página pública de consentimiento, junto con el bloqueo de envíos SMS del contacto.
- Une la compra de números y los servicios recurrentes con Stripe, mientras el uso y algunas tarifas se muestran dentro de Apex.
Acceso
- Ruta principal:
/[orgId]/settings/voice-channel - Como se llega:
Avatar menu > Settings > Calling & SMS - Permiso requerido:
can_access_crm; los enlaces Telnyx y costos son de superadmin.
Alcance tecnico
- Frontend: rutas
settings/voice-channely componentes de configuración de voz - Backend:
voice-channels,voice-agents,voice-phone-numbers,voice-calls,telnyx-webhooks - Superficies publicas: página de consentimiento SMS por organización
- Integraciones externas: Telnyx y Stripe
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Activar Calling y SMS | voice-channel-activation.md | Provisiona el canal Telnyx. |
| Números telefónicos | phone-numbers.md | Comprar y administrar números. |
| Agentes de voz | voice-agents.md | Disponibilidad, peso y SIP. |
| Enrutamiento de llamadas | call-routing.md | Personas e IA. |
| Configuración SMS | sms-settings.md | Perfil, destinos y sincronización. |
| Cumplimiento 10DLC | 10dlc-compliance.md | Registro SMS A2P estadounidense. |
| Historial de llamadas | call-history.md | Filtros, grabación y depuración. |
| Experiencia de llamada | call-experience.md | Destinos, grabación, saludo y cola. |
| Precios | pricing.md | Tarifas por país. |
Relaciones
- Depende de: Stripe, Telnyx, Organización y asistentes de IA.
- Usado por: Conversaciones, Automatizaciones y Plataforma/Softphone.
Limitaciones y notas
- Plataforma/Softphone es la superficie de llamadas dentro de la app; aquí se configura la infraestructura y agentes.
id: 10dlc-compliance modulo: voice-sms app: crm nombre: Cumplimiento SMS 10DLC tipo: configuracion
Cumplimiento SMS 10DLC
Guía el registro de marca, campaña y asignación de números para SMS A2P de Estados Unidos.
Que se logra
- Resultado: un negocio puede completar el proceso requerido para enviar SMS A2P desde números locales estadounidenses y dar consentimiento por una página pública.
- Caso de uso: una clínica estadounidense registra su campaña de recordatorios y enlaza el formulario de consentimiento para sus pacientes.
- Se combina con: Configurar SMS, Comprar y administrar números, Conversaciones y Contactos.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/compliance - Acceso en UI:
Calling & SMS > 10DLC Compliance - Componente(s):
SmsComplianceSettings.tsx,TenDlcComplianceFaqDialog.tsx,TenDlcLiveStatusPanel.tsx
Como funciona
- Activar SMS.
- Registrar la marca y, opcionalmente, solicitar evaluación mejorada.
- Registrar la campaña con casos de uso, ejemplos y URL de consentimiento.
- Actualizar estado hasta completar la activación y asignación de números.
Reglas y validaciones
- Marca y campaña aprobada son requeridas para SMS A2P en números locales de EE. UU.
- Una campaña rechazada se corrige con
Resubmit corrected campaign, no duplicando el registro.
Backend
- Servicios:
voice-channels,public-sms-opt-in(método: get/patch) - Efectos: registra en Telnyx/TCR, sincroniza estado y asigna números cuando estén listos.
Relaciones
- Requiere: SMS y números locales estadounidenses.
- Dispara / afecta: entrega de SMS y página pública de consentimiento.
Notas
- La aprobación de operadores y la activación final de red son pasos diferentes.
id: call-experience modulo: voice-sms app: crm nombre: Configurar experiencia de llamada tipo: configuracion
Configurar experiencia de llamada
Configura destinos permitidos, grabación, saludo, cola y enlaces administrativos de Telnyx.
Que se logra
- Resultado: las llamadas siguen la experiencia definida por la organización, desde el país permitido hasta la espera, grabación y saludo.
- Caso de uso: una clínica graba llamadas con aviso, reproduce un saludo y mantiene a pacientes en cola mientras espera un agente disponible.
- Se combina con: Configurar enrutamiento de llamadas, Administrar agentes de voz y Consultar historial de llamadas.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/voice/destinations,/recording,/greeting,/queuey/telnyx - Acceso en UI:
Calling & SMS > Calling - Componente(s):
VoiceSettingsNav.tsx,VoiceSettingsQueue.tsx,VoiceSettingsTelnyxPortal.tsx
Como funciona
- Agregar o retirar países permitidos en
Destinations. - Activar grabación, formato, canales, aviso y transcripción en
Recording & Transcription. - Definir saludo y mensaje sin agentes en
Greeting. - Activar cola, espera, mensajes y música en
Queue.
Reglas y validaciones
- La transcripción requiere grabación activada.
- La espera de cola permite de 30 a 1800 segundos y la música debe ser MP3 o WAV HTTPS público.
Telnyxes exclusivo de superadmin.
Backend
- Servicios:
voice-channels(método: find/patch) - Efectos: sincroniza perfiles de salida y configuración de llamadas con Telnyx.
Relaciones
- Requiere: canal Calling & SMS activo.
- Dispara / afecta: llamadas entrantes y salientes.
Notas
- La raíz de
Callingredirige aDestinations.
id: call-history modulo: voice-sms app: crm nombre: Consultar historial de llamadas tipo: vista
Consultar historial de llamadas
Muestra llamadas con filtros, grabaciones, transcripciones, costos y diagnóstico.
Que se logra
- Resultado: supervisores revisan qué ocurrió en cada llamada y cuentan con evidencia para seguimiento, capacitación o diagnóstico.
- Caso de uso: un despacho legal escucha la grabación y lee la transcripción de una llamada para confirmar la información recibida de un cliente.
- Se combina con: Conversaciones, Configurar experiencia de llamada y Asistentes de IA de voz.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/calls - Acceso en UI:
Calling & SMS > Calls - Componente(s):
VoiceCallsHistory.tsx
Como funciona
- Aplicar filtros por contacto, fecha, dirección, estado, detección o duración.
- Abrir
Transcript, reproducir la grabación o elegirDebug. - Elegir
Exportsi se necesita exportar.
Reglas y validaciones
- El filtro de detección se oculta cuando la dirección es entrante.
Exportmuestra una notificación; no descarga CSV actualmente.- La columna de cargo a wallet es solo para superadmin.
Backend
- Servicios:
voice-calls,voice-call-transcriptions(método: find/get) - Efectos: recibe estados, grabaciones y costos desde webhooks Telnyx.
Relaciones
- Requiere: llamadas procesadas por Telnyx.
- Dispara / afecta: Conversaciones y análisis de llamadas.
Notas
- Las filas no abren una página de detalle al hacer clic.
id: call-routing modulo: voice-sms app: crm nombre: Configurar enrutamiento de llamadas tipo: configuracion
Configurar enrutamiento de llamadas
Define si las llamadas entrantes van a personas, a IA o a personas con respaldo de IA.
Que se logra
- Resultado: cada llamada sigue una política explícita de atención, con una alternativa humana si la IA no puede iniciar la atención.
- Caso de uso: un concesionario atiende primero con una IA que califica la solicitud y transfiere al equipo comercial cuando corresponde.
- Se combina con: Administrar agentes de voz, Asistentes de IA de voz y Configurar experiencia de llamada.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/voice/routing - Acceso en UI:
Calling & SMS > Calling > Routing - Componente(s):
VoiceSettingsRouting.tsx
Como funciona
- Elegir
Human Only,AI FirstoHuman First with AI Fallback. - Seleccionar un asistente de voz predeterminado si aplica.
- Definir
AI Greeting.
Reglas y validaciones
- Solo asistentes de voz preparados aparecen como opción utilizable.
- En
AI First, un fallo inicial de IA recurre a agentes humanos.
Backend
- Servicios:
voice-channels,ai-assistants,voice-agents(método: find/patch)
Relaciones
- Requiere: Agentes de voz o asistentes IA de voz.
- Dispara / afecta: llamadas entrantes.
Notas
- La configuración avanzada del asistente vive en AI Assistant.
id: phone-numbers modulo: voice-sms app: crm nombre: Comprar y administrar números tipo: accion
Comprar y administrar números
Busca, compra y gestiona números Telnyx para llamadas y SMS.
Que se logra
- Resultado: la empresa obtiene y mantiene números para llamadas y SMS, incluido un número principal para las salidas.
- Caso de uso: una inmobiliaria compra un número local para su nueva sede y lo establece como identificador de las llamadas de sus asesores.
- Se combina con: Activar Calling y SMS, Configurar SMS, Cumplimiento SMS 10DLC y Stripe.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/numbers - Acceso en UI:
Calling & SMS > Numbers - Componente(s):
PhoneNumbersManagement.tsx,SearchPhoneNumbersDialog.tsx,PurchaseConfirmDialog.tsx
Como funciona
- Elegir
Purchase Number. - Buscar por país y filtros disponibles, añadir al carrito y confirmar.
- Revisar disponibilidad, estado y requisitos.
- Definir
Set as primary, actualizar estado o cancelar la suscripción del número.
Reglas y validaciones
- La compra requiere método de pago de la organización.
- Un número debe estar activo antes de ser principal.
Backend
- Servicios:
voice-phone-number-search,voice-phone-numbers(método: find/create/patch) - Efectos: crea suscripción y reserva/compra el número en Telnyx.
Relaciones
- Requiere: canal Calling & SMS y Stripe.
- Dispara / afecta: llamadas salientes, SMS y cumplimiento 10DLC.
Notas
- El número principal es el identificador predeterminado de llamadas salientes.
id: pricing modulo: voice-sms app: crm nombre: Consultar precios de voz y SMS tipo: vista
Consultar precios de voz y SMS
Presenta tarifas de referencia por país para voz, SMS y MMS.
Que se logra
- Resultado: el equipo estima el costo de habilitar números y de comunicarse por voz, SMS o MMS en los países con cobertura.
- Caso de uso: una empresa de turismo compara las tarifas de dos mercados antes de comprar un número local para su operación.
- Se combina con: Comprar y administrar números y Configurar SMS.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/pricing - Acceso en UI:
Calling & SMS > Pricing - Componente(s):
VoicePricing.tsx
Como funciona
- Elegir un país disponible.
- Alternar entre
VoiceySMS / MMS. - Consultar las tablas de precios.
Reglas y validaciones
- Solo se muestran países donde hay números disponibles.
Backend
- Servicios:
voice-pricing,voice-phone-numbers-country-coverage(método: find)
Relaciones
- Requiere: cobertura publicada por Telnyx.
- Dispara / afecta: compra de números y previsión de costos.
Notas
- La interfaz indica el margen de plataforma como referencia.
id: sms-settings modulo: voice-sms app: crm nombre: Configurar SMS tipo: configuracion
Configurar SMS
Activa SMS, limita destinos, sincroniza números y define identificador alfanumérico.
Que se logra
- Resultado: la organización controla desde qué números y hacia qué países puede enviar SMS desde el inbox.
- Caso de uso: una cadena de restaurantes habilita SMS solo para sus mercados activos y sincroniza los números usados por cada sede.
- Se combina con: Comprar y administrar números, Cumplimiento SMS 10DLC y Conversaciones.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/sms - Acceso en UI:
Calling & SMS > SMS - Componente(s):
SmsSettings.tsx
Como funciona
- Elegir
Enable SMS. - Añadir o quitar países en
Allowed Destinations. - Elegir
Sync Phone Numbers. - Configurar
Alphanumeric Sender IDy guardar.
Reglas y validaciones
- Requiere un canal de voz activo.
- El identificador alfanumérico admite máximo 11 caracteres.
Backend
- Servicios:
voice-channels(método: patch) - Hooks relevantes: creación/actualización de perfil de mensajería y sincronización de números.
Relaciones
- Requiere: canal Calling & SMS y números activos.
- Dispara / afecta: mensajes SMS del inbox.
Notas
- Los detalles avanzados exponen el identificador del perfil de mensajería.
id: voice-agents modulo: voice-sms app: crm nombre: Administrar agentes de voz tipo: configuracion
Administrar agentes de voz
Configura los miembros que reciben llamadas y sus credenciales SIP externas.
Que se logra
- Resultado: las llamadas llegan a miembros definidos y se distribuyen según su disponibilidad y peso de enrutamiento.
- Caso de uso: una clínica prioriza a dos recepcionistas durante el día y deja a un tercer agente con menor peso para cubrir picos.
- Se combina con: Configurar enrutamiento de llamadas, Activar Calling y SMS y Asistentes de IA de voz.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/agents - Acceso en UI:
Calling & SMS > Agents - Componente(s):
VoiceAgentsManagement.tsx,AddVoiceAgentDialog.tsx
Como funciona
- Elegir
Add Agenty seleccionar un usuario. - Cambiar disponibilidad, estado o peso de enrutamiento.
- Usar el icono de ojo para consultar credenciales SIP y seleccionar identificador de llamada.
- Eliminar agentes que ya no reciban llamadas.
Reglas y validaciones
- El peso está entre 1 y 100; el total recomendado es 100%.
- Las credenciales son por agente y no las de la página
Status.
Backend
- Servicios:
voice-agents,voice-phone-numbers(método: find/create/patch/remove)
Relaciones
- Requiere: Canal Calling & SMS y miembros de organización.
- Dispara / afecta: enrutamiento y transferencia humana de IA.
Notas
- El softphone in-app se documenta en Plataforma/Softphone.
id: voice-channel-activation modulo: voice-sms app: crm nombre: Activar Calling y SMS tipo: integracion
Activar Calling y SMS
Provisiona el canal Telnyx de una organización y presenta su estado de conexión.
Que se logra
- Resultado: la organización obtiene la infraestructura Telnyx necesaria para configurar números, agentes, llamadas y SMS desde Apex.
- Caso de uso: un concesionario activa Calling y SMS antes de asignar su primer número comercial a los asesores de ventas.
- Se combina con: Comprar y administrar números, Administrar agentes de voz y Configurar SMS.
Donde esta
- Ruta:
/[orgId]/settings/voice-channel/setup - Acceso en UI:
Avatar menu > Settings > Calling & SMS > Status - Componente(s):
VoiceChannelSetup.tsx,VoiceChannelActivate.tsx
Como funciona
- Elegir
Activate Voice Channel. - Esperar la creación de los recursos de llamadas.
- Usar
Refreshpara actualizar estado y diagnóstico.
Reglas y validaciones
- Los identificadores técnicos compartidos no son credenciales de softphone.
Backend
- Servicios:
voice-channels(método: find/create/patch) - Efectos: crea recursos Telnyx de voz, conexión SIP y perfil de salida.
Relaciones
- Requiere: Telnyx.
- Dispara / afecta: números, agentes, llamadas y SMS.
Notas
- El softphone in-app corresponde al módulo Plataforma/Softphone.
APP: events
Events
Eventos, invitados, check-in e insights.
- Etapa: Produccion
- Landing:
/{orgId}/events
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Events | gestion |
shipped | Crear y gestionar eventos. |
| Guests | guests |
shipped | Roster de registros. |
| Check-in | check-in |
shipped | Escaner QR de asistencia. |
| People | people |
shipped | Directorio de asistentes. |
| Insights | insights |
shipped | Analitica de eventos. |
| Eventos publicos | eventos-publicos |
public | Paginas de registro y tickets. |
Funcionalidades internas
40 funcionalidades documentadas en 6 modulos. Ver la tabla de cada modulo.
id: check-in app: events nombre: Check-in estado: shipped permiso: can_access_events
Check-in
Convierte el ticket del asistente en una asistencia registrada durante el evento.
Para que sirve
- Un organizador de conferencias valida entradas QR y conoce la asistencia real mientras se realiza el evento.
- Una universidad registra la llegada de participantes a una feria o seminario sin listas en papel.
- Un gimnasio controla la entrada a una clase especial con una lista de asistentes aprobados.
Que lo hace diferente
- El check-in actualiza el mismo registro ligado al contacto del CRM.
- La entrada confirmada puede disparar automatizaciones para seguimiento o entrega de materiales.
- Los conteos se reflejan en la analítica del evento sin exportar ni reconciliar listas.
Acceso
- Ruta principal:
/[orgId]/events/check-in - Como se llega:
Events > Check-in - Permiso requerido:
can_access_events.
Alcance tecnico
- Frontend:
EventCheckInView.tsx. - Backend:
event-registrationsy la automatización de check-in. - Integraciones externas: cámara del navegador mediante
BarcodeDetector.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Escanear ticket QR | scan-qr.md | Lee el ticket con la cámara. |
| Registrar manualmente | manual-check-in.md | Busca una persona o ingresa su código. |
| Seguir asistencia en vivo | live-attendance.md | Muestra progreso y entradas recientes. |
Relaciones
- Depende de: Guests y Tickets.
- Dispara / afecta: Insights y automatizaciones de asistencia.
Limitaciones y notas
- Solo los invitados
approvedpueden hacer check-in; un ticket ya registrado se informa sin duplicarlo.
id: live-attendance modulo: check-in app: events nombre: Seguir asistencia en vivo tipo: vista
Seguir asistencia en vivo
Presenta la ocupación y los últimos check-ins del evento seleccionado.
Que se logra
- Resultado: Muestra el avance de asistencia y los ingresos recientes durante la operación.
- Caso de uso: Un equipo de eventos controla en vivo cuántos asistentes ya llegaron al auditorio.
- Se combina con: Check-in e Insights.
Donde esta
- Ruta:
/[orgId]/events/check-in - Acceso en UI:
Events > Check-in - Componente(s):
EventCheckInView.tsx
Como funciona
- Se selecciona un evento publicado.
- Se revisan aprobados, asistentes registrados y porcentaje.
- Se consulta la lista de entradas recientes.
Reglas y validaciones
- El porcentaje se calcula sobre asistentes aprobados.
Backend
- Servicios:
events(get),event-registrations(find).
Relaciones
- Requiere: Check-in y Guests.
Notas
- Muestra hasta 20 registros recientes.
id: manual-check-in modulo: check-in app: events nombre: Registrar check-in manualmente tipo: accion
Registrar check-in manualmente
Marca asistencia mediante código escrito o búsqueda de invitado.
Que se logra
- Resultado: Permite confirmar entradas aunque no haya lectura de QR disponible.
- Caso de uso: Una iglesia busca por nombre a un asistente y registra su llegada.
- Se combina con: Guests e Insights.
Donde esta
- Ruta:
/[orgId]/events/check-in - Acceso en UI:
Events > Check-in - Componente(s):
EventCheckInView.tsx
Como funciona
- Se escribe o pega el código de ticket, o se busca por nombre/email.
- Se pulsa la acción
Check in.
Reglas y validaciones
- La búsqueda requiere al menos dos caracteres.
- Solo se puede registrar a una persona aprobada.
Backend
- Servicios:
event-registrations(find, patch).
Relaciones
- Requiere: Guests.
Notas
- Puede revertirse con
Undo check-in.
id: scan-qr modulo: check-in app: events nombre: Escanear ticket QR tipo: accion
Escanear ticket QR
Lee un ticket con la cámara y registra la asistencia.
Que se logra
- Resultado: Agiliza la validación presencial leyendo el ticket del asistente.
- Caso de uso: Un organizador de conferencias acredita participantes desde la cámara del navegador.
- Se combina con: Guests y automatizaciones de check-in.
Donde esta
- Ruta:
/[orgId]/events/check-in - Acceso en UI:
Events > Check-in > Start camera - Componente(s):
EventCheckInView.tsx
Como funciona
- Se escoge un evento publicado.
- Se inicia la cámara y se muestra el QR.
- El resultado confirma, rechaza o advierte que ya ingresó.
Reglas y validaciones
- Solo admite QR y requiere permiso de cámara y
BarcodeDetector.
Backend
- Servicios:
event-registrations(find, patch). - Efectos: actualiza contadores y dispara automatización de check-in.
Relaciones
- Afecta: Guests e Insights.
Notas
- Ignora el mismo código repetido durante cuatro segundos.
id: eventos-publicos app: events nombre: Eventos públicos estado: public permiso: ninguno
Eventos públicos
Expone la agenda y el registro de eventos sin iniciar sesión, incluida la gestión del ticket del asistente.
Para que sirve
- Un organizador de conferencias publica una agenda y permite registro con ticket desde su enlace.
- Una iglesia comparte actividades abiertas, recibe inscripciones y entrega un ticket QR por email.
- Una universidad publica jornadas y eventos de admisión con información, ubicación y cupos.
Que lo hace diferente
- Un registro público crea o relaciona un contacto dentro del CRM de Apex.
- La página usa los tickets, cupones, pagos y reglas de capacidad definidos por la organización.
- Las visitas y registros alimentan Insights; el asistente recibe comunicaciones y ticket desde el mismo producto.
- Los registros públicos pueden disparar automatizaciones de Apex.
Acceso
- Ruta principal:
/events/[orgId] - Como se llega: enlace público de la organización o del evento.
- Permiso requerido: ninguno.
Alcance tecnico
- Frontend: rutas
/events/[orgId],/events/[orgId]/[slug], ticket y feedback; componentespublic/PublicOrganizationEventsView.tsx. - Backend:
public-event-registration,public-event-ticket,event-page-views. - Integraciones externas: gateways de pago, email con ticket/ICS y Google Maps embebido.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar agenda pública | public-event-calendar.md | Muestra los eventos publicados de la organización. |
| Consultar página de evento | public-event-page.md | Presenta detalles, anfitriones, ubicación y registro. |
| Registrarse | public-registration.md | Crea un registro desde el formulario público. |
| Seleccionar ticket y cupón | ticket-selection.md | Calcula disponibilidad, precio y descuentos. |
| Pagar y recibir ticket | public-payment-ticket.md | Continúa el pago y entrega ticket QR. |
| Gestionar ticket | attendee-ticket.md | Consulta estado, cancela o paga una inscripción. |
| Enviar feedback | public-feedback.md | Envía una valoración posterior al evento. |
Relaciones
- Depende de: Gestión de eventos, Tickets, Coupons, Guests y Payment gateways.
- Dispara / afecta: emails, métricas de Insights y automatizaciones de registros.
Limitaciones y notas
- El enlace de ticket se basa en un código de check-in; debe tratarse como un enlace privado.
id: attendee-ticket modulo: eventos-publicos app: events nombre: Gestionar ticket de asistente tipo: publico
Gestionar ticket de asistente
Permite consultar el QR, estado y acciones de una inscripción.
Que se logra
- Resultado: Permite consultar el estado de la inscripción y continuar acciones habilitadas sobre ella.
- Caso de uso: Un asistente revisa su ticket antes de una conferencia y completa un pago pendiente.
- Se combina con: Guests, pagos y Check-in.
Donde esta
- Ruta:
/events/[orgId]/[slug]/ticket/[code] - Acceso en UI: enlace recibido en la confirmación.
- Componente(s): página de ticket público.
Como funciona
- Se abre el enlace del ticket.
- Se muestra QR, estado de registro y check-in.
- Si corresponde, se usa
Pay nowoCancel registration.
Reglas y validaciones
- El ticket se localiza por su código de check-in.
Backend
- Servicios:
public-event-ticket(get, patch).
Relaciones
- Requiere: registro público.
Notas
- El código QR es el usado en Check-in.
id: public-event-calendar modulo: eventos-publicos app: events nombre: Consultar agenda pública tipo: publico
Consultar agenda pública
Muestra la agenda pública de una organización.
Que se logra
- Resultado: Ofrece una agenda pública para descubrir y abrir eventos publicados.
- Caso de uso: Una iglesia publica sus próximos encuentros para que la comunidad encuentre el adecuado.
- Se combina con: Gestión de eventos y páginas públicas.
Donde esta
- Ruta:
/events/[orgId] - Acceso en UI: enlace público compartido.
- Componente(s):
PublicOrganizationEventsView.tsx
Como funciona
- Se abre la página con el identificador o slug público de la organización.
- Se selecciona un evento publicado para ver su detalle.
Backend
- Servicios:
public-event-registration(find).
Relaciones
- Requiere: Configuración de organización.
Notas
- La organización puede desactivar su página pública.
id: public-event-page modulo: eventos-publicos app: events nombre: Consultar página pública de evento tipo: publico
Consultar página pública de evento
Presenta los detalles y el registro de un evento publicado.
Que se logra
- Resultado: Presenta información suficiente para que un visitante decida registrarse.
- Caso de uso: Una conferencia muestra anfitriones, agenda, lugar y cupos en una sola página.
- Se combina con: Tickets, registro público y mapa.
Donde esta
- Ruta:
/events/[orgId]/[slug] - Acceso en UI: enlace del evento.
- Componente(s): página pública de evento.
Como funciona
- Se revisa fecha, ubicación o enlace, anfitriones y descripción.
- Se inicia el registro desde la tarjeta
Registration.
Reglas y validaciones
- La dirección puede reservarse para asistentes.
Backend
- Servicios:
public-event-registration(get, create). - Efectos: registra vistas anónimas para Insights.
Relaciones
- Requiere: evento publicado.
Notas
- La copia y diseño pueden ser personalizados por evento.
id: public-feedback modulo: eventos-publicos app: events nombre: Enviar feedback público tipo: publico
Enviar feedback público
Recoge valoración y comentario de un asistente tras el evento.
Que se logra
- Resultado: Recoge una valoración después del evento desde una superficie sin login.
- Caso de uso: Un organizador solicita feedback a asistentes de una sesión al terminar.
- Se combina con: Guests e Insights.
Donde esta
- Ruta:
/events/[orgId]/[slug]/feedback?code= - Acceso en UI: enlace de feedback.
- Componente(s): página de feedback público.
Como funciona
- Se abre el enlace asociado al ticket.
- Se selecciona una valoración y se añade un comentario opcional.
- Se envía el formulario.
Reglas y validaciones
- El feedback se asocia al registro del código entregado.
Backend
- Servicios:
public-event-registration(create),event-feedback.
Relaciones
- Afecta: Insights.
Notas
- La valoración disponible va de una a cinco estrellas.
id: public-payment-ticket modulo: eventos-publicos app: events nombre: Pagar y recibir ticket tipo: publico
Pagar y recibir ticket
Deriva el registro de pago a un enlace y entrega el ticket QR.
Que se logra
- Resultado: Lleva al asistente desde una entrada de pago hasta su ticket de acceso.
- Caso de uso: Una academia cobra un taller y entrega la confirmación al participante.
- Se combina con: Payment gateways, Guests y ticket público.
Donde esta
- Ruta:
/events/[orgId]/[slug] - Acceso en UI:
Pay now - Componente(s): página pública de evento y ticket.
Como funciona
- Se crea el registro con ticket pagado.
- Se continúa mediante el enlace de pago.
- Tras el cobro, el ticket queda disponible.
Reglas y validaciones
- La organización necesita un gateway configurado para cobrar.
Backend
- Servicios:
public-event-registration(create),public-event-ticket(get). - Efectos: la confirmación de pago actualiza el estado y habilita el ticket.
Relaciones
- Requiere: Payment gateways y Tickets.
Notas
- El flujo público permite pagar y consultar el ticket; no expone una acción de reembolso.
id: public-registration modulo: eventos-publicos app: events nombre: Registrarse a un evento tipo: publico
Registrarse a un evento
Permite a una persona crear su registro desde la página pública.
Que se logra
- Resultado: Convierte una visita en una inscripción vinculada al evento.
- Caso de uso: Una universidad recibe el registro de un aspirante a una jornada de puertas abiertas.
- Se combina con: Contacts, Guests y Automatizaciones.
Donde esta
- Ruta:
/events/[orgId]/[slug] - Acceso en UI:
Registration - Componente(s): página pública de evento.
Como funciona
- Se identifican o completan los datos solicitados.
- Se elige un ticket disponible.
- Se envía el formulario y se recibe confirmación, espera o pago.
Reglas y validaciones
- El estado depende de aprobación, disponibilidad y pago.
Backend
- Servicios:
public-event-registration(create). - Efectos: crea o vincula contacto, notifica y puede activar automatizaciones.
Relaciones
- Requiere: formulario, tickets y configuración de registro.
Notas
- Las invitaciones pueden prellenar la información.
id: ticket-selection modulo: eventos-publicos app: events nombre: Seleccionar ticket y cupón tipo: publico
Seleccionar ticket y cupón
Calcula disponibilidad, precio y descuento antes de registrar.
Que se logra
- Resultado: Permite elegir una modalidad disponible y calcular su precio o descuento.
- Caso de uso: Un organizador ofrece entradas general y VIP, con cupón para aliados.
- Se combina con: Tickets, Cupones y pagos.
Donde esta
- Ruta:
/events/[orgId]/[slug] - Acceso en UI:
Registration > Tickets - Componente(s): página pública de evento.
Como funciona
- Se elige un ticket disponible.
- Se ingresa un cupón opcional y se pulsa
Apply. - Se confirma el total y se continúa.
Reglas y validaciones
- Respeta ventana de venta, visibilidad, capacidad y aprobación del ticket.
Backend
- Servicios:
public-event-registration(create). - Efectos: valida cupón y calcula pago.
Relaciones
- Requiere: Tickets y Coupons.
Notas
- Un ticket sin capacidad propia hereda el límite del evento cuando existe.
id: gestion app: events nombre: Gestión de eventos estado: shipped permiso: can_access_events
Gestión de eventos
Permite crear, configurar y operar eventos de una organización, desde el borrador hasta su publicación y comunicaciones.
Para que sirve
- Un organizador de conferencias crea, publica y comunica eventos con entradas, anfitriones y página propia.
- Una universidad habilita registros con aprobación y capacidad para charlas, ferias y actividades de admisión.
- Una iglesia coordina encuentros presenciales o virtuales, envía invitaciones y mantiene informados a sus asistentes.
- Un equipo de formación vende cupos, aplica cupones y centraliza la operación del evento.
Que lo hace diferente
- Los asistentes se vinculan con contactos del CRM en vez de quedar aislados en una lista de tickets.
- El registro, sus cambios de estado y el check-in pueden disparar automatizaciones de Apex.
- Puede cobrar tickets mediante los gateways de pago configurados por la organización.
- Las comunicaciones del evento se envían por email o WhatsApp desde la misma organización.
- Puede sincronizarse con Google Calendar y generar enlaces de Google Meet cuando existe una integración activa.
Acceso
- Ruta principal:
/[orgId]/events - Como se llega:
Header app switcher > Events - Permiso requerido:
can_access_events; las acciones quedan sujetas a permisos granulares de Events.
Alcance tecnico
- Frontend: rutas de lista, creación y
/[orgId]/events/[eventId];EventManageView.tsx,EventCoreFields.tsx,EventTicketTypesSection.tsx,EventCouponsSection.tsx,EventHostsCard.tsx,EventBlastsSection.tsxyEventDetailView.tsx. - Backend:
events,event-ticket-types,event-coupons,event-hosts,event-blastsyorganization-events-settings. - Superficies publicas: el evento publicado se expone bajo
/events/[orgId]/[slug]. - Integraciones externas: Google Calendar/Meet, S3, gateways de pago, email y WhatsApp.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear evento | create-event.md | Crea un borrador con los datos esenciales. |
| Editar detalles | edit-event.md | Actualiza calendario, modalidad, ubicación y portada. |
| Google Meet | google-meet.md | Genera un enlace desde una integración activa. |
| Gestionar anfitriones | manage-hosts.md | Añade miembros y controla su visibilidad pública. |
| Configurar registro | registration-settings.md | Define apertura, aprobación, capacidad y visibilidad. |
| Diseñar formulario | registration-form.md | Configura campos de contacto y preguntas propias. |
| Gestionar tickets | ticket-types.md | Crea entradas gratuitas o de pago. |
| Gestionar cupones | coupons.md | Descuentos para entradas de pago. |
| Configurar pagos | event-payments.md | Prepara gateway y cobros de entradas. |
| Personalizar página | event-page.md | Configura slug, contenido e imágenes públicas. |
| Diseñar página pública | page-design.md | Elige tema y colores. |
| Personalizar idioma | page-language.md | Usa textos en inglés, español o personalizados. |
| Enviar comunicaciones | guest-blasts.md | Envía o programa email y WhatsApp. |
| Publicar evento | publish-event.md | Alterna entre borrador y publicado. |
| Duplicar, cancelar o eliminar | event-lifecycle.md | Opera acciones administrativas del evento. |
| Configuración de organización | organization-settings.md | Define la agenda pública y valores predeterminados. |
Relaciones
- Depende de: Currencies, Payment gateways, Document settings, Contacts y Calendar sync.
- Usado por: Guests, Check-in, People, Insights, Automatizaciones y Eventos públicos.
Limitaciones y notas
- La capacidad efectiva considera el límite del evento y el de cada ticket.
- Un anfitrión creador no se puede eliminar.
- La sincronización con Google Calendar puede informar un error sin impedir que se guarde el evento.
id: coupons modulo: gestion app: events nombre: Gestionar cupones tipo: configuracion
Gestionar cupones
Aplica descuentos a tickets pagados.
Que se logra
- Resultado: Aplica descuentos controlados a tickets elegibles.
- Caso de uso: Una academia entrega un código de descuento a estudiantes para un taller pagado.
- Se combina con: Tickets, pagos y registro público.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=registration - Acceso en UI:
Manage event > Registration > Add coupon - Componente(s):
EventCouponsSection.tsx
Como funciona
- Se añade código, descuento, ticket objetivo y vigencia.
- Se activa, desactiva o elimina el cupón.
Reglas y validaciones
- Requiere al menos un ticket pagado.
- El porcentaje debe estar entre 1 y 100.
Backend
- Servicios:
event-coupons(find, create, patch, remove).
Relaciones
- Requiere: Tickets.
- Afecta: registro y pagos públicos.
Notas
- El límite de usos es opcional.
id: create-event modulo: gestion app: events nombre: Crear evento tipo: accion
Crear evento
Inicia un evento como borrador.
Que se logra
- Resultado: Crea una base operativa para publicar un evento, abrir registros y medir su resultado.
- Caso de uso: Un organizador de conferencias inicia la ficha de una charla y luego define entradas, anfitriones y comunicación.
- Se combina con: Tickets, Eventos públicos y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/events/new - Acceso en UI:
Events > Create event - Componente(s):
CreateEventView.tsx,EventCoreFields.tsx
Como funciona
- Se completa
Event name, fecha, zona horaria y modalidad. - Se guarda el borrador para continuar su configuración.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre, inicio y fin | texto y fecha | Sí | El fin debe ser posterior al inicio. |
| Modalidad | selección | Sí | In-person, Webinar o Hybrid. |
Reglas y validaciones
- El enlace de reunión debe usar HTTP o HTTPS.
Backend
- Servicios:
events(create). - Efectos: crea un anfitrión creador y un ticket gratuito inicial.
Relaciones
- Requiere: Gestión de eventos.
- Dispara / afecta: Tickets y Hosts.
Notas
- Se aplican valores predeterminados de la organización.
id: edit-event modulo: gestion app: events nombre: Editar detalles del evento tipo: accion
Editar detalles del evento
Actualiza la información operativa de un evento.
Que se logra
- Resultado: Mantiene fecha, formato, ubicación y presentación del evento alineados con su operación real.
- Caso de uso: Una universidad actualiza el auditorio o la modalidad de una jornada sin crear un evento nuevo.
- Se combina con: Eventos públicos, Guests y Google Calendar.
Donde esta
- Ruta:
/[orgId]/events/[eventId] - Acceso en UI:
Manage event > Overview - Componente(s):
EventManageView.tsx,EventCoreFields.tsx
Como funciona
- Se modifica título, fechas, modalidad, ubicación, enlace o descripción.
- Se pulsa
Save.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Portada | imagen | No | Acepta imágenes de hasta 5 MB. |
| Ubicación | texto | No | Puede mostrarse solo a asistentes. |
Reglas y validaciones
- Webinar no muestra ubicación; eventos presenciales no muestran enlace de reunión.
Backend
- Servicios:
events(get, patch). - Efectos: cambios de detalles pueden notificar a asistentes.
Relaciones
- Afecta: página pública y comunicaciones.
Notas
- La portada se almacena en S3.
id: event-lifecycle modulo: gestion app: events nombre: Duplicar, cancelar o eliminar evento tipo: accion
Duplicar, cancelar o eliminar evento
Ofrece operaciones administrativas para el ciclo de vida del evento.
Que se logra
- Resultado: Permite administrar el estado operativo del evento, incluido cancelarlo o retirarlo.
- Caso de uso: Un organizador cancela una fecha y notifica a los invitados afectados.
- Se combina con: Guests y comunicaciones del evento.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=more - Acceso en UI:
Manage event > More - Componente(s):
EventManageView.tsx
Como funciona
- Se cambia el slug público si es necesario.
- Se pulsa
Clone,Cancel eventoDeletey se confirma.
Reglas y validaciones
- La cancelación no elimina el evento; la eliminación usa borrado lógico.
Backend
- Servicios:
events(create, patch, remove). - Efectos: la cancelación notifica a los asistentes.
Relaciones
- Afecta: Guests y Eventos públicos.
Notas
- El clon se crea con el nombre original seguido de
(copy).
id: event-page modulo: gestion app: events nombre: Personalizar página pública del evento tipo: configuracion
Personalizar página pública del evento
Configura la dirección y contenido principal del evento público.
Que se logra
- Resultado: Publica una página con información y contenido propios para convertir visitas en registros.
- Caso de uso: Una iglesia comparte los detalles de su retiro en una página con fecha, lugar y registro.
- Se combina con: Página pública y diseño de página.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=page - Acceso en UI:
Manage event > Event page - Componente(s):
EventDetailView.tsx
Como funciona
- Se define el slug, mensaje de agradecimiento y política.
- Se suben o cambian logo y portada.
- Se guarda y se revisa la vista previa si está publicado.
Reglas y validaciones
- El slug usa minúsculas, números y guiones.
Backend
- Servicios:
events(patch),s3-url-signing(create).
Relaciones
- Afecta: página pública y ticket.
Notas
- La vista previa solo está disponible con evento publicado y slug.
id: event-payments modulo: gestion app: events nombre: Configurar pagos de eventos tipo: configuracion
Configurar pagos de eventos
Habilita cobros para tickets pagados.
Que se logra
- Resultado: Permite cobrar entradas de pago mediante un gateway configurado por la organización.
- Caso de uso: Un productor de eventos cobra cupos de una capacitación sin gestionar pagos fuera de Apex.
- Se combina con: Tickets, Payment gateways y ticket público.
Donde esta
- Ruta:
/[orgId]/events/settings - Acceso en UI:
Events > Settings > Payments - Componente(s):
EventsSettingsView.tsx,EventCouponsSection.tsx
Como funciona
- Se selecciona un gateway predeterminado.
- Se añade la política de reembolso.
- Se verifican avisos de preparación en tickets.
Reglas y validaciones
- Tickets pagados requieren un gateway activo y una configuración de documentos para pagos.
Backend
- Servicios:
organization-events-settings(patch),organization-payment-gateways(find).
Relaciones
- Requiere: Payment gateways y Document settings.
Notas
- Sin gateway el registro puede crear la inscripción, pero el pago no queda listo.
id: google-meet modulo: gestion app: events nombre: Generar enlace de Google Meet tipo: integracion
Generar enlace de Google Meet
Genera un enlace de reunión para eventos virtuales o híbridos.
Que se logra
- Resultado: Entrega un enlace de reunión asociado al evento virtual cuando la organización tiene una integración activa.
- Caso de uso: Una escuela en línea programa una clase y da a los inscritos un acceso de Google Meet.
- Se combina con: Eventos públicos y comunicaciones a invitados.
Donde esta
- Ruta:
/[orgId]/events/newy/[orgId]/events/[eventId] - Acceso en UI:
Generate Google Meet link - Componente(s):
EventCoreFields.tsx
Como funciona
- Se selecciona
Generate Google Meet link. - Se elige una integración activa de Google Calendar.
- Se guarda el evento.
Reglas y validaciones
- Requiere una integración activa; si no existe, se dirige a Calendar sync.
Backend
- Servicios:
events(create, patch). - Efectos: sincroniza el evento con Google Calendar y solicita conferencia Meet.
Relaciones
- Requiere: Calendar sync.
Notas
- Un fallo de sincronización se muestra al usuario sin anular el guardado.
id: guest-blasts modulo: gestion app: events nombre: Enviar comunicaciones a asistentes tipo: accion
Enviar comunicaciones a asistentes
Envía o programa mensajes a segmentos de asistentes.
Que se logra
- Resultado: Comunica novedades, recordatorios o invitaciones a segmentos de asistentes.
- Caso de uso: Un organizador avisa por email o WhatsApp a inscritos sobre un cambio de sala.
- Se combina con: Guests y recordatorios del evento.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=blasts - Acceso en UI:
Manage event > Blasts > New blast - Componente(s):
EventBlastsSection.tsx
Como funciona
- Se seleccionan canal y audiencia.
- Se escribe email o se elige una plantilla WhatsApp aprobada.
- Se envía ahora o se programa.
Reglas y validaciones
- Email requiere asunto y mensaje; WhatsApp requiere plantilla.
- Una programación debe ser futura.
Backend
- Servicios:
event-blasts(find, create). - Efectos: entrega por email o WhatsApp; el cron procesa envíos programados.
Relaciones
- Requiere: Guests y plantillas WhatsApp.
Notas
- Se ven estado y contadores de entrega.
id: manage-hosts modulo: gestion app: events nombre: Gestionar anfitriones tipo: configuracion
Gestionar anfitriones
Asigna miembros de la organización como anfitriones del evento.
Que se logra
- Resultado: Muestra responsables del evento y define qué anfitriones aparecen en la página pública.
- Caso de uso: Una conferencia presenta a sus ponentes visibles y mantiene responsables internos para coordinarla.
- Se combina con: Página pública del evento.
Donde esta
- Ruta:
/[orgId]/events/[eventId] - Acceso en UI:
Manage event > Overview > Hosts - Componente(s):
EventHostsCard.tsx
Como funciona
- Se pulsa
Addy se elige un miembro disponible. - Se puede ocultar o retirar un anfitrión.
Reglas y validaciones
- El anfitrión creador no se puede eliminar.
Backend
- Servicios:
event-hosts(find, create, patch, remove).
Relaciones
- Afecta: página pública del evento.
Notas
- Los anfitriones añadidos tienen acceso de gestor.
id: organization-settings modulo: gestion app: events nombre: Configurar Events de la organización tipo: configuracion
Configurar Events de la organización
Define la agenda pública y valores predeterminados de nuevos eventos.
Que se logra
- Resultado: Establece la identidad y reglas predeterminadas de la agenda pública de la organización.
- Caso de uso: Una universidad define el nombre, marca y preferencias que usarán sus futuros eventos.
- Se combina con: Eventos públicos y Gestión de eventos.
Donde esta
- Ruta:
/[orgId]/events/settings - Acceso en UI:
Events > Settings - Componente(s):
EventsSettingsView.tsx
Como funciona
- Se configura marca, slug, enlaces y página pública.
- Se definen valores predeterminados y pagos.
- Se pulsa
Save.
Reglas y validaciones
- El slug debe tener tres caracteres o más, usar minúsculas, números o guiones y no puede ser solo numérico.
Backend
- Servicios:
organization-events-settings(get, create, patch).
Relaciones
- Afecta: agenda pública y creación de eventos.
Notas
- Imágenes de avatar y portada aceptan hasta 5 MB.
id: page-design modulo: gestion app: events nombre: Diseñar página pública tipo: configuracion
Diseñar página pública
Controla el aspecto visual del evento público.
Que se logra
- Resultado: Adapta la apariencia de la página pública a la identidad del evento.
- Caso de uso: Una conferencia utiliza sus colores y portada para que la agenda sea reconocible por sus asistentes.
- Se combina con: Página pública del evento.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=page - Acceso en UI:
Manage event > Event page > Design - Componente(s):
EventDetailView.tsx
Como funciona
- Se selecciona
Light,DarkoCustom. - Se ajustan colores y subtítulo cuando corresponde.
- Se guarda y actualiza la vista previa.
Backend
- Servicios:
events(patch).
Relaciones
- Afecta: página pública del evento.
Notas
- El modo personalizado conserva campos de color editables.
id: page-language modulo: gestion app: events nombre: Personalizar idioma y etiquetas públicas tipo: configuracion
Personalizar idioma y etiquetas públicas
Selecciona el texto de la página pública o modifica sus etiquetas.
Que se logra
- Resultado: Presenta los textos del flujo público en el idioma adecuado para sus asistentes.
- Caso de uso: Una universidad internacional ofrece el registro de un seminario con textos adaptados a su audiencia.
- Se combina con: Página pública del evento.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=page - Acceso en UI:
Manage event > Event page > Language - Componente(s):
EventDetailView.tsx
Como funciona
- Se elige
English,EspañoloCustom. - Con
Custom, se edita el texto de formularios, tickets y feedback. - Se guarda.
Backend
- Servicios:
events(patch).
Relaciones
- Afecta: registro, ticket y feedback públicos.
Notas
- Los presets restauran su conjunto de textos.
id: publish-event modulo: gestion app: events nombre: Publicar evento tipo: accion
Publicar evento
Hace visible un evento configurado o lo devuelve a borrador.
Que se logra
- Resultado: Hace disponible o retira el evento del calendario y registro públicos.
- Caso de uso: Una academia termina de revisar su taller y lo publica para comenzar a recibir inscripciones.
- Se combina con: Eventos públicos.
Donde esta
- Ruta:
/[orgId]/events/[eventId] - Acceso en UI:
Manage event > PublishoUnpublish - Componente(s):
EventManageView.tsx
Como funciona
- Se pulsa
Publishpara publicar. - Se pulsa
Unpublishpara devolverlo a borrador.
Reglas y validaciones
- Un evento cancelado no presenta esta acción.
Backend
- Servicios:
events(patch). - Efectos: registra la transición y actualiza la página pública.
Relaciones
- Afecta: Eventos públicos.
Notas
- El enlace público requiere un slug.
id: registration-form modulo: gestion app: events nombre: Diseñar formulario de registro tipo: configuracion
Diseñar formulario de registro
Define los datos solicitados a quien se registra públicamente.
Que se logra
- Resultado: Recoge información necesaria para atender o segmentar a cada asistente.
- Caso de uso: Una clínica organiza una charla de salud y solicita datos relevantes antes de confirmar cupo.
- Se combina con: Contacts y Eventos públicos.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=registration - Acceso en UI:
Manage event > Registration > Registration questions - Componente(s):
EventDetailView.tsx,EventContactCustomFieldsSection.tsx
Como funciona
- Se eligen los campos de contacto visibles.
- Opcionalmente se identifica al contacto por email o teléfono.
- Se agregan preguntas propias y se guardan.
Reglas y validaciones
- Debe permanecer habilitado email o teléfono.
- Las preguntas
SelectyMulti-selectusan opciones separadas por comas.
Backend
- Servicios:
events(patch),public-event-registration(create).
Relaciones
- Requiere: Contacts.
- Afecta: registro público.
Notas
- Cada pregunta puede ser obligatoria.
id: registration-settings modulo: gestion app: events nombre: Configurar registro tipo: configuracion
Configurar registro
Controla quién puede registrarse y bajo qué condiciones.
Que se logra
- Resultado: Controla quién puede registrarse y cómo responder ante cupos, aprobación y visibilidad.
- Caso de uso: Una universidad abre un evento solo con aprobación para administrar plazas limitadas.
- Se combina con: Eventos públicos, Guests y Tickets.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=registration - Acceso en UI:
Manage event > Registration - Componente(s):
EventManageView.tsx
Como funciona
- Se activa o cierra el registro.
- Se configura aprobación, capacidad, espera, lista pública y ventana.
- Se pulsa
Save.
Reglas y validaciones
- La lista de espera solo se habilita si hay una capacidad positiva.
- La capacidad efectiva también puede depender del ticket.
Backend
- Servicios:
events(patch),event-registrations(create).
Relaciones
- Afecta: Eventos públicos y Guests.
Notas
- La visibilidad puede ser
PublicoPrivate.
id: ticket-types modulo: gestion app: events nombre: Gestionar tipos de ticket tipo: configuracion
Gestionar tipos de ticket
Crea y mantiene las entradas disponibles para el evento.
Que se logra
- Resultado: Ofrece modalidades de entrada con precio, cupo y reglas diferenciadas.
- Caso de uso: Un organizador vende entrada general y VIP para una conferencia con disponibilidad independiente.
- Se combina con: Cupones, pagos y registro público.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=registration - Acceso en UI:
Manage event > Registration > Add ticket - Componente(s):
EventTicketTypesSection.tsx
Como funciona
- Se crea o edita una entrada.
- Se define
FreeoPaid, disponibilidad y condiciones. - Se guarda o elimina tras confirmación.
Reglas y validaciones
- El nombre es obligatorio; un ticket pagado requiere precio positivo.
- No se permite eliminar un ticket ya usado.
Backend
- Servicios:
event-ticket-types(find, create, patch, remove).
Relaciones
- Requiere: Payments para tickets pagados.
- Afecta: registro público y cupones.
Notas
- Los tickets ocultos no se muestran públicamente.
id: guests app: events nombre: Invitados estado: shipped permiso: can_access_events
Invitados
Gestiona el roster de asistentes de toda la organización o de un evento concreto.
Para que sirve
- Un organizador de conferencias controla invitaciones, aprobaciones y asistencia de cientos de ponentes y participantes.
- Una universidad registra asistentes de jornadas académicas y los relaciona con prospectos del CRM.
- Una iglesia invita miembros a retiros y conserva una lista operativa para el día del evento.
Que lo hace diferente
- Cada asistente se asocia o crea como contacto CRM, por lo que el historial no queda separado del resto de la relación.
- Los cambios de registro y el check-in pueden activar automatizaciones.
- Las invitaciones y notificaciones pueden salir por email o WhatsApp desde Apex.
- El estado de pago, ticket y feedback se consulta junto con el registro.
Acceso
- Ruta principal:
/[orgId]/events/guests - Como se llega:
Events > GuestsoManage event > Guests - Permiso requerido:
can_access_events.
Alcance tecnico
- Frontend:
EventGuestsTable.tsxyEventInviteGuestsDialog.tsx. - Backend:
event-registrations,event-feedback. - Integraciones externas: email y WhatsApp para invitaciones y notificaciones.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar roster | guest-roster.md | Busca, filtra y navega asistentes. |
| Cambiar estado | guest-status.md | Aprueba, rechaza, mueve a espera o cancela. |
| Añadir invitado | add-guest.md | Registra manualmente una persona. |
| Invitar asistentes | invite-guests.md | Crea invitaciones y las notifica. |
| Exportar roster | export-guests.md | Descarga el listado visible como CSV. |
| Gestionar asistencia | guest-check-in.md | Marca o revierte el check-in desde la tabla. |
| Acceder al contacto | guest-crm-contact.md | Abre el contacto CRM vinculado. |
| Consultar feedback | guest-feedback.md | Recoge valoraciones posteriores al evento. |
Relaciones
- Depende de: Gestión de eventos, Contacts y Tickets.
- Usado por: Check-in, People, Insights y Eventos públicos.
Limitaciones y notas
- La exportación contiene únicamente los resultados de la página y filtro actuales.
id: add-guest modulo: guests app: events nombre: Añadir invitado manualmente tipo: accion
Añadir invitado manualmente
Registra una persona desde el roster de un evento.
Que se logra
- Resultado: Añade al roster a una persona recibida por un canal distinto al registro público.
- Caso de uso: Una iglesia inscribe manualmente a un miembro que se anotó por teléfono.
- Se combina con: Contacts y Check-in.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=guests - Acceso en UI:
Manage event > Guests > Add - Componente(s):
EventGuestsTable.tsx
Como funciona
- Se introduce email y datos opcionales.
- Se seleccionan ticket y estado.
- Se guarda y, si aplica, se envía invitación.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Sí | Identifica al invitado. | ||
| Ticket y estado | selección | No | Puede quedar aprobado, pendiente o en espera. |
Reglas y validaciones
- Al marcar
Send invite, el estado es invitado.
Backend
- Servicios:
event-registrations(create). - Efectos: crea o vincula el contacto y notifica salvo exclusión.
Relaciones
- Requiere: Guests y Contacts.
Notas
- Se pueden añadir notas internas.
id: export-guests modulo: guests app: events nombre: Exportar roster tipo: accion
Exportar roster
Descarga los invitados visibles en formato CSV.
Que se logra
- Resultado: Obtiene una lista utilizable de los asistentes que cumplen el filtro actual.
- Caso de uso: Un equipo de recepción descarga el roster aprobado para preparar acreditaciones.
- Se combina con: Guests y Check-in.
Donde esta
- Ruta:
/[orgId]/events/guests - Acceso en UI:
Guests > Export - Componente(s):
EventGuestsTable.tsx
Como funciona
- Se aplica el filtro necesario.
- Se pulsa
Export.
Backend
- Servicios:
event-registrations(find).
Relaciones
- Requiere: roster.
Notas
- Incluye nombre, contacto, empresa, estado, ticket, pago, registro y check-in de la página actual.
id: guest-check-in modulo: guests app: events nombre: Gestionar asistencia desde invitados tipo: accion
Gestionar asistencia desde invitados
Permite marcar o revertir el ingreso sin abrir el escáner.
Que se logra
- Resultado: Registra desde el roster si una persona llegó al evento.
- Caso de uso: Una universidad marca la llegada de asistentes que no usan QR.
- Se combina con: Check-in e Insights.
Donde esta
- Ruta:
/[orgId]/events/guests - Acceso en UI:
Guests > menú de acciones > Check in - Componente(s):
EventGuestsTable.tsx
Como funciona
- Se abre el menú de un invitado aprobado.
- Se elige
Check inoUndo check-in.
Reglas y validaciones
- El check-in solo se habilita para un invitado aprobado.
Backend
- Servicios:
event-registrations(patch). - Efectos: actualiza contadores y automatizaciones.
Relaciones
- Afecta: Check-in e Insights.
Notas
- Revertir desde el roster omite notificaciones.
id: guest-crm-contact modulo: guests app: events nombre: Acceder al contacto CRM tipo: vista
Acceder al contacto CRM
Abre el perfil de CRM que corresponde al registro.
Que se logra
- Resultado: Conecta la inscripción con el historial comercial o relacional de la persona.
- Caso de uso: Una agencia abre el contacto de un invitado para continuar su seguimiento tras el evento.
- Se combina con: Contacts, Deals y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/events/guests - Acceso en UI:
Guests > menú de acciones > View contact - Componente(s):
EventGuestsTable.tsx
Como funciona
- Se abre el menú de un registro vinculado.
- Se elige
View contact.
Reglas y validaciones
- Solo aparece cuando hay contacto vinculado.
Backend
- Servicios:
event-registrations(find).
Relaciones
- Requiere: Contacts.
Notas
- Los registros públicos buscan o crean el contacto automáticamente.
id: guest-feedback modulo: guests app: events nombre: Consultar feedback de invitados tipo: vista
Consultar feedback de invitados
Reúne valoraciones que los asistentes envían después del evento.
Que se logra
- Resultado: Reúne valoraciones posteriores para evaluar la experiencia del asistente.
- Caso de uso: Una escuela consulta la opinión de quienes participaron en un taller.
- Se combina con: Insights y comunicaciones de feedback.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=insights - Acceso en UI:
Manage event > Insights > Feedback - Componente(s):
EventInsightsPanel
Como funciona
- Se abre la analítica del evento.
- Se revisan promedio, distribución y comentarios.
Backend
- Servicios:
event-feedback,event-insights(find).
Relaciones
- Requiere: feedback público.
Notas
- El feedback se consulta desde
Manage event > Insights > Feedback, no como columna directa del roster.
id: guest-roster modulo: guests app: events nombre: Consultar roster de invitados tipo: vista
Consultar roster de invitados
Muestra asistentes de todos los eventos o de un evento seleccionado.
Que se logra
- Resultado: Da visibilidad sobre las personas inscritas y su situación dentro de cada evento.
- Caso de uso: Un organizador revisa los asistentes aprobados antes de una conferencia.
- Se combina con: Check-in y contactos CRM.
Donde esta
- Ruta:
/[orgId]/events/guests - Acceso en UI:
Events > Guests - Componente(s):
EventGuestsTable.tsx
Como funciona
- Se busca por nombre, email u otro término.
- Se selecciona un estado o
Checked in. - Se cambia de página para ver más resultados.
Reglas y validaciones
- En la vista global se puede abrir el evento del registro.
Backend
- Servicios:
event-registrations(find).
Relaciones
- Requiere: Gestión de eventos.
Notas
- La página de gestión limita el roster al evento actual.
id: guest-status modulo: guests app: events nombre: Cambiar estado de invitado tipo: accion
Cambiar estado de invitado
Permite aprobar, rechazar, esperar o cancelar registros.
Que se logra
- Resultado: Actualiza la decisión operativa de una inscripción y mantiene al asistente informado.
- Caso de uso: Una universidad aprueba solicitudes para una sesión con plazas limitadas.
- Se combina con: Notificaciones de invitados y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/events/guests - Acceso en UI:
Guests > menú de acciones - Componente(s):
EventGuestsTable.tsx
Como funciona
- Se abre el menú del invitado.
- Se selecciona
Approve,Decline,Move to waitlistoCancel.
Reglas y validaciones
- Las acciones disponibles dependen del estado actual.
Backend
- Servicios:
event-registrations(patch). - Efectos: recalcula los totales y puede enviar una notificación de estado.
Relaciones
- Afecta: Check-in e Insights.
Notas
Cancelsolicita confirmación.
id: invite-guests modulo: guests app: events nombre: Invitar asistentes tipo: accion
Invitar asistentes
Crea registros invitados y envía enlaces de registro prellenados.
Que se logra
- Resultado: Crea invitaciones y permite convocar personas a un evento concreto.
- Caso de uso: Un organizador invita clientes estratégicos a una sesión privada.
- Se combina con: Contacts y comunicaciones por email o WhatsApp.
Donde esta
- Ruta:
/[orgId]/events/[eventId]?tab=guests - Acceso en UI:
Manage event > Guests > Invite guests - Componente(s):
EventInviteGuestsDialog.tsx
Como funciona
- Se agregan destinatarios.
- Se envía la invitación.
Backend
- Servicios:
event-registrations(create). - Efectos: envía email de invitación.
Relaciones
- Afecta: registro público.
Notas
- Los destinatarios se procesan individualmente a partir de la lista ingresada; no se muestra un límite de envío en la interfaz.
id: insights app: events nombre: Analítica de eventos estado: shipped permiso: can_access_events
Analítica de eventos
Resume la conversión, asistencia, ingresos y feedback de la organización o de un evento.
Para que sirve
- Un organizador de conferencias mide cuántas visitas terminan en registros y asistencia real.
- Un equipo de formación compara ingresos y desempeño de sus sesiones pagas.
- Una universidad identifica qué fuentes llevan más participantes a actividades institucionales.
Que lo hace diferente
- Une vistas de páginas, registros, pagos, asistencia y feedback del mismo flujo de eventos.
- Usa el check-in y los estados operativos de Apex para medir asistencia real.
- Las fuentes, tickets y valoraciones se analizan sin mover datos a otra herramienta.
Acceso
- Ruta principal:
/[orgId]/events/insights - Como se llega:
Events > InsightsoManage event > Insights - Permiso requerido:
can_access_events.
Alcance tecnico
- Frontend:
EventsInsightsView.tsxyEventInsightsPanel. - Backend:
event-insightsyevent-page-views.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar métricas | event-kpis.md | Ve vistas, registros, aprobación, asistencia e ingresos. |
| Analizar embudo y tendencia | conversion-trends.md | Compara las etapas y su evolución temporal. |
| Desglosar rendimiento | event-performance.md | Consulta eventos, fuentes, tickets y feedback. |
Relaciones
- Depende de: Eventos públicos, Guests, Check-in, Tickets y Feedback.
- Usado por: equipos de operación y marketing.
Limitaciones y notas
- Los periodos predefinidos disponibles son últimos 7, 30 y 90 días.
id: conversion-trends modulo: insights app: events nombre: Analizar embudo y tendencia tipo: vista
Analizar embudo y tendencia
Visualiza la conversión desde la visita hasta el check-in y su evolución diaria.
Que se logra
- Resultado: Explica cómo evolucionan las etapas desde una visita hasta la asistencia.
- Caso de uso: Una universidad detecta que aumentan las visitas pero bajan los registros de una jornada.
- Se combina con: Eventos públicos, Guests y Check-in.
Donde esta
- Ruta:
/[orgId]/events/insights - Acceso en UI:
Events > Insights - Componente(s):
EventInsightsPanel
Como funciona
- Se elige el periodo.
- Se revisa el embudo vistas, registros, aprobados y check-ins.
- Se compara la serie temporal de vistas, registros y asistencia.
Reglas y validaciones
- Las tasas solo aparecen si existe un denominador.
Backend
- Servicios:
event-insights(find).
Relaciones
- Requiere: Eventos públicos y Check-in.
Notas
- El embudo general calcula también conversión de vistas a check-in.
id: event-kpis modulo: insights app: events nombre: Consultar métricas de eventos tipo: vista
Consultar métricas de eventos
Muestra indicadores de demanda, conversión, asistencia, ingresos y feedback.
Que se logra
- Resultado: Hace visible el rendimiento de registros, asistencia, ingresos y feedback.
- Caso de uso: Un organizador compara la respuesta de una conferencia antes y después de su campaña.
- Se combina con: Guests, Check-in y Eventos públicos.
Donde esta
- Ruta:
/[orgId]/events/insights - Acceso en UI:
Events > Insights - Componente(s):
EventsInsightsView.tsx,EventInsightsPanel
Como funciona
- Se selecciona un periodo de 7, 30 o 90 días.
- Se consultan las tarjetas de métricas.
Reglas y validaciones
- Los ingresos pendientes se presentan separados de los cobrados.
Backend
- Servicios:
event-insights(find).
Relaciones
- Requiere: vistas públicas, registros y check-in.
Notas
- La misma vista se puede limitar a un evento desde
Manage event > Insights.
id: event-performance modulo: insights app: events nombre: Desglosar rendimiento de eventos tipo: vista
Desglosar rendimiento de eventos
Explica el rendimiento por evento, fuente, ticket y respuesta de satisfacción.
Que se logra
- Resultado: Compara qué eventos, fuentes, tickets y valoraciones están funcionando mejor.
- Caso de uso: Un equipo de formación identifica el canal que genera más inscripciones pagas.
- Se combina con: Eventos públicos, Tickets y Feedback.
Donde esta
- Ruta:
/[orgId]/events/insights - Acceso en UI:
Events > Insights - Componente(s):
EventInsightsPanel
Como funciona
- Se consulta la tabla de eventos destacados.
- Se revisan fuentes de registros y tipos de ticket.
- Se revisa promedio, distribución y comentarios de feedback.
Backend
- Servicios:
event-insights(find).
Relaciones
- Requiere: Guests, Tickets y Feedback.
Notas
- Los eventos destacados enlazan a su página de gestión.
id: people app: events nombre: Personas estado: shipped permiso: can_access_events
Personas
Ofrece un directorio consolidado de asistentes entre eventos y su relación con el CRM.
Para que sirve
- Un organizador identifica asistentes recurrentes entre conferencias y los abre como contactos del CRM.
- Una universidad segmenta personas que han asistido a distintos eventos para seguimiento académico.
- Una comunidad profesional reconoce quién participa con mayor frecuencia en sus encuentros.
Que lo hace diferente
- Consolida la participación entre eventos sobre contactos CRM, no sobre listas independientes.
- Permite pasar de la actividad de eventos al perfil comercial o relacional de la persona.
- Conserva métricas de asistencia y gasto por persona dentro del contexto de la organización.
Acceso
- Ruta principal:
/[orgId]/events/people - Como se llega:
Events > People - Permiso requerido:
can_access_events.
Alcance tecnico
- Frontend:
EventsPeopleView.tsx. - Backend:
event-peopleyevents. - Integraciones externas: Contacts del CRM.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar directorio | people-directory.md | Consolida personas por contacto o email. |
| Filtrar y ordenar | filter-event-people.md | Acota por evento, búsqueda y métricas. |
| Abrir relación CRM | open-crm-contact.md | Navega al contacto asociado cuando existe. |
Relaciones
- Depende de: Guests, Events y Contacts.
- Usado por: gestión comercial y seguimiento de asistentes.
Limitaciones y notas
- Los importes mostrados se agrupan por moneda disponible; no se convierten entre monedas.
id: filter-event-people modulo: people app: events nombre: Filtrar y ordenar asistentes tipo: vista
Filtrar y ordenar asistentes
Permite acotar el directorio para encontrar y priorizar personas.
Que se logra
- Resultado: Permite localizar perfiles de asistentes relevantes por evento o actividad.
- Caso de uso: Un organizador filtra personas de un congreso para preparar un seguimiento posterior.
- Se combina con: People y Contacts.
Donde esta
- Ruta:
/[orgId]/events/people - Acceso en UI:
Events > People - Componente(s):
EventsPeopleView.tsx
Como funciona
- Se busca por texto o se selecciona un evento.
- Se ordena por último evento, eventos, asistencia, nombre o gasto.
Reglas y validaciones
- Al cambiar filtro u orden se reinicia la paginación.
Backend
- Servicios:
event-people(find),events(find).
Relaciones
- Requiere: directorio de asistentes.
Notas
- La búsqueda se aplica con una breve espera.
id: open-crm-contact modulo: people app: events nombre: Abrir contacto CRM del asistente tipo: vista
Abrir contacto CRM del asistente
Navega desde una persona de Events al perfil CRM asociado.
Que se logra
- Resultado: Abre el registro CRM asociado para continuar la relación fuera del evento.
- Caso de uso: Una agencia consulta los datos de un asistente antes de proponerle una reunión.
- Se combina con: Contacts, Conversations y Deals.
Donde esta
- Ruta:
/[orgId]/events/people - Acceso en UI:
Events > People > fila de persona - Componente(s):
EventsPeopleView.tsx
Como funciona
- Se selecciona una fila que tiene contacto asociado.
- Se abre el perfil en
/[orgId]/contacts/[contactId].
Reglas y validaciones
- Solo es navegable cuando existe una vinculación de contacto.
Backend
- Servicios:
event-people(find).
Relaciones
- Requiere: Contacts.
Notas
- El último evento también puede abrir su gestión.
id: people-directory modulo: people app: events nombre: Consultar directorio de asistentes tipo: vista
Consultar directorio de asistentes
Agrupa la actividad de asistentes a través de eventos.
Que se logra
- Resultado: Consolida la participación de una persona entre distintos eventos.
- Caso de uso: Una universidad identifica a un prospecto que ha asistido a varias actividades.
- Se combina con: Contacts y Guests.
Donde esta
- Ruta:
/[orgId]/events/people - Acceso en UI:
Events > People - Componente(s):
EventsPeopleView.tsx
Como funciona
- Se consultan personas consolidadas.
- Se revisan eventos, asistencias, gasto y último evento.
Reglas y validaciones
- La consolidación usa contacto o email.
Backend
- Servicios:
event-people(find).
Relaciones
- Requiere: Guests y Contacts.
Notas
- Muestra el total de personas y métricas de la página actual.
APP: finance
Finance
Cuentas por cobrar (AR) y cuentas por pagar (AP).
- Etapa: Beta
- Landing:
/{orgId}/finance/estimates
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Estimates | estimates |
shipped | Cotizaciones, conversion a invoice y preview publico. |
| Orders | orders |
beta | Pedidos del catalogo, la IA o manuales con pago, entrega y checkouts abandonados. |
| Invoices | invoices |
shipped | Facturacion AR y historial de cambios. |
| Payments received | payments-received |
shipped | Pagos de clientes y asignacion a facturas. |
| Payment Links | payment-links |
shipped | Checkout publico Stripe / Wompi. |
| Recurring Invoices | recurring-invoices |
beta | Perfiles de facturacion recurrente. |
| Vendors | vendors |
beta | Maestro de proveedores AP. |
| Expenses | expenses |
beta | Gastos directos ya pagados. |
| Recurring Expenses | recurring-expenses |
beta | Gastos periodicos. |
| Bills | bills |
beta | Cuentas por pagar a vendors. |
| Recurring Bills | recurring-bills |
beta | Cuentas por pagar periodicas. |
| Payments Made | payments-made |
beta | Pagos a vendors y allocations. |
| Document templates | document-templates |
shipped | PDF, numbering, messages y page templates. |
| Taxes y currencies | taxes-currencies |
shipped | Impuestos, monedas y FX. |
| Payment gateways | payment-gateways |
shipped | Credenciales Stripe / Wompi. |
Funcionalidades internas
117 funcionalidades documentadas en 15 modulos. Ver la tabla de cada modulo.
id: bills app: finance nombre: Bills estado: beta permiso: can_access_bills
Bills
Registra facturas de proveedores que crean una cuenta por pagar y se cancelan mediante Payments Made.
Para que sirve
- Una distribuidora registra facturas de inventario para conocer lo que debe pagar a cada proveedor.
- Una clínica prioriza facturas vencidas y próximas a vencer desde el resumen de cuentas por pagar.
- Una agencia aplica pagos parciales a una factura de producción y sigue el saldo que queda pendiente.
- Un coworking convierte la factura mensual de internet en una recurrencia para crear los próximos bills.
Que lo hace diferente
- Conecta proveedores, cuentas por pagar y Payments Made dentro de la misma plataforma donde viven el CRM y las operaciones.
- Los pagos asignados actualizan automáticamente saldo y estado de cada bill, incluidos pagos parciales y completos.
- Comparte monedas, impuestos, partidas, reglas de numeración y plantillas documentales con los documentos de venta de Finance.
- El resumen operativo identifica total pendiente, vencimientos del día, próximos 30 días y documentos atrasados.
- No es contabilidad de partida doble; tampoco incluye órdenes de compra, créditos de proveedor ni adjuntos de facturas.
Acceso
- Ruta principal:
/[orgId]/finance/bills - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Bills - Permiso requerido:
can_access_billsy permisos del módulo para ver, crear, editar o eliminar.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición;
BillsView,BillEditForm,BillDetailyBillItemsTable. - Backend:
bills,bill-itemsy las asignacionesbill-payments. - Superficies publicas: ninguna.
- Integraciones externas: ninguna.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar cuentas por pagar | bill-list.md | Lista bills y resumen de vencimientos. |
| Crear y editar bills | bill-form.md | Registra la factura y sus condiciones. |
| Gestionar partidas | bill-items.md | Configura conceptos, descuentos e impuestos. |
| Abrir, pagar parcialmente, anular o eliminar | bill-lifecycle.md | Controla el ciclo del bill. |
| Registrar un pago | record-bill-payment.md | Inicia Payments Made con el bill seleccionado. |
| Numerar documentos | bill-numbering.md | Finaliza el número cuando se abre. |
| Convertir en bill recurrente | make-recurring-bill.md | Crea un perfil periódico desde el bill. |
Relaciones
- Depende de: Vendors, Currencies, Payments Made y Document Templates.
- Usado por: Recurring Bills genera bills y Payments Made actualiza su saldo.
- La configuración de numeración AP vive en
settings/document-settings; no se documenta aquí.
Limitaciones y notas
- Un bill requiere proveedor, fecha de documento y fecha de vencimiento.
- Solo puede anularse si no tiene monto pagado.
id: bill-form modulo: bills app: finance nombre: Crear y editar bills tipo: accion
Crear y editar bills
Registra una factura de proveedor como borrador o cuenta por pagar abierta.
Que se logra
- Resultado: una factura de proveedor se convierte en una cuenta por pagar con importe, vencimiento y saldo controlables.
- Caso de uso: una clínica registra la factura de un proveedor médico a 30 días para planificar su pago.
- Se combina con: Vendors, partidas de bill, Payments Made, Currencies y Document Templates.
Donde esta
- Ruta:
/[orgId]/finance/bills/newy/[orgId]/finance/bills/[id]/edit - Acceso en UI:
Bills > New Billo detalle >Edit - Componente(s):
BillEditForm.tsx
Como funciona
- Selecciona proveedor y responsable.
- Define fecha del bill, vencimiento y términos de pago.
- Elige moneda, regla de numeración o plantilla cuando aplique.
- Añade partidas, notas y términos.
- Usa
Save as DraftoSave as Open.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Proveedor | Selección | Sí | Identifica a quién se debe. |
| Fecha y vencimiento | Fecha | Sí | Los términos pueden completar el vencimiento. |
| Moneda | Selección | Sí | Determina los importes. |
| Referencia, notas y términos | Texto/editor | No | Contexto de la factura. |
Reglas y validaciones
- Se requiere al menos una partida con nombre.
- Los términos rápidos incluyen
Due on Receipty opciones Net.
Backend
- Servicios:
bills(create, patch).
Relaciones
- Requiere: Vendors y Currencies.
- Dispara / afecta: un bill abierto empieza con saldo por pagar.
id: bill-items modulo: bills app: finance nombre: Gestionar partidas de bill tipo: accion
Gestionar partidas de bill
Define los conceptos e importes de una factura de proveedor.
Que se logra
- Resultado: el saldo inicial del bill se calcula a partir de sus conceptos, descuentos e impuestos.
- Caso de uso: un hotel detalla habitaciones, servicios y tasas de una factura de mantenimiento para revisar el total que debe.
- Se combina con: creación y edición de bills y Payments Made.
Donde esta
- Ruta:
/[orgId]/finance/bills/newy/[orgId]/finance/bills/[id]/edit - Acceso en UI: formulario > tabla de partidas
- Componente(s):
BillItemsTable.tsx
Como funciona
- Añade, cambia o elimina una partida.
- Indica concepto, cantidad, unidad y tarifa.
- Aplica descuentos e impuestos si aplican.
- Guarda para recalcular el bill.
Reglas y validaciones
- Cada partida calcula su importe.
- Los cambios financieros recalculan los totales de la cabecera.
Backend
- Servicios:
bill-items(find, create, patch, remove).
Relaciones
- Requiere: un bill.
- Dispara / afecta: total, saldo inicial y pago disponible.
id: bill-lifecycle modulo: bills app: finance nombre: Gestionar estado de bills tipo: accion
Gestionar estado de bills
Controla el paso del borrador a la deuda abierta y el cierre por pagos.
Que se logra
- Resultado: la deuda avanza de borrador a abierta y luego refleja automáticamente pagos parciales o completos.
- Caso de uso: una empresa de logística abre una factura de combustible y ve su estado actualizarse a medida que aplica pagos.
- Se combina con: Payments Made y numeración de bills.
Donde esta
- Ruta:
/[orgId]/finance/bills/[id] - Acceso en UI: detalle >
Mark as Open,VoidyDelete - Componente(s):
BillDetail.tsx
Como funciona
- Un
Draftse abre conMark as Open. - Las asignaciones de pagos actualizan automáticamente a
Partially PaidoPaid. - Un bill abierto sin pagos puede pasar a
Void. Deletesolo está disponible enDraft.
Reglas y validaciones
- El ciclo es
Draft→Open→Partially Paid→Paid, oVoid. - No se puede anular un bill con monto pagado.
- Los saldos no se modifican manualmente en el flujo normal.
Backend
- Servicios:
bills(patch, remove),bill-payments(create, patch, remove).
Relaciones
- Requiere: permisos de Bills.
- Dispara / afecta: Payments Made actualiza monto pagado, saldo y estado.
id: bill-list modulo: bills app: finance nombre: Consultar cuentas por pagar tipo: vista
Consultar cuentas por pagar
Lista las facturas de proveedor y resume el saldo pendiente y sus vencimientos.
Que se logra
- Resultado: el equipo ve qué facturas de proveedor siguen por pagar, cuáles vencen pronto y cuáles están atrasadas.
- Caso de uso: una distribuidora prioriza los bills vencidos de sus proveedores para organizar los pagos de la semana.
- Se combina con: detalle de bill y Payments Made.
Donde esta
- Ruta:
/[orgId]/finance/bills - Acceso en UI:
Purchases > Bills - Componente(s):
BillsView.tsx
Como funciona
- Revisa
Total Outstanding,Due Today,Due Within 30 DaysyOverdue Bills. - Busca, filtra por estado, ordena o elige columnas.
- Abre un bill desde la tabla paginada.
Reglas y validaciones
- Un bill abierto o parcialmente pagado con vencimiento anterior muestra
Overdue by N days.
Backend
- Servicios:
bills(find, get). - Efectos: el resumen calcula saldos de bills abiertos y parcialmente pagados.
Relaciones
- Requiere: acceso a Bills.
- Dispara / afecta: enlaza con el detalle y Payments Made.
id: bill-numbering modulo: bills app: finance nombre: Numerar documentos de bill tipo: configuracion
Numerar documentos de bill
Finaliza el número de una factura de proveedor al abrirla.
Que se logra
- Resultado: los bills abiertos reciben una referencia final alineada con las reglas documentales de Finance.
- Caso de uso: una empresa de servicios abre una factura recibida y obtiene el número con el que la controlará en su flujo de pagos.
- Se combina con: ciclo de vida de bills y Document Templates.
Donde esta
- Ruta:
/[orgId]/finance/bills/newy/[orgId]/finance/bills/[id] - Acceso en UI: formulario > regla de numeración; detalle >
Mark as Open - Componente(s):
BillEditForm.tsx,BillDetail.tsx
Como funciona
- Un borrador conserva un número pendiente.
- Guarda sus partidas.
- Al cambiar a
Open, se asigna el número final.
Reglas y validaciones
- El número pendiente es de solo lectura.
- Las reglas y plantillas compartidas se gestionan en Document Templates.
Backend
- Servicios:
bills(create, patch).
Relaciones
- Requiere: configuración de
billensettings/document-settingssi usa una regla. - Dispara / afecta: consistencia de numeración AP.
id: make-recurring-bill modulo: bills app: finance nombre: Convertir un bill en recurrente tipo: accion
Convertir un bill en recurrente
Crea un perfil de bill recurrente a partir de un bill y sus partidas.
Que se logra
- Resultado: un bill existente aporta sus datos y partidas a un perfil para repetir futuras cuentas por pagar.
- Caso de uso: un coworking reutiliza el bill mensual de internet para automatizar la creación de sus próximas obligaciones.
- Se combina con: Recurring Bills y partidas de bill.
Donde esta
- Ruta:
/[orgId]/finance/bills/[id] - Acceso en UI: detalle de bill >
Make Recurring - Componente(s):
BillDetail.tsx,MakeRecurringBillDialog.tsx
Como funciona
- Abre el bill de origen.
- Selecciona
Make Recurring. - Completa la programación del perfil.
- Guarda y gestiona el perfil desde Recurring Bills.
Reglas y validaciones
- Se copian proveedor, moneda y partidas del bill.
Backend
- Servicios:
recurring-bills,recurring-bill-items(create).
Relaciones
- Requiere: un bill existente.
- Dispara / afecta: crea un perfil de Recurring Bills.
id: record-bill-payment modulo: bills app: finance nombre: Registrar pago de un bill tipo: accion
Registrar pago de un bill
Abre el registro de pago con el proveedor y bill preseleccionados.
Que se logra
- Resultado: se inicia un pago con el proveedor y el saldo del bill preparados, reduciendo errores de selección.
- Caso de uso: una agencia paga una factura de producción desde su detalle sin volver a buscar el proveedor ni el documento.
- Se combina con: Payments Made y asignación de pagos a bills.
Donde esta
- Ruta:
/[orgId]/finance/bills/[id] - Acceso en UI: detalle >
Record Payment - Componente(s):
BillDetail.tsx,RecordVendorPaymentForm.tsx
Como funciona
- Abre un bill
OpenoPartially Paid. - Selecciona
Record Payment. - El formulario de Payments Made precarga el proveedor y el saldo del bill.
- Guarda el pago y la asignación.
Reglas y validaciones
- La acción no se muestra para bills sin saldo pagable.
Backend
- Servicios:
vendor-paymentsybill-payments(create).
Relaciones
- Requiere: un bill abierto o parcialmente pagado.
- Dispara / afecta: Payments Made y estado/saldo del bill.
id: document-templates app: finance nombre: Plantillas de documentos estado: shipped permiso: can_manage_document_templates
Plantillas de documentos
Configura el diseño que usan estimates, invoices, expenses, bills y recibos al previsualizar o exportar PDF.
Para que sirve
- Una consultora estandariza cotizaciones, facturas y recibos con su identidad visual y condiciones comerciales.
- Una inmobiliaria agrega una página de términos en Markdown a sus propuestas sin editar cada documento desde cero.
- Una empresa de obra entrega un calendario de pagos calculado en una tabla inteligente dentro de una cotización o factura.
- Un negocio multi-moneda presenta importes y variables documentales con el formato de la moneda elegida.
Que lo hace diferente
- Una misma plantilla se usa para previsualización, PDF y documentos públicos, reduciendo diferencias entre canales de entrega.
- El constructor ofrece diseño visual y un flujo asistido por IA/HTML, además de plantillas por tipo documental.
- Las páginas adicionales son una biblioteca reutilizable de Markdown y tablas inteligentes con fórmulas, no simples adjuntos.
- Las cotizaciones y facturas incorporan campos personalizados del CRM en el diseño y en el PDF.
- La numeración, mensajes predefinidos, condiciones y datos bancarios se conectan con el mismo flujo de documentos financieros.
Acceso
- Ruta principal:
/[orgId]/settings/document-templates - Como se llega:
Avatar menu > Settings > Billing & Finance > Document Templates - Permiso requerido:
can_manage_document_templates
Alcance tecnico
- Frontend: rutas de Settings; bibliotecas y
document-template-builder - Backend:
document-templates,document-setting,document-predefined-messages,document-page-templates,document-template-preview,pdf-generator - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Añadir página Markdown | additional-pages-markdown.md | Crea páginas adicionales con texto y variables. |
| Añadir tabla inteligente | additional-pages-smart-table.md | Crea páginas de hoja con fórmulas y calendario. |
| Crear plantilla de documento | create-document-template.md | Añade una plantilla por tipo documental. |
| Gestionar vencimiento de documentos | document-expiry.md | Cron de expiración. |
| Gestionar mensajes predefinidos | document-messages.md | Notas, términos y datos bancarios. |
| Configurar numeración de documentos | document-numbering.md | Prefijos y secuencias. |
| Gestionar plantillas de páginas adicionales | document-page-templates.md | Biblioteca Markdown u hoja. |
| Generar PDF de documento | document-pdf-generation.md | Generación servidor con URL firmada. |
| Usar constructor de plantillas | document-template-builder.md | Diseño visual o AI/HTML. |
| Definir plantillas predeterminadas | document-template-defaults.md | Selección inicial por tipo. |
| Previsualizar documento | document-template-preview.md | Render de diseño y datos. |
| Editar plantilla de documento | edit-document-template.md | Renombra, clona o elimina una plantilla. |
Relaciones
- Depende de: Estimates, Invoices, Payments received y Currencies.
- Usado por: módulos y documentos del flujo financiero.
Limitaciones y notas
- Los permisos granulares pueden restringir acciones según el rol de la organización.
id: additional-pages-markdown modulo: document-templates app: finance nombre: Añadir página Markdown tipo: configuracion
Añadir página Markdown
Añade una página adicional escrita en Markdown a un estimate o invoice.
Que se logra
- Resultado: el documento incorpora textos comerciales reutilizables y variables del propio documento.
- Caso de uso: una consultora adjunta términos de servicio a cada propuesta.
- Se combina con: Plantillas de páginas adicionales, PDF y documentos públicos.
Donde esta
- Ruta:
/[orgId]/settings/document-page-templates - Acceso en UI:
Page Templates > Add > Type > Markdown - Componente(s):
DocumentPageTemplatesList.tsx,DocumentMarkdownEditor.tsx
Como funciona
- Crea una plantilla Markdown y define su alcance.
- Escribe el contenido y guarda; después se aplica en los documentos compatibles.
Reglas y validaciones
- El render de preview y PDF sustituye variables y coloca las páginas al final del documento.
- Servicios:
document-page-templates(create, patch) ydocument-template-preview(create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: additional-pages-smart-table modulo: document-templates app: finance nombre: Añadir tabla inteligente tipo: configuracion
Añadir tabla inteligente
Añade una página de hoja de cálculo con fórmulas o generador de calendario.
Que se logra
- Resultado: el documento presenta cálculos o un calendario dentro de una página adicional.
- Caso de uso: una constructora entrega la programación de cuotas de una obra junto a la factura.
- Se combina con: Plantillas de páginas adicionales, PDF y Cotizaciones.
Donde esta
- Ruta:
/[orgId]/settings/document-page-templates - Acceso en UI:
Page Templates > Add > Type > Smart table - Componente(s):
DocumentPageTemplatesList.tsx,SimpleSpreadsheetEditor.tsx
Como funciona
- Crea una plantilla y selecciona
Smart table. - Diseña las celdas, fórmulas o calendario en la hoja y pulsa
Save.
Reglas y validaciones
- La página tiene máximo 120 filas, 20 columnas y 10 páginas por documento.
- Servicios:
document-page-templates(create, patch) ydocument-template-preview(create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: create-document-template modulo: document-templates app: finance nombre: Crear plantilla de documento tipo: configuracion
Crear plantilla de documento
Crea una plantilla para un tipo de documento antes de editar su diseño.
Que se logra
- Resultado: la organización establece una base de diseño reutilizable para sus documentos financieros.
- Caso de uso: una empresa crea una plantilla de factura con su identidad antes de emitir el primer cobro.
- Se combina con: Constructor de plantillas, Numeración de documentos y Previsualizar documento.
Donde esta
- Ruta:
/[orgId]/settings/document-templates - Acceso en UI:
Settings > Billing & Finance > Document Templates > Add Template - Componente(s):
DocumentTemplatesList.tsx,AddTemplateDialog.tsx
Como funciona
- Selecciona el tipo: estimate, invoice, expense, bill, received payment o vendor payment.
- Indica el nombre y crea la plantilla; luego usa el editor visual o AI.
Reglas y validaciones
- Free limita templates de estimate e invoice a una por tipo; planes superiores no tienen ese límite en la UI.
- Servicios:
document-templates(find, create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-expiry modulo: document-templates app: finance nombre: Gestionar vencimiento de documentos tipo: automatizacion
Gestionar vencimiento de documentos
El cron revisa documentos con vencimiento y aplica la transición de expiración correspondiente.
Que se logra
- Resultado: los documentos vencidos dejan de mostrarse como vigentes sin una revisión manual diaria.
- Caso de uso: una inmobiliaria evita que una propuesta con vigencia pasada siga disponible para aceptación.
- Se combina con: Estado de cotización y Estado de factura.
Donde esta
- Ruta: no tiene pantalla de configuración propia en las rutas asignadas.
- Acceso en UI: la fecha se configura al crear o editar el documento.
Como funciona
- Un documento guarda su fecha de expiración.
- El cron ejecuta la revisión y actualiza los documentos vencidos.
Reglas y validaciones
- Servicios:
cron-expire-documents(create). - Las facturas enviadas con saldo pendiente pasan a
overduedespués de su vencimiento; las cotizaciones enviadas pasan aexpireddespués de su fecha de expiración, según la zona horaria de la organización.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-messages modulo: document-templates app: finance nombre: Gestionar mensajes predefinidos tipo: configuracion
Gestionar mensajes predefinidos
Guarda textos reutilizables de notas, términos y datos bancarios para documentos.
Que se logra
- Resultado: los documentos se completan con condiciones y datos de cobro homogéneos.
- Caso de uso: un despacho inserta sus términos de pago y datos bancarios en cada factura.
- Se combina con: Cotizaciones, Facturas y Plantillas de documentos.
Donde esta
- Ruta:
/[orgId]/settings/document-messages - Acceso en UI:
Settings > Billing & Finance > Document Messages > Notes,Terms & ConditionsoBank Details - Componente(s):
DocumentMessagesList.tsx,AddEditMessageDialog.tsx
Como funciona
- Abre una pestaña y pulsa
Add Note,Add Terms & ConditionsoAdd Bank Details. - Escribe nombre y contenido; edita con lápiz o elimina con papelera.
Reglas y validaciones
- Se muestran primero los mensajes
Default; se pueden aplicar desde formularios de invoice y recurring invoice. - Servicios:
document-predefined-messages(find, create, patch, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-numbering modulo: document-templates app: finance nombre: Configurar numeración de documentos tipo: configuracion
Configurar numeración de documentos
Define prefijos, número siguiente y relleno de numeración por tipo documental.
Que se logra
- Resultado: cada documento emitido recibe una referencia consecutiva conforme a la regla de la organización.
- Caso de uso: un proveedor separa series de cotizaciones, facturas y recibos de pago.
- Se combina con: Cotizaciones, Facturas y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/settings/document-settings - Acceso en UI:
Settings > Billing & Finance > Document Numbering > Add numbering scheme - Componente(s):
DocumentSettingsList.tsx,AddDocumentSettingDialog.tsx
Como funciona
- Filtra por tipo o pulsa
Add numbering scheme. - Define nombre, tipo, prefijo, siguiente número, padding, descripción y
Default.
Reglas y validaciones
- La tabla muestra una vista previa del próximo número. Free permite una regla estimate/invoice; Basic dos; otros planes sin límite.
- Servicios:
document-setting(find, create, patch).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-page-templates modulo: document-templates app: finance nombre: Gestionar plantillas de páginas adicionales tipo: configuracion
Gestionar plantillas de páginas adicionales
Administra páginas reutilizables que se agregan a estimates e invoices.
Que se logra
- Resultado: los equipos reutilizan anexos consistentes en múltiples propuestas y facturas.
- Caso de uso: una empresa de obra mantiene una página estándar de alcance para sus documentos.
- Se combina con: Páginas Markdown, Tablas inteligentes, Cotizaciones y Facturas.
Donde esta
- Ruta:
/[orgId]/settings/document-page-templates - Acceso en UI:
Settings > Billing & Finance > Page Templates > Add - Componente(s):
DocumentPageTemplatesList.tsx
Como funciona
- Pulsa
Add, escribeNamey elige tipo y aplicación. - Usa el editor Markdown o la hoja según el tipo y pulsa
Save.
Reglas y validaciones
Applies toadmite estimate, invoice o ambos;Defaultmarca la plantilla por defecto.- Servicios:
document-page-templates(find, create, patch, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-pdf-generation modulo: document-templates app: finance nombre: Generar PDF de documento tipo: accion
Generar PDF de documento
Genera un PDF servidor para estimates, invoices y recibos usando la plantilla seleccionada.
Que se logra
- Resultado: se obtiene una versión descargable y compartible que conserva el diseño del documento.
- Caso de uso: una empresa B2B entrega una factura PDF al área de compras de su cliente.
- Se combina con: Plantillas de documentos, Cotizaciones y Facturas.
Donde esta
- Ruta:
/[orgId]/document-template-builder/[id]y el detalle de cada documento. - Acceso en UI:
Template Previewo controles PDF del documento.
Como funciona
- Selecciona una plantilla en el documento o abre el preview.
- Solicita el PDF desde la interfaz correspondiente.
Reglas y validaciones
- Incluye variables renderizadas, artículos, imágenes de producto y páginas adicionales.
- Servicio:
pdf-generator(create); devuelve una URL firmada del archivo.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-template-builder modulo: document-templates app: finance nombre: Usar constructor de plantillas tipo: configuracion
Usar constructor de plantillas
Edita dos diseños independientes de una plantilla: visual Builder y HTML asistido por AI.
Que se logra
- Resultado: el negocio adapta la presentación de sus documentos sin cambiar cada cotización o factura.
- Caso de uso: una agencia crea una propuesta visual desde
Buildery ajusta una variante conAI. - Se combina con: Previsualizar documento, PDF y Campos personalizados.
Donde esta
- Ruta:
/[orgId]/document-template-builder/[id] - Acceso en UI:
Document Templates > icono de lápiz - Componente(s):
EasyTemplateBuilder.tsx,AITemplateEditorPanel.tsx,TemplatePreview.tsx
Como funciona
- Abre
AIoBuilder; la pestaña inicial es el diseño que el documento usa. - En
Builder, ajusta acordeones; enAI, conversa o abreEdit HTML. - Revisa
Template Previewy pulsaSave BuilderoSave AI design.
Reglas y validaciones
- Guardar la pestaña que no está activa pide confirmación para cambiar el diseño usado.
- La vista previa se actualiza con espera de 800 ms.
- Servicios:
document-templates(get, patch) ydocument-template-preview(create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-template-defaults modulo: document-templates app: finance nombre: Definir plantillas predeterminadas tipo: configuracion
Definir plantillas predeterminadas
Marca la plantilla que se propone primero para un tipo de documento.
Que se logra
- Resultado: los documentos nuevos parten del diseño aprobado por la organización.
- Caso de uso: una empresa establece su plantilla fiscal como opción inicial para todas las facturas.
- Se combina con: Crear plantilla de documento y Cotizaciones.
Donde esta
- Ruta:
/[orgId]/settings/document-templates - Acceso en UI:
Document Templates > icono de herramienta > Set as default - Componente(s):
DocumentTemplatesList.tsx,EditTemplateDialog.tsx
Como funciona
- Abre la configuración de una plantilla.
- Marca
Set as defaulty guarda.
Reglas y validaciones
- La tabla identifica la selección con estrella e insignia
Default. - Servicios:
document-templates(patch).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-template-preview modulo: document-templates app: finance nombre: Previsualizar documento tipo: vista
Previsualizar documento
Renderiza el diseño guardado o los cambios sin guardar con datos de muestra, de un documento o de un perfil recurrente.
Que se logra
- Resultado: el equipo valida el contenido y presentación antes de compartir o exportar un documento.
- Caso de uso: una firma revisa que su nueva plantilla muestre correctamente los datos de una factura.
- Se combina con: Constructor de plantillas, PDF y Páginas adicionales.
Donde esta
- Ruta:
/[orgId]/document-template-builder/[id] - Acceso en UI:
Document Template Builder > Template Preview - Componente(s):
TemplatePreview.tsx
Como funciona
- Edita
BuilderoAI. - Espera la actualización de la vista derecha o solicita guardar desde ella.
Reglas y validaciones
- Sustituye datos de organización, cliente, propietario, líneas, importes, moneda, mensajes y páginas adicionales.
- Servicios:
document-template-preview(create) ydocument-templates(get).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: edit-document-template modulo: document-templates app: finance nombre: Editar plantilla de documento tipo: configuracion
Editar plantilla de documento
Gestiona el nombre y ciclo de vida de una plantilla desde su listado.
Que se logra
- Resultado: la biblioteca de diseños se mantiene actualizada sin afectar las operaciones ajenas.
- Caso de uso: un despacho archiva una plantilla antigua y conserva la vigente para nuevos documentos.
- Se combina con: Plantillas predeterminadas y Constructor de plantillas.
Donde esta
- Ruta:
/[orgId]/settings/document-templates - Acceso en UI:
Document Templates > icono de herramienta,Clone Templateo papelera - Componente(s):
DocumentTemplatesList.tsx,EditTemplateDialog.tsx
Como funciona
- Filtra por tipo si es necesario.
- Usa herramienta para editar configuración, copia para clonar o papelera para borrar.
Reglas y validaciones
- La papelera está deshabilitada en la plantilla
Default. - Servicios:
document-templates(find, patch, create, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: estimates app: finance nombre: Cotizaciones estado: shipped permiso: can_access_estimates
Cotizaciones
Las cotizaciones reúnen el cliente, artículos, condiciones y una posible solicitud de cobro antes de emitir una factura. El mismo flujo se abre desde CRM y desde Finance.
Para que sirve
- Una agencia de marketing prepara una propuesta con servicios, impuestos y condiciones para convertir una oportunidad del CRM en un documento comercial compartible.
- Una clínica envía una cotización con un anticipo para que el paciente pueda pagar antes de confirmar el tratamiento.
- Una inmobiliaria registra la aceptación o rechazo de una propuesta y conserva el contexto del contacto, empresa y deal.
- Un negocio de servicios convierte una cotización aceptada en una factura sin reconstruir artículos ni datos comerciales.
Que lo hace diferente
- La cotización nace conectada al contacto, compañía y deal del CRM, en lugar de quedar como un documento aislado.
- Se puede compartir por correo y desde el contexto de la conversación, con una vista pública donde el cliente decide.
- El asistente IA dispone de una herramienta interna para crear cotizaciones cuando tiene los datos comerciales necesarios.
- Registra aperturas, tiempo visible y descargas de la vista pública, excluyendo las consultas internas del equipo.
- Puede incluir páginas Markdown o tablas inteligentes y usar plantillas que también determinan la previsualización y el PDF.
- El importe a cobrar puede sincronizar un Payment Link de Stripe o Wompi sin convertir la cotización en una factura.
Acceso
- Ruta principal:
/[orgId]/estimatesy/[orgId]/finance/estimates - Como se llega: sidebar CRM >
Estimateso selector de aplicación >Finance>Sales>Estimates - Permiso requerido:
can_access_estimates
Alcance tecnico
- Frontend: rutas CRM/Finance de listado, creación, detalle y edición;
EstimatesView,EstimateDetail,EstimateEditFormyDocumentPreview - Backend:
estimates,estimate-items,estimate-duplicate,estimate-convert-to-invoice,estimates-change-historyysales-document-engagement-events - Superficies publicas:
/e/[path] - Integraciones externas: PDF, correo, S3, Stripe y Wompi mediante Payment Links
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear cotización | create-estimate.md | Captura cliente, moneda, numeración, fechas y artículos. |
| Editar cotización | edit-estimate.md | Modifica el documento y sus adjuntos. |
| Gestionar artículos | estimate-line-items.md | Añade productos, precios, impuestos y recurrencia. |
| Calcular importes | estimate-totals.md | Compone subtotal, descuento, impuestos y ajustes. |
| Configurar cobro esperado | expected-collection.md | Sincroniza un enlace de pago desde el importe a cobrar. |
| Cambiar estado | estimate-status.md | Controla la entrega, aceptación, rechazo y anulación. |
| Convertir en factura | convert-to-invoice.md | Genera una factura borrador con los artículos de la cotización. |
| Duplicar cotización | duplicate-estimate.md | Crea una copia con nueva numeración. |
| Enviar por correo | send-estimate-email.md | Envía el documento y su enlace público a destinatarios elegidos. |
| Compartir cotización pública | public-estimate.md | Expone la vista para cliente en /e/[path]. |
| Aceptar o rechazar públicamente | public-estimate-decision.md | Registra la decisión del cliente desde la vista pública. |
| Descargar PDF | estimate-pdf.md | Genera el PDF usando la plantilla seleccionada. |
| Consultar actividad del cliente | estimate-engagement.md | Muestra aperturas y descargas de la vista pública. |
| Añadir páginas adicionales | estimate-additional-pages.md | Agrega Markdown o tablas inteligentes al documento. |
| Usar campos personalizados | estimate-custom-fields.md | Completa campos compartidos de Sales document. |
Relaciones
- Depende de: Contactos, Compañías, Deals, Productos, Currencies y Document Templates.
- Usado por: Invoices, Payment Links, Payments received y Automatizaciones.
Limitaciones y notas
- Una cotización convertida se bloquea en
Invoiced; no se puede cambiar nuevamente su estado. Amount to collectcrea o actualiza un Payment Link abierto; no registra por sí solo un pago.
id: convert-to-invoice modulo: estimates app: finance nombre: Convertir cotización en factura tipo: accion
Convertir cotización en factura
Genera una factura borrador desde la cotización y conserva el vínculo entre ambos documentos.
Que se logra
- Resultado: una propuesta aprobada pasa a cobro formal sin volver a capturar sus datos comerciales.
- Caso de uso: una consultora factura un proyecto aceptado conservando cliente, artículos y condiciones.
- Se combina con: Facturas, Pagos recibidos y Payment Links.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: barra de documento >
Convert
Como funciona
- Pulsa
Converten la cotización. - Selecciona
Invoice Numberingy, si hay plantillas,Invoice Template. - Confirma con
Convert to Invoice; se abre la factura creada.
Reglas y validaciones
- Exige una regla de numeración de Invoice; el botón de confirmación queda deshabilitado sin ella.
- Copia artículos, relaciones, páginas adicionales y campos personalizados de Sales document.
- La cotización pasa a
invoiced, guarda la factura destino y no admite otra conversión.
Backend
- Servicios:
estimate-convert-to-invoice(create),invoices(create),invoice-items(create). - Efectos: la nueva factura inicia en
draft; los pagos de la cotización pueden sugerirla para asignación.
Relaciones
- Requiere: cotización no anulada y regla de numeración de Invoice.
- Dispara / afecta: factura destino y bloqueo
Invoicedde la cotización.
id: create-estimate modulo: estimates app: finance nombre: Crear cotización tipo: accion
Crear cotización
Guarda una cotización inicialmente en draft y asigna su número desde la regla seleccionada.
Que se logra
- Resultado: se crea una propuesta comercial identificable y vinculada al cliente para continuar la venta.
- Caso de uso: una agencia convierte un deal de servicios en una cotización lista para completar y compartir.
- Se combina con: Contactos, Deals, Document Templates y Payment Links.
Donde esta
- Ruta:
/[orgId]/estimates/newo/[orgId]/finance/estimates/new - Acceso en UI:
Estimates > New Estimate - Componente(s):
EstimateEditForm.tsx
Como funciona
- Selecciona el
Ownery un contacto enContact, Company & Deal; compañía y deal son opcionales. - Elige
Currency,Numbering Rule, fechas y, si corresponde,Document Template. - Añade artículos en
Estimate line items, revisa los totales y pulsaCreate Estimate. - El sistema abre el detalle de la nueva cotización.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Contact | selector | Sí | Puede acompañarse de Company y Deal. |
| Currency | lista | Sí | Solo muestra monedas habilitadas en la organización. |
| Numbering Rule | lista | Sí | Se autoselecciona la predeterminada o la primera disponible. |
| Estimate Date | fecha | Sí | Inicia con la fecha actual. |
| Expiry Date | fecha | No | Quick fill ofrece fin de semana/mes/trimestre y 1–90 días. |
| Document Template | lista | No | En nuevas cotizaciones se preselecciona la predeterminada. |
Reglas y validaciones
Create Estimatequeda deshabilitado sinNumbering Ruleo mientras carga el catálogo de campos personalizados.- Al pulsar el botón valida contacto, moneda y campos obligatorios de Sales document; los faltantes muestran un aviso y desplazan a esa sección.
- Si no hay reglas de Estimate, el formulario enlaza a
Document Numbering.
Backend
- Servicios:
estimates(create),estimate-items(create). - Efectos: genera número, ruta pública y versión; calcula totales y registra el primer historial de cambios.
Relaciones
- Requiere: Contactos, Currencies y Document Numbering.
id: duplicate-estimate modulo: estimates app: finance nombre: Duplicar cotización tipo: accion
Duplicar cotización
Crea otra cotización editable a partir de una existente sin reutilizar su identidad comercial.
Que se logra
- Resultado: se reutiliza la estructura de una propuesta sin alterar el documento original ni su seguimiento.
- Caso de uso: una empresa de eventos adapta una cotización previa para una nueva fecha y cliente.
- Se combina con: Artículos de cotización y Document Templates.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: menú
More>Duplicate
Como funciona
- Abre el menú
More. - Pulsa
Duplicate. - Espera la confirmación; se abre el detalle de la nueva cotización.
Reglas y validaciones
- La copia conserva los artículos y los valores de Sales document.
- Genera su propia numeración, ruta pública y versión; no reemplaza la cotización original.
Backend
- Servicios:
estimate-duplicate(create),estimatesyestimate-items(create internos).
Relaciones
- Requiere: una cotización existente.
- Dispara / afecta: una nueva cotización y sus líneas copiadas.
id: edit-estimate modulo: estimates app: finance nombre: Editar cotización tipo: accion
Editar cotización
Modifica una cotización existente, incluidos sus artículos, relaciones, mensajes, archivos y configuración de cobro.
Que se logra
- Resultado: la propuesta se mantiene alineada con el acuerdo comercial antes de enviarla o cobrarla.
- Caso de uso: una clínica ajusta servicios y anticipo tras una consulta sin perder el vínculo con el paciente.
- Se combina con: Artículos de cotización, Payment Links y Document Templates.
Donde esta
- Ruta:
/[orgId]/estimates/[id]/edito/[orgId]/finance/estimates/[id]/edit - Acceso en UI: vista de cotización >
Edit - Componente(s):
EstimateEditForm.tsx
Como funciona
- Pulsa
Edit, actualiza los campos necesarios y ajusta los artículos. - Usa
Document filespara añadir o administrar adjuntos de la cotización ya guardada. - Pulsa
Save Estimate; al terminar vuelve al detalle.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Estimate Number | texto | No | Solo aparece al editar y permite corregir el número. |
| Contact, Company & Deal | selector | Contact sí | Company y Deal se pueden desvincular. |
| Customer Notes / Terms & Conditions / Bank Details | Markdown | No | Permiten aplicar mensajes predefinidos. |
| Document files | adjuntos | No | No aparece al crear, porque aún no existe el documento. |
Reglas y validaciones
- Conserva las mismas validaciones de contacto, moneda,
Numbering Rule, cobro esperado y campos personalizados que la creación. - Quitar una fila existente llama a la eliminación de ese artículo; las filas restantes se guardan en su orden actual.
- Una cotización
invoicedno puede recuperar otro estado desde el detalle.
Backend
- Servicios:
estimates(get/patch),estimate-items(find/create/patch/remove),files(find). - Efectos: recalcula importes, crea una nueva versión de historial y vuelve a sincronizar el Payment Link si cambió el importe o método de cobro.
Relaciones
- Requiere: la cotización existente.
id: estimate-additional-pages modulo: estimates app: finance nombre: Añadir páginas adicionales tipo: configuracion
Añadir páginas adicionales
Adjunta páginas de contenido adicional a la cotización para su vista previa, enlace público y PDF.
Que se logra
- Resultado: la propuesta incluye anexos comerciales reutilizables dentro del mismo documento entregado al cliente.
- Caso de uso: una empresa de obra agrega un cronograma calculado y condiciones especiales a una cotización.
- Se combina con: Plantillas de páginas adicionales, Cotización pública y PDF.
Donde esta
- Ruta:
/[orgId]/estimates/newy/[orgId]/estimates/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Additional pages
Como funciona
- Abre creación o edición y baja a
Additional pages. - Agrega una página Markdown o una
Smart table; también puedes aplicar una plantilla de páginas. - Guarda la cotización y revisa el resultado con
PDFo el enlace público.
Reglas y validaciones
- Se admiten hasta 10 páginas; las tablas inteligentes se limitan a 120 filas y 20 columnas.
- Las fórmulas de la tabla se reevalúan para preview y PDF; no se usa una captura de la interfaz.
- Estas páginas se copian al convertir o duplicar una cotización.
Backend
- Servicios:
estimates(create/patch),document-page-templates(find).
Relaciones
- Requiere: creación o edición de una cotización.
- Dispara / afecta: vista previa, PDF, enlace público y factura convertida.
id: estimate-custom-fields modulo: estimates app: finance nombre: Usar campos personalizados tipo: configuracion
Usar campos personalizados
Captura valores de los campos configurados para Sales document en la cotización.
Que se logra
- Resultado: la propuesta incorpora datos comerciales específicos del negocio y puede mostrarlos en su diseño.
- Caso de uso: una inmobiliaria añade referencia de propiedad y vigencia a cada propuesta.
- Se combina con: Custom Fields, Document Templates, PDF y Convertir en factura.
Donde esta
- Ruta:
/[orgId]/estimates/newy/[orgId]/estimates/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Custom Fields
Como funciona
- Crea definiciones en Settings >
Custom Fieldscon tipoSales document. - Completa los valores que aparecen en
Custom Fieldsde la cotización. - Pulsa
Create EstimateoSave Estimate.
Reglas y validaciones
- Las mismas definiciones aparecen en facturas, pero cada documento conserva sus propios valores.
- Los obligatorios se validan al pulsar Guardar, no mientras se edita; el botón solo se bloquea mientras carga el catálogo.
- Un valor vacío se envía como limpieza del campo; los requeridos no se imponen globalmente a integraciones o borradores.
Backend
- Servicios:
custom-fields(find),estimates(create/patch). - Efectos: el backend valida tipo y claves y reconstruye los valores mostrables; las plantillas pueden usar esos valores.
Relaciones
- Requiere: definiciones activas de
Sales document. - Dispara / afecta: plantilla, preview, PDF y factura convertida.
id: estimate-engagement modulo: estimates app: finance nombre: Consultar actividad del cliente tipo: vista
Consultar actividad del cliente
Muestra cómo se usó la cotización publicada, sin atribuir la actividad a una persona concreta.
Que se logra
- Resultado: ventas puede confirmar si una propuesta fue abierta, cuánto tiempo estuvo visible y si se descargó.
- Caso de uso: una agencia prioriza el seguimiento de propuestas que un prospecto ya revisó.
- Se combina con: Cotización pública, PDF y cronología del CRM.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: detalle > tarjeta
Customer activity
Como funciona
- Abre la cotización y ubica
Customer activity. - Revisa aperturas, días distintos, tiempo visible, descargas y el feed reciente.
- Consulta
Document viewsen el historial de contacto, deal o compañía vinculados para el mismo evento.
Reglas y validaciones
- Registra
view_start, latidos y cierre de la página, descarga PDF/archivo y clic de pago; el tiempo visible se limita a 30 minutos por sesión. - Las visitas de miembros de la misma organización autenticados se marcan internas y no incrementan los totales de cliente.
Backend
- Servicios:
public-quote-engagement(create),sales-document-engagement-events(find/get),estimates(actualización interna de agregados).
Relaciones
- Requiere: una cotización publicada que haya sido visitada.
- Dispara / afecta: historial de contacto, compañía y deal vinculados.
id: estimate-line-items modulo: estimates app: finance nombre: Gestionar artículos de cotización tipo: accion
Gestionar artículos de cotización
Construye las líneas comerciales que alimentan el total y el resumen de cobro de la cotización.
Que se logra
- Resultado: el cliente recibe un desglose verificable de productos o servicios, cantidades e importes.
- Caso de uso: una empresa de instalación cotiza equipos y mano de obra en una sola propuesta.
- Se combina con: Productos, Taxes y Calcular importes de cotización.
Donde esta
- Ruta:
/[orgId]/estimates/new - Acceso en UI: formulario >
Estimate line items - Componente(s):
EstimateItemsTable.tsx
Como funciona
- Busca un producto o agrega una fila.
- Indica nombre, descripción, cantidad, unidad y tarifa.
- Configura descuento por porcentaje o importe, impuesto y tipo de cobro
one-timeorecurring. - Reordena o elimina filas y guarda la cotización.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Product / Name | buscador o texto | Sí | El producto puede completar datos de la fila. |
| Quantity y Rate | número | Sí | Determinan el importe base. |
| Discount | porcentaje o importe | No | Se calcula por fila antes del total del documento. |
| Tax | selector | No | Aporta porcentaje e importe de impuesto. |
| Billing type | lista | No | recurring habilita intervalo y frecuencia. |
Reglas y validaciones
- La primera fila nueva inicia con cantidad 1, tarifa 0 y cobro
one-time. - Las líneas se enumeran al guardar según el orden visible.
Backend
- Servicios:
estimate-items(find/create/patch/remove),estimates(patch). - Efectos: cada cambio recalcula subtotal, impuestos, total y resumen por cadencia antes de guardar.
id: estimate-pdf modulo: estimates app: finance nombre: Descargar cotización PDF tipo: accion
Descargar cotización PDF
Genera un PDF server-side de la cotización con la misma plantilla de la vista previa.
Que se logra
- Resultado: se obtiene un PDF descargable que conserva el diseño y datos de la propuesta.
- Caso de uso: una constructora adjunta una cotización formal a un proceso de compras.
- Se combina con: Document Templates, Páginas adicionales y Cotización pública.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: barra de documento >
PDF
Como funciona
- Abre una cotización con plantilla disponible.
- Pulsa
PDF. - El PDF generado se abre en otra pestaña desde una URL temporal.
Reglas y validaciones
- El botón requiere que la vista previa HTML haya cargado y que exista una plantilla activa.
- Las páginas adicionales y valores de campos personalizados se vuelven a calcular al renderizar el PDF.
Backend
- Servicios:
pdf-generator(create),document-template-preview(create). - Efectos: sube el PDF a S3 y devuelve una URL firmada.
Relaciones
- Requiere: cotización guardada con plantilla activa.
- Dispara / afecta: archivo PDF disponible mediante URL firmada.
id: estimate-status modulo: estimates app: finance nombre: Cambiar estado de cotización tipo: accion
Cambiar estado de cotización
Actualiza la fase comercial de una cotización desde su vista previa.
Que se logra
- Resultado: el equipo distingue propuestas en preparación, enviadas, aceptadas, rechazadas o anuladas.
- Caso de uso: una inmobiliaria identifica las propuestas aceptadas que ya puede convertir en facturas.
- Se combina con: Cotizaciones públicas, Convertir en factura y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: barra de documento >
Mark as
Como funciona
- Abre la cotización guardada.
- Abre
Mark asy seleccionaSent,Accepted,DeclinedoVoided. - Para
Declined, selecciona o escribe el motivo en el diálogo.
Reglas y validaciones
- Estados disponibles:
draft,sent,accepted,declined,expired,invoicedyvoided. Invoicedes terminal: si existe factura convertida,Mark asqueda deshabilitado y muestra su número o referencia.- El cobro exitoso de un enlace asociado también acepta automáticamente una cotización que estuviera en
draftosent.
Backend
- Servicios:
estimates(patch),estimates-declined-reasons(find). - Efectos: registra fechas de transición y una versión en
estimates-change-history.
Relaciones
- Requiere: una cotización accesible para edición.
- Dispara / afecta: fechas de estado e historial de cambios.
id: estimate-totals modulo: estimates app: finance nombre: Calcular importes de cotización tipo: vista
Calcular importes de cotización
El panel Totals calcula el importe comercial de las líneas y separa importes únicos de los recurrentes.
Que se logra
- Resultado: el precio presentado al cliente incorpora descuentos, impuestos, envío y ajustes de forma consistente.
- Caso de uso: una agencia separa la implementación inicial de la mensualidad propuesta a un nuevo cliente.
- Se combina con: Artículos de cotización, Taxes y Facturas recurrentes.
Donde esta
- Ruta:
/[orgId]/estimates/new - Acceso en UI: formulario > panel
Totals - Componente(s):
EstimateEditForm.tsx
Como funciona
- Añade o cambia una línea, descuento, envío o ajuste.
- Revisa
Subtotal,Discount amount,Tax totalyTotal. - Consulta
Payment summarypara los subtotalesone-timey por intervalo recurrente.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Discount | porcentaje o importe fijo | No | Se aplica al subtotal de líneas. |
| Shipping charge | importe | No | Se añade al total. |
| Adjustment | importe positivo o negativo | No | Admite una descripción. |
Reglas y validaciones
- Total = subtotal de líneas − descuento del documento + impuestos de líneas + envío + ajuste.
- El formulario calcula en pantalla y el servicio vuelve a calcular al crear o actualizar.
Backend
- Servicios:
estimates(create/patch),estimate-items(create/patch/remove).
Relaciones
- Requiere: artículos e impuestos configurados.
id: expected-collection modulo: estimates app: finance nombre: Configurar cobro esperado tipo: integracion
Configurar cobro esperado
Define un depósito o el total que se cobrará mediante un Payment Link asociado a la cotización.
Que se logra
- Resultado: una cotización puede solicitar un anticipo o su importe total mediante un enlace de cobro público.
- Caso de uso: un estudio creativo cobra el 50 % de una propuesta antes de iniciar el proyecto.
- Se combina con: Payment Links, Payment Gateways y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/estimates/[id]/edit - Acceso en UI: panel
Totals > Amount to collect - Componente(s):
EstimateEditForm.tsx
Como funciona
- En
Amount to collect, escribe un importe o pulsa50%oUse total. - Elige
Payment numbering, unPayment provideractivo yHow to collect. - Guarda la cotización; el enlace abierto aparece en Finance >
Payment Links.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Amount to collect | importe | Condicional | Un valor cero lo elimina. |
| Payment numbering | lista | Sí, con importe | Es una regla de Received Payment distinta a la de Estimate. |
| Payment provider | lista | Sí, con importe | Muestra gateways activos de la organización. |
| How to collect | lista | Sí, con importe | Stripe/Wompi ofrecen Apex Checkout y Provider Checkout. |
| Payment URL | URL | Según método | Se exige cuando el método necesita una URL externa. |
Reglas y validaciones
- El importe positivo exige numeración, gateway y método; no se puede guardar si falta alguno.
- Si el gateway es Wompi, la moneda seleccionada debe ser COP.
- Cuando el cliente paga, se crea un Received Payment con la regla elegida y la cotización pasa de
draftosentaaccepted.
Backend
- Servicios:
estimates(create/patch),payment-links(create/patch),payments(create al capturar).
Relaciones
- Dispara / afecta: Payment Links y Payments received.
id: public-estimate-decision modulo: estimates app: finance nombre: Aceptar o rechazar cotización públicamente tipo: publico
Aceptar o rechazar cotización públicamente
Permite que el destinatario responda a una cotización desde su enlace público.
Que se logra
- Resultado: la aceptación o rechazo queda reflejado en la cotización que gestiona el equipo comercial.
- Caso de uso: un proveedor B2B recibe la aprobación de una propuesta sin intercambiar documentos firmados por correo.
- Se combina con: Estado de cotización, Convertir en factura y Payment Links.
Donde esta
- Ruta:
/e/[path] - Acceso en UI: página pública de cotización >
AcceptoDecline
Como funciona
- El destinatario abre
/e/[path]. - Selecciona
AcceptoDeclineen las acciones públicas. - La respuesta actualiza el estado de la cotización.
Reglas y validaciones
- La decisión se resuelve usando el tipo y
public_path; el cliente no envía el identificador interno de la cotización. - Un cobro correcto de un Payment Link ligado también puede marcar
acceptedsi el documento seguía endraftosent.
Backend
- Servicios:
public-quote-action(create),estimates(patch interno).
Relaciones
- Requiere: enlace
/e/[path]válido. - Dispara / afecta: estado comercial de la cotización.
id: public-estimate modulo: estimates app: finance nombre: Compartir cotización pública tipo: publico
Compartir cotización pública
Comparte la representación de la cotización que se sirve sin iniciar sesión.
Que se logra
- Resultado: el cliente puede consultar la propuesta desde un enlace sin acceso a AchieveApex.
- Caso de uso: una firma de servicios comparte una propuesta con un prospecto por correo o WhatsApp.
- Se combina con: Decisión pública, PDF, Payment Links y Actividad del cliente.
Donde esta
- Ruta:
/e/[path] - Acceso en UI: detalle de cotización >
Share>Direct link
Como funciona
- Abre una cotización con vista previa.
- Pulsa
ShareyDirect link. - Copia o envía la URL pública generada para la cotización.
Reglas y validaciones
- La ruta pública se genera al crear el documento y la vista usa la plantilla de la cotización.
- La página puede mostrar
Pay nowcuando existe un Payment Link abierto relacionado.
Backend
- Servicios:
public-quote-preview(create),public-quote-pdf(create),public-quote-filesypublic-quote-engagement(create).
Relaciones
- Requiere: una cotización guardada con ruta pública.
- Dispara / afecta: actividad de cliente, PDF público y posible cobro por Payment Link.
id: send-estimate-email modulo: estimates app: finance nombre: Enviar cotización por correo tipo: accion
Enviar cotización por correo
Envía la cotización desde el diálogo de entrega, con destinatarios elegidos y su enlace público.
Que se logra
- Resultado: el destinatario recibe una vía directa para revisar y decidir sobre la propuesta.
- Caso de uso: una agencia envía una propuesta al responsable de compras y mantiene el documento disponible en línea.
- Se combina con: Cotización pública, Actividad del cliente y Conversaciones.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI:
Share>Send email
Como funciona
- Pulsa
Sharey luegoSend email. - Completa
To, asunto y contenido; puedes añadir una dirección a un contacto relacionado conSave and add. - Envía desde el diálogo y vuelve a cargar la cotización.
Reglas y validaciones
- Debe existir al menos un destinatario.
- Contacto, contacto del deal y contactos de la compañía se ofrecen como candidatos; se puede escribir cualquier dirección.
Backend
- Servicios:
send-document-email(create),estimates(get). - Efectos: entrega el email y refresca el documento para reflejar estado y ruta pública actuales.
Relaciones
- Requiere: una cotización guardada y al menos una dirección destinataria.
- Dispara / afecta: entrega por correo y consulta pública de la cotización.
id: expenses app: finance nombre: Expenses estado: beta permiso: can_access_expenses
Expenses
Registra gastos directos ya pagados, sin crear saldo pendiente ni un pago separado.
Para que sirve
- Un restaurante registra compras ya pagadas de suministros sin crear una deuda pendiente.
- Una agencia documenta el alquiler ya abonado de un equipo, con sus conceptos, descuentos e impuestos.
- Una clínica deja un gasto en
Draftpara revisión y lo activa cuando su equipo confirma el importe. - Un negocio con suscripciones convierte un gasto frecuente en un perfil para generarlo periódicamente.
Que lo hace diferente
- Distingue expresamente gasto directo de cuenta por pagar: Expenses no crea saldo ni exige el flujo de Payments Made.
- Comparte monedas, impuestos, partidas, reglas de numeración y plantillas documentales con los documentos de venta de Finance.
- Puede partir de un proveedor de Purchases sin obligarlo, útil para desembolsos que no corresponden a un suplidor registrado.
- Un gasto puede convertirse en Recurring Expenses reutilizando su información y partidas.
- No incluye adjuntos de recibos ni es un sistema de contabilidad de partida doble.
Acceso
- Ruta principal:
/[orgId]/finance/expenses - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Expenses - Permiso requerido:
can_access_expensesy permisos de ver, crear, editar o eliminar gastos.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición;
ExpensesView,ExpenseEditForm,ExpenseDetailyExpenseItemsTable. - Backend: servicios Feathers
expensesyexpense-items. - Superficies publicas: ninguna.
- Integraciones externas: ninguna.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar gastos | expense-list.md | Lista, busca, filtra y ordena gastos. |
| Crear y editar gastos | expense-form.md | Registra cabecera, totales, notas y moneda. |
| Gestionar partidas | expense-items.md | Define conceptos, descuentos e impuestos. |
| Activar o anular gastos | expense-lifecycle.md | Gestiona el ciclo Draft, Active y Void. |
| Numerar documentos | expense-numbering.md | Finaliza el número al activar el gasto. |
| Convertir en gasto recurrente | make-recurring-expense.md | Crea un perfil periódico desde un gasto. |
Relaciones
- Depende de: Vendors (opcional), Currencies y plantillas de documento.
- Usado por: Recurring Expenses puede originarse desde un gasto.
- La configuración de numeración AP vive en
settings/document-settings; no se documenta en este módulo.
Limitaciones y notas
- Un expense no se paga desde
Payments Made; ese flujo corresponde exclusivamente a bills. - No hay adjuntos de recibos implementados.
id: expense-form modulo: expenses app: finance nombre: Crear y editar gastos tipo: accion
Crear y editar gastos
Registra un gasto ya realizado, como borrador o como gasto activo.
Que se logra
- Resultado: queda documentado un desembolso ya realizado, con sus conceptos, impuestos y total calculado.
- Caso de uso: una productora registra el alquiler ya pagado de un equipo para conservar una referencia financiera interna.
- Se combina con: partidas de gasto, Vendors, Currencies y Document Templates.
Donde esta
- Ruta:
/[orgId]/finance/expenses/newy/[orgId]/finance/expenses/[id]/edit - Acceso en UI:
Expenses > New Expenseo detalle >Edit - Componente(s):
ExpenseEditForm.tsx
Como funciona
- Completa la fecha, moneda y, opcionalmente, proveedor, responsable, referencia y descripción.
- Selecciona una regla de numeración o plantilla cuando aplique.
- Añade conceptos y revisa los totales calculados.
- Incluye notas y usa
Save as DraftoSave as Active.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Fecha y moneda | Fecha y selección | Sí | Identifican el gasto y su importe. |
| Proveedor | Selección | No | Un gasto puede no estar ligado a proveedor. |
| Referencia y descripción | Texto | No | Contexto del documento. |
| Notas | Editor Markdown | No | Información adicional. |
Reglas y validaciones
- La fecha y moneda son obligatorias.
- Debe existir al menos una partida con nombre antes de guardar.
- Los totales se recalculan a partir de los conceptos.
Backend
- Servicios:
expenses(create, patch).
Relaciones
- Requiere: Currencies, y Vendors si se selecciona proveedor.
- Dispara / afecta: la activación finaliza su numeración.
id: expense-items modulo: expenses app: finance nombre: Gestionar partidas de gasto tipo: accion
Gestionar partidas de gasto
Define los conceptos que componen un gasto y actualiza sus importes.
Que se logra
- Resultado: el importe del gasto refleja sus conceptos individuales, descuentos e impuestos en lugar de un total sin detalle.
- Caso de uso: un restaurante separa alimentos, transporte y tasas de una compra para conocer cómo se formó el total.
- Se combina con: creación y edición de gastos, Products e impuestos cuando están configurados.
Donde esta
- Ruta:
/[orgId]/finance/expenses/newy/[orgId]/finance/expenses/[id]/edit - Acceso en UI: formulario de gasto > tabla de partidas
- Componente(s):
ExpenseItemsTable.tsx
Como funciona
- Añade, edita o elimina una partida.
- Indica nombre, cantidad, unidad y tarifa.
- Aplica descuento o impuesto cuando corresponda.
- Guarda el gasto para recalcular partidas y totales.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre | Texto | Sí | Identifica el concepto. |
| Cantidad, unidad y tarifa | Número y texto | Sí, excepto unidad | Calculan el importe de la partida. |
| Producto, descuento e impuesto | Selección y número | No | Ajustan el importe. |
Reglas y validaciones
- El importe de cada partida se calcula en el backend.
- Las modificaciones de importes actualizan los totales del gasto.
Backend
- Servicios:
expense-items(find, create, patch, remove).
Relaciones
- Requiere: un expense.
- Dispara / afecta: subtotal, descuentos, impuestos y total del gasto.
id: expense-lifecycle modulo: expenses app: finance nombre: Activar, anular y eliminar gastos tipo: accion
Activar, anular y eliminar gastos
Controla el ciclo de vida de un gasto directo.
Que se logra
- Resultado: los gastos distinguen entre preparación, registro definitivo y anulación, conservando trazabilidad del estado.
- Caso de uso: una agencia deja un gasto en
Drafthasta validar el importe y luego lo activa para incorporarlo a su control de compras. - Se combina con: numeración de gastos y consulta de gastos.
Donde esta
- Ruta:
/[orgId]/finance/expenses/[id] - Acceso en UI: detalle >
Mark as Active,VoidyDelete - Componente(s):
ExpenseDetail.tsx
Como funciona
- Un gasto inicia como
Drafto se guarda directamente comoActive. - Usa
Mark as Activepara registrar definitivamente un borrador. - Usa
Voidpara cancelar un gasto activo. - Usa
Deletesolo mientras es borrador.
Reglas y validaciones
- El ciclo permitido es
DraftaActiveoVoid. - Un gasto anulado no vuelve a activo.
- Un gasto activo no se puede eliminar; debe anularse.
Backend
- Servicios:
expenses(patch, remove). - Efectos: registra las fechas de activación o anulación.
Relaciones
- Requiere: permiso de edición o eliminación de gastos.
- Dispara / afecta: al activarlo, se asigna el número final.
id: expense-list modulo: expenses app: finance nombre: Consultar gastos tipo: vista
Consultar gastos
Presenta los gastos directos registrados y permite localizar un documento.
Que se logra
- Resultado: el negocio encuentra y revisa el gasto directo ya registrado sin confundirlo con una deuda pendiente.
- Caso de uso: una tienda local localiza el gasto de una compra urgente de suministros para verificar su importe y estado.
- Se combina con: detalle de gasto, Vendors y Recurring Expenses.
Donde esta
- Ruta:
/[orgId]/finance/expenses - Acceso en UI:
Purchases > Expenses - Componente(s):
ExpensesView.tsx
Como funciona
- Consulta la lista paginada.
- Busca por texto o filtra por estado.
- Ordena, ajusta columnas visibles o cambia de página.
- Abre una fila para acceder al detalle.
Reglas y validaciones
- La tabla incluye fecha, número, referencia, proveedor, estado y total.
- La búsqueda también considera el proveedor asociado cuando exista.
Backend
- Servicios:
expenses(find, get).
Relaciones
- Requiere: acceso a Expenses.
- Dispara / afecta: enlaza con el detalle, edición o creación de un gasto.
id: expense-numbering modulo: expenses app: finance nombre: Numerar documentos de gasto tipo: configuracion
Numerar documentos de gasto
Aplica la numeración de cuentas por pagar al registrar definitivamente un gasto.
Que se logra
- Resultado: los gastos definitivos reciben una referencia final coherente con la configuración documental de Finance.
- Caso de uso: una consultora activa un gasto aprobado y obtiene el número con el que su equipo lo identificará en revisiones internas.
- Se combina con: ciclo de vida de gastos y Document Templates.
Donde esta
- Ruta:
/[orgId]/finance/expenses/newy/[orgId]/finance/expenses/[id] - Acceso en UI: formulario > regla de numeración; detalle >
Mark as Active - Componente(s):
ExpenseEditForm.tsx,ExpenseDetail.tsx
Como funciona
- Al guardar un borrador, el documento conserva un número pendiente.
- Guarda sus partidas.
- Al pasar a
Active, el sistema asigna el número final.
Reglas y validaciones
- El número pendiente es de solo lectura en edición.
- La configuración compartida de reglas y plantillas pertenece a Document Templates.
Backend
- Servicios:
expenses(create, patch). - Efectos: la transición de estado activa la asignación del número.
Relaciones
- Requiere: configuración de
expenseensettings/document-settingscuando se usa una regla. - Dispara / afecta: consistencia de la numeración AP.
id: make-recurring-expense modulo: expenses app: finance nombre: Convertir un gasto en recurrente tipo: accion
Convertir un gasto en recurrente
Crea un perfil de gasto recurrente reutilizando los datos y partidas de un gasto.
Que se logra
- Resultado: un gasto existente se convierte en la base reutilizable de futuros gastos periódicos, sin volver a capturar sus conceptos.
- Caso de uso: una agencia transforma el gasto mensual de su software de diseño en un perfil recurrente para reducir registro manual.
- Se combina con: Recurring Expenses y partidas de gasto.
Donde esta
- Ruta:
/[orgId]/finance/expenses/[id] - Acceso en UI: detalle de gasto >
Make Recurring - Componente(s):
ExpenseDetail.tsx,MakeRecurringExpenseDialog.tsx
Como funciona
- Abre un gasto existente.
- Selecciona
Make Recurring. - Confirma o completa la programación del nuevo perfil.
- Continúa en Recurring Expenses para guardarlo y gestionarlo.
Reglas y validaciones
- Se copian proveedor, moneda y partidas disponibles del gasto de origen.
- La acción está disponible para usuarios con permiso de edición cuando el gasto no proviene ya de un perfil recurrente.
Backend
- Servicios:
recurring-expenses,recurring-expense-items(create).
Relaciones
- Requiere: un gasto existente.
- Dispara / afecta: crea un perfil en Recurring Expenses.
id: invoices app: finance nombre: Facturas estado: shipped permiso: can_access_invoices
Facturas
Las facturas documentan un cobro a un cliente, conservan el saldo pendiente y reciben asignaciones de pagos. El listado y el detalle son los mismos desde CRM y Finance.
Para que sirve
- Una consultora emite una factura desde el cliente o deal que ya gestionó en el CRM y controla qué importe queda por cobrar.
- Una empresa de mantenimiento convierte una propuesta aceptada en factura conservando sus artículos y condiciones.
- Una academia registra pagos parciales de una matrícula y deja el saldo pendiente visible para el equipo de cobros.
- Un proveedor B2B comparte una factura pública por correo y verifica si el cliente la abrió o descargó.
- Un negocio por suscripción crea un perfil recurrente para generar sus cobros periódicos como facturas normales.
Que lo hace diferente
- Reutiliza el mismo contacto, compañía, deal y productos del CRM, y puede originarse directamente desde una cotización.
- Las asignaciones de pagos mantienen sincronizados el importe pagado, saldo y estado de cada factura.
- La vista pública registra actividad real del cliente —aperturas, tiempo visible y descargas— sin contar las revisiones internas.
- El documento se puede entregar por correo, PDF o enlace público y combinar con Payment Links para cobrar con Stripe o Wompi.
- Las páginas adicionales, los campos personalizados y el diseño de plantilla se usan tanto en la vista como en el PDF.
- Puede convertirse en una fuente de facturación recurrente desde
Make recurringen Finance.
Acceso
- Ruta principal:
/[orgId]/invoicesy/[orgId]/finance/invoices - Como se llega: sidebar CRM >
Invoiceso selector de aplicación >Finance>Sales>Invoices - Permiso requerido:
can_access_invoices
Alcance tecnico
- Frontend: rutas CRM y Finance;
InvoicesView,InvoiceDetail,InvoiceEditForm,DocumentPreview - Backend:
invoices,invoice-items,invoice-payments,invoices-change-history,public-quote-* - Superficies publicas:
/i/[path]
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear factura | create-invoice.md | Crea un borrador con cliente, moneda, fechas y artículos. |
| Editar factura | edit-invoice.md | Actualiza el documento, sus artículos y adjuntos. |
| Añadir páginas adicionales | invoice-additional-pages.md | Incluye Markdown o tablas inteligentes en la vista y PDF. |
| Consultar historial de cambios | invoice-change-history.md | Consulta las versiones registradas de la factura. |
| Usar campos personalizados | invoice-custom-fields.md | Completa campos de Sales document compartidos con cotizaciones. |
| Consultar actividad del cliente | invoice-engagement.md | Resume uso de /i/[path], PDF y archivos. |
| Gestionar artículos de factura | invoice-line-items.md | Define productos, cantidades, precios, impuestos y recurrencia. |
| Consultar pagos relacionados | invoice-payment-history.md | Despliega las asignaciones invoice-payments. |
| Descargar factura PDF | invoice-pdf.md | Genera un PDF con la plantilla del documento. |
| Emitir y cambiar estado de factura | invoice-status.md | Pasa de borrador a programada o enviada y permite anular. |
| Calcular importes de factura | invoice-totals.md | Calcula total y saldo a partir de artículos y pagos. |
| Crear perfil recurrente desde factura | make-recurring.md | Crea o vincula un perfil recurrente en Finance. |
| Compartir factura pública | public-invoice.md | Publica el documento en /i/[path]. |
| Registrar pago desde factura | register-payment.md | Aplica pagos activos sin asignar a la factura. |
| Enviar factura por correo | send-invoice-email.md | Envía por correo el documento con enlace público. |
Relaciones
- Depende de: Contacts, Companies, Deals, Products, Currencies, Payments received, Recurring Invoices y Document Templates.
- Usado por: Payments received, Payment Links, Recurring Invoices y Automatizaciones.
Limitaciones y notas
- Las facturas en
draftconservan saldo cero hasta pasar ascheduledosent. - Solo Finance muestra
Make recurring; CRM conserva la factura normal.
id: create-invoice modulo: invoices app: finance nombre: Crear factura tipo: accion
Crear factura
Crea una factura en estado draft con cliente, fecha de emisión, vencimiento y artículos facturables.
Que se logra
- Resultado: se prepara un cobro formal vinculado al cliente antes de emitirlo.
- Caso de uso: una consultora crea la factura de un proyecto aprobado con fecha de vencimiento acordada.
- Se combina con: Contactos, Deals, Document Templates y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/invoices/newo/[orgId]/finance/invoices/new - Acceso en UI:
Invoices>New Invoice
Como funciona
- Selecciona
Owner, contacto y opcionalmente compañía y deal. - Completa
Currency,Numbering Rule,Invoice Date,Due Date, plantilla y artículos. - Pulsa
Create Invoice; el sistema abre el detalle.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Contact | selector | Sí | Company y Deal son opcionales. |
| Currency | lista | Sí | Incluye las monedas habilitadas. |
| Numbering Rule | lista | No en interfaz | Si hay reglas, usa la predeterminada o la primera. |
| Invoice Date / Due Date | fecha | Sí | Due Date inicia 30 días después; Quick fill ofrece plazos frecuentes. |
| Document Template | lista | No | Selecciona una plantilla de Invoice. |
Reglas y validaciones
- Los campos obligatorios de Sales document se validan al pulsar
Create Invoice. - El botón espera a que cargue el catálogo de campos personalizados.
Backend
- Servicios:
invoices(create),invoice-items(create). - Efectos: genera número, ruta pública y versión; calcula total y saldo inicial.
Relaciones
- Requiere: contacto, moneda y fechas válidas.
- Dispara / afecta: líneas de factura, numeración y saldo inicial.
id: edit-invoice modulo: invoices app: finance nombre: Editar factura tipo: accion
Editar factura
Actualiza la factura, sus relaciones comerciales, artículos, textos y archivos adjuntos.
Que se logra
- Resultado: el documento de cobro refleja el alcance y condiciones vigentes del acuerdo.
- Caso de uso: una empresa de mantenimiento ajusta conceptos y vencimiento tras ampliar un servicio.
- Se combina con: Artículos de factura, Payment Links y Plantillas de documentos.
Donde esta
- Ruta:
/[orgId]/invoices/[id]/edito/[orgId]/finance/invoices/[id]/edit - Acceso en UI: vista de factura >
Edit
Como funciona
- Abre
Edity modifica los datos, el número o las fechas. - Gestiona artículos, mensajes, adjuntos y campos personalizados.
- Pulsa
Save Invoice; se abre de nuevo la vista previa.
Reglas y validaciones
- Contacto y moneda siguen siendo obligatorios; campos personalizados obligatorios se validan al guardar.
- Las líneas eliminadas se eliminan del documento y las restantes se guardan en el orden actual.
CompanyyDealse pueden limpiar sin afectar al contacto requerido.
Backend
- Servicios:
invoices(get/patch),invoice-items(find/create/patch/remove),files(find). - Efectos: actualiza la versión de historial, vuelve a calcular total y saldo.
Relaciones
- Requiere: factura existente con permiso de edición.
- Dispara / afecta: líneas, saldo, vista previa e historial.
id: invoice-additional-pages modulo: invoices app: finance nombre: Añadir páginas adicionales tipo: configuracion
Añadir páginas adicionales
Inserta contenido Markdown o tablas inteligentes adicionales en la factura.
Que se logra
- Resultado: la factura incorpora anexos comerciales o calendarios dentro de la entrega al cliente.
- Caso de uso: una constructora añade una tabla de hitos de pago a la factura del proyecto.
- Se combina con: Plantillas de páginas adicionales, PDF y Factura pública.
Donde esta
- Ruta:
/[orgId]/invoices/newy/[orgId]/invoices/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Additional pages
Como funciona
- Abre el formulario de factura y desplázate a
Additional pages. - Añade una página de Markdown o
Smart table, o aplica una plantilla de páginas. - Guarda y verifica su resultado con
PDFo/i/[path].
Reglas y validaciones
- Soporta hasta 10 páginas; una tabla puede tener hasta 120 filas y 20 columnas.
- Las páginas se copian desde una cotización al convertirla; no forman parte de perfiles recurrentes.
Backend
- Servicios:
invoices(create/patch),document-page-templates(find),pdf-generator(create).
Relaciones
- Requiere: factura en creación o edición.
- Dispara / afecta: vista previa, enlace público y PDF.
id: invoice-change-history modulo: invoices app: finance nombre: Consultar historial de cambios tipo: vista
Consultar historial de cambios
Consulta las versiones creadas cuando se guarda o cambia el estado de una factura.
Que se logra
- Resultado: el equipo puede revisar cómo evolucionó un documento de cobro y cuándo se emitió.
- Caso de uso: un despacho aclara qué versión de una factura se compartió con un cliente.
- Se combina con: Editar factura y Estado de factura.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: menú
More>History
Como funciona
- Abre el menú
More. - Pulsa
History. - Revisa las versiones disponibles en el diálogo de historial.
Reglas y validaciones
- Cada creación y actualización de factura genera una nueva versión antes de exponer el resultado.
Backend
- Servicios:
invoices-change-history(find),invoices(create/patch).
Relaciones
- Requiere: factura guardada con cambios registrados.
- Dispara / afecta: consulta de sus versiones históricas.
id: invoice-custom-fields modulo: invoices app: finance nombre: Usar campos personalizados tipo: configuracion
Usar campos personalizados
Registra valores de campos configurados como Sales document para esta factura.
Que se logra
- Resultado: la factura puede incluir datos propios del negocio además de sus campos estándar.
- Caso de uso: una empresa logística añade número de orden de compra y referencia de envío.
- Se combina con: Custom Fields, Plantillas de documentos y PDF.
Donde esta
- Ruta:
/[orgId]/invoices/newy/[orgId]/invoices/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Custom Fields
Como funciona
- Configura campos de tipo
Sales documenten Settings >Custom Fields. - Completa los valores que aparecen en el formulario de factura.
- Pulsa
Create InvoiceoSave Invoice.
Reglas y validaciones
- El catálogo es compartido con cotizaciones; las definiciones no se duplican.
- Los obligatorios se muestran al guardar y un valor limpiado elimina esa asignación.
Backend
- Servicios:
custom-fields(find),invoices(create/patch). - Efectos: los valores quedan disponibles para la vista previa, PDF y plantilla pública.
Relaciones
- Requiere: catálogo activo de campos
Sales document. - Dispara / afecta: plantillas y renderizado del documento.
id: invoice-engagement modulo: invoices app: finance nombre: Consultar actividad del cliente tipo: vista
Consultar actividad del cliente
Resume la actividad anónima que el cliente realizó sobre la factura pública.
Que se logra
- Resultado: cobros puede saber si una factura fue vista, descargada o consultada durante un tiempo relevante.
- Caso de uso: una agencia da seguimiento a una factura abierta antes de reclamar su vencimiento.
- Se combina con: Factura pública, PDF y cronología del CRM.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: detalle > tarjeta
Customer activity
Como funciona
- Abre la factura.
- Revisa sesiones, días, tiempo visible y descargas en
Customer activity. - Consulta también el filtro
Document viewsdel historial de las entidades relacionadas.
Reglas y validaciones
- Un
heartbeatactualiza tiempo acumulado, pero no se muestra como evento individual. - Las aperturas del equipo autenticado de la propia organización quedan excluidas de los agregados.
Backend
- Servicios:
public-quote-engagement(create),sales-document-engagement-events(find/get),invoices(actualización interna de agregados).
Relaciones
- Requiere: factura pública visitada por un cliente.
- Dispara / afecta: actividad visible en la factura y timeline relacionado.
id: invoice-line-items modulo: invoices app: finance nombre: Gestionar artículos de factura tipo: accion
Gestionar artículos de factura
Define las líneas que determinan el importe facturado y el desglose por cadencia de cobro.
Que se logra
- Resultado: el cliente entiende qué productos, servicios e impuestos originan el cobro.
- Caso de uso: una empresa de software factura implementación inicial y suscripción mensual en un mismo documento.
- Se combina con: Productos, Taxes y Facturas recurrentes.
Donde esta
- Ruta:
/[orgId]/invoices/newy/[orgId]/invoices/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Invoice line items
Como funciona
- Busca un producto o añade una línea.
- Completa nombre, cantidad, unidad, tarifa, descuento e impuesto.
- Define
one-timeorecurringy, para este último, intervalo y frecuencia. - Guarda la factura.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Product / Name | buscador o texto | Sí | Un producto puede completar la línea. |
| Quantity y Rate | número | Sí | Forman el importe base. |
| Discount y Tax | importe/selector | No | Se calculan por línea. |
| Billing type | lista | No | Se refleja en Payment summary. |
Reglas y validaciones
- Las filas se renumeran al guardar y una fila borrada desaparece de la factura.
Backend
- Servicios:
invoice-items(find/create/patch/remove),invoices(patch).
Relaciones
- Requiere: una factura en creación o edición.
- Dispara / afecta: subtotal, impuestos, total y cadencias de cobro.
id: invoice-payment-history modulo: invoices app: finance nombre: Consultar pagos relacionados tipo: vista
Consultar pagos relacionados
Expone las asignaciones de pagos que reducen el saldo de la factura.
Que se logra
- Resultado: se puede explicar qué pagos redujeron el saldo de una factura y en qué importe.
- Caso de uso: un colegio concilia abonos de una matrícula antes de marcarla como pagada.
- Se combina con: Pagos recibidos y Registrar pago desde factura.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: información relacionada > contador con icono de dinero
Como funciona
- Pulsa el contador de pagos en la franja de información relacionada.
- Revisa número, fecha, modo, referencia e importe aplicado.
- Pulsa una fila para abrir el detalle del pago en CRM o Finance.
Reglas y validaciones
- La lista se construye desde asignaciones de la factura, por lo que muestra el importe aplicado, no necesariamente el importe completo del pago.
Backend
- Servicios:
invoice-payments(find),payments(find).
Relaciones
- Requiere: al menos una asignación de pago en la factura.
- Dispara / afecta: navegación hacia el detalle del pago.
id: invoice-pdf modulo: invoices app: finance nombre: Descargar factura PDF tipo: accion
Descargar factura PDF
Genera un PDF de la factura a partir de la plantilla que se está previsualizando.
Que se logra
- Resultado: se entrega un archivo de factura consistente con la vista y la identidad del negocio.
- Caso de uso: un proveedor B2B adjunta el PDF a su proceso de aprobación de compras.
- Se combina con: Plantillas de documentos, Páginas adicionales y Factura pública.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: barra de documento >
PDF
Como funciona
- Espera que cargue la vista previa de la factura.
- Pulsa
PDF. - Abre la URL temporal devuelta para descargar o imprimir.
Reglas y validaciones
- Requiere una plantilla activa y HTML de preview cargado.
- Incluye páginas adicionales, campos personalizados y la información de los artículos.
Backend
- Servicios:
pdf-generator(create),document-template-preview(create). - Efectos: renderiza con Chromium y almacena el PDF en S3.
Relaciones
- Requiere: factura guardada y plantilla seleccionada.
- Dispara / afecta: PDF almacenado temporalmente en S3.
id: invoice-status modulo: invoices app: finance nombre: Emitir y cambiar estado de factura tipo: accion
Emitir y cambiar estado de factura
Emite una factura desde borrador, la programa o la anula cuando todavía está pendiente.
Que se logra
- Resultado: el negocio controla cuándo un borrador se convierte en una cuenta por cobrar activa.
- Caso de uso: una firma profesional programa una factura para enviarla al inicio del siguiente mes.
- Se combina con: Enviar factura por correo, Pagos recibidos y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: barra de documento >
Mark as Scheduled,Mark as Senty menúMore
Como funciona
- En una factura
draft, pulsaMark as ScheduledoMark as Sent. - En una factura
scheduled, pulsaMark as Sentcuando se haya emitido. - Para una factura
sentuoverdue, abreMorey pulsaVoid Invoice.
Reglas y validaciones
- Estados mostrados:
draft,scheduled,sent,partially_paid,paid,overdueyvoid. Register Paymentsolo aparece si la factura no esvoidnipaidy conserva saldo positivo.
Backend
- Servicios:
invoices(patch),invoices-change-history(find). - Efectos: registra fecha y versión del cambio; al recibir asignaciones pasa entre
sent,partially_paidypaid.
Relaciones
- Requiere: factura guardada en un estado que permita la transición.
- Dispara / afecta: saldo, estado de cobro e historial.
id: invoice-totals modulo: invoices app: finance nombre: Calcular importes de factura tipo: vista
Calcular importes de factura
Calcula el total de la factura, el saldo por cobrar y el resumen de importes recurrentes.
Que se logra
- Resultado: el importe exigible y el saldo restante se muestran de forma coherente con líneas y pagos aplicados.
- Caso de uso: un estudio creativo identifica cuánto queda por cobrar tras recibir un anticipo parcial.
- Se combina con: Artículos de factura, Pagos recibidos y Taxes.
Donde esta
- Ruta:
/[orgId]/invoices/newy/[orgId]/invoices/[id]/edit(también bajo/finance) - Acceso en UI: formulario > panel
Totals
Como funciona
- Cambia líneas,
Discount,Shipping chargeoAdjustment. - Revisa
Subtotal,Tax total,TotalyPayment summary. - Guarda para que el servicio calcule nuevamente los importes.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Discount | porcentaje o importe | No | Se descuenta del subtotal. |
| Shipping charge | importe | No | Se agrega al total. |
| Adjustment | importe | No | Puede ser negativo y tiene descripción opcional. |
Reglas y validaciones
- Saldo = total − importe ya pagado.
- En
draftel saldo puede mantenerse en cero; al programar o enviar la factura queda disponible para cobrar.
Backend
- Servicios:
invoices(create/patch),invoice-items(create/patch/remove),invoice-payments(create/remove).
Relaciones
- Requiere: líneas de factura y valores de descuento o ajuste.
- Dispara / afecta: saldo y elegibilidad para registrar pagos.
id: make-recurring modulo: invoices app: finance nombre: Crear perfil recurrente desde factura tipo: accion
Crear perfil recurrente desde factura
Convierte la información de una factura en la base de un perfil de facturación recurrente.
Que se logra
- Resultado: una factura puntual sirve como base para futuros cobros periódicos del mismo cliente.
- Caso de uso: una agencia transforma la factura de un retainer mensual en un perfil recurrente.
- Se combina con: Facturas recurrentes y Artículos de factura.
Donde esta
- Ruta:
/[orgId]/finance/invoices/[id] - Acceso en UI: menú
More>Make recurring
Como funciona
- Abre la factura desde Finance y selecciona
Make recurring. - Elige crear un perfil nuevo o asignar la factura a uno existente.
- El diálogo copia las líneas al perfil nuevo o crea el vínculo elegido.
Reglas y validaciones
- La acción no aparece en CRM ni para facturas que ya proceden de un perfil recurrente.
Backend
- Servicios:
recurring-invoicesyrecurring-invoice-items(create),invoices(patch).
Relaciones
- Requiere: factura abierta desde Finance sin perfil recurrente.
- Dispara / afecta: perfil recurrente, sus líneas y vínculo de factura.
id: public-invoice modulo: invoices app: finance nombre: Compartir factura pública tipo: publico
Compartir factura pública
Publica la factura para consulta del cliente sin sesión iniciada.
Que se logra
- Resultado: el cliente consulta el documento y, cuando corresponde, accede al cobro sin entrar al CRM.
- Caso de uso: un proveedor comparte una factura por WhatsApp con un comprador externo.
- Se combina con: Payment Links, Actividad del cliente y PDF.
Donde esta
- Ruta:
/i/[path] - Acceso en UI: detalle de factura >
Share>Direct link
Como funciona
- Abre la vista previa de una factura.
- Selecciona
ShareyDirect link. - Comparte la URL
/i/[path]; el cliente puede consultar el documento, PDF y archivos publicados.
Reglas y validaciones
- La página usa la plantilla de la factura y registra aperturas anónimas.
- Si existe un Payment Link abierto vinculado, la vista pública puede ofrecer
Pay now.
Backend
- Servicios:
public-quote-preview,public-quote-pdf,public-quote-filesypublic-quote-engagement(create).
Relaciones
- Requiere: factura guardada con ruta pública.
- Dispara / afecta: actividad de cliente y documentos descargables.
id: register-payment modulo: invoices app: finance nombre: Registrar pago desde factura tipo: accion
Registrar pago desde factura
Aplica a la factura un importe disponible de pagos activos relacionados.
Que se logra
- Resultado: un pago existente reduce el saldo y actualiza el estado de la factura correspondiente.
- Caso de uso: una empresa aplica una transferencia recibida a la factura del cliente que la originó.
- Se combina con: Pagos recibidos e Historial de pagos relacionados.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: barra de documento o panel de pagos >
Register Payment
Como funciona
- Pulsa
Register Payment. - Revisa los pagos sugeridos, ajusta los importes o busca otro pago por número o referencia.
- Guarda la asignación y revisa el saldo actualizado.
Reglas y validaciones
- Solo aparecen pagos
activecon importe sin asignar; primero se sugieren los relacionados por contacto, compañía, deal, cotización o enlace. - El importe no puede superar el saldo de la factura ni el disponible del pago.
Backend
- Servicios:
invoice-payments(create),payments(find/patch),invoices(get/patch). - Efectos: actualiza saldo e importe pagado; la factura pasa a
partially_paidopaid.
Relaciones
- Requiere: factura pendiente y pago activo con importe disponible.
- Dispara / afecta: asignaciones, saldo y estado de la factura.
id: send-invoice-email modulo: invoices app: finance nombre: Enviar factura por correo tipo: accion
Enviar factura por correo
Entrega la factura mediante el diálogo de correo y sus destinatarios relacionados.
Que se logra
- Resultado: el cliente recibe una factura consultable desde un enlace público en su correo.
- Caso de uso: una firma de servicios envía al área de cuentas por pagar la factura del mes.
- Se combina con: Factura pública, Actividad del cliente y Payment Links.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI:
Share>Send email
Como funciona
- Abre
Sharey seleccionaSend email. - Especifica destinatarios, asunto y mensaje.
- Envía y deja que el detalle recargue la factura.
Reglas y validaciones
- El diálogo requiere destinatario; permite guardar y agregar un email a un contacto relacionado.
Backend
- Servicios:
send-document-email(create),invoices(get).
Relaciones
- Requiere: factura guardada y destinatario.
- Dispara / afecta: entrega por email y consulta pública.
id: orders app: finance nombre: Pedidos estado: beta permiso: can_access_orders
Pedidos
Registro de ventas con artículos, pago y entrega en un mismo lugar, inspirado en Shopify. Un pedido puede nacer del checkout del catálogo público, del asistente de IA, de una creación manual, de la conversión de una cotización o factura, o de la API.
Para que sirve
- Una tienda de ropa recibe pedidos pagados desde su catálogo público y los prepara por envío o recogida en tienda.
- Un distribuidor convierte una cotización aceptada en pedido y luego factura cuando despacha.
- Un restaurante con WhatsApp deja que el asistente de IA tome el pedido, envíe el link de pago y marque la entrega.
- Un negocio B2B registra pedidos manuales con referencia de orden de compra y cobra el saldo con un enlace de pago.
- Un ecommerce recupera carritos abandonados con un mensaje automático que lleva el link de recuperación.
Que lo hace diferente
- Tres estados independientes por pedido: estado del pedido (
Draft,Open,Completed,Cancelled), estado de pago y estado de entrega, como en Shopify. - Cobra con las pasarelas propias de la organización (Stripe o Wompi) mediante enlaces de pago; el pago confirmado actualiza el pedido sin intervención.
- Entregas parciales con transportista, número y URL de seguimiento que el comprador ve en su página pública
/o/{path}. - Conversión en ambos sentidos con cotizaciones y facturas, conservando cliente, moneda y artículos.
- Inventario opcional por producto: el pedido reserva stock al colocarse y lo libera al cancelarse.
- 13 tools de IA en la categoría
Orderspara que el asistente cree, consulte, cobre y entregue pedidos desde una conversación.
Acceso
- Ruta principal:
/[orgId]/finance/orders - Como se llega:
Finance > Sales > Orders - Permiso requerido:
can_access_orders(más permisos granularescan_view_own_orders,can_view_all_orders,can_create_orders,can_edit_own_orders,can_edit_all_orders,can_delete_own_orders,can_delete_all_orders)
Alcance tecnico
- Frontend:
OrdersView,OrderEditForm,OrderDetail,CreateFulfillmentDialog,AbandonedCheckoutsView,AbandonedCheckoutDetail,PublicOrderPage. - Backend:
orders,order-items,order-fulfillments,orders-change-history,checkouts,public-order-preview,public-catalog-checkout,payment-links. - Superficies publicas:
/o/[path](página del pedido) y/c/[orgId]/[slug]/checkout(checkout del catálogo).
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear pedido | create-order.md | Crea un pedido manual como borrador o colocado, con artículos, descuento, envío y entrega. |
| Cobrar un pedido | order-payments.md | Genera un enlace de pago por el saldo y actualiza el estado de pago al cobrar. |
| Entregar artículos | order-fulfillment.md | Registra envíos o recogidas parciales con seguimiento. |
| Convertir pedidos | order-conversions.md | Convierte cotizaciones o facturas en pedido y pedidos en factura. |
| Checkouts abandonados | abandoned-checkouts.md | Lista compradores que no terminaron y comparte el link de recuperación. |
| Página pública del pedido | public-order-page.md | Muestra al comprador estado, pago, artículos y seguimiento en /o/[path]. |
Relaciones
- Depende de: Productos, Payment Gateways, Payment Links, Document templates (numeración
order) y Contactos. - Usado por: Catálogos públicos (checkout), asistente de IA, Automatizaciones (5 triggers de pedidos), Cotizaciones y Facturas.
Limitaciones y notas
- No calcula impuestos ni admite productos de suscripción.
- Solo se pueden eliminar pedidos en borrador o cancelados sin pagos.
- Cancelar no reembolsa automáticamente los pagos recibidos.
- El comprador recibe correos al colocar el pedido, al pagarlo y cuando un envío queda listo para recoger, en tránsito o entregado. Para WhatsApp u otros canales se usan los triggers de pedidos.
id: abandoned-checkouts modulo: orders app: finance nombre: Checkouts abandonados tipo: vista
Checkouts abandonados
Lista compradores que iniciaron el checkout del catálogo, dejaron su correo o teléfono y no completaron el pedido.
Que se logra
- Resultado: el equipo ve el carrito, el total y los datos del comprador, y comparte un link que restaura el checkout.
- Caso de uso: una tienda de cosméticos revisa cada mañana los carritos no recuperados y envía el link por WhatsApp a los de mayor valor.
- Se combina con: Catálogos públicos y el trigger
Checkout abandoned.
Donde esta
- Ruta:
/[orgId]/finance/abandoned-checkouts - Acceso en UI:
Finance > Sales > Abandoned checkouts
Como funciona
- Filtra por
All,Not recoveredoRecoveredy busca por cliente. - Abre un checkout para ver
Cart,DeliveryyCustomer. - Pulsa
Copy recovery linky envíalo al comprador; el link reabre su checkout con el carrito. - Si terminó comprando,
View orderlleva al pedido.
Reglas y validaciones
- Un checkout aparece cuando el comprador deja correo o teléfono; antes el carrito vive solo en su navegador.
- Se considera abandonado después del tiempo
Mark checkout as abandoned after (minutes)del catálogo (mínimo 5, por defecto 60). Recoveredindica que el checkout terminó en pedido.
Backend
- Servicios:
checkouts(find, get),public-catalog-checkout(save, restore). - Hooks relevantes: descriptor date-based
checkout-abandoned.
Relaciones
- Requiere: catálogo con checkout habilitado.
- Dispara / afecta: trigger
Checkout abandonedconrecovery_url.
id: create-order modulo: orders app: finance nombre: Crear pedido tipo: accion
Crear pedido
Crea un pedido manual con cliente, moneda, artículos y entrega, guardado como borrador o colocado directamente.
Que se logra
- Resultado: queda un pedido numerado con total, saldo pendiente y estados de pago y entrega listos para seguimiento.
- Caso de uso: un distribuidor registra un pedido telefónico con la referencia de orden de compra del cliente y lo coloca para reservar inventario.
- Se combina con: Productos, Payment Links y Automatizaciones (
New order placed).
Donde esta
- Ruta:
/[orgId]/finance/orders/new - Acceso en UI:
Orders>New order
Como funciona
- Selecciona el cliente (
Customer), la moneda (Currency) y la numeración (Numbering). - Agrega artículos con
Search productso escribiendo el nombre; ajustaQtyyPrice. - Define
Discount(porcentaje o fijo),ShippingyAdjustment. - Elige
Delivery:No delivery,Shipping(con dirección) oPickup. - Pulsa
Save as draftpara guardar sin efectos, oPlace orderpara colocarlo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Customer | selector de contacto | Sí | Copia nombre, correo y teléfono al pedido. |
| Currency | lista | Sí | Monedas habilitadas en la organización. |
| Numbering | lista | Sí | Esquemas de numeración de tipo order. |
| Reference | texto | No | Orden de compra o referencia externa. |
| Items | tabla | Sí | Al menos un artículo con nombre. Muestra Converted from o Fixed price for this currency según el precio del producto. |
| Discount / Shipping / Adjustment | importe | No | El descuento puede ser % o Fixed. |
| Delivery | selector | No | Con Shipping pide dirección (nombre, teléfono, dirección, ciudad, estado, código postal, país ISO). |
| Customer note / Internal notes | texto | No | La nota interna no la ve el comprador. |
Reglas y validaciones
- Solo se pueden editar pedidos en
DraftuOpen. - Colocar el pedido (
DraftaOpen) reserva inventario de productos conTrack inventory, envía correo de confirmación al comprador, notifica a miembros y disparaNew order placed. - Un borrador no dispara automatizaciones ni reserva stock.
Backend
- Servicios:
orders(create, patch),order-items,products,document-setting. - Efectos: confirmación por correo al cliente con link
/o/{path}, notificación in-app y por correo al propietario, registro enorders-change-history.
Relaciones
- Requiere: un esquema de numeración
ordery un contacto. - Dispara / afecta: inventario, trigger
New order placed, página pública del pedido.
id: order-conversions modulo: orders app: finance nombre: Convertir pedidos tipo: accion
Convertir pedidos
Convierte una cotización o factura en pedido, y un pedido en factura, conservando cliente, moneda y artículos.
Que se logra
- Resultado: el documento de origen queda enlazado con el pedido y se evita volver a capturar artículos.
- Caso de uso: una agencia convierte la cotización aceptada en pedido para seguir el pago y la entrega, y factura desde el pedido al terminar.
- Se combina con: Cotizaciones, Facturas y Payments received.
Donde esta
- Ruta:
/[orgId]/finance/estimates/[id],/[orgId]/finance/invoices/[id]y/[orgId]/finance/orders/[id] - Acceso en UI: vista del documento >
Convert to order; detalle del pedido >More actions>Create invoice
Como funciona
- Desde una cotización o factura pulsa
Convert to order. - Elige
Create draftoCreate and place order. - Desde un pedido pulsa
More actions>Create invoice, eligeInvoice numberingy confirma. - Los enlaces
View invoice,View estimateyOrder {{number}}llevan entre documentos.
Reglas y validaciones
- Una cotización convertida a pedido se factura desde el pedido (
Converted to order ... Create the invoice from the order). - Al convertir una factura en pedido, los pagos aplicados a la factura se reflejan en el pedido.
- Al crear la factura desde el pedido, los pagos ya recibidos se aplican a la factura.
- La fuente del pedido queda como
EstimateoInvoice.
Backend
- Servicios:
orders,estimates,invoices,payments. - Efectos: enlaza
estimate_id/invoice_iden el pedido y registra el cambio en el historial.
Relaciones
- Requiere: un esquema de numeración
order(yinvoicepara facturar). - Dispara / afecta:
New order placedsi se crea colocado.
id: order-fulfillment modulo: orders app: finance nombre: Entregar artículos tipo: accion
Entregar artículos
Registra envíos o recogidas, completos o parciales, con transportista y seguimiento.
Que se logra
- Resultado: el pedido muestra qué se entregó, su estado pasa a
Partially fulfilledoFulfilledy el comprador recibe un correo y ve el seguimiento en/o/{path}. - Caso de uso: una tienda envía 2 de 3 productos hoy con número de guía y despacha el tercero cuando llega el stock.
- Se combina con: el trigger
Order fulfillment updatedpara avisar al cliente por WhatsApp o correo.
Donde esta
- Ruta:
/[orgId]/finance/orders/[id] - Acceso en UI: detalle del pedido >
Fulfill items
Como funciona
- Pulsa
Fulfill items. - Indica la cantidad por artículo (hasta lo pendiente en
Remaining). - Elige
Statusy, si aplica,Carrier,Tracking numberyTracking URL. - Pulsa
Create fulfillment. Después cambia el estado desde la secciónFulfillmentsconUpdate status.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Quantity por artículo | número | Al menos uno | No supera la cantidad pendiente. |
| Status | lista | Sí | Pending, Ready for pickup, In transit, Delivered, Cancelled. |
| Carrier / Tracking number / Tracking URL | texto | No | Se muestran al comprador. |
| Notes | texto | No | Notas del envío. |
Reglas y validaciones
- Solo cuentan como entregados los envíos en
Ready for pickup,In transitoDelivered. - El estado de entrega se recalcula:
Unfulfilled,Partially fulfilledoFulfilled.Returnedse mantiene si se marcó. - Cada cambio de estado de entrega dispara
Order fulfillment updatedcon el estado anterior. - Cuando un envío pasa a
Ready for pickup,In transitoDelivered, el comprador recibe un correo con los artículos, transportista, número de guía, botónTrack shipment(si hay URL) y link a su pedido. Para recogida incluye el punto de recogida.
Backend
- Servicios:
order-fulfillments(create, patch),orders. - Hooks relevantes:
prepare-order-fulfillment,sync-order-after-fulfillment(recalcula el pedido y envía el correo al comprador).
Relaciones
- Requiere: un pedido
Opencon artículos pendientes. - Dispara / afecta:
fulfilled_quantitypor artículo, estado de entrega y triggerOrder fulfillment updated.
id: order-payments modulo: orders app: finance nombre: Cobrar un pedido tipo: accion
Cobrar un pedido
Genera un enlace de pago por el saldo pendiente con una pasarela activa y actualiza el pedido cuando el cliente paga.
Que se logra
- Resultado: el cliente recibe un link de pago y el pedido pasa a
PaidoPartially paidautomáticamente al confirmarse el cobro. - Caso de uso: una tienda que vende por WhatsApp coloca el pedido, copia el link y lo envía al cliente para que pague con tarjeta.
- Se combina con: Payment Gateways, Payment Links, Payments received y el trigger
Order paid.
Donde esta
- Ruta:
/[orgId]/finance/orders/[id] - Acceso en UI: detalle del pedido >
Collect payment
Como funciona
- Abre el pedido y pulsa
Collect payment. - Elige
Payment gatewayentre las pasarelas activas compatibles con la moneda. - Pulsa
Create payment link; el link queda copiado y visible enPayments. - Cuando el cliente paga, se crea el pago recibido y el pedido recalcula
PaidyBalance due.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Payment gateway | lista | Sí | Solo pasarelas activas; Wompi solo aparece en pedidos en COP. |
Reglas y validaciones
- El enlace se crea por el saldo pendiente. Si ya hay un enlace abierto con la misma pasarela y saldo, se reutiliza; si el saldo cambió, el anterior se cancela.
- Estados de pago:
Unpaid,Payment pending(hay link abierto),Partially paid,Paid,Partially refunded,Refunded,Voided. - Si el pedido ya tiene factura, los pagos de la factura cuentan para el pedido.
- Al quedar totalmente pagado se envía recibo por correo al comprador, se notifica a los miembros y se dispara
Order paid; si el catálogo tieneCreate invoice when paid, se crea la factura. - Al cancelar el pedido se cancelan sus enlaces abiertos.
Backend
- Servicios:
orders,payment-links,public-payment-charge,payments. - Hooks relevantes:
record-payment-link-paid(crea el pago y recalcula el pedido).
Relaciones
- Requiere: una pasarela Stripe o Wompi activa en
Settings > Payment gateways. - Dispara / afecta: estado de pago, trigger
Order paid, factura automática opcional.
id: public-order-page modulo: orders app: finance nombre: Página pública del pedido tipo: publico
Página pública del pedido
Página sin inicio de sesión donde el comprador consulta su pedido, paga el saldo y sigue la entrega.
Que se logra
- Resultado: el comprador tiene un único link para ver estado, pago, artículos y seguimiento sin escribir al negocio.
- Caso de uso: un cliente de una tienda online abre el link del correo de confirmación, paga con tarjeta y después revisa el número de guía.
- Se combina con: Payment Links (botón de pago) y Entregas (seguimiento).
Donde esta
- Ruta:
/o/[path] - Acceso en UI: link del correo de confirmación, redirección tras el checkout, o detalle del pedido >
More actions>Copy order page link
Como funciona
- El comprador abre el link y ve los estados del pedido, pago y entrega.
- Si hay saldo y un enlace de pago abierto, aparece
Pay nowcon el formulario embebido o la redirección a la pasarela. - Si eligió pagar después, ve las instrucciones de pago configuradas en el catálogo.
- Consulta artículos, totales, datos de entrega y envíos con transportista y link de seguimiento.
Reglas y validaciones
- El idioma y la marca son los de la organización.
- Tras pagar con verificación 3D Secure de Stripe, la página confirma el pago al volver.
- No muestra notas internas.
Backend
- Servicios:
public-order-preview(consulta porpublic_path),public-payment-charge(cobro y confirmación).
Relaciones
- Requiere: un pedido con
public_path. - Dispara / afecta: pago del pedido y trigger
Order paid.
id: payment-gateways app: finance nombre: Pasarelas de pago estado: shipped permiso: can_access_payments
Pasarelas de pago
Conecta credenciales Stripe o Wompi de la organización y comprueba que sus claves y webhooks están listos para cobros.
Para que sirve
- Un comercio conecta su propia cuenta Stripe para cobrar enlaces de pago a sus clientes.
- Una empresa colombiana conecta Wompi para recaudar cobros en COP.
- Un equipo financiero verifica una conexión antes de publicar enlaces y detecta claves, modos o webhooks incompletos.
- Una agencia administra más de una configuración de cobro de su organización sin mezclarla con la facturación de la plataforma.
Que lo hace diferente
- Las credenciales pertenecen a cada organización y se usan para sus Payment Links, separadas de la facturación SaaS de AchieveApex.
- La comprobación valida autenticación, compatibilidad entre modo de claves y configuración de webhooks antes de cobrar.
- Stripe y Wompi se conectan al mismo flujo de enlaces públicos, pagos recibidos, cotizaciones e invoices.
- La modalidad de cobro se elige por enlace —
Apex CheckoutoProvider Checkout— y no queda fijada al conectar la pasarela. - Los webhooks convierten la confirmación del proveedor en pagos recibidos sin duplicar el cobro si el evento se repite.
Acceso
- Ruta principal:
/[orgId]/settings/payment-gateways - Como se llega:
Avatar menu > Settings > Billing & Finance > Payment Gateways - Permiso requerido:
can_access_payments
Alcance tecnico
- Frontend:
PaymentGatewaysSettings - Backend:
organization-payment-gateways,stripe-payment-webhooks,wompi-webhooks,payment-gateway-health - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Conectar Stripe | connect-stripe.md | Guarda claves y URL webhook Stripe. |
| Conectar Wompi | connect-wompi.md | Conecta Wompi para COP. |
| Gestionar gateway de pago | manage-payment-gateway.md | Edita, predetermina o desactiva. |
| Procesar pagos de webhooks | payment-gateway-webhooks.md | Confirma cobros de proveedor. |
| Probar conexión del gateway | test-payment-gateway.md | Informa fallos y avisos de conexión. |
Relaciones
- Depende de: Payment Links, Estimates y Payments received.
- Usado por: módulos y documentos del flujo financiero.
Limitaciones y notas
- Los permisos granulares pueden restringir acciones según el rol de la organización.
id: connect-stripe modulo: payment-gateways app: finance nombre: Conectar Stripe tipo: integracion
Conectar Stripe
Guarda una conexión Stripe propia de la organización para cobros.
Que se logra
- Resultado: la organización puede usar su cuenta Stripe para aceptar cobros de sus clientes.
- Caso de uso: una agencia conecta Stripe para cobrar anticipos de propuestas aceptadas.
- Se combina con: Payment Links, Apex Checkout y Checkout del proveedor.
Donde esta
- Ruta:
/[orgId]/settings/payment-gateways - Acceso en UI:
Settings > Billing & Finance > Payment Gateways > Add Gateway > Stripe - Componente(s):
PaymentGatewaysSettings.tsx
Como funciona
- Selecciona
Stripe. - Completa
Display name,Publishable keyySecret key; opcionalmente marcaSet as default. - Pulsa
Connect gateway, vuelve a editarlo, copia la URL mostrada y añadeWebhook signing secret.
Reglas y validaciones
- Se guardan credenciales del gateway de la organización; los secretos no se devuelven tras guardarse.
- Servicios:
organization-payment-gatewaysystripe-payment-webhooks.
Backend
- La clave pública debe comenzar por
pk_; la secreta porsk_ork_. - El webhook debe incluir
checkout.session.completedypayment_intent.succeeded. - Servicios:
organization-payment-gateways(create, patch) ystripe-payment-webhooks(create).
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: connect-wompi modulo: payment-gateways app: finance nombre: Conectar Wompi tipo: integracion
Conectar Wompi
Guarda una conexión Wompi para cobros colombianos en COP.
Que se logra
- Resultado: la organización puede recaudar pagos en COP mediante su cuenta Wompi.
- Caso de uso: un centro médico colombiano publica enlaces para cobrar depósitos de consulta.
- Se combina con: Payment Links, Apex Checkout y Checkout del proveedor.
Donde esta
- Ruta:
/[orgId]/settings/payment-gateways - Acceso en UI:
Settings > Billing & Finance > Payment Gateways > Add Gateway > Wompi - Componente(s):
PaymentGatewaysSettings.tsx
Como funciona
- Selecciona
Wompi. - Ingresa
Display name,Public key,Private key,Integrity secretyEvents secret. - Copia la
Events URLindicada y configúrala en Wompi; pulsaConnect gateway.
Reglas y validaciones
- Wompi admite cobros en COP.
- Servicios:
organization-payment-gatewaysywompi-webhooks.
Backend
- Wompi exige claves pública/privada, secreto de integridad y secreto de eventos; las claves deben pertenecer ambas a sandbox o producción.
- Wompi solo admite COP.
- Servicios:
organization-payment-gateways(create, patch) ywompi-webhooks(create).
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: manage-payment-gateway modulo: payment-gateways app: finance nombre: Gestionar gateway de pago tipo: configuracion
Gestionar gateway de pago
Permite cambiar el nombre, las credenciales, el gateway predeterminado y el estado de una conexión.
Que se logra
- Resultado: los cobros usan una configuración vigente y controlada por la organización.
- Caso de uso: una empresa sustituye claves de Stripe sin recrear su catálogo de cobros.
- Se combina con: Payment Links y Probar conexión del gateway.
Donde esta
- Ruta:
/[orgId]/settings/payment-gateways - Acceso en UI:
Payment Gateways > lápiz,Set defaulto icono de bloqueo - Componente(s):
PaymentGatewaysSettings.tsx
Como funciona
- Usa el lápiz para editar una conexión y pulsa
Save changes. - Deja un secreto vacío para conservar el ya configurado.
- Usa
Set defaultpara nuevas payment links, o confirmaDeactivatepara inactivarla.
Reglas y validaciones
- Al desactivar, el gateway deja de usarse en payment links nuevas.
- Solo queda un predeterminado al marcar
Set as default. - Servicios:
organization-payment-gateways(find, create, patch).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: payment-gateway-webhooks modulo: payment-gateways app: finance nombre: Procesar pagos de webhooks tipo: integracion
Procesar pagos de webhooks
Recibe confirmaciones de pago de los gateways conectados y marca la payment link como pagada.
Que se logra
- Resultado: una confirmación del proveedor se convierte en un pago recibido sin duplicar el registro.
- Caso de uso: un comercio recibe la confirmación de Stripe después de que el cliente pagó un enlace hospedado.
- Se combina con: Payment Links y Pagos recibidos.
Donde esta
- Ruta: no tiene pantalla propia.
- Acceso en UI: configura la URL mostrada al editar Stripe o Wompi.
Como funciona
- Stripe envía los eventos configurados a su URL específica del gateway; Wompi envía eventos a su URL global.
- El backend valida el secreto, identifica la payment link y registra el pago sin duplicarlo.
Reglas y validaciones
- Servicios:
stripe-payment-webhooksywompi-webhooks(create). - Efectos: crea el pago interno, marca la payment link como
paidy puede aceptar el estimate asociado.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: test-payment-gateway modulo: payment-gateways app: finance nombre: Probar conexión del gateway tipo: integracion
Probar conexión del gateway
Verifica las claves y la configuración de webhooks directamente contra Stripe o Wompi.
Que se logra
- Resultado: el equipo detecta si una pasarela está lista para cobrar antes de compartir un enlace.
- Caso de uso: una empresa verifica sus nuevas claves y webhook de Stripe tras cambiar de entorno.
- Se combina con: Conectar Stripe, Conectar Wompi y Payment Links.
Donde esta
- Ruta:
/[orgId]/settings/payment-gateways - Acceso en UI:
Payment Gateways > icono de corazón > Test connection - Componente(s):
PaymentGatewaysSettings.tsx
Como funciona
- Pulsa el corazón desde la tabla o
Test connectionen edición. - Revisa cada comprobación y usa
Re-rundespués de corregirla.
Reglas y validaciones
- Muestra
Healthy,Needs attentionoFailed. Los avisos no bloquean; los fallos sí. - Stripe verifica autenticación, formato/modo de claves, secreto y endpoint/eventos. Wompi verifica merchant, clave privada, secretos y coherencia sandbox/producción; la URL de eventos es informativa.
- Servicio:
payment-gateway-health(create); conserva el último resultado en el gateway.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: payment-links app: finance nombre: Enlaces de pago estado: shipped permiso: can_access_payments
Enlaces de pago
Los enlaces de pago preparan un cobro individual con un gateway de la organización. Pueden ser independientes o proceder de Amount to collect en una cotización.
Para que sirve
- Una clínica envía a un paciente un enlace para cobrar el anticipo de un procedimiento antes de facturarlo.
- Una agencia cobra el primer pago de una propuesta aceptada desde la cotización del deal.
- Un comercio B2B crea un enlace asociado a una factura y permite al comprador abrir también el documento relacionado.
- Un negocio de servicios comparte un cobro puntual por Stripe o Wompi sin requerir acceso al CRM.
Que lo hace diferente
- El enlace puede nacer de una cotización, factura, contacto, compañía o deal existentes, conservando el contexto comercial.
- Cada enlace elige su gateway y modalidad:
Apex Checkoutintegrado oProvider Checkouthospedado por Stripe o Wompi. - La página pública conserva identidad visual y idioma de la organización y expone solo los documentos financieros que correspondan al pagador.
- Un cobro confirmado crea un pago recibido idempotente y, cuando procede, actualiza la cotización vinculada a aceptada.
- Las facturas relacionadas se pueden liquidar después mediante la aplicación de pagos, incluso de forma parcial.
Acceso
- Ruta principal:
/[orgId]/finance/payment-links - Como se llega:
Finance > Sales > Payment Links - Permiso requerido:
can_access_payments
Alcance tecnico
- Frontend: rutas Finance;
PaymentLinksView,PaymentLinkEditForm,PaymentLinkDetail - Backend:
payment-links,public-payment-charge,payment-gateway-health - Superficies publicas:
/payment-links/[token]
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Usar Apex Checkout | apex-checkout.md | Cobra con el formulario de AchieveApex y el gateway conectado. |
| Crear enlace de pago | create-payment-link.md | Define importe, moneda, gateway, método y relaciones opcionales. |
| Gestionar enlace de pago | manage-payment-link.md | Copia, abre, cambia gateway/método o cancela un enlace abierto. |
| Abrir documentos relacionados | payment-link-related-documents.md | Lleva a la cotización o factura asociada desde el detalle. |
| Consultar estado de cobro | payment-link-status.md | Distingue borrador, abierto, pagado, vencido y cancelado. |
| Usar checkout del proveedor | provider-checkout.md | Redirige al checkout hospedado por Stripe o Wompi. |
| Pagar desde página pública | public-payment-page.md | Permite al cliente pagar en /payment-links/[token]. |
Relaciones
- Depende de: Payment Gateways, Payments received, Estimates e Invoices.
- Usado por: cotizaciones, facturas, pagos recibidos y gateways de pago.
Limitaciones y notas
- La configuración de credenciales vive en
Payment Gateways; el método de cobro se elige por enlace. - Wompi solo admite enlaces en COP.
id: apex-checkout modulo: payment-links app: finance nombre: Usar Apex Checkout tipo: publico
Usar Apex Checkout
Cobra dentro de la página de AchieveApex usando el gateway configurado para el enlace.
Que se logra
- Resultado: el pagador completa el cobro en una página de Apex sin ser redirigido al proveedor.
- Caso de uso: una clínica cobra el anticipo de una consulta desde un enlace con su marca.
- Se combina con: Payment Gateways, Página pública de pago y Pagos recibidos.
Donde esta
- Ruta:
/payment-links/[token] - Acceso en UI: enlace con
Apex Checkout>Pay now
Como funciona
- El cliente abre la URL copiada del enlace.
- Pulsa
Pay now. - Completa el formulario Stripe o el widget Wompi y espera la confirmación.
Reglas y validaciones
direct_chargees el método interno de Apex Checkout.- Stripe prepara un PaymentIntent y puede requerir 3DS; Wompi abre su widget inmediatamente y solo admite COP.
- Una confirmación exitosa marca el enlace como pagado y crea un Received Payment; el pago puede quedar sin asignar a factura.
Backend
- Servicios:
public-payment-charge(preview/prepare/confirm),payments(create interno),payment-links(patch). - Efectos: Stripe y Wompi también pueden confirmar por webhook como respaldo.
Relaciones
- Requiere: enlace público abierto con gateway compatible.
- Dispara / afecta: pago recibido, estado del enlace y cotización asociada.
id: create-payment-link modulo: payment-links app: finance nombre: Crear enlace de pago tipo: accion
Crear enlace de pago
Crea una solicitud de cobro con gateway, método y numeración de Received Payment.
Que se logra
- Resultado: se publica un cobro trazable para una necesidad comercial concreta.
- Caso de uso: una empresa de eventos solicita el depósito de reserva asociado al deal del cliente.
- Se combina con: Payment Gateways, Cotizaciones, Facturas y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/finance/payment-links/new - Acceso en UI:
Payment Links>New Payment Link
Como funciona
- Introduce importe, moneda, etiqueta y descripción.
- Elige
Payment numbering, gateway y método de cobro. - Asocia opcionalmente contacto, compañía, deal, cotización o factura.
- Pulsa
Createy copia la URL desde el detalle.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Amount / Currency | importe/lista | Sí | El importe debe ser positivo. |
| Payment numbering | lista | Sí | Determina el número del pago al cobrar. |
| Gateway / Collection method | lista | Sí | Usa gateways activos y métodos compatibles. |
| Label / Description | texto | Label no | Identifica el cobro en el listado. |
| Associations | selector | No | Incluye pestañas para Estimate e Invoice en esta pantalla. |
Reglas y validaciones
- Wompi solo puede elegirse con moneda COP.
- Al elegir una cotización o factura, el formulario puede completar relaciones, importe, moneda y numeración que ya existan.
Backend
- Servicios:
payment-links(create),organization-payment-gatewaysydocument-setting(find). - Efectos: prepara el checkout adecuado para Stripe/Wompi y deja el enlace en estado
open.
Relaciones
- Requiere: importe positivo, moneda, numeración, gateway y método.
- Dispara / afecta: checkout del proveedor y futuro pago recibido.
id: manage-payment-link modulo: payment-links app: finance nombre: Gestionar enlace de pago tipo: accion
Gestionar enlace de pago
Permite compartir, abrir, cambiar la configuración de cobro o cancelar un enlace pendiente.
Que se logra
- Resultado: el equipo controla el canal de cobro sin recrear la relación con el cliente o documento.
- Caso de uso: una agencia reemplaza el gateway de un cobro aún abierto y vuelve a compartirlo.
- Se combina con: Payment Gateways, Estado de cobro y Documentos relacionados.
Donde esta
- Ruta:
/[orgId]/finance/payment-links/[id] - Acceso en UI:
Payment Links> abrir una fila
Como funciona
- Abre el enlace desde el listado.
- Usa
Copy linkoOpenpara entregar o comprobar la URL del cliente. - En
ProvideroCollection method, selecciona otra opción compatible cuando esté habilitada. - Pulsa
Cancel linksi el cobro ya no debe recibirse.
Reglas y validaciones
- Solo enlaces
opensin pago asociado permiten cambiar gateway o método; los pagados, vencidos y cancelados no. - Wompi se oculta entre los gateways alternativos si la moneda del enlace no es COP.
- Cambiar gateway o método vuelve a preparar el checkout y, si viene de una cotización, sincroniza su configuración de cobro.
Backend
- Servicios:
payment-links(get/patch),organization-payment-gateways(find/get),payments(find).
Relaciones
- Requiere: Payment Link existente.
- Dispara / afecta: URL del cliente y configuración de cobro de la cotización vinculada.
id: payment-link-related-documents modulo: payment-links app: finance nombre: Abrir documentos relacionados tipo: publico
Abrir documentos relacionados
Navega desde el enlace a los registros comerciales y financieros que originaron el cobro.
Que se logra
- Resultado: el pagador puede revisar la cotización o factura que sustenta el importe solicitado.
- Caso de uso: un comprador abre la propuesta asociada antes de pagar el anticipo.
- Se combina con: Cotizaciones públicas, Facturas públicas y Página pública de pago.
Donde esta
- Ruta:
/[orgId]/finance/payment-links/[id] - Acceso en UI: detalle > sección
Related
Como funciona
- Abre un Payment Link.
- Revisa las filas de Contact, Company, Deal, Estimate e Invoice que estén asociadas.
- Pulsa una fila para abrir ese registro; las cotizaciones y facturas conservan el contexto Finance.
Reglas y validaciones
- La vista muestra nombres y totales resueltos cuando están disponibles, además de los estados de Estimate/Invoice.
- La página pública solo expone documentos relacionados que sean cotización o factura, no contactos, compañías ni deals.
Backend
- Servicios:
payment-links(get),contacts,companies,deals,estimateseinvoices(get).
Relaciones
- Requiere: al menos una relación guardada en el enlace.
- Dispara / afecta: navegación a CRM, Finance y documentos públicos.
id: payment-link-status modulo: payment-links app: finance nombre: Consultar estado de cobro tipo: vista
Consultar estado de cobro
Muestra si una solicitud de pago todavía se puede cobrar o ya quedó resuelta.
Que se logra
- Resultado: ventas y cobros distinguen enlaces utilizables de enlaces ya pagados, vencidos o cancelados.
- Caso de uso: un comercio detecta que debe enviar un nuevo enlace tras vencer el anterior.
- Se combina con: Gestionar enlace de pago y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/finance/payment-linksy/[orgId]/finance/payment-links/[id] - Acceso en UI: tabla
Payment Links> columnaStatus, o badge del detalle
Como funciona
- Filtra el listado por estado o abre un enlace.
- Revisa el badge y, en el detalle, fecha de pago, estado del proveedor y referencia externa.
- Abre la tabla
Received paymentspara comprobar el pago registrado.
Reglas y validaciones
- Estados:
draft,open,paid,expiredycancelled. - Solo
openadmite cancelación y pago. El detalle avisa si existen pagos pero el enlace aún indicaopen.
Backend
- Servicios:
payment-links(find/get/patch),payments(find).
Relaciones
- Requiere: Payment Link accesible desde Finance.
- Dispara / afecta: capacidad de cobrar, cancelar o cambiar el enlace.
id: provider-checkout modulo: payment-links app: finance nombre: Usar checkout del proveedor tipo: integracion
Usar checkout del proveedor
Redirige al checkout hospedado por Stripe o Wompi, en vez de cobrar dentro de AchieveApex.
Que se logra
- Resultado: el cliente paga en la experiencia hospedada del proveedor conectado.
- Caso de uso: un comercio usa el checkout de Stripe para un cobro puntual enviado por correo.
- Se combina con: Payment Gateways, Página pública de pago y Pagos recibidos.
Donde esta
- Ruta: URL externa del enlace
- Acceso en UI: Payment Link configurado con
Provider Checkout>Open
Como funciona
- Crea o abre un enlace
open. - Elige
Provider CheckoutenCollection method. - Comparte la URL externa o pulsa
Open; el cliente completa el checkout del proveedor.
Reglas y validaciones
checkout_apies el método interno; el backend prepara una Checkout Session de Stripe o un enlace alojado de Wompi.- El webhook del gateway registra el pago y marca el enlace como
paid. - Un proveedor sin este método compatible vuelve al método predeterminado de ese proveedor.
Backend
- Servicios:
payment-links(create/patch),stripe-payment-webhooks,wompi-webhooks,payments(create interno).
Relaciones
- Requiere: gateway Stripe o Wompi activo y enlace abierto.
- Dispara / afecta: checkout externo, webhook y pago recibido.
id: public-payment-page modulo: payment-links app: finance nombre: Pagar desde página pública tipo: publico
Pagar desde página pública
Permite al cliente consultar el importe y pagar sin credenciales de AchieveApex.
Que se logra
- Resultado: el cliente completa o inicia el pago desde un enlace público con la información necesaria para decidir.
- Caso de uso: un negocio de servicios envía por WhatsApp un enlace de pago para cobrar un depósito.
- Se combina con: Apex Checkout, Checkout del proveedor y Documentos relacionados.
Donde esta
- Ruta:
/payment-links/[token],/payment-links/[token]/successy/payment-links/[token]/cancel - Acceso en UI: URL compartida con
Copy linkoOpen
Como funciona
- Abre la URL pública.
- Revisa importe, moneda y, cuando existan, documentos relacionados.
- Pulsa
Pay now; después de la respuesta se muestra éxito o cancelación. - En documentos relacionados, usa
OpenoPDFpara consultar la cotización o factura pública.
Reglas y validaciones
- La previsualización pública no expone contacto, compañía ni deal.
- Idioma, nombre y logo proceden de la configuración de la organización.
- Un enlace no abierto no se puede volver a cobrar.
Backend
- Servicios:
public-payment-charge(preview/prepare/confirm),public-quote-pdf(create). - Efectos: tras el cobro crea el pago, marca el enlace
paidy puede aceptar la cotización ligada.
Relaciones
- Requiere: token público de un enlace abierto.
- Dispara / afecta: captura, pago recibido, cotización y documentos relacionados.
id: payments-made app: finance nombre: Payments Made estado: beta permiso: can_access_vendor_payments
Payments Made
Registra pagos a proveedores y los asigna a bills abiertos para reducir sus saldos.
Para que sirve
- Una distribuidora registra una transferencia a un proveedor y la reparte entre varias facturas abiertas.
- Una clínica aplica un pago parcial a una factura de equipos y consulta el saldo que falta por pagar.
- Un restaurante identifica el excedente de un pago recibido por su proveedor para usarlo en otras facturas del mismo proveedor.
- Una empresa de logística anula un pago registrado por error y recupera los saldos correctos de sus bills.
Que lo hace diferente
- Un solo pago puede asignarse a múltiples bills del mismo proveedor, y el sistema mantiene el importe aplicado y sin usar.
- Cada asignación actualiza automáticamente el saldo y el estado del bill, sin que el usuario edite deudas manualmente.
- Se integra con Bills, Vendors, monedas y la numeración documental compartida de Finance.
- Desde un bill abierto,
Record Paymentprecarga el proveedor y la factura para reducir errores de captura. - No procesa pagos bancarios ni aplica a Expenses; registra el pago y su asignación dentro del control de cuentas por pagar.
Acceso
- Ruta principal:
/[orgId]/finance/payments-made - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Payments Made - Permiso requerido:
can_access_vendor_paymentsy permisos de ver, crear, editar o eliminar pagos.
Alcance tecnico
- Frontend: rutas de lista, creación y detalle;
PaymentsMadeView,RecordVendorPaymentFormyVendorPaymentDetail. - Backend:
vendor-paymentsybill-payments. - Superficies publicas: ninguna.
- Integraciones externas: ninguna.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar pagos | vendor-payment-list.md | Busca y revisa pagos y monto sin usar. |
| Registrar pagos | record-vendor-payment.md | Crea un pago para un proveedor. |
| Asignar pagos a bills | allocate-payment-to-bills.md | Distribuye un pago entre saldos abiertos. |
| Actualizar saldos y estados | payment-allocation-effects.md | Sincroniza bill y pago tras cada asignación. |
| Anular o eliminar pagos | vendor-payment-lifecycle.md | Retira asignaciones y controla el ciclo de pago. |
Relaciones
- Depende de: Vendors, Bills y Currencies.
- Usado por: actualiza el saldo, monto pagado y estado de Bills.
- La configuración de numeración AP vive en
settings/document-settings; no se documenta aquí. Las plantillas se describen en Document Templates.
Limitaciones y notas
- Payments Made no aplica a Expenses.
- Un pago se numera al crearse, sin estado de borrador.
id: allocate-payment-to-bills modulo: payments-made app: finance nombre: Asignar pago a bills tipo: accion
Asignar pago a bills
Distribuye el importe de un pago entre bills abiertos o parcialmente pagados del proveedor.
Que se logra
- Resultado: un mismo pago reduce de forma controlada los saldos de una o varias facturas del mismo proveedor.
- Caso de uso: un restaurante distribuye una transferencia entre tres bills de alimentos para reflejar qué deudas quedaron cubiertas.
- Se combina con: registro de pago, Bills y actualización automática de saldos.
Donde esta
- Ruta:
/[orgId]/finance/payments-made/new - Acceso en UI: formulario > tabla de asignaciones
- Componente(s):
RecordVendorPaymentForm.tsx
Como funciona
- Selecciona un proveedor para cargar sus bills pagables.
- Introduce un importe por bill o usa
Pay in Full. - Usa
Clear Applied Amountpara limpiar todas las asignaciones. - Guarda para crear una asignación por cada importe distinto de cero.
Reglas y validaciones
- Una asignación no puede superar el saldo del bill.
- La suma asignada no puede superar el importe del pago.
- El formulario muestra importe pagado, usado y en exceso.
Backend
- Servicios:
bill-payments(create).
Relaciones
- Requiere: un vendor payment y bills del mismo proveedor.
- Dispara / afecta: saldo y estado de los bills.
id: payment-allocation-effects modulo: payments-made app: finance nombre: Actualizar saldos y estados por asignación tipo: automatizacion
Actualizar saldos y estados por asignación
Sincroniza automáticamente el bill y el pago después de crear, modificar o retirar una asignación.
Que se logra
- Resultado: los saldos y estados de los bills, así como el importe utilizado del pago, se mantienen sincronizados sin actualización manual.
- Caso de uso: una empresa de servicios aplica un pago parcial y observa inmediatamente el saldo restante de la factura y del pago.
- Se combina con: asignación de pagos a bills y ciclo de vida de bills.
Donde esta
- Ruta:
/[orgId]/finance/payments-made/[id] - Acceso en UI: detalle de pago > tabla de bills asignados
- Componente(s):
VendorPaymentDetail.tsx
Como funciona
- El sistema suma las asignaciones de cada bill.
- Actualiza su monto pagado, saldo y estado.
- Actualiza en el pago el importe asignado y el no asignado.
Reglas y validaciones
- Un bill queda
Open,Partially PaidoPaidsegún sus asignaciones. - No se permite sobreasignar.
Backend
- Servicios:
bill-payments(create, patch, remove),bills(patch),vendor-payments(patch).
Relaciones
- Requiere: una asignación de pago.
- Dispara / afecta: estado y balance de Bills, y monto sin usar del pago.
id: record-vendor-payment modulo: payments-made app: finance nombre: Registrar pago a proveedor tipo: accion
Registrar pago a proveedor
Crea un pago activo para un proveedor y permite documentar sus datos de pago.
Que se logra
- Resultado: queda registrado un desembolso al proveedor con su referencia, medio de pago y monto listo para aplicar.
- Caso de uso: una clínica registra una transferencia a su proveedor de equipos y reserva parte del importe para sus facturas abiertas.
- Se combina con: Vendors, Bills, asignación de pagos y Currencies.
Donde esta
- Ruta:
/[orgId]/finance/payments-made/new - Acceso en UI:
Payments Made > Record Paymento Bill detail >Record Payment - Componente(s):
RecordVendorPaymentForm.tsx
Como funciona
- Selecciona el proveedor.
- Indica importe, fecha, moneda y modo de pago.
- Incluye cargos bancarios, referencia y notas cuando aplique.
- Asigna importes a bills y usa
Save.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Proveedor, importe, fecha y moneda | Selección, número y fecha | Sí | Datos mínimos del pago. |
| Modo de pago | Selección | Sí | Incluye efectivo, cheque, transferencia, tarjetas, PayPal u otro. |
| Cargos, referencia y notas | Número y texto | No | Contexto del pago. |
Reglas y validaciones
- El pago se crea como
Activey recibe su número final inmediatamente. - Los parámetros
vendorIdybillIdpueden preseleccionar proveedor y bill.
Backend
- Servicios:
vendor-payments(create).
Relaciones
- Requiere: Vendors y Currencies.
- Dispara / afecta: crea asignaciones de bill cuando existen importes aplicados.
id: vendor-payment-lifecycle modulo: payments-made app: finance nombre: Anular o eliminar pagos a proveedores tipo: accion
Anular o eliminar pagos a proveedores
Retira un pago del flujo operativo conservando reglas de consistencia para sus asignaciones.
Que se logra
- Resultado: un pago aplicado puede anularse sin dejar saldos de bills desactualizados.
- Caso de uso: una empresa de logística revierte un pago registrado por error y recupera automáticamente los saldos de las facturas afectadas.
- Se combina con: asignación de pagos y actualización automática de saldos.
Donde esta
- Ruta:
/[orgId]/finance/payments-made/[id] - Acceso en UI: detalle >
VoidyDelete - Componente(s):
VendorPaymentDetail.tsx
Como funciona
- Usa
Voidsobre un pago activo. - El sistema retira primero sus asignaciones a bills.
- Después marca el pago como
Void. - Usa
Deletesolo cuando el pago no tiene asignaciones.
Reglas y validaciones
- Un pago no se puede eliminar si tiene asignaciones.
- Para pagos aplicados, el flujo recomendado es
Void. - La eliminación es lógica.
Backend
- Servicios:
vendor-payments(patch, remove),bill-payments(remove).
Relaciones
- Requiere: permiso de edición o eliminación de pagos.
- Dispara / afecta: recalcula saldo y estado de los bills afectados.
id: vendor-payment-list modulo: payments-made app: finance nombre: Consultar pagos a proveedores tipo: vista
Consultar pagos a proveedores
Lista los pagos registrados, su proveedor, bills asignados y monto sin usar.
Que se logra
- Resultado: el equipo encuentra pagos a proveedores, sus bills cubiertos y el importe todavía disponible para asignar.
- Caso de uso: una distribuidora revisa un pago por transferencia para confirmar qué facturas cubrió y cuánto quedó sin aplicar.
- Se combina con: detalle de pago, Bills y Vendors.
Donde esta
- Ruta:
/[orgId]/finance/payments-made - Acceso en UI:
Purchases > Payments Made - Componente(s):
PaymentsMadeView.tsx
Como funciona
- Busca un pago o filtra por estado.
- Ordena columnas, configura visibilidad o navega páginas.
- Abre una fila para consultar sus asignaciones.
Reglas y validaciones
- La tabla incluye fecha, número, referencia, proveedor, bills, modo, estado, importe y monto sin usar.
Backend
- Servicios:
vendor-payments(find, get).
Relaciones
- Requiere: acceso a Payments Made.
- Dispara / afecta: enlaza con detalle de pago y bills asignados.
id: payments-received app: finance nombre: Pagos recibidos estado: shipped permiso: can_access_payments
Pagos recibidos
Los pagos recibidos registran dinero cobrado manualmente o desde un gateway y distribuyen su importe entre facturas. Se consultan tanto desde CRM como desde Finance.
Para que sirve
- Una empresa de servicios registra una transferencia recibida y la aplica a una o varias facturas abiertas.
- Una escuela cobra una parte de la matrícula y conserva el saldo restante de cada factura.
- Un comercio recibe un pago desde un enlace público y después lo asigna al documento correcto.
- Un despacho corrige una aplicación equivocada o anula un cobro sin perder el rastro del movimiento.
Que lo hace diferente
- Une los cobros de gateways y los pagos manuales en un solo registro de dinero recibido.
- Puede relacionar pagos con cotizaciones, enlaces de pago, contactos, compañías y deals del CRM.
- Separa la captura del dinero de su aplicación a facturas para admitir anticipos, pagos parciales y pagos que cubren varias facturas.
- Mantiene el saldo y estado de la factura actualizados tras aplicar, desasignar o anular un importe.
- Funciona desde CRM y desde el espacio Finance sobre los mismos documentos compartidos.
Acceso
- Ruta principal:
/[orgId]/paymentsy/[orgId]/finance/payments - Como se llega: sidebar CRM >
Paymentso selector de aplicación >Finance>Sales>Received Payments - Permiso requerido:
can_access_payments
Alcance tecnico
- Frontend: rutas CRM y Finance;
PaymentsView,PaymentDetail,RecordPaymentFormy diálogos de asignación - Backend:
paymentseinvoice-payments - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Asignar pago a facturas | apply-payment-to-invoices.md | Distribuye el importe disponible entre facturas con saldo. |
| Gestionar pagos parciales | partial-payments.md | Mantiene saldo y estado al cubrir solo una parte. |
| Consultar detalle de pago | payment-details.md | Muestra origen, relaciones y asignaciones. |
| Consultar pagos recibidos | payments-list.md | Filtra y ordena el registro de cobros. |
| Registrar pago manual | record-manual-payment.md | Crea el pago y puede asignarlo en el mismo flujo. |
| Desasignar pago de factura | unassign-payment.md | Revierte una asignación equivocada. |
| Anular pago | void-payment.md | Anula un pago activo y sus asignaciones. |
Relaciones
- Depende de: Invoices, Payment Links, Estimates y Payment Gateways.
- Usado por: facturas, enlaces de pago y el historial de cobros del cliente.
Limitaciones y notas
- Un pago puede quedar parcialmente o totalmente sin asignar; capturarlo no liquida una factura automáticamente.
- La eliminación de una asignación es un borrado lógico y recalcula el saldo de la factura.
id: apply-payment-to-invoices modulo: payments-received app: finance nombre: Asignar pago a facturas tipo: accion
Asignar pago a facturas
Distribuye el importe sin asignar de un pago existente entre facturas con saldo.
Que se logra
- Resultado: un solo cobro puede liquidar total o parcialmente varias facturas.
- Caso de uso: un distribuidor aplica una transferencia global a las facturas abiertas de un cliente.
- Se combina con: Facturas, Pagos parciales y Payment Links.
Donde esta
- Ruta:
/[orgId]/payments/[id]o/[orgId]/finance/payments/[id] - Acceso en UI: detalle del pago >
Apply to invoice
Como funciona
- Abre un pago activo y pulsa
Apply to invoice. - Ajusta los importes sugeridos, busca por número de factura si hace falta y confirma.
- Revisa el nuevo saldo de las facturas y el importe sin asignar del pago.
Reglas y validaciones
- Se sugieren solo facturas abiertas relacionadas por enlace, cotización, contacto, compañía o deal; la búsqueda permite incorporar otra factura.
- El reparto automático consume el importe disponible en orden de sugerencia.
- No puede superar el saldo de la factura ni el importe disponible. Una segunda asignación a la misma factura incrementa la fila existente.
Backend
- Servicios:
invoice-payments(create),payments(patch),invoices(patch). - Efectos: actualiza
amount_allocated/amount_unallocated; la factura pasa apartially_paidopaid.
Relaciones
- Requiere: pago activo con importe sin asignar.
- Dispara / afecta: pagos asignados y saldo de facturas.
id: partial-payments modulo: payments-received app: finance nombre: Gestionar pagos parciales tipo: accion
Gestionar pagos parciales
Registra y aplica importes inferiores al saldo de una factura sin cerrar el cobro.
Que se logra
- Resultado: el saldo pendiente queda visible sin perder el abono ya recibido.
- Caso de uso: una academia recibe un primer pago de matrícula y conserva el resto por cobrar.
- Se combina con: Facturas y Asignar pago a facturas.
Donde esta
- Ruta:
/[orgId]/payments/newy/[orgId]/payments/[id](también bajo/finance) - Acceso en UI:
New Payment> tablaUnpaid invoices, o detalle >Apply to invoice
Como funciona
- Introduce o selecciona un pago disponible.
- Escribe un importe menor al
Amount duede una factura. - Guarda la asignación y conserva el resto para otro pago posterior.
Reglas y validaciones
- El formulario limita cada fila al saldo de la factura y valida que el total aplicado no supere el pago.
- Con saldo restante la factura se marca
partially_paid; al llegar a cero se marcapaid.
Backend
- Servicios:
payments(create/patch),invoice-payments(create),invoices(patch).
Relaciones
- Requiere: importe de pago menor que el saldo o distribución entre varias facturas.
- Dispara / afecta: estado
partially_paidy saldo restante.
id: payment-details modulo: payments-received app: finance nombre: Consultar detalle de pago tipo: vista
Consultar detalle de pago
Expone el importe recibido, el origen del cobro, sus relaciones y cada asignación de factura.
Que se logra
- Resultado: el equipo identifica de dónde vino un cobro y cómo se usó.
- Caso de uso: tesorería confirma si un pago web ya fue aplicado a la factura correcta.
- Se combina con: Payment Links, Facturas y Desasignar pago.
Donde esta
- Ruta:
/[orgId]/payments/[id]o/[orgId]/finance/payments/[id] - Acceso en UI: listado de pagos > abrir una fila
Como funciona
- Abre un pago desde el listado.
- Revisa importe, asignado/sin asignar, fecha, modo, referencia, cargos y relaciones.
- Abre pagos relacionados o usa
Apply to invoice,UnassignoVoidsegún corresponda.
Reglas y validaciones
Apply to invoicesolo está disponible en pagos activos con importe sin asignar.Voidsolo aparece para pagos activos y revierte primero sus asignaciones.
Backend
- Servicios:
payments(get/patch),invoice-payments(find/remove),invoices(find).
Relaciones
- Requiere: un pago registrado.
- Dispara / afecta: reasignación, anulación y navegación a relaciones.
id: payments-list modulo: payments-received app: finance nombre: Consultar pagos recibidos tipo: vista
Consultar pagos recibidos
Lista los cobros registrados, su importe sin asignar y su estado operativo.
Que se logra
- Resultado: cobros dispone de una lista operativa para localizar dinero pendiente de aplicar.
- Caso de uso: una empresa de servicios filtra pagos sin asignar al hacer la conciliación diaria.
- Se combina con: Detalle de pago y Asignar pago a facturas.
Donde esta
- Ruta:
/[orgId]/paymentso/[orgId]/finance/payments - Acceso en UI: sidebar CRM >
Paymentso Finance >Sales>Received Payments
Como funciona
- Usa
New Paymentpara registrar un cobro manual. - Busca por texto, filtra
ActiveoVoidy acota con las fechasFromyTo. - Ordena por fecha de pago o creación y abre una fila para el detalle.
Reglas y validaciones
- Muestra número, cliente, referencia, modo, importe, importe sin asignar y estado.
- Si la organización no tiene moneda habilitada, muestra
Configure Currencyantes del listado.
Backend
- Servicios:
payments(find),organization-currencies(find).
Relaciones
- Requiere: al menos una moneda habilitada en la organización.
- Dispara / afecta: navegación al detalle y configuración de moneda si falta.
id: record-manual-payment modulo: payments-received app: finance nombre: Registrar pago manual tipo: accion
Registrar pago manual
Registra dinero recibido y permite distribuirlo inmediatamente entre facturas abiertas del cliente.
Que se logra
- Resultado: las transferencias, efectivo u otros cobros manuales entran al historial financiero y reducen saldos.
- Caso de uso: un despacho registra una transferencia bancaria y la aplica a dos facturas del cliente.
- Se combina con: Facturas y Asignar pago a facturas.
Donde esta
- Ruta:
/[orgId]/payments/newo/[orgId]/finance/payments/new - Acceso en UI:
Received Payments>New Payment
Como funciona
- Selecciona el cliente en
Contact, Company & Deal. - Introduce
Amount received, fecha,Numbering Rule, modo, moneda, cargos, referencia y notas. - Distribuye el importe entre
Unpaid invoiceso usaAuto apply. - Pulsa
Save; se abre el detalle del pago.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Customer | selector | Sí | Puede incluir Company y Deal. |
| Amount received / Payment date | importe/fecha | Sí | El importe debe ser mayor que cero. |
| Numbering Rule / Currency | lista | Sí | La regla es de tipo Received Payment. |
| Payment mode | lista | No | Cash, check, bank transfer, card, PayPal u other. |
| Bank charges, Reference, Notes | importe/texto | No | Se guardan con el pago. |
Reglas y validaciones
- Solo carga facturas
sent,partially_paidoscheduledcon saldo positivo del contacto o compañía. Auto applyreparte primero sobre las facturas con vencimiento más próximo; las ediciones manuales dejan de sobrescribirse.- No puede asignarse más de lo recibido ni más del saldo de una factura.
Backend
- Servicios:
payments(create),invoice-payments(create),invoices(find). - Efectos: genera el número del pago y actualiza importes asignado/sin asignar, saldo y estado de las facturas.
Relaciones
- Requiere: cliente, moneda, regla de pago, fecha e importe positivo.
- Dispara / afecta: pago recibido y asignaciones de factura elegidas.
id: unassign-payment modulo: payments-received app: finance nombre: Desasignar pago de factura tipo: accion
Desasignar pago de factura
Quita una asignación de un pago activo para corregir la factura a la que se aplicó.
Que se logra
- Resultado: el importe vuelve a estar disponible y la factura recupera el saldo que corresponde.
- Caso de uso: tesorería corrige un abono aplicado a la factura equivocada.
- Se combina con: Asignar pago a facturas y Facturas.
Donde esta
- Ruta:
/[orgId]/payments/[id]o/[orgId]/finance/payments/[id] - Acceso en UI: detalle > tabla
Invoice allocations> icono de desvincular >Unassign
Como funciona
- Abre el pago y localiza la fila de la factura incorrecta.
- Pulsa
Unassigny confirma el diálogo. - Aplica el importe recuperado a otra factura si es necesario.
Reglas y validaciones
- Solo se puede desasignar desde un pago
active. - Al eliminar la última asignación, una factura
paidopartially_paidpuede volver asent.
Backend
- Servicios:
invoice-payments(remove),payments(patch),invoices(patch).
Relaciones
- Requiere: una asignación de factura en un pago activo.
- Dispara / afecta: importe sin asignar y saldo de la factura.
id: void-payment modulo: payments-received app: finance nombre: Anular pago tipo: accion
Anular pago
Anula un cobro activo y devuelve a las facturas los importes que tenía asignados.
Que se logra
- Resultado: se revierte un cobro inválido y los saldos pendientes vuelven a reflejar la deuda real.
- Caso de uso: una empresa anula una transferencia devuelta por el banco.
- Se combina con: Facturas y Detalle de pago.
Donde esta
- Ruta:
/[orgId]/payments/[id]o/[orgId]/finance/payments/[id] - Acceso en UI: encabezado del detalle >
Void
Como funciona
- Abre un pago
active. - Pulsa
Voidy confirma la acción. - Revisa las facturas que vuelven a tener saldo pendiente.
Reglas y validaciones
- No se anula un pago que ya está en
void. - Antes de cambiar el pago a
void, la interfaz elimina sus asignaciones de factura.
Backend
- Servicios:
invoice-payments(find/remove),payments(patch),invoices(patch).
Relaciones
- Requiere: pago en estado
active. - Dispara / afecta: reversión de asignaciones y saldos de factura.
id: recurring-bills app: finance nombre: Recurring Bills estado: beta permiso: can_access_bills
Recurring Bills
Configura perfiles que generan bills periódicos para proveedores.
Para que sirve
- Un coworking genera cada mes el bill de alquiler de su oficina con la misma información y partidas.
- Una cadena de tiendas programa bills de mantenimiento y calcula sus vencimientos según los días de pago acordados.
- Una empresa de eventos pausa obligaciones estacionales y las reanuda cuando comienza su nueva temporada.
- Una inmobiliaria crea el bill del período de manera anticipada para prepararlo antes de su fecha de pago.
Que lo hace diferente
- Genera Bills normales que entran al mismo flujo de cuentas por pagar y Payments Made, en lugar de mantener una lista separada de recordatorios.
- Reutiliza proveedor obligatorio, moneda, partidas, impuestos y términos de pago del perfil para generar documentos consistentes.
- La generación automática evita duplicar un bill del mismo período y conserva el enlace entre el perfil y cada documento creado.
- Puede crear cada bill como
DraftuOpen; al abrirse, adquiere saldo y numeración conforme al flujo habitual. - No automatiza el desembolso: los bills generados se pagan posteriormente desde Payments Made.
Acceso
- Ruta principal:
/[orgId]/finance/recurring-bills - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Recurring Bills - Permiso requerido: permisos de Bills, incluido
can_access_bills.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición;
RecurringBillsView,RecurringBillEditForm,RecurringBillDetail. - Backend:
recurring-bills,recurring-bill-itemsyrecurring-bill-generate. - Superficies publicas: ninguna.
- Integraciones externas: proceso programado compartido de generación recurrente.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar perfiles | recurring-bill-list.md | Busca y filtra perfiles. |
| Crear y editar perfiles | recurring-bill-profile.md | Configura plantilla, proveedor y salida. |
| Programar recurrencia | recurring-bill-schedule.md | Define frecuencia, fechas y términos. |
| Gestionar partidas plantilla | recurring-bill-items.md | Mantiene conceptos reutilizables. |
| Generar un bill ahora | generate-recurring-bill.md | Crea el documento del período sin duplicarlo. |
| Pausar, reanudar y generar automáticamente | recurring-bill-lifecycle.md | Controla el perfil y la tarea programada. |
Relaciones
- Depende de: Bills, Vendors, Currencies y Document Templates.
- Usado por: genera bills normales que pueden recibir pagos.
- La numeración AP se configura en
settings/document-settings; no se documenta aquí.
Limitaciones y notas
- El proveedor es obligatorio.
- Los perfiles detenidos conservan su historial.
id: generate-recurring-bill modulo: recurring-bills app: finance nombre: Generar un bill recurrente ahora tipo: accion
Generar un bill recurrente ahora
Genera el bill correspondiente al período actual de un perfil.
Que se logra
- Resultado: se genera la cuenta por pagar del período al momento de necesitarla, sin crear duplicados.
- Caso de uso: una inmobiliaria crea anticipadamente el bill mensual de seguridad y lo deja listo para pagar cuando llegue el vencimiento.
- Se combina con: Bills, Payments Made y partidas plantilla.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/[id] - Acceso en UI: detalle >
Create Bill Now - Componente(s):
RecurringBillDetail.tsx
Como funciona
- Abre un perfil con partidas.
- Selecciona
Create Bill Now. - El sistema genera el bill o informa que ya existe uno para el período.
- Abre el bill desde la tabla de documentos generados.
Reglas y validaciones
- Solo perfiles
DraftoActivepueden generar. - La generación no duplica un bill para el mismo período.
- Un bill abierto recibe saldo inicial y numeración final.
Backend
- Servicios:
recurring-bill-generate(create),billsybill-items(create).
Relaciones
- Requiere: perfil, proveedor y partidas plantilla.
- Dispara / afecta: crea un Bill normal vinculado al perfil.
id: recurring-bill-items modulo: recurring-bills app: finance nombre: Gestionar partidas plantilla de bill tipo: accion
Gestionar partidas plantilla de bill
Mantiene los conceptos que se copian a cada bill generado.
Que se logra
- Resultado: cada bill periódico incluye los mismos conceptos, descuentos e impuestos previstos por la plantilla.
- Caso de uso: un hotel reutiliza las partidas de un contrato mensual de mantenimiento para revisar importes uniformes cada ciclo.
- Se combina con: perfil y generación de bills recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/newy/[orgId]/finance/recurring-bills/[id]/edit - Acceso en UI: formulario > tabla de partidas
- Componente(s):
RecurringBillEditForm.tsx,BillItemsTable.tsx
Como funciona
- Añade, edita o elimina conceptos.
- Configura cantidad, tarifa, descuento e impuesto.
- Guarda para recalcular el total de la plantilla.
Reglas y validaciones
- La generación exige al menos una partida plantilla.
Backend
- Servicios:
recurring-bill-items(find, create, patch, remove).
Relaciones
- Requiere: un perfil recurrente.
- Dispara / afecta: partidas de los bills generados.
id: recurring-bill-lifecycle modulo: recurring-bills app: finance nombre: Pausar, reanudar y generar bills automáticamente tipo: automatizacion
Pausar, reanudar y generar bills automáticamente
Controla cuándo un perfil participa en la generación programada.
Que se logra
- Resultado: la creación periódica de cuentas por pagar se activa, pausa o reanuda de manera controlada y con historial.
- Caso de uso: una empresa de eventos detiene el perfil de alquiler entre temporadas y lo reanuda al recuperar su operación.
- Se combina con: programación y generación de bills recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/[id] - Acceso en UI: detalle >
Stop,ResumeyDelete - Componente(s):
RecurringBillDetail.tsx
Como funciona
- La tarea programada procesa perfiles activos en su fecha.
Stopdetiene futuras generaciones.Resumevuelve a activar perfilesDraftoStopped.Deletesolo se permite enDraftoStopped.
Reglas y validaciones
- Los estados disponibles son
Draft,Active,StoppedyExpired. - La tarea programada horaria evita duplicar documentos por período.
Backend
- Servicios:
recurring-bills(patch, remove),recurring-bill-generate(create). - Efectos: proceso programado horario que crea bills debidos.
Relaciones
- Requiere: perfil activo y programación válida.
- Dispara / afecta: Bills y sus saldos pendientes.
id: recurring-bill-list modulo: recurring-bills app: finance nombre: Consultar perfiles de bill recurrente tipo: vista
Consultar perfiles de bill recurrente
Lista proveedor, nombre, frecuencia, fechas, estado e importe de los perfiles.
Que se logra
- Resultado: el equipo visualiza las próximas cuentas por pagar recurrentes y su estado antes de que entren al flujo de pago.
- Caso de uso: una cadena de tiendas revisa los perfiles de alquiler y mantenimiento que generarán bills durante el mes.
- Se combina con: detalle de perfil y Bills.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills - Acceso en UI:
Purchases > Recurring Bills - Componente(s):
RecurringBillsView.tsx
Como funciona
- Busca por texto o filtra por estado.
- Recorre los resultados paginados.
- Abre un perfil para consultar su detalle.
Reglas y validaciones
- La búsqueda considera nombre, referencia, estado y proveedor.
Backend
- Servicios:
recurring-bills(find, get).
Relaciones
- Requiere: permisos de Bills.
- Dispara / afecta: abre el perfil y los bills hijos.
id: recurring-bill-profile modulo: recurring-bills app: finance nombre: Crear y editar perfiles de bill recurrente tipo: accion
Crear y editar perfiles de bill recurrente
Define la plantilla y configuración para generar bills repetidamente.
Que se logra
- Resultado: se configura una plantilla que genera bills repetidos con proveedor, partidas y condiciones consistentes.
- Caso de uso: un coworking prepara el alquiler mensual de su oficina para generar una cuenta por pagar sin recrearla cada período.
- Se combina con: programación, partidas plantilla, Bills, Vendors y Payments Made.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/newy/[orgId]/finance/recurring-bills/[id]/edit - Acceso en UI:
Recurring Bills > New Recurring Billo detalle >Edit - Componente(s):
RecurringBillEditForm.tsx
Como funciona
- Selecciona proveedor, responsable, moneda y nombre de perfil.
- Añade referencia, regla de documento, plantilla, notas y términos.
- Define si cada bill se crea como
DraftuOpen. - Guarda el perfil.
Reglas y validaciones
- El proveedor es obligatorio.
- Los totales se recalculan después de guardar las partidas.
Backend
- Servicios:
recurring-bills(create, patch).
Relaciones
- Requiere: Vendors, Bills y Currencies.
- Dispara / afecta: plantilla para los bills hijos.
id: recurring-bill-schedule modulo: recurring-bills app: finance nombre: Programar bills recurrentes tipo: configuracion
Programar bills recurrentes
Define la cadencia de generación y el vencimiento de los bills creados.
Que se logra
- Resultado: los bills recurrentes se generan en la fecha definida y reciben un vencimiento calculado según sus términos de pago.
- Caso de uso: una empresa de logística programa el bill mensual de combustible a 15 días para planificar su vencimiento.
- Se combina con: perfil y generación automática de bills recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/newy/[orgId]/finance/recurring-bills/[id]/edit - Acceso en UI: formulario > sección de programación
- Componente(s):
RecurringBillEditForm.tsx
Como funciona
- Establece inicio, frecuencia, repetición y finalización.
- Elige día de mes o semana cuando aplique.
- Define los días de términos de pago.
- Guarda para calcular la siguiente fecha.
Reglas y validaciones
- Al generar, el vencimiento del bill es la fecha de bill más los días de términos.
- Cambiar el calendario activo recalcula la siguiente fecha.
Backend
- Servicios:
recurring-bills(create, patch).
Relaciones
- Requiere: un perfil de bill recurrente.
- Dispara / afecta: vencimiento y generación de bills.
id: recurring-expenses app: finance nombre: Recurring Expenses estado: beta permiso: can_access_expenses
Recurring Expenses
Configura perfiles que generan gastos periódicos a partir de conceptos reutilizables.
Para que sirve
- Una agencia genera periódicamente el gasto de sus herramientas de diseño sin recapturar sus conceptos.
- Una clínica programa el gasto semanal de lavandería y lo detiene durante un cierre temporal.
- Un operador turístico crea por adelantado el gasto del período desde el perfil cuando necesita revisarlo antes.
- Un restaurante conserva el historial de los gastos originados por una misma suscripción operativa.
Que lo hace diferente
- Genera Expenses normales, no registros aislados: los documentos resultantes siguen el flujo y la numeración de gastos de Finance.
- Reutiliza partidas, impuestos, moneda y proveedor opcional del perfil para mantener importes consistentes entre períodos.
- La generación automática comparte el proceso programado de recurrencias y evita duplicar documentos para un mismo período.
- Permite elegir si el gasto generado queda en
Drafto se registra comoActive. - No gestiona pagos de proveedores: los gastos directos no usan Payments Made ni crean una cuenta por pagar.
Acceso
- Ruta principal:
/[orgId]/finance/recurring-expenses - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Recurring Expenses - Permiso requerido: permisos de Expenses, incluido
can_access_expenses.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición;
RecurringExpensesView,RecurringExpenseEditFormyRecurringExpenseDetail. - Backend:
recurring-expenses,recurring-expense-itemsyrecurring-expense-generate. - Superficies publicas: ninguna.
- Integraciones externas: proceso programado compartido de generación recurrente.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar perfiles | recurring-expense-list.md | Busca y filtra perfiles periódicos. |
| Crear y editar perfiles | recurring-expense-profile.md | Configura plantilla, importes y salida. |
| Programar recurrencia | recurring-expense-schedule.md | Define frecuencia, inicio y fin. |
| Gestionar partidas plantilla | recurring-expense-items.md | Mantiene los conceptos que se copiarán. |
| Generar un gasto ahora | generate-recurring-expense.md | Ejecuta una generación manual idempotente. |
| Pausar, reanudar y generar automáticamente | recurring-expense-lifecycle.md | Controla perfil y generación programada. |
Relaciones
- Depende de: Expenses, Vendors (opcional), Currencies y Document Templates.
- Usado por: genera documentos normales en Expenses.
- La numeración AP se configura en
settings/document-settings; no se documenta aquí.
Limitaciones y notas
- Los perfiles detenidos conservan historial, pero no generan gastos.
- La interfaz permite frecuencias por días, semanas, meses, trimestres y años.
id: generate-recurring-expense modulo: recurring-expenses app: finance nombre: Generar un gasto recurrente ahora tipo: accion
Generar un gasto recurrente ahora
Genera inmediatamente el gasto correspondiente al período actual del perfil.
Que se logra
- Resultado: se crea el gasto del período bajo demanda sin duplicar otro ya generado para ese mismo período.
- Caso de uso: una agencia adelanta el registro de su alquiler mensual y puede confirmar que no creará dos gastos para el mismo mes.
- Se combina con: Expenses, partidas plantilla y programación recurrente.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/[id] - Acceso en UI: detalle >
Create Expense Now - Componente(s):
RecurringExpenseDetail.tsx
Como funciona
- Abre un perfil en estado permitido.
- Selecciona
Create Expense Now. - El sistema crea el gasto y sus partidas, o informa que ya existe el documento del período.
- Abre el gasto generado desde el historial.
Reglas y validaciones
- Solo perfiles
DraftoActivecon al menos una partida pueden generar. - La acción es idempotente por período: no duplica gastos.
- El gasto resultante conserva el estado configurado por el perfil.
Backend
- Servicios:
recurring-expense-generate(create),expensesyexpense-items(create).
Relaciones
- Requiere: perfil y partidas plantilla.
- Dispara / afecta: crea un Expense normal vinculado al perfil.
id: recurring-expense-items modulo: recurring-expenses app: finance nombre: Gestionar partidas plantilla de gasto tipo: accion
Gestionar partidas plantilla de gasto
Mantiene los conceptos que se copian a cada gasto generado.
Que se logra
- Resultado: cada gasto generado conserva un detalle consistente de conceptos e importes previamente definido.
- Caso de uso: un operador de turismo mantiene las partidas de una licencia periódica para que cada gasto mensual salga completo.
- Se combina con: perfil y generación de gastos recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/newy/[orgId]/finance/recurring-expenses/[id]/edit - Acceso en UI: formulario > tabla de partidas
- Componente(s):
RecurringExpenseEditForm.tsx,ExpenseItemsTable.tsx
Como funciona
- Añade, edita o elimina conceptos de plantilla.
- Define cantidad, tarifa, descuento e impuesto.
- Guarda el perfil para actualizar sus totales.
Reglas y validaciones
- La generación requiere al menos una partida plantilla.
Backend
- Servicios:
recurring-expense-items(find, create, patch, remove).
Relaciones
- Requiere: un perfil recurrente.
- Dispara / afecta: partidas de los gastos hijos.
id: recurring-expense-lifecycle modulo: recurring-expenses app: finance nombre: Pausar, reanudar y generar gastos automáticamente tipo: automatizacion
Pausar, reanudar y generar gastos automáticamente
Gestiona el estado del perfil y su ejecución programada.
Que se logra
- Resultado: los gastos periódicos se generan automáticamente mientras el perfil está activo y se detienen sin perder historial cuando se pausa.
- Caso de uso: una empresa de servicios detiene temporalmente una suscripción durante una temporada y la reanuda después.
- Se combina con: programación y generación de gastos recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/[id] - Acceso en UI: detalle >
Stop,ResumeyDelete - Componente(s):
RecurringExpenseDetail.tsx
Como funciona
- Un perfil activo se procesa en la tarea programada cuando llega su fecha.
- Usa
Stoppara detener futuras generaciones. - Usa
Resumepara volver a activar un perfilDraftoStopped. - Usa
Deletesolo en perfilesDraftoStopped.
Reglas y validaciones
- Los perfiles usan
Draft,Active,StoppedoExpired. - La tarea programada procesa perfiles activos debidos y genera como máximo un documento por período.
Backend
- Servicios:
recurring-expenses(patch, remove),recurring-expense-generate(create). - Efectos: un proceso programado horario crea gastos según la programación.
Relaciones
- Requiere: programación válida y perfil activo.
- Dispara / afecta: Expenses y su historial de documentos generados.
id: recurring-expense-list modulo: recurring-expenses app: finance nombre: Consultar perfiles de gasto recurrente tipo: vista
Consultar perfiles de gasto recurrente
Lista los perfiles con proveedor, nombre, frecuencia, próximas fechas, estado e importe.
Que se logra
- Resultado: el equipo identifica qué gastos periódicos están activos, cuándo volverán a generarse y su importe esperado.
- Caso de uso: una agencia revisa sus suscripciones operativas mensuales antes del cierre para detectar perfiles detenidos.
- Se combina con: detalle de perfil y Expenses.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses - Acceso en UI:
Purchases > Recurring Expenses - Componente(s):
RecurringExpensesView.tsx
Como funciona
- Busca por texto o filtra por estado.
- Navega las páginas de resultados.
- Abre un perfil para consultar su configuración e historial.
Reglas y validaciones
- La búsqueda considera nombre, referencia, estado y proveedor.
Backend
- Servicios:
recurring-expenses(find, get).
Relaciones
- Requiere: permisos de Expenses.
- Dispara / afecta: abre perfiles y gastos generados.
id: recurring-expense-profile modulo: recurring-expenses app: finance nombre: Crear y editar perfiles de gasto recurrente tipo: accion
Crear y editar perfiles de gasto recurrente
Define la plantilla que se usará para crear gastos en cada período.
Que se logra
- Resultado: se deja preparada una plantilla reutilizable que genera gastos periódicos con los mismos conceptos y totales.
- Caso de uso: una empresa de mantenimiento configura su suscripción mensual de herramientas para no registrarla manualmente cada mes.
- Se combina con: programación de gastos recurrentes, partidas plantilla, Expenses y Vendors.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/newy/[orgId]/finance/recurring-expenses/[id]/edit - Acceso en UI:
Recurring Expenses > New Recurring Expenseo detalle >Edit - Componente(s):
RecurringExpenseEditForm.tsx
Como funciona
- Indica responsable, nombre del perfil, moneda y proveedor opcional.
- Define referencia, reglas de documento, plantilla, notas y términos.
- Elige si los gastos generados se crean como
DraftoActive. - Guarda el perfil.
Reglas y validaciones
- Los totales se recalculan después de guardar partidas.
- El estado de salida predeterminado es
Active.
Backend
- Servicios:
recurring-expenses(create, patch).
Relaciones
- Requiere: Expenses y Currencies.
- Dispara / afecta: base de los gastos generados.
id: recurring-expense-schedule modulo: recurring-expenses app: finance nombre: Programar gastos recurrentes tipo: configuracion
Programar gastos recurrentes
Define cuándo el perfil debe generar su próximo gasto.
Que se logra
- Resultado: cada perfil tiene una cadencia y próxima fecha definidas para generar el gasto cuando corresponda.
- Caso de uso: una clínica programa su servicio semanal de lavandería para que el gasto se cree de acuerdo con su frecuencia.
- Se combina con: generación manual y automática de gastos recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/newy/[orgId]/finance/recurring-expenses/[id]/edit - Acceso en UI: formulario > sección de programación
- Componente(s):
RecurringExpenseEditForm.tsx
Como funciona
- Define fecha de inicio, frecuencia y cada cuántas repeticiones generar.
- Configura el día del mes o de la semana cuando aplica.
- Define la regla de finalización.
- Guarda para calcular la próxima fecha.
Reglas y validaciones
- Al modificar la programación de un perfil activo, el backend recalcula la siguiente fecha.
Backend
- Servicios:
recurring-expenses(create, patch).
Relaciones
- Requiere: un perfil de gasto recurrente.
- Dispara / afecta: generación manual y programada.
id: recurring-invoices app: finance nombre: Facturas recurrentes estado: shipped permiso: can_access_invoices
Facturas recurrentes
Define perfiles que copian sus artículos y datos comerciales a facturas normales de forma manual o programada.
Para que sirve
- Una empresa de mantenimiento genera cada mes la factura de sus contratos activos sin reescribir sus líneas de servicio.
- Una agencia factura un retainer trimestral y conserva una factura histórica independiente por cada periodo.
- Una academia programa cobros anuales con vencimiento calculado desde sus términos de pago.
- Un negocio SaaS pausa un perfil de un cliente suspendido y lo reanuda sin perder la configuración comercial.
Que lo hace diferente
- El perfil genera facturas normales: conservan numeración, PDF, pagos, documentos públicos y el resto del flujo financiero de Apex.
- Puede crearse desde una factura existente para reutilizar cliente, artículos y condiciones ya aprobadas.
- La generación programada respeta la zona horaria del perfil y evita facturas duplicadas para un mismo periodo.
- Los documentos históricos no cambian si se edita el perfil; los ajustes solo afectan la facturación futura.
- Convive con contactos, compañías y deals del CRM en vez de mantener un catálogo de clientes separado.
Acceso
- Ruta principal:
/[orgId]/finance/recurring-invoices - Como se llega:
Header app switcher > Finance > Sales > Recurring Invoices - Permiso requerido:
can_access_invoices
Alcance tecnico
- Frontend:
recurring-invoices/page.tsx,[id]/page.tsx,new/page.tsx,[id]/edit/page.tsx;RecurringInvoicesView,RecurringInvoiceDetail,RecurringInvoiceEditForm - Backend:
recurring-invoices,recurring-invoice-items,recurring-invoice-generate,cron-recurring-invoices - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Generar facturas automáticamente | automatic-recurring-generation.md | El cron procesa perfiles activos con fecha vencida. |
| Crear perfil recurrente | create-recurring-invoice.md | Crea una plantilla con cliente, artículos y calendario. |
| Editar perfil recurrente | edit-recurring-invoice.md | Cambia la plantilla para próximas facturas. |
| Generar factura ahora | generate-recurring-invoice.md | Crea una factura para el periodo actual. |
| Consultar facturas generadas | generated-invoices.md | Lista las facturas hijas y sus periodos. |
| Pausar o reanudar perfil | pause-resume-recurring-invoice.md | Cambia la elegibilidad del perfil. |
| Gestionar artículos de plantilla | recurring-invoice-items.md | Mantiene las líneas que se copiarán. |
| Configurar calendario recurrente | recurring-schedule.md | Define frecuencia, fecha inicial y terminación. |
Relaciones
- Depende de: Invoices, Contacts, Companies, Currencies, Document Templates y Document Numbering.
- Usado por: Invoices y
document-template-preview.
Limitaciones y notas
- Las facturas ya generadas conservan una copia histórica; editar el perfil no las cambia.
- La generación protege contra duplicados del mismo perfil y periodo.
id: automatic-recurring-generation modulo: recurring-invoices app: finance nombre: Generar facturas automáticamente tipo: automatizacion
Generar facturas automáticamente
El proceso programado busca perfiles que ya deben generar una factura.
Que se logra
- Resultado: los cobros periódicos vencidos se convierten en facturas sin intervención manual.
- Caso de uso: un proveedor de mantenimiento emite sus facturas mensuales a primera hora local.
- Se combina con: Calendario recurrente y Facturas generadas.
Donde esta
- Ruta: no tiene pantalla propia.
- Acceso en UI: se activa al guardar un perfil en
Active.
Como funciona
- El cron consulta perfiles
Activecon próxima fecha vencida. - Omite los que todavía no pasaron las 6:00 a. m. de su zona horaria.
- Solicita la generación programada de cada perfil elegible y registra el resumen.
Reglas y validaciones
- El proceso genera solo perfiles activos con fecha vencida y después de las 6 AM de su zona horaria.
- Servicios:
cron-recurring-invoicesyrecurring-invoice-generate.
Backend
- Servicios:
cron-recurring-invoices(create) yrecurring-invoice-generate(create). - Efectos: genera facturas, avanza fechas y deja los fallos aislados en el resumen del cron.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: create-recurring-invoice modulo: recurring-invoices app: finance nombre: Crear perfil recurrente tipo: accion
Crear perfil recurrente
Registra un perfil de facturación repetible con sus datos comerciales, calendario y artículos.
Que se logra
- Resultado: el negocio deja configurado un modelo de cobro que podrá generar facturas futuras.
- Caso de uso: una agencia crea el perfil de facturación mensual de un cliente con retainer.
- Se combina con: Artículos de plantilla, Calendario recurrente y Contactos.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/new - Acceso en UI:
Header app switcher > Finance > Sales > Recurring Invoices > + - Componente(s):
RecurringInvoiceEditForm.tsx
Como funciona
- Selecciona propietario, contacto y, si corresponde, compañía o deal.
- Escribe
Profile Name, eligeCurrency,Numbering RuleyDocument Template. - Configura
Recurring Schedule, artículos, mensajes y totales. - Pulsa
Create Recurring Invoice.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Profile Name |
texto | Sí | Identifica el perfil. |
Contact, Company & Deal |
selector | Contacto sí | Compañía y deal son opcionales. |
Currency |
selector | Sí | Solo muestra monedas habilitadas. |
Status |
selector | Sí | Draft, Active o Stopped. |
Generated Invoice Status |
selector | Sí | Draft o Sent. |
Start Date, Frequency, Repeat Every |
fecha y selector | Sí | Admite días, semanas, meses, trimestres y años. |
Reglas y validaciones
- Exige nombre, contacto y moneda; los artículos se guardan después del perfil.
- Si existen valores predeterminados, selecciona la primera moneda, regla y plantilla por defecto.
On dateusaEnd Date;After occurrencesusaMax Occurrences.
Backend
- Servicios:
recurring-invoices(create) yrecurring-invoice-items(create). - Efectos: recalcula subtotal, descuento, impuestos y total; prepara la siguiente fecha.
Relaciones
- Requiere: Document Numbering, monedas habilitadas y un contacto.
- Dispara / afecta: futuras facturas generadas.
id: edit-recurring-invoice modulo: recurring-invoices app: finance nombre: Editar perfil recurrente tipo: accion
Editar perfil recurrente
Modifica el contenido y calendario que se utilizarán en facturas aún no generadas.
Que se logra
- Resultado: los próximos cobros se adaptan al nuevo acuerdo sin alterar el historial emitido.
- Caso de uso: una empresa SaaS actualiza la cuota de renovación del siguiente ciclo.
- Se combina con: Calendario recurrente y Facturas generadas.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/[id]/edit - Acceso en UI:
Recurring Invoice Detail > Edit - Componente(s):
RecurringInvoiceEditForm.tsx
Como funciona
- Abre el perfil desde la tabla y pulsa
Edit. - Ajusta cliente, plantilla, artículos, mensajes, totales o calendario.
- Pulsa
Save Recurring Invoice.
Reglas y validaciones
- Al retirar un artículo, se elimina de la plantilla; el orden restante se vuelve a guardar.
recalculateTotalsactualiza los importes desde sus artículos.- Las facturas ya creadas no se modifican.
Backend
- Servicios:
recurring-invoices(get, patch) yrecurring-invoice-items(find, create, patch, remove). - Efectos: conserva la relación con facturas históricas y actualiza el perfil para próximas ejecuciones.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: generate-recurring-invoice modulo: recurring-invoices app: finance nombre: Generar factura ahora tipo: accion
Generar factura ahora
Crea una factura normal a partir de la plantilla del perfil para su periodo calculado.
Que se logra
- Resultado: el equipo puede emitir el cobro del periodo actual antes de esperar la ejecución programada.
- Caso de uso: una consultora genera hoy la factura mensual de un cliente que adelantó su renovación.
- Se combina con: Facturas, PDF y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/[id] - Acceso en UI:
Recurring Invoice Detail > Create Invoice Now - Componente(s):
RecurringInvoiceDetail.tsx
Como funciona
- Abre el perfil y pulsa
Create Invoice Now. - El sistema abre la factura creada; si ya existe una para el periodo, abre esa misma.
Reglas y validaciones
- Solo perfiles
DraftoActivepueden generar. - Debe existir al menos un artículo de plantilla.
- El mismo perfil y etiqueta de periodo no produce duplicados.
Backend
- Servicios:
recurring-invoice-generate(create),invoices(create, patch) einvoice-items(create). - Efectos: copia datos, artículos y términos; calcula vencimiento con
Payment Terms; aumentaGeneratedy avanza la siguiente fecha. ConSent, finaliza la factura mediante el flujo normal de numeración.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: generated-invoices modulo: recurring-invoices app: finance nombre: Consultar facturas generadas tipo: vista
Consultar facturas generadas
Consulta las facturas normales que proceden de un perfil recurrente.
Que se logra
- Resultado: se conserva la trazabilidad entre el contrato periódico y cada factura emitida.
- Caso de uso: una academia revisa qué facturas generó un plan anual para un alumno.
- Se combina con: Facturas y Perfil recurrente.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/[id] - Acceso en UI:
Recurring Invoice Detail > Details > Generated Invoices - Componente(s):
RecurringInvoiceDetail.tsx
Como funciona
- Abre el perfil y pulsa
Details. - Revisa número, periodo, fecha, estado y total.
- Pulsa una fila para abrir la factura.
Reglas y validaciones
- La lista se limita a 50 resultados y se ordena por fecha descendente.
Backend
- Servicios:
invoices(find, get). - Efectos: cada factura conserva el perfil, tipo de generación y periodo que la originó.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: pause-resume-recurring-invoice modulo: recurring-invoices app: finance nombre: Pausar o reanudar perfil tipo: accion
Pausar o reanudar perfil
Cambia si un perfil participa en la generación programada.
Que se logra
- Resultado: se detienen o reanudan futuros cobros sin borrar su configuración.
- Caso de uso: un gimnasio pausa la facturación durante la suspensión temporal de una membresía.
- Se combina con: Generación automática y Calendario recurrente.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/[id] - Acceso en UI:
Recurring Invoice Detail > StopoResume - Componente(s):
RecurringInvoiceDetail.tsx
Como funciona
- En un perfil
Active, pulsaStop. - Para cualquier otro estado mostrado, pulsa
Resumepara marcarloActive.
Reglas y validaciones
- El cron únicamente busca perfiles
Active. - Detener un perfil no borra ni altera las facturas ya creadas.
Backend
- Servicios:
recurring-invoices(patch). - Efectos: cambia el estado del perfil y su elegibilidad para el cron.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: recurring-invoice-items modulo: recurring-invoices app: finance nombre: Gestionar artículos de plantilla tipo: accion
Gestionar artículos de plantilla
Mantiene las líneas que se copiarán a cada factura generada.
Que se logra
- Resultado: cada factura futura conserva el desglose comercial acordado para el perfil.
- Caso de uso: una empresa de soporte factura horas, licencias y servicio mensual en cada ciclo.
- Se combina con: Perfil recurrente, Facturas y Taxes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/newy/[orgId]/finance/recurring-invoices/[id]/edit - Acceso en UI:
Invoice Items - Componente(s):
InvoiceItemsTable.tsx
Como funciona
- Añade productos o filas manuales en
Invoice Items. - Indica cantidad, unidad, tarifa, descuento, impuesto y cadencia de cobro.
- Guarda el perfil; las filas se crean, actualizan, ordenan o eliminan.
Reglas y validaciones
- El total se recalcula con las filas, descuento general, impuestos, envío y ajuste.
- Las líneas pueden ser
one-timeo recurrentes con intervalo.
Backend
- Servicios:
recurring-invoice-items(find, create, patch, remove) yrecurring-invoices(patch). - Efectos: la generación crea
invoice-itemsequivalentes en la factura hija.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: recurring-schedule modulo: recurring-invoices app: finance nombre: Configurar calendario recurrente tipo: configuracion
Configurar calendario recurrente
Determina cuándo un perfil puede producir su próxima factura y cuándo debe expirar.
Que se logra
- Resultado: los cobros salen con una frecuencia y límite temporal definidos por el acuerdo comercial.
- Caso de uso: una agencia programa una cuota trimestral durante doce meses.
- Se combina con: Generación automática y Pausar o reanudar perfil.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/newy/[orgId]/finance/recurring-invoices/[id]/edit - Acceso en UI:
Recurring Schedule - Componente(s):
RecurringInvoiceEditForm.tsx
Como funciona
- Define
Start Date,FrequencyyRepeat Every. - Para semanas selecciona
Day of Week; para meses, trimestres o años,Day of Month. - En
Ends, eligeNever,On dateoAfter occurrences. - Guarda el perfil.
Reglas y validaciones
Repeat EveryyMax Occurrencestienen mínimo 1;Day of Monthacepta 1 a 31.- Para meses sin ese día, el cálculo usa el último día disponible.
- El cron solo ejecuta perfiles
Activedespués de las 6:00 a. m. de su zona horaria.
Backend
- Servicios:
recurring-invoices(create, patch) ycron-recurring-invoices(create). - Efectos: calcula
next invoice; al alcanzar el fin, el estado pasa aExpired.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: taxes-currencies app: finance nombre: Impuestos y monedas estado: shipped permiso: can_access_finance
Impuestos y monedas
Centraliza las tasas de impuesto y las monedas disponibles para documentos financieros de la organización.
Para que sirve
- Una agencia que vende en Colombia y Estados Unidos prepara documentos en COP y USD con la moneda adecuada para cada cliente.
- Un comercio aplica IVA u otros impuestos definidos por la organización al calcular cotizaciones y facturas.
- Una empresa que recibe precios en otra moneda consulta y actualiza el tipo de cambio usado en sus documentos.
- Un negocio que deja de operar en una divisa la deshabilita sin eliminar el historial de documentos previos.
Que lo hace diferente
- Las monedas e impuestos se comparten con cotizaciones, facturas, pagos y enlaces de pago del mismo CRM.
- Los tipos de cambio se actualizan automáticamente y se pueden consultar o actualizar desde Finance.
- La moneda seleccionada llega al documento público, a la plantilla y al PDF, no solo a un registro contable interno.
- Mantiene un catálogo de monedas del sistema y habilitaciones por organización para ajustar la operación real de cada negocio.
Acceso
- Ruta principal:
/[orgId]/settings/taxesy/[orgId]/settings/currencies - Como se llega:
Avatar menu > Settings > Billing & Finance > TaxesoCurrencies - Permiso requerido:
can_access_finance
Alcance tecnico
- Frontend:
TaxesList,CurrenciesListy sus diálogos - Backend:
taxes,organization-currencies,system-currencies,exchange-rates,get-exchange-rate,cron-update-exchange-rates - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Actualizar tipos de cambio automáticamente | automatic-exchange-rates.md | Cron que renueva tasas. |
| Deshabilitar moneda | disable-currency.md | Desactiva una moneda no base. |
| Editar moneda de organización | edit-organization-currency.md | Consulta y administra la asignación. |
| Habilitar moneda | enable-currency.md | Añade una moneda del catálogo. |
| Consultar y actualizar tipos de cambio | exchange-rates.md | Obtiene la tasa vigente. |
| Gestionar impuestos | manage-taxes.md | Define tasas simples o compuestas. |
Relaciones
- Depende de: Estimates, Invoices, Payments received y Payment Links.
- Usado por: módulos y documentos del flujo financiero.
Limitaciones y notas
- Los permisos granulares pueden restringir acciones según el rol de la organización.
id: automatic-exchange-rates modulo: taxes-currencies app: finance nombre: Actualizar tipos de cambio automáticamente tipo: automatizacion
Actualizar tipos de cambio automáticamente
El cron actualiza el catálogo de tasas de cambio sin una acción directa en Settings.
Que se logra
- Resultado: las conversiones entre monedas disponibles se mantienen actualizadas para la operación financiera.
- Caso de uso: una agencia que vende en USD y cobra en COP evita actualizar tasas manualmente cada día.
- Se combina con: Monedas de organización y Tipos de cambio.
Donde esta
- Ruta: no tiene pantalla propia.
- Acceso en UI: no existe un botón de ejecución en las rutas asignadas.
Como funciona
- El programador invoca la actualización.
- Las tasas resultantes quedan disponibles para consultas y documentos.
Reglas y validaciones
- Servicios:
cron-update-exchange-rates(create),exchange-ratesyget-exchange-rate.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: disable-currency modulo: taxes-currencies app: finance nombre: Deshabilitar moneda tipo: configuracion
Deshabilitar moneda
Desactiva una moneda de la organización sin quitarla del catálogo global.
Que se logra
- Resultado: una divisa deja de estar disponible para documentos nuevos sin romper los existentes.
- Caso de uso: un comercio deja de cotizar en una moneda que ya no acepta.
- Se combina con: Monedas de organización y Cotizaciones.
Donde esta
- Ruta:
/[orgId]/settings/currencies - Acceso en UI:
Settings > Billing & Finance > Currencies > Enabled - Componente(s):
CurrenciesList.tsx
Como funciona
- Localiza la moneda en la lista.
- Desactiva el interruptor de
Enabled.
Reglas y validaciones
- La moneda base no se puede desactivar y su interruptor permanece bloqueado.
- Servicios:
organization-currencies(patch).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: edit-organization-currency modulo: taxes-currencies app: finance nombre: Editar moneda de organización tipo: configuracion
Editar moneda de organización
La lista permite consultar la moneda base, habilitar o retirar las monedas asignadas.
Que se logra
- Resultado: la organización controla qué divisas pueden seleccionarse en sus documentos financieros.
- Caso de uso: una empresa internacional revisa su moneda base y su catálogo operativo por país.
- Se combina con: Habilitar moneda, Deshabilitar moneda y Tipos de cambio.
Donde esta
- Ruta:
/[orgId]/settings/currencies - Acceso en UI:
Settings > Billing & Finance > Currencies - Componente(s):
CurrenciesList.tsx
Como funciona
- Revisa nombre, código, símbolo y la insignia
Base Currency. - Usa el interruptor para cambiar habilitación o papelera para retirar una moneda no base.
Reglas y validaciones
- La interfaz no permite editar el formato ni los datos del catálogo de una moneda.
- Servicios:
organization-currencies(find, patch, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: enable-currency modulo: taxes-currencies app: finance nombre: Habilitar moneda tipo: configuracion
Habilitar moneda
Habilita una moneda del catálogo global para usarla en la organización.
Que se logra
- Resultado: los equipos pueden emitir documentos en una nueva moneda autorizada por el negocio.
- Caso de uso: una consultora empieza a cotizar en USD para clientes internacionales.
- Se combina con: Cotizaciones, Facturas y Tipos de cambio.
Donde esta
- Ruta:
/[orgId]/settings/currencies - Acceso en UI:
Settings > Billing & Finance > Currencies > Enable Currency - Componente(s):
CurrenciesList.tsx,EnableCurrencyDialog.tsx
Como funciona
- Pulsa
Enable Currency. - Elige una moneda del catálogo y confirma el diálogo.
Reglas y validaciones
- El plan Free permite una moneda; el botón muestra una mejora requerida al llegar al límite.
- Servicios:
system-currencies(find) yorganization-currencies(create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: exchange-rates modulo: taxes-currencies app: finance nombre: Consultar y actualizar tipos de cambio tipo: integracion
Consultar y actualizar tipos de cambio
Expone los servicios que recuperan y consultan tasas de cambio entre monedas.
Que se logra
- Resultado: los documentos y cobros en distintas monedas cuentan con una tasa de conversión disponible.
- Caso de uso: un comercio consulta la relación COP/USD antes de preparar una propuesta internacional.
- Se combina con: Monedas de organización y Actualización automática de tasas.
Donde esta
- Ruta: no hay una pantalla de tasas en las rutas asignadas.
- Acceso en UI: se usan al elegir moneda en documentos financieros.
Como funciona
- El documento solicita la tasa necesaria al backend.
- El backend devuelve la tasa vigente disponible para la conversión requerida.
Reglas y validaciones
- Servicios:
exchange-rates(find),get-exchange-rate(create) ysystem-currencies(find). - No hay una interfaz de Settings para sobrescribir una tasa en las rutas asignadas; el servicio resuelve la tasa vigente disponible y la actualización periódica incorpora nuevas tasas.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: manage-taxes modulo: taxes-currencies app: finance nombre: Gestionar impuestos tipo: configuracion
Gestionar impuestos
Administra las tasas seleccionables en líneas de estimates e invoices.
Que se logra
- Resultado: los importes de productos y servicios pueden calcular impuestos consistentes por organización.
- Caso de uso: un comercio configura IVA para aplicarlo en sus cotizaciones y facturas.
- Se combina con: Artículos de cotización, Artículos de factura y Calcular importes.
Donde esta
- Ruta:
/[orgId]/settings/taxes - Acceso en UI:
Settings > Billing & Finance > Taxes > Add Tax - Componente(s):
TaxesList.tsx,AddTaxDialog.tsx,EditTaxDialog.tsx
Como funciona
- Pulsa
Add Tax, o abre el lápiz de una tasa existente. - Define nombre, porcentaje, tipo, descripción, estado y si es predeterminada.
- Guarda o elimina con el icono de papelera.
Reglas y validaciones
- La tabla distingue
SimpleyCompound, y muestraActive/Inactive. - Servicios:
taxes(find, create, patch, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: vendors app: finance nombre: Vendors estado: beta permiso: can_access_vendors
Vendors
Gestiona los proveedores usados en las compras de Finance. Permite mantener sus datos, personas de contacto y direcciones.
Para que sirve
- Una agencia de marketing centraliza sus imprentas, estudios y proveedores de pauta para reutilizarlos en todas sus compras.
- Una clínica conserva los contactos y direcciones de laboratorios y distribuidores para consultar rápidamente a quién corresponde cada documento.
- Un restaurante inactiva un proveedor que dejó de usar sin perder el historial de gastos y facturas asociados.
Que lo hace diferente
- Los proveedores son una entidad propia de cuentas por pagar, separada de los contactos de CRM, aunque pueden vincularse de forma opcional.
- La misma ficha alimenta Expenses, Bills y Payments Made, evitando recrear un proveedor en cada flujo de compras.
- El detalle reúne gastos y bills recientes del proveedor para navegar desde la relación comercial hasta los documentos financieros.
- No sustituye una contabilidad de partida doble ni calcula actualmente un balance agregado de proveedor a partir de los documentos.
Acceso
- Ruta principal:
/[orgId]/finance/vendors - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Vendors - Permiso requerido:
can_access_vendors; las acciones respetan permisos de ver, crear, editar y eliminar del módulo.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición de
vendors;VendorsView,VendorEditFormyVendorDetail. - Backend: servicios Feathers
vendors,vendor-contactsyvendor-addresses. - Superficies publicas: ninguna.
- Integraciones externas: ninguna.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar proveedores | vendor-list.md | Lista paginada, ordenable y filtrable. |
| Crear y editar proveedores | vendor-profile.md | Mantiene el perfil y sus valores predeterminados. |
| Gestionar contactos | vendor-contacts.md | Añade personas de contacto y una principal. |
| Gestionar direcciones | vendor-addresses.md | Añade direcciones y una principal. |
| Cambiar estado y eliminar | vendor-lifecycle.md | Activa, inactiva o elimina lógicamente un proveedor. |
| Consultar compras relacionadas | vendor-purchase-history.md | Muestra expenses y bills recientes del proveedor. |
Relaciones
- Depende de: Finance, Currencies y permisos de organización.
- Usado por:
expensesde forma opcional;billsyvendor-paymentsde forma obligatoria.
Limitaciones y notas
- Un proveedor es distinto de un contacto de CRM, aunque puede vincularse opcionalmente a un contacto o compañía.
- La eliminación es lógica; los documentos históricos permanecen.
id: vendor-addresses modulo: vendors app: finance nombre: Gestionar direcciones de proveedor tipo: accion
Gestionar direcciones de proveedor
Registra direcciones asociadas al proveedor y permite elegir la principal.
Que se logra
- Resultado: cada proveedor conserva sus direcciones y una referencia principal para consulta operativa.
- Caso de uso: un restaurante guarda la dirección principal de su distribuidor para contrastarla al gestionar compras recurrentes.
- Se combina con: perfil y detalle de proveedor.
Donde esta
- Ruta:
/[orgId]/finance/vendors/newy/[orgId]/finance/vendors/[id]/edit - Acceso en UI: formulario de proveedor > direcciones
- Componente(s):
VendorEditForm.tsx
Como funciona
- Añade una tarjeta de dirección.
- Indica el tipo y los datos de ubicación.
- Marca la dirección principal cuando sea necesario.
- Guarda el proveedor.
Reglas y validaciones
- Solo una dirección puede quedar como principal para cada proveedor.
Backend
- Servicios:
vendor-addresses(find, create, patch, remove).
Relaciones
- Requiere: un proveedor.
- Dispara / afecta: se muestra en el detalle del proveedor.
id: vendor-contacts modulo: vendors app: finance nombre: Gestionar contactos de proveedor tipo: accion
Gestionar contactos de proveedor
Permite registrar las personas de contacto de un proveedor desde su formulario.
Que se logra
- Resultado: el equipo identifica la persona adecuada de cada proveedor y conserva un contacto principal.
- Caso de uso: una constructora registra a la persona de facturación de su distribuidor de materiales para resolver cobros o entregas.
- Se combina con: perfil y detalle de proveedor.
Donde esta
- Ruta:
/[orgId]/finance/vendors/newy/[orgId]/finance/vendors/[id]/edit - Acceso en UI: formulario de proveedor > contactos
- Componente(s):
VendorEditForm.tsx
Como funciona
- Añade una persona de contacto.
- Completa su nombre y, cuando aplique, cargo, departamento, email y teléfono.
- Marca una persona como principal si corresponde.
- Guarda el proveedor.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre y tratamiento | Texto y selección | No | Identifica a la persona. |
| Contacto profesional | Texto | No | Email, teléfono, cargo y departamento. |
| Principal | Interruptor | No | Distingue el contacto preferido. |
Reglas y validaciones
- Solo puede existir un contacto principal por proveedor; al marcar otro, el anterior deja de serlo.
Backend
- Servicios:
vendor-contacts(find, create, patch, remove).
Relaciones
- Requiere: un proveedor.
- Dispara / afecta: se muestra en el detalle del proveedor.
id: vendor-lifecycle modulo: vendors app: finance nombre: Cambiar estado y eliminar proveedores tipo: accion
Cambiar estado y eliminar proveedores
Permite retirar temporalmente un proveedor del uso activo o eliminarlo de las listas.
Que se logra
- Resultado: se evita seleccionar proveedores inactivos sin perder el historial de compras ya registrado.
- Caso de uso: una agencia inactiva una imprenta con la que dejó de trabajar y mantiene consultables sus documentos anteriores.
- Se combina con: lista de proveedores e historial de compras.
Donde esta
- Ruta:
/[orgId]/finance/vendors/[id] - Acceso en UI: detalle de proveedor >
Mark Active/Mark Inactive/Delete - Componente(s):
VendorDetail.tsx
Como funciona
- Abre el detalle de un proveedor.
- Usa la acción de estado para alternar entre
ActiveeInactive. - Usa
Deletey confirma para eliminarlo de forma lógica.
Reglas y validaciones
- La eliminación no borra físicamente el historial.
- Los documentos de compras históricos continúan existiendo.
Backend
- Servicios:
vendors(patch, remove). - Efectos: el proveedor eliminado deja de aparecer en consultas normales.
Relaciones
- Requiere: permiso para editar o eliminar proveedores.
- Dispara / afecta: availability del proveedor en nuevas compras.
id: vendor-list modulo: vendors app: finance nombre: Consultar proveedores tipo: vista
Consultar proveedores
Muestra los proveedores disponibles para compras y permite localizar registros existentes.
Que se logra
- Resultado: el equipo localiza proveedores disponibles y abre su ficha antes de registrar una compra.
- Caso de uso: una agencia de marketing encuentra a su proveedor de pauta para revisar sus datos antes de registrar una factura.
- Se combina con: perfiles de proveedor, Expenses y Bills.
Donde esta
- Ruta:
/[orgId]/finance/vendors - Acceso en UI:
Purchases > Vendors - Componente(s):
VendorsView.tsx
Como funciona
- Abre la lista de proveedores.
- Busca por texto o filtra por estado.
- Ordena columnas, configura las visibles o cambia la página.
- Selecciona una fila para abrir su detalle.
Reglas y validaciones
- La lista incluye nombre, email, tipo, teléfono, estado, balance y fecha de creación.
- Solo se muestran proveedores no eliminados y autorizados para el usuario.
Backend
- Servicios:
vendors(find, get). - Hooks relevantes: la búsqueda incluye datos de identificación y contacto.
Relaciones
- Requiere: acceso a Vendors.
- Dispara / afecta: abre el detalle o el flujo
New Vendor.
id: vendor-profile modulo: vendors app: finance nombre: Crear y editar proveedores tipo: accion
Crear y editar proveedores
Crea o actualiza la ficha de un proveedor para utilizarlo en compras.
Que se logra
- Resultado: se dispone de una ficha reutilizable del proveedor con datos operativos y valores predeterminados para compras.
- Caso de uso: una clínica crea el perfil de su laboratorio externo para usarlo de forma consistente en sus gastos y facturas.
- Se combina con: contactos y direcciones de proveedor, Expenses, Bills y Payments Made.
Donde esta
- Ruta:
/[orgId]/finance/vendors/newy/[orgId]/finance/vendors/[id]/edit - Acceso en UI:
Vendors > New Vendoro detalle >Edit - Componente(s):
VendorEditForm.tsx
Como funciona
- Elige
BusinessoIndividual. - Completa el nombre visible y los datos de contacto y fiscales aplicables.
- Define, si se necesitan, moneda y términos de pago predeterminados.
- Guarda el formulario; en edición se conservan los datos existentes.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Tipo y nombre visible | Selección y texto | Sí, nombre visible | El tipo ajusta los campos de nombre. |
| Datos de contacto y fiscales | Texto | No | Incluye email, teléfono e identificación fiscal. |
| Moneda y términos de pago | Selección | No | Valores predeterminados para compras. |
| Estado | Selección | No | Active o Inactive. |
Reglas y validaciones
- El nombre visible es obligatorio.
- Se guardan datos de creación y propiedad del usuario autenticado al crear.
Backend
- Servicios:
vendors(create, patch).
Relaciones
- Requiere: permisos para crear o editar proveedores.
- Dispara / afecta: permite seleccionar el proveedor en expenses, bills y pagos.
id: vendor-purchase-history modulo: vendors app: finance nombre: Consultar historial de compras del proveedor tipo: vista
Consultar historial de compras del proveedor
Muestra los gastos y bills recientes vinculados a un proveedor para navegar a sus documentos.
Que se logra
- Resultado: se consulta desde un solo proveedor la actividad reciente de gasto y cuentas por pagar asociada.
- Caso de uso: una empresa de eventos revisa los gastos y bills recientes de su proveedor de sonido antes de negociar un nuevo servicio.
- Se combina con: Expenses y Bills.
Donde esta
- Ruta:
/[orgId]/finance/vendors/[id] - Acceso en UI: detalle de proveedor > pestañas de compras relacionadas
- Componente(s):
VendorDetail.tsx
Como funciona
- Abre el detalle de un proveedor.
- Selecciona la pestaña de expenses o bills.
- Revisa los documentos recientes y abre uno para ver su detalle.
Reglas y validaciones
- Solo se listan los documentos asociados al proveedor y visibles para el usuario.
Backend
- Servicios:
expensesybills(find, get).
Relaciones
- Requiere: un proveedor existente.
- Dispara / afecta: enlaza con los módulos Expenses y Bills.
APP: helpdesk
Helpdesk
Ticketing moderno, knowledge base y portal público.
- Etapa: Beta
- Landing:
/{orgId}/helpdesk
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Tickets Helpdesk | tickets |
beta | Ticketing moderno con colas y asignación. |
| Knowledge Base | knowledge-base |
beta | Articulos internos y portal público. |
| Insights | insights |
beta | Analitica de soporte. |
| Portal público | portal-publico |
beta | Self-service del cliente /help/{slug}. |
| Configuración Helpdesk | configuracion |
beta | SLA, macros, grupos, routing, email. |
Funcionalidades internas
56 funcionalidades documentadas en 5 modulos. Ver la tabla de cada modulo.
id: configuracion app: helpdesk nombre: Configuración de Helpdesk estado: beta permiso: can_access_helpdesk y can_manage_helpdesk_settings para cambios
Configuración de Helpdesk
Define cómo se reciben, enrutan, priorizan y notifican los tickets, además del centro de ayuda que usan los clientes.
Para que sirve
- Un SaaS define grupos, agentes y reglas de triage para dirigir facturación, incidencias técnicas y onboarding a quien corresponde.
- Un ISP configura horarios y políticas SLA para comprometer tiempos realistas de respuesta según la prioridad de una avería.
- Un e-commerce centraliza su correo de soporte, avisos al cliente y respuestas aprobadas para atender pedidos de forma consistente.
- Una empresa de servicios publica formularios y un centro de ayuda con su propia marca o dominio.
- Un BPO prepara macros y escalaciones para que cada turno aplique el mismo procedimiento ante casos sin asignar.
Que lo hace diferente
- Configura en el mismo producto el ciclo completo: entrada por correo o formulario, enrutamiento, SLA, comunicación, autoservicio y medición.
- El triage con IA clasifica tickets entrantes con prioridad, tipo, etiquetas y sentimiento sin bloquear su creación.
- Los horarios laborales influyen en SLA y escalamiento, conectando el diseño de la operación con la atención diaria.
- Los formularios y el portal público se conectan de forma nativa a tickets, Knowledge Base, CSAT y automatizaciones.
- Las reglas definidas aquí funcionan junto a asistentes IA que pueden crear y consultar tickets desde una conversación.
Acceso
- Ruta principal:
/[orgId]/settings/helpdesk/general - Cómo se llega:
Avatar menu > Settings > Helpdesk - Permiso requerido:
can_access_helpdesk; las modificaciones requierencan_manage_helpdesk_settings.
Alcance técnico
- Frontend: rutas bajo
settings/helpdeskyHelpdeskSettingsSidebar.tsx. - Backend:
helpdesk-settings, grupos, horarios, SLA, correo, formularios, macros, respuestas guardadas y portal. - Superficies públicas: formularios y portal configurados aquí.
- Integraciones externas: recepción y envío de correo; dominio propio mediante DNS/CNAME.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Preferencias generales | helpdesk-general-settings.md | Prefijo, tipos, valores predeterminados y avisos. |
| Avisos al solicitante | helpdesk-requester-notifications.md | Confirmación, respuesta y resolución. |
| Avisos a agentes | helpdesk-agent-notifications.md | Asignación y respuesta del cliente. |
| Triage con IA | helpdesk-ai-triage.md | Clasifica tickets entrantes. |
| Grupos | helpdesk-groups.md | Enrutamiento y métodos de asignación. |
| Miembros de grupo | helpdesk-group-members.md | Agregar y quitar agentes de un grupo. |
| Escalamiento sin asignar | helpdesk-unassigned-escalation.md | Deriva tickets sin responsable. |
| Horarios laborales | helpdesk-business-hours.md | Calendarios para SLA y escalamiento. |
| Políticas SLA | helpdesk-sla-policies.md | Metas por prioridad. |
| Correo de soporte | helpdesk-support-email.md | Direcciones nativas e hilos entrantes. |
| Respuestas guardadas | helpdesk-canned-response-management.md | Plantillas para respuestas. |
| Formularios | helpdesk-request-form-management.md | Solicitudes públicas y widget. |
| Macros | helpdesk-macro-management.md | Secuencias aplicables al ticket. |
| Portal | helpdesk-portal-settings.md | Marca, publicación y módulos. |
| Dominio propio | helpdesk-custom-domain.md | Conexión y verificación DNS. |
Relaciones
- Depende de: grupos, tickets y portal de Helpdesk.
- Usado por: recepción de correo, SLA, formularios, Knowledge Base y portal público.
Limitaciones y notas
- La ruta
/[orgId]/settings/helpdeskredirige ageneral.
id: helpdesk-agent-notifications modulo: configuracion app: helpdesk nombre: Notificaciones a agentes tipo: configuracion
Notificaciones a agentes
Define avisos internos por asignación y respuesta del cliente.
Que se logra
- Resultado: Avisa a los agentes cuando se les asigna trabajo o llega una respuesta del solicitante.
- Caso de uso: Un BPO notifica al responsable cuando un cliente contesta para reducir el tiempo hasta la siguiente acción.
- Se combina con: Enrutamiento, grupos y respuestas de tickets.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/general - Acceso en UI:
Settings > Helpdesk > General > Notifications - Componente(s):
settings/helpdesk/general/page.tsx
Como funciona
- Cambia
Agent assignmenty/oCustomer replies. - Pulsa
Save settings.
Reglas y validaciones
- El destinatario de ambos avisos es el agente asignado.
Backend
- Servicios:
helpdesk-settings(patch) yhelpdesk-tickets(create, patch).
Relaciones
- Requiere: un agente asignado.
- Afecta: operación de responsables.
id: helpdesk-ai-triage modulo: configuracion app: helpdesk nombre: Triage asistido por IA tipo: configuracion
Triage asistido por IA
Solicita clasificación asíncrona de tickets que llegan desde canales externos.
Que se logra
- Resultado: Clasifica de forma automática los tickets entrantes para que el equipo empiece con señales de prioridad, tipo y contexto.
- Caso de uso: Un e-commerce recibe consultas de postventa y las prioriza antes de que un agente revise manualmente cada asunto.
- Se combina con: Tickets, etiquetas, grupos y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/general - Acceso en UI:
Settings > Helpdesk > General > Notifications > AI triage - Componente(s):
settings/helpdesk/general/page.tsx
Como funciona
- Activa
AI triage. - Guarda con
Save settings. - Al crearse un ticket entrante, Helpdesk solicita la clasificación.
Reglas y validaciones
- No se ejecuta en tickets de origen
manualniai. - Puede actualizar prioridad, tipo, etiquetas y sentimiento sin bloquear la creación.
Backend
- Servicios:
helpdesk-settings(patch),helpdesk-tickets(create). - Hook:
triageHelpdeskTicketOnCreate.
Relaciones
- Requiere: ticket entrante.
- Afecta: clasificación del ticket.
id: helpdesk-business-hours modulo: configuracion app: helpdesk nombre: Horarios laborales tipo: configuracion
Horarios laborales
Crea calendarios semanales y zonas horarias para el cálculo de SLA.
Que se logra
- Resultado: Representa los horarios de atención que sirven de base para medir compromisos y escalaciones.
- Caso de uso: Una universidad configura calendarios distintos para soporte académico y tecnológico, respetando sus horarios reales.
- Se combina con: Políticas SLA y escalamiento sin asignar.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/business-hours - Acceso en UI:
Settings > Helpdesk > Business hours - Componente(s):
settings/helpdesk/business-hours/page.tsx
Como funciona
- Pulsa
New calendar. - Indica nombre y zona horaria.
- Habilita días y establece inicio/fin; guarda el calendario.
- Marca
Default calendarsi será el calendario de la organización.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | Identifica el calendario. |
Timezone |
selector | Sí | Base de los horarios. |
| Horario por día | interruptor y hora | No | Día laborable y rango horario. |
Reglas y validaciones
- Un grupo puede usar este calendario o el predeterminado de la organización.
Backend
- Servicios:
helpdesk-business-hours(find, create, patch, remove).
Relaciones
- Requiere: permiso de administración.
- Afecta: SLA y escalamiento.
id: helpdesk-canned-response-management modulo: configuracion app: helpdesk nombre: Administración de respuestas guardadas tipo: configuracion
Administración de respuestas guardadas
Mantiene respuestas reutilizables disponibles en el compositor de tickets.
Que se logra
- Resultado: Mantiene un repertorio controlado de mensajes reutilizables para acelerar respuestas coherentes.
- Caso de uso: Un e-commerce prepara respuestas para cambios, devoluciones y tiempos de despacho que sus agentes insertan en segundos.
- Se combina con: Respuestas guardadas dentro de tickets.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/canned-responses - Acceso en UI:
Settings > Helpdesk > Canned responses - Componente(s):
settings/helpdesk/canned-responses/page.tsx
Como funciona
- Pulsa
New response. - Introduce título, shortcode y contenido.
- Elige visibilidad y grupo si aparecen en el formulario; guarda la respuesta.
Reglas y validaciones
- Requiere
can_manage_helpdesk_settings. - Las respuestas se consumen desde el compositor del ticket.
Backend
- Servicios:
helpdesk-canned-responses(find, create, patch, remove).
Relaciones
- Requiere: Helpdesk.
- Afecta: respuestas públicas y notas al usar el compositor.
id: helpdesk-custom-domain modulo: configuracion app: helpdesk nombre: Dominio personalizado del portal tipo: integracion
Dominio personalizado del portal
Conecta un dominio de la organización a un portal publicado mediante un registro CNAME.
Que se logra
- Resultado: Permite atender el centro de ayuda desde una dirección propia una vez que el dominio queda verificado.
- Caso de uso: Una plataforma SaaS publica su ayuda en soporte.sumarca.com para mantener el autoservicio dentro de su presencia digital.
- Se combina con: Portal público, descubrimiento y Knowledge Base.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/portal - Acceso en UI:
Settings > Helpdesk > Help center portal > Custom domain - Componente(s):
settings/helpdesk/portal/page.tsx
Como funciona
- Escribe
Domainy pulsaConnect domain. - Crea el CNAME indicado en DNS.
- Pulsa
Check status; usaDisconnectpara retirarlo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Domain |
texto | Sí | Ejemplo: support.yourcompany.com. |
Reglas y validaciones
- Solo se conecta un portal publicado.
- El dominio se normaliza, no puede ser el dominio base ni estar usado por otro portal o sitio.
- Para cambiarlo hay que desconectar primero.
Backend
- Servicio:
helpdesk-portal-domains(create conconnect,verifyodisconnect). - Efectos: crea/elimina el tenant de CloudFront y actualiza el estado del dominio.
Relaciones
- Requiere: DNS administrable y portal publicado.
- Afecta: URL canónica del portal.
id: helpdesk-general-settings modulo: configuracion app: helpdesk nombre: Preferencias generales tipo: configuracion
Preferencias generales
Configura numeración, tipos, valores predeterminados y avisos del ciclo de ticket.
Que se logra
- Resultado: Establece criterios comunes de creación y clasificación para que los tickets nazcan con una estructura consistente.
- Caso de uso: Una empresa de servicios define sus tipos y valores predeterminados para que cada solicitud se encamine de forma uniforme.
- Se combina con: Tickets, grupos y notificaciones.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/general - Acceso en UI:
Settings > Helpdesk > General - Componente(s):
settings/helpdesk/general/page.tsx
Como funciona
- Escribe
Ticket number prefix; se convierte a mayúsculas. - Define el cierre automático, tipos separados por comas y valores predeterminados.
- Pulsa
Save settings.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Ticket number prefix |
texto | No | Referencia del ticket. |
Auto-close solved tickets after |
número | No | Mínimo 1 hora. |
Ticket types |
texto | No | Valores separados por comas. |
Default support group |
selector | No | Destino de tickets sin grupo. |
Default business hours |
selector | No | Respaldo para SLA y escalamiento. |
Reglas y validaciones
- Modificar requiere
can_manage_helpdesk_settings.
Backend
- Servicios:
helpdesk-settings(find, patch),helpdesk-groups(find) yhelpdesk-business-hours(find). - Efectos: cambia el enrutamiento y los cálculos futuros de tickets.
Relaciones
- Requiere: grupos u horarios existentes para seleccionarlos.
- Afecta: tickets nuevos, SLA y escalamiento.
id: helpdesk-group-members modulo: configuracion app: helpdesk nombre: Miembros y disponibilidad de grupos tipo: configuracion
Miembros y disponibilidad de grupos
Asocia personas de la organización a un grupo de soporte.
Que se logra
- Resultado: Mantiene actualizada la composición de cada equipo para que la asignación alcance a las personas correctas.
- Caso de uso: Un proveedor de TI incorpora al nuevo agente de guardia al grupo de infraestructura antes de su turno.
- Se combina con: Grupos y asignación de tickets.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/routing - Acceso en UI:
Settings > Helpdesk > Routing > Add an agent - Componente(s):
settings/helpdesk/routing/page.tsx
Como funciona
- Abre la tarjeta del grupo.
- Selecciona una persona en
Add an agent. - Usa la papelera para retirarla.
- Activa o desactiva
Respect availability.
Reglas y validaciones
- La lista solo muestra miembros aún no incluidos.
- Cada alta recibe peso 100.
Backend
- Servicios:
organizations-users(find),helpdesk-group-members(find, create, remove),helpdesk-groups(patch).
Relaciones
- Requiere: miembros de la organización.
- Afecta: candidatos para asignación automática.
id: helpdesk-groups modulo: configuracion app: helpdesk nombre: Grupos de soporte tipo: configuracion
Grupos de soporte
Crea equipos y define el mecanismo de asignación automática.
Que se logra
- Resultado: Define equipos de soporte y la forma en que reciben trabajo para distribuir solicitudes por especialidad.
- Caso de uso: Una empresa de software separa facturación, soporte técnico y onboarding para que cada ticket llegue al grupo adecuado.
- Se combina con: Miembros de grupo, enrutamiento y escalamiento.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/routing - Acceso en UI:
Settings > Helpdesk > Routing > New group - Componente(s):
settings/helpdesk/routing/page.tsx
Como funciona
- Pulsa
New group. - Escribe
Name, eligeAssignment methody ajusta disponibilidad. - Confirma con
Create group.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | No se crea vacío. |
Assignment method |
selector | Sí | Manual, Round robin o Weighted. |
Respect agent availability |
interruptor | Sí | Activo inicialmente. |
Reglas y validaciones
- El primer grupo queda como
Default. - El método ponderado utiliza el peso de sus miembros.
Backend
- Servicios:
helpdesk-groups(find, create, patch, remove). - Efectos: determina enrutamiento de tickets.
Relaciones
- Requiere: miembros para asignar automáticamente.
- Afecta: tickets y SLA del grupo.
id: helpdesk-macro-management modulo: configuracion app: helpdesk nombre: Administración de macros tipo: configuracion
Administración de macros
Define secuencias que un agente puede ejecutar sobre un ticket.
Que se logra
- Resultado: Estandariza procedimientos de atención como acciones reutilizables aplicables desde cada ticket.
- Caso de uso: Un SaaS crea una macro de problema de acceso que asigna, clasifica y deja el mensaje inicial aprobado.
- Se combina con: Macros de tickets, respuestas guardadas y acciones de automatización.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/macros - Acceso en UI:
Settings > Helpdesk > Macros > New macro - Componente(s):
settings/helpdesk/macros/page.tsx
Como funciona
- Pulsa
New macro. - Nombra la macro y añade sus acciones.
- Guarda; el agente la ejecuta desde
Macroen el detalle del ticket.
Reglas y validaciones
- Las acciones admitidas incluyen estado, prioridad, tipo, asignación, etiquetas, nota privada y respuesta pública.
Backend
- Servicios:
helpdesk-macros(find, create, patch, remove),helpdesk-macro-runs(create).
Relaciones
- Requiere: ticket para ejecutarse.
- Afecta: datos, notas o respuestas del ticket.
id: helpdesk-portal-settings modulo: configuracion app: helpdesk nombre: Configuración del portal tipo: configuracion
Configuración del portal
Crea y publica el centro de ayuda con marca y módulos públicos configurables.
Que se logra
- Resultado: Decide qué partes del centro de ayuda estarán disponibles y cómo se identifican frente a los clientes.
- Caso de uso: Una empresa de logística publica formularios y artículos de seguimiento bajo la identidad de su marca.
- Se combina con: Portal público, Knowledge Base, formularios y CSAT.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/portal - Acceso en UI:
Settings > Helpdesk > Help center portal - Componente(s):
settings/helpdesk/portal/page.tsx
Como funciona
- Pulsa
Create help centersi aún no existe. - Edita marca y contenido.
- Ajusta los interruptores de publicación y pulsa
Save portal. - Usa
CopyoPreviewpara abrir la dirección.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Portal name |
texto | Sí | Nombre visible. |
Brand color |
color/texto | No | Color principal. |
Welcome title |
texto | No | Encabezado del portal. |
Welcome subtitle |
texto largo | No | Subtítulo. |
Logo URL / Support email |
texto | No | Logo y enlace mailto. |
| Módulos | interruptores | Sí | Formularios, KB y seguimiento. |
Reglas y validaciones
- Al crear usa valores iniciales publicados y los tres módulos activos.
Backend
- Servicios:
helpdesk-portals(find, create, patch). - Efectos: controla la exposición pública de contenido.
Relaciones
- Requiere: portal publicado para dominio propio.
- Afecta: portal público.
id: helpdesk-request-form-management modulo: configuracion app: helpdesk nombre: Administración de formularios de solicitud tipo: configuracion
Administración de formularios de solicitud
Crea formularios de soporte que generan tickets desde el portal o desde el widget.
Que se logra
- Resultado: Define qué datos recoge una solicitud pública y cómo se presenta en el portal o un widget.
- Caso de uso: Una clínica crea un formulario de soporte de pacientes con las preguntas necesarias para derivar el caso correctamente.
- Se combina con: Portal público, formularios incrustados y tickets.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/forms - Acceso en UI:
Settings > Helpdesk > Request forms > New form - Componente(s):
settings/helpdesk/forms/page.tsx
Como funciona
- Pulsa
New form; escribe nombre y descripción. - Ajusta los campos iniciales o añade uno con
Add field. - Activa
Active,PortaloConfirmation emailen la tarjeta según corresponda.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Campos iniciales | texto/correo/área | Sí | Name, Email, Subject, How can we help?. |
| Campo adicional | texto | No | Se inicia como New field. |
Required |
interruptor | Sí | Por cada campo. |
Reglas y validaciones
- El slug se genera a partir del nombre y añade un sufijo si ya existe.
- Solo formularios activos y visibles en portal aparecen en el centro de ayuda.
Backend
- Servicios:
helpdesk-forms(find, create, patch, remove),helpdesk-form-submissions(create). - Efectos: crea ticket; el embed lo registra con origen widget.
Relaciones
- Requiere: portal para enlace público.
- Afecta: tickets y confirmación al solicitante.
id: helpdesk-requester-notifications modulo: configuracion app: helpdesk nombre: Notificaciones al solicitante tipo: configuracion
Notificaciones al solicitante
Controla los correos que recibe la persona que abrió el ticket.
Que se logra
- Resultado: Automatiza los avisos que recibe quien abre un ticket en momentos clave de la atención.
- Caso de uso: Un SaaS confirma la recepción, informa cada respuesta y notifica la resolución para que el cliente no tenga que preguntar por el estado.
- Se combina con: Correo de soporte, respuestas de tickets, SLA y CSAT.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/general - Acceso en UI:
Settings > Helpdesk > General > Notifications - Componente(s):
settings/helpdesk/general/page.tsx
Como funciona
- Activa o desactiva
Ticket created,Agent repliesyTicket solved. - Guarda con
Save settings.
Reglas y validaciones
Satisfaction surveyes independiente y requiere portal activo.- Sin canal de correo de Helpdesk activo no se envía ningún email al solicitante. No hay fallback transaccional.
- Crear un ticket desde el workspace, un asistente de IA o una automatización nunca envía el email de ticket creado.
- Las respuestas públicas sí se envían si hay canal, email del solicitante y el switch
Agent repliesestá activo. - Las notas privadas nunca se envían.
- El email de ticket resuelto no se envía en tickets internos (
manual,ai,automation) salvo que un agente ya haya enviado una respuesta pública.
Backend
- Servicios:
helpdesk-settings(patch) yhelpdesk-tickets(create). - Efectos: confirmación, entrega de respuesta pública y aviso de resolución.
Relaciones
- Requiere: correo del solicitante.
- Afecta: comunicaciones salientes.
id: helpdesk-sla-policies modulo: configuracion app: helpdesk nombre: Políticas SLA tipo: configuracion
Políticas SLA
Define metas de primera respuesta, siguiente respuesta y resolución para cada prioridad.
Que se logra
- Resultado: Convierte las prioridades de soporte en objetivos medibles de respuesta y resolución.
- Caso de uso: Un ISP establece metas más cortas para fallas urgentes que para consultas generales y puede supervisar su cumplimiento.
- Se combina con: Horarios laborales, SLA de tickets e Insights.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/sla - Acceso en UI:
Settings > Helpdesk > SLA policies > New policy - Componente(s):
settings/helpdesk/sla/page.tsx
Como funciona
- Pulsa
New policye indicaName. - Crea la política.
- Edita minutos por prioridad y pulsa
Save; usa la papelera para eliminarla.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | Nombre de la política. |
First response |
número | No | Minutos por prioridad. |
Next response |
número | No | Minutos por prioridad. |
Resolution |
número | No | Minutos por prioridad. |
Business hours |
interruptor | No | Aplica horario laboral. |
Reglas y validaciones
- Las filas disponibles son
low,normal,highyurgent.
Backend
- Servicios:
helpdesk-sla-policies(find, create, patch, remove);cron-helpdesk-sla.
Relaciones
- Requiere: políticas activas.
- Afecta: vencimientos y brechas SLA.
id: helpdesk-support-email modulo: configuracion app: helpdesk nombre: Canales de correo de soporte tipo: integracion
Canales de correo de soporte
Crea direcciones nativas que reciben correo y convierten hilos en tickets.
Que se logra
- Resultado: Conecta una dirección de soporte para centralizar correos entrantes y respuestas dentro de los tickets.
- Caso de uso: Una empresa de servicios atiende las solicitudes recibidas en su correo de soporte desde la misma cola de Helpdesk.
- Se combina con: Respuestas de tickets, avisos al solicitante y CSAT.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/email - Acceso en UI:
Settings > Helpdesk > Support email > New address - Componente(s):
settings/helpdesk/email/page.tsx
Como funciona
- Pulsa
New address. - Completa
Namey unaPreferred addressopcional; crea la dirección. - Ajusta nombre del remitente, prioridad, creación automática y firma; pulsa
Save changes.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | Nombre del canal. |
Preferred address |
texto | No | Parte previa a @helpdesk.achieveapex.com. |
Default priority |
selector | Sí | low, normal, high o urgent. |
Create tickets automatically |
interruptor | Sí | Para cada hilo nuevo. |
Email signature |
texto largo | No | Firma saliente. |
Reglas y validaciones
- El primer canal se marca como predeterminado.
- Se puede copiar la dirección entrante desde la tarjeta.
Backend
- Servicios:
helpdesk-email-channels(find, create, patch, remove),helpdesk-email-inbound(create). - Efectos: un correo entrante puede crear ticket y las respuestas conservan hilo.
Relaciones
- Requiere: canal activo.
- Afecta: tickets recibidos por correo.
id: helpdesk-unassigned-escalation modulo: configuracion app: helpdesk nombre: Escalamiento de tickets sin asignar tipo: automatizacion
Escalamiento de tickets sin asignar
Asigna a una persona los tickets que continúan sin responsable tras un tiempo.
Que se logra
- Resultado: Evita que los tickets sin responsable queden detenidos al definir cómo deben derivarse.
- Caso de uso: Un SaaS escala los casos no asignados al líder de soporte para que ninguno permanezca sin propietario.
- Se combina con: Grupos, asignación, SLA y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/helpdesk/routing - Acceso en UI:
Settings > Helpdesk > Routing > Escalate if unassigned - Componente(s):
settings/helpdesk/routing/page.tsx
Como funciona
- Introduce minutos en
Escalate if unassigned. - Elige la persona en
Escalate to.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Escalate if unassigned |
número | No | Mínimo 1 minuto. |
Escalate to |
selector | No | Persona o No one. |
Reglas y validaciones
- Solo se activa si hay minutos y agente.
- La UI advierte si falta el agente.
Backend
- Servicios:
helpdesk-groups(patch) ycron-helpdesk-sla.
Relaciones
- Requiere: grupo y persona de escalamiento.
- Afecta: responsable del ticket.
id: insights app: helpdesk nombre: Insights de Helpdesk estado: partial permiso: can_access_helpdesk
Insights de Helpdesk
Panel operativo que calcula la carga de la cola y métricas de respuesta, SLA y CSAT para el periodo seleccionado.
Para que sirve
- Un BPO revisa el volumen abierto, tickets sin asignar y vencimientos para decidir la cobertura del turno.
- Un SaaS compara tiempos de respuesta y resolución por periodo para detectar una degradación del soporte.
- Un ISP supervisa el cumplimiento de SLA de incidencias urgentes antes de que escalen a una queja mayor.
- Una empresa de servicios mide las valoraciones CSAT recibidas tras cerrar solicitudes.
Que lo hace diferente
- Calcula la operación directamente desde los tickets, grupos, asignaciones, SLA y respuestas CSAT del mismo Helpdesk.
- Muestra la salud actual de la cola junto a tendencias de periodos de 7, 30 o 90 días, no solo reportes históricos.
- Permite relacionar una métrica de atención con las reglas de SLA y enrutamiento que la producen dentro de Apex.
- Se complementa con automatizaciones de ticket y SLA para actuar sobre los casos que explican una desviación.
Acceso
- Ruta principal:
/[orgId]/helpdesk/insights - Como se llega:
Helpdesk sidebar > Insights - Permiso requerido:
can_access_helpdesk
Alcance técnico
- Frontend:
HelpdeskInsightsView.tsxy la rutahelpdesk/insights/page.tsx. - Backend:
helpdesk-insights(find), construido a partir de tickets, grupos, agentes y respuestas CSAT. - Superficies públicas: ninguna.
- Integraciones externas: ninguna; los datos de correo ya están incorporados en los tickets.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Rango de análisis | support-date-range.md | Recarga todas las métricas para 7, 30 o 90 días. |
| Salud de la cola | support-queue-health.md | Presenta los contadores de trabajo abierto y vencimientos. |
| Rendimiento y SLA | support-performance.md | Mide creación, resolución, tiempos y brechas SLA. |
| Satisfacción | support-satisfaction.md | Agrupa las respuestas CSAT enviadas en el periodo. |
| Desgloses y tendencia | support-breakdowns.md | Compara entradas y resoluciones diarias y distribuye la carga. |
Relaciones
- Depende de: Tickets Helpdesk, grupos, usuarios asignados, políticas SLA y CSAT.
- Usado por: responsables que supervisan la operación de soporte.
Limitaciones y notas
- La interfaz ofrece 7, 30 y 90 días; el servicio acepta de 1 a 365.
- Los indicadores de cola no usan el rango: representan el estado actual de todos los tickets de la organización.
id: support-breakdowns modulo: insights app: helpdesk nombre: Desgloses y tendencia de soporte tipo: vista
Desgloses y tendencia de soporte
Compara tickets creados y resueltos por día y distribuye los tickets creados entre canales, grupos y agentes.
Que se logra
- Resultado: Muestra cómo entra y se resuelve la carga por día y por distribución operativa para localizar cuellos de botella.
- Caso de uso: Un e-commerce ve que las solicitudes crecen tras una campaña y ajusta el equipo antes del siguiente lanzamiento.
- Se combina con: Cola, tipos, prioridades y rendimiento de soporte.
Donde esta
- Ruta:
/[orgId]/helpdesk/insights - Acceso en UI:
Helpdesk > Insights > breakdowns - Componente(s):
HelpdeskInsightsView.tsx
Como funciona
- Selecciona un periodo.
- En
Created vs resolved, compara las barras azul (Created) y verde (Resolved) de cada día. - Consulta
By channel,By groupyBy agentpara localizar el origen o responsable de la carga.
Reglas y validaciones
By channelagrupa por el origen del ticket: agente, asistente de IA, email, widget, portal, formulario, API o automatización.By groupmuestra tickets sin resolver / total; los no agrupados se nombranNo group.By agentmuestra su tiempo medio de resolución y total; no se representan tickets sin agente.
Backend
- Servicios:
helpdesk-insights(find). - Efectos: calcula agregados del periodo seleccionado.
Relaciones
- Requiere: Tickets Helpdesk, grupos y usuarios asignados.
- Dispara / afecta: análisis de volumen y distribución de la cola.
Notas
- La tendencia solo contiene fechas con tickets creados; no agrega días vacíos.
id: support-date-range modulo: insights app: helpdesk nombre: Rango de análisis tipo: configuracion
Rango de análisis
Cambia el periodo usado para los indicadores de rendimiento y tendencias.
Que se logra
- Resultado: Sitúa todas las métricas de rendimiento en una ventana temporal comparable para identificar cambios operativos.
- Caso de uso: Un BPO compara los últimos 30 días con su revisión mensual de soporte y decide dónde reforzar cobertura.
- Se combina con: Rendimiento, satisfacción y tendencias de Insights.
Donde esta
- Ruta:
/[orgId]/helpdesk/insights - Acceso en UI:
Helpdesk > Insights > Last 7, 30 or 90 days - Componente(s):
HelpdeskInsightsView.tsx
Como funciona
- En
Helpdesk insights, abre el selector de periodo. - Elige
Last 7 days,Last 30 daysoLast 90 days. - El panel consulta de nuevo todas las tarjetas, la tendencia y los desgloses para el número de días elegido.
Reglas y validaciones
- Requiere
can_access_helpdesk. - El servicio restringe el valor solicitado al intervalo de 1 a 365 días; la interfaz solo expone 7, 30 y 90.
Backend
- Servicios:
helpdesk-insights(find). - Efectos: no modifica tickets ni configuración; recalcula el resultado solicitado.
Relaciones
- Requiere: tickets y respuestas CSAT de la organización.
- Dispara / afecta: las cinco áreas del panel de Insights.
Notas
- Los contadores de cola permanecen en tiempo actual aunque se cambie este selector.
id: support-performance modulo: insights app: helpdesk nombre: Rendimiento y cumplimiento SLA tipo: vista
Rendimiento y cumplimiento SLA
Presenta tickets creados y resueltos, tiempos medios de primera respuesta y resolución, y cumplimiento SLA.
Que se logra
- Resultado: Convierte la actividad de soporte en medidas de resolución, respuesta y cumplimiento de SLA.
- Caso de uso: Un SaaS identifica que una prioridad tarda más de lo acordado y ajusta su cobertura de fin de semana.
- Se combina con: SLA, horarios laborales y tickets.
Donde esta
- Ruta:
/[orgId]/helpdesk/insights - Acceso en UI:
Helpdesk > Insights > Performance - Componente(s):
HelpdeskInsightsView.tsx
Como funciona
- Selecciona el periodo en
Helpdesk insights. - Revisa
Response timespara primera respuesta, resolución y la relación creados/resueltos. - Revisa
SLA compliancepara el porcentaje y las brechas de primera respuesta y resolución.
Reglas y validaciones
- Los promedios cuentan tickets creados en el periodo que tienen su respectiva fecha de primera respuesta o resolución.
- El porcentaje SLA resta el total de brechas de primera respuesta y resolución al número de tickets con política SLA; puede reflejar dos brechas sobre un mismo ticket.
- Si no hay tickets con política SLA, se muestra
—.
Backend
- Servicios:
helpdesk-insights(find). - Efectos: lectura de tickets creados dentro del periodo.
Relaciones
- Requiere: Tickets Helpdesk y políticas SLA aplicadas.
- Dispara / afecta: evaluación de capacidad y cumplimiento del equipo.
Notas
- Los tiempos son minutos redondeados y se muestran como minutos, horas o días.
id: support-queue-health modulo: insights app: helpdesk nombre: Salud de la cola tipo: vista
Salud de la cola
Muestra tickets sin resolver, sin asignar, vencidos, con vencimiento hoy, en espera, resueltos y cerrados.
Que se logra
- Resultado: Expone el volumen activo, casos sin asignar y vencimientos que requieren intervención inmediata.
- Caso de uso: Un ISP revisa el estado de la cola durante una caída de red para asignar más agentes antes de incumplir compromisos.
- Se combina con: Cola de tickets, SLA y enrutamiento.
Donde esta
- Ruta:
/[orgId]/helpdesk/insights - Acceso en UI:
Helpdesk > Insights > Queue - Componente(s):
HelpdeskInsightsView.tsx
Como funciona
- Abre
Helpdesk insights. - Lee las tarjetas
Unresolved,Unassigned,Overdue,Due todayyOn hold. - Usa la cola de tickets para investigar los casos mostrados; las tarjetas no son enlaces ni filtros.
Reglas y validaciones
UnresolvedincluyeOpen,PendingyOn hold.UnassignedyOverduese cuentan solo dentro de esos estados activos;Overduecompara el objetivo de resolución con la hora actual.SolvedyClosedse devuelven al servicio, aunque la interfaz actual no los muestra como tarjetas.
Backend
- Servicios:
helpdesk-insights(find). - Efectos: lectura agregada de la cola actual, sin modificar tickets.
Relaciones
- Requiere: Tickets Helpdesk.
- Dispara / afecta: priorización operativa de la cola.
Notas
Due todaytambién se basa en el objetivo de resolución y no distingue si el ticket ya incumplió otro objetivo SLA.
id: support-satisfaction modulo: insights app: helpdesk nombre: Satisfacción de soporte tipo: vista
Satisfacción de soporte
Resume respuestas CSAT, puntuacion promedio y proporcion de respuestas positivas.
Que se logra
- Resultado: Agrupa las respuestas CSAT para conocer cómo perciben los solicitantes la atención recibida.
- Caso de uso: Una empresa de servicios detecta una bajada de satisfacción después de cambiar el proceso de instalación.
- Se combina con: Encuestas CSAT, tickets resueltos y portal público.
Donde esta
- Ruta:
/[orgId]/helpdesk/insights - Acceso en UI:
Helpdesk > Insights > CSAT - Componente(s):
HelpdeskInsightsView.tsx
Como funciona
- Elige el periodo en
Helpdesk insights. - Consulta la tarjeta
Satisfaction. - Compara la calificación media sobre 5, el número de
Responsesy el porcentajePositive.
Reglas y validaciones
- Solo incluye encuestas CSAT respondidas durante el periodo.
- Una respuesta es positiva cuando su calificación es 4 o 5.
- Si aún no hay respuestas, la puntuación media y el porcentaje se muestran como
—.
Backend
- Servicios:
helpdesk-insights(find). - Efectos: lectura agregada; no crea ni reenvía encuestas.
Relaciones
- Requiere: CSAT de Tickets Helpdesk.
- Dispara / afecta: seguimiento de satisfacción.
Notas
- La interfaz no expone comentarios individuales ni permite filtrar por agente.
id: knowledge-base app: helpdesk nombre: Knowledge Base estado: beta permiso: can_access_helpdesk y can_manage_helpdesk_settings
Knowledge Base
Administra contenido de autoservicio para el portal de Helpdesk.
Para que sirve
- Un SaaS publica guías de configuración para que los clientes resuelvan tareas frecuentes sin abrir un ticket.
- Una universidad organiza contenido de matrícula, pagos y admisiones en categorías públicas y navegables.
- Un e-commerce mantiene actualizadas las políticas de devolución y entrega que sus compradores consultan desde el portal.
- Una empresa de servicios prepara artículos en borrador y los publica cuando el procedimiento está validado.
Que lo hace diferente
- El contenido se publica en el portal de Helpdesk de la misma organización, junto a formularios y seguimiento de tickets.
- Las categorías y artículos tienen estados que separan el trabajo editorial de lo que puede leer un visitante anónimo.
- Los artículos se pueden buscar desde herramientas internas de asistentes IA, además de navegarse en el portal.
- No depende de Sites ni de los formularios genéricos: mantiene su propio flujo de soporte y autoservicio.
Acceso
- Ruta principal:
/[orgId]/helpdesk/knowledge-base - Como se llega:
Helpdesk sidebar > Knowledge Base - Permiso requerido:
can_access_helpdesk y can_manage_helpdesk_settings
Alcance técnico
- Frontend:
HelpdeskKnowledgeBaseView.tsx,HelpdeskKnowledgeArticleEditor.tsxyHelpdeskKnowledgeEditor.tsx. - Backend:
helpdesk-knowledge-categoriesyhelpdesk-knowledge-articles. - Superficies públicas: categorías y artículos bajo
/help/[slug]. - Integraciones externas: no aplica.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Categorías | knowledge-categories.md | Crea, edita, activa y elimina categorías. |
| Listado y búsqueda de artículos | knowledge-article-list.md | Filtra contenido por texto, categoría y estado. |
| Creación de artículos | create-knowledge-article.md | Guarda un borrador o publica un artículo. |
| Edición y publicación | edit-knowledge-article.md | Edita contenido, slug, destacado y SEO. |
| Visibilidad pública | knowledge-article-visibility.md | Determina qué contenido puede leerse sin iniciar sesión. |
Relaciones
- Depende de: una categoría existente para cada artículo.
- Usado por: el portal público cuando
show_knowledge_baseestá activado.
Limitaciones y notas
- El contenido es independiente de Sites y de Forms. La interfaz no expone reordenamiento manual de categorías ni artículos.
id: create-knowledge-article modulo: knowledge-base app: helpdesk nombre: Creación de artículos tipo: accion
Creación de artículos
Crea un artículo como borrador o lo publica desde el mismo editor.
Que se logra
- Resultado: Convierte una solución o procedimiento en contenido reutilizable que puede publicarse en el portal.
- Caso de uso: Una empresa de logística documenta cómo seguir un envío para que los clientes resuelvan la consulta sin abrir un ticket.
- Se combina con: Categorías, portal público y búsqueda de conocimiento de asistentes IA.
Donde esta
- Ruta:
/[orgId]/helpdesk/knowledge-base/articles/new - Acceso en UI:
Helpdesk > Knowledge Base > New article - Componente(s):
HelpdeskKnowledgeArticleEditor.tsx
Como funciona
- Crea antes una categoría si el editor lo solicita.
- Completa
Article title,CategoryyArticle content. - Pulsa
Save draftoPublish.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Article title |
texto | Sí | Genera el slug si este está vacío. |
Category |
selector | Sí | Debe pertenecer a la organización. |
Article content |
editor enriquecido | Sí | Se sanitiza antes de guardar. |
Short description |
texto largo | No | Extracto del artículo. |
Reglas y validaciones
- Título, categoría y contenido son obligatorios en la UI.
- El slug debe ser válido y único dentro de la organización.
Backend
- Servicio:
helpdesk-knowledge-articles(create). - Hook: prepara slug, texto de búsqueda, sanitización y fecha de publicación.
Relaciones
- Requiere: al menos una categoría.
- Afecta: listado y portal al publicarse.
id: edit-knowledge-article modulo: knowledge-base app: helpdesk nombre: Edición y publicación de artículos tipo: accion
Edición y publicación de artículos
Edita el contenido, categoría, URL y apariencia de búsqueda de un artículo existente.
Que se logra
- Resultado: Mantiene exacto y encontrable el contenido de ayuda a medida que cambian procesos o productos.
- Caso de uso: Una plataforma SaaS actualiza una guía de facturación y su información de búsqueda cuando lanza un nuevo flujo de pago.
- Se combina con: Visibilidad de artículos, portal público y búsqueda de conocimiento de asistentes IA.
Donde esta
- Ruta:
/[orgId]/helpdesk/knowledge-base/articles/[articleId] - Acceso en UI:
Helpdesk > Knowledge Base > Edit article - Componente(s):
HelpdeskKnowledgeArticleEditor.tsx
Como funciona
- Abre el artículo desde la lista.
- Modifica contenido y organización.
- Usa
Save draftoPublish;Previewaparece cuando existe URL pública.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
URL slug |
texto | No | Se normaliza; debe ser único. |
Featured article |
interruptor | No | Lo destaca en el portal. |
SEO title |
texto | No | Título para metadatos. |
SEO description |
texto largo | No | Descripción para metadatos. |
Reglas y validaciones
- Cambiar a
publishedfija la fecha de publicación si aún no existía. - La sanitización elimina scripts, estilos embebidos, iframes y manejadores HTML.
Backend
- Servicios:
helpdesk-knowledge-articles(get, patch).
Relaciones
- Requiere: categoría válida.
- Afecta: artículo público y resultados de búsqueda.
id: knowledge-article-list modulo: knowledge-base app: helpdesk nombre: Listado y búsqueda de artículos tipo: vista
Listado y búsqueda de artículos
Muestra los artículos de la organización y permite acotar la lista sin una petición adicional.
Que se logra
- Resultado: Localiza rápidamente borradores y artículos publicados para mantener el autoservicio actualizado.
- Caso de uso: Un SaaS encuentra las guías de una función retirada y las actualiza antes de que los clientes reciban instrucciones obsoletas.
- Se combina con: Categorías y edición de artículos.
Donde esta
- Ruta:
/[orgId]/helpdesk/knowledge-base - Acceso en UI:
Helpdesk sidebar > Knowledge Base - Componente(s):
HelpdeskKnowledgeBaseView.tsx
Como funciona
- Escribe en
Search articles; busca en título, extracto y texto del artículo. - Filtra por
All statuses,PublishedoDrafts. - Selecciona una categoría en el lateral o, en móvil, en el selector.
- Abre el artículo o usa el menú para publicar, volver a borrador o eliminar.
Reglas y validaciones
- La carga inicial se limita a 50 artículos y categorías.
- La lista indica categoría, fecha de actualización, visitas y estado.
Backend
- Servicios:
helpdesk-knowledge-articles(find, patch, remove) yhelpdesk-knowledge-categories(find).
Relaciones
- Requiere: categoría para crear artículos.
- Afecta: edición y publicación.
id: knowledge-article-visibility modulo: knowledge-base app: helpdesk nombre: Visibilidad pública de artículos tipo: configuracion
Visibilidad pública de artículos
Controla si un artículo puede ser leído por visitantes sin sesión.
Que se logra
- Resultado: Controla qué conocimiento queda disponible para visitantes sin sesión y qué contenido permanece en borrador.
- Caso de uso: Una entidad educativa prepara una guía de inscripción internamente y la publica solo cuando las fechas y requisitos están confirmados.
- Se combina con: Portal público y categorías activas.
Donde esta
- Ruta:
/[orgId]/helpdesk/knowledge-base - Acceso en UI:
Helpdesk > Knowledge Base > menú del artículo > Publish o Move to draft - Componente(s):
HelpdeskKnowledgeBaseView.tsx
Como funciona
- Abre el menú
…de un artículo. - Selecciona
Publishpara hacerlo público oMove to draftpara retirarlo.
Reglas y validaciones
- Los visitantes solo pueden leer artículos con estado
published; el portal además debe mostrar Knowledge Base. - Las categorías públicas deben estar activas para aparecer en la navegación.
Backend
- Servicios:
helpdesk-knowledge-articles(find, patch); acceso público de lectura controlado en habilidades.
Relaciones
- Requiere: portal y categoría.
- Afecta: categoría, portada y URL pública.
id: knowledge-categories modulo: knowledge-base app: helpdesk nombre: Categorías de Knowledge Base tipo: configuracion
Categorías de Knowledge Base
Organiza los artículos en categorías que pueden mostrarse o ocultarse en el centro de ayuda.
Que se logra
- Resultado: Organiza el conocimiento público en secciones navegables para que las personas encuentren material relacionado.
- Caso de uso: Una universidad agrupa guías de matrícula, pagos y acceso al campus para reducir preguntas repetidas al equipo de soporte.
- Se combina con: Artículos de Knowledge Base y portal público.
Donde esta
- Ruta:
/[orgId]/helpdesk/knowledge-base - Acceso en UI:
Helpdesk sidebar > Knowledge Base > New category - Componente(s):
HelpdeskKnowledgeBaseView.tsx
Como funciona
- Pulsa
New categoryo el icono+. - Introduce nombre, descripción y estado
Visible in help center. - Pulsa
Save category. Para editar o eliminar abre el icono de ajustes de la categoría.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | No se guarda vacío. |
Description |
texto largo | No | Descripción pública. |
Visible in help center |
interruptor | Sí | Activa la categoría. |
Reglas y validaciones
- No se puede eliminar una categoría con artículos no eliminados; hay que moverlos o eliminarlos antes.
- Su posición inicial es el total de categorías actuales.
Backend
- Servicios:
helpdesk-knowledge-categories(find, create, patch, remove).
Relaciones
- Requiere: permisos de administración.
- Afecta: navegación pública de Knowledge Base.
id: portal-publico app: helpdesk nombre: Portal público de Helpdesk estado: beta permiso: ninguno
Portal público de Helpdesk
Centro de ayuda público de cada organización para encontrar artículos, enviar formularios, consultar tickets y responder CSAT.
Para que sirve
- Un e-commerce ofrece respuestas de devolución y un formulario de solicitud sin exigir que el comprador inicie sesión.
- Un SaaS habilita a sus clientes para buscar guías, abrir un ticket y consultar su referencia desde un mismo centro de ayuda.
- Una universidad publica categorías de admisiones y recibe preguntas de aspirantes mediante formularios específicos.
- Una empresa de servicios recoge CSAT tras resolver el caso y reduce consultas de seguimiento con la búsqueda pública del ticket.
Que lo hace diferente
- Reúne artículos, formularios, seguimiento de ticket y CSAT en una superficie pública conectada al Helpdesk de Apex.
- Puede operar bajo el subdominio de Helpdesk de AchieveApex o un dominio propio verificado por DNS/CNAME.
- Los formularios públicos generan tickets que entran a la misma cola donde viven asignación, SLA, relaciones CRM y automatizaciones.
- Ofrece un widget para incrustar el formulario en un sitio externo sin duplicar el sistema de solicitudes.
- Mantiene rutas canónicas, sitemap y robots por portal para que el contenido público pueda descubrirse correctamente.
Acceso
- Ruta principal:
/help/[slug] - Cómo se llega: URL del centro de ayuda o enlace compartido por la organización.
- Permiso requerido:
ninguno
Alcance técnico
- Frontend:
HelpdeskPortalPage.tsx,HelpdeskPublicForm.tsx,HelpdeskPublicTicketTracking.tsxy componentes públicos de Knowledge Base. - Backend:
helpdesk-portals,helpdesk-forms,helpdesk-form-submissions,helpdesk-ticket-lookup,helpdesk-csat-surveyy servicios de Knowledge Base. - Superficies públicas:
/help/[slug], categorías, artículos, formularios, seguimiento y CSAT. - Integraciones externas: DNS/CNAME para dominios propios.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Inicio | portal-home.md | Marca, buscador, contenido y enlaces disponibles. |
| Búsqueda | portal-knowledge-browsing.md | Filtra artículos y formularios en el navegador. |
| Categoría | portal-category.md | Lista artículos publicados de una categoría activa. |
| Artículo | portal-article.md | Muestra el contenido sanitizado y su categoría. |
| Formulario | portal-request-form.md | Crea una solicitud pública. |
| Widget | portal-form-embed.md | Inserta el formulario en una página externa. |
| Seguimiento | portal-ticket-tracking.md | Busca tickets por referencia y correo. |
| CSAT | portal-csat-survey.md | Recoge una valoración de un solo uso. |
| Descubrimiento | portal-discovery.md | Metadatos, sitemap y robots del portal. |
Relaciones
- Depende de: un portal publicado; cada sección depende además de su interruptor de visibilidad.
- Usado por: clientes sin sesión y por el widget de formularios.
Limitaciones y notas
- La dirección canónica es
https://{slug}.helpdesk.achieveapex.como el dominio propio activo. En hosts de AchieveApex,/help/[slug]redirige al host canónico; localhost queda excluido.
id: portal-article modulo: portal-publico app: helpdesk nombre: Artículo público de Knowledge Base tipo: publico
Artículo público de Knowledge Base
Muestra un artículo publicado con contenido enriquecido y enlace de regreso a su categoría.
Que se logra
- Resultado: Entrega una respuesta de autoservicio legible y pública sobre una consulta concreta.
- Caso de uso: Un comercio muestra instrucciones de devolución en una URL compartible, reduciendo la necesidad de abrir un ticket.
- Se combina con: Knowledge Base, categorías y descubrimiento del portal.
Donde esta
- Ruta:
/help/[slug]/articles/[articleSlug] - Acceso en UI:
Public Help Center > resultado o artículo de categoría - Componente(s):
HelpdeskPublicKnowledgeArticle.tsx
Como funciona
- Selecciona el artículo desde búsqueda, destacados o categoría.
- Usa el enlace de categoría para continuar navegando.
Reglas y validaciones
- El contenido se guarda sanitizado antes de aparecer en esta página.
- Solo se resuelven artículos publicados.
Backend
- Servicios públicos:
helpdesk-knowledge-articles(find/get) yhelpdesk-knowledge-categories(get).
Relaciones
- Requiere: artículo publicado.
- Afecta: navegación del portal.
id: portal-category modulo: portal-publico app: helpdesk nombre: Categoría pública de Knowledge Base tipo: publico
Categoría pública de Knowledge Base
Lista el contenido publicado perteneciente a una categoría del portal.
Que se logra
- Resultado: Agrupa artículos publicados por tema para facilitar una navegación dirigida del autoservicio.
- Caso de uso: Una universidad permite que los aspirantes entren directamente a las respuestas de admisiones sin revisar contenido no relacionado.
- Se combina con: Knowledge Base y página de artículo.
Donde esta
- Ruta:
/help/[slug]/categories/[categorySlug] - Acceso en UI:
Public Help Center > Browse by category - Componente(s):
HelpdeskPublicKnowledgeCategory.tsx
Como funciona
- Abre una tarjeta de categoría.
- Selecciona el artículo que deseas leer.
Reglas y validaciones
- Solo las categorías activas y artículos publicados están disponibles sin sesión.
Backend
- Servicios públicos:
helpdesk-portals,helpdesk-knowledge-categories,helpdesk-knowledge-articles(find).
Relaciones
- Requiere: portal activo y Knowledge Base visible.
- Afecta: acceso a artículos.
id: portal-csat-survey modulo: portal-publico app: helpdesk nombre: Encuesta CSAT pública tipo: publico
Encuesta CSAT pública
Recoge una valoración sobre el soporte asociado a un ticket resuelto.
Que se logra
- Resultado: Da al solicitante un enlace de un solo uso para valorar la atención después del cierre.
- Caso de uso: Una empresa de servicios incorpora la encuesta en el correo de resolución y obtiene una señal directa del cliente.
- Se combina con: CSAT, tickets resueltos e Insights.
Donde esta
- Ruta:
/help/[slug]/csat/[token] - Acceso en UI:
EnlaceRate this support experiencedel correo de ticket resuelto - Componente(s):
HelpdeskPublicCsatSurvey.tsx
Como funciona
- Abre el enlace recibido.
- Elige una valoración de 1 a 5.
- Escribe un comentario opcional y pulsa
Submit rating.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Valoración | botones 1–5 | Sí | Cada valor tiene una etiqueta descriptiva. |
| Comentario | texto largo | No | Campo Anything else you want to share?. |
Reglas y validaciones
- El token es de un único uso. Tras enviar, se muestra la valoración guardada.
- La página indica
Survey not availablesi el enlace no puede utilizarse.
Backend
- Servicio público:
helpdesk-csat-survey(get, create).
Relaciones
- Requiere: encuesta emitida al resolver un ticket.
- Afecta: métricas CSAT.
id: portal-discovery modulo: portal-publico app: helpdesk nombre: SEO y descubrimiento del portal tipo: publico
SEO y descubrimiento del portal
Entrega metadatos y archivos de descubrimiento con la URL canónica de cada centro de ayuda.
Que se logra
- Resultado: Hace que el centro de ayuda pueda ser interpretado por buscadores y compartido con una dirección canónica.
- Caso de uso: Una marca de e-commerce publica artículos de devolución que los clientes pueden localizar desde resultados de búsqueda.
- Se combina con: Dominio propio, portal y artículos publicados.
Donde esta
- Ruta:
/help/[slug]/robots.txt y /help/[slug]/sitemap.xml - Acceso en UI:
Solicitudes de buscadores a las rutas públicas - Componente(s):
robots.txt/route.ts y sitemap.xml/route.ts
Como funciona
- Publica el portal.
- El servidor genera la URL canónica para la página, categorías y artículos.
- Los buscadores solicitan
robots.txtysitemap.xmldel portal.
Reglas y validaciones
- Las páginas públicas usan ISR de cinco minutos.
- Los formularios se marcan
noindex. - El dominio propio activo reemplaza el subdominio de plataforma en la URL canónica.
Backend
- Servicios:
helpdesk-portals,helpdesk-knowledge-categories,helpdesk-knowledge-articles(find).
Relaciones
- Requiere: portal activo.
- Afecta: indexación de Knowledge Base.
id: portal-form-embed modulo: portal-publico app: helpdesk nombre: Widget embebido de formulario tipo: integracion
Widget embebido de formulario
Entrega el mismo formulario público en una presentación compacta para incrustarlo en un sitio externo.
Que se logra
- Resultado: Lleva la captura de solicitudes a un sitio externo sin obligar al visitante a navegar al portal completo.
- Caso de uso: Una tienda en línea incrusta el formulario de devoluciones en su página de ayuda y genera el ticket desde allí.
- Se combina con: Formularios de Helpdesk, tickets y portal público.
Donde esta
- Ruta:
/help/[slug]/forms/[formSlug]/embed - Acceso en UI:
Snippet deRequest forms > Embed widget`` - Componente(s):
HelpdeskPublicForm.tsx
Como funciona
- Copia el snippet desde la configuración del formulario.
- Inserta el widget en el sitio externo.
- El visitante completa y envía
Send request.
Reglas y validaciones
- Comparte campos y validación con el formulario público normal.
- Las solicitudes del embed se crean con origen
widget.
Backend
- Servicio público:
helpdesk-form-submissions(create).
Relaciones
- Requiere: formulario activo.
- Afecta: tickets de Helpdesk.
id: portal-home modulo: portal-publico app: helpdesk nombre: Inicio del centro de ayuda tipo: publico
Inicio del centro de ayuda
Presenta la marca del portal, artículos, categorías, formularios y el acceso al seguimiento si están habilitados.
Que se logra
- Resultado: Ofrece un punto de entrada de marca para que clientes encuentren ayuda o inicien una solicitud sin iniciar sesión.
- Caso de uso: Una empresa de servicios publica su centro de ayuda para que sus clientes consulten soluciones y abran casos desde una sola dirección.
- Se combina con: Knowledge Base, formularios y seguimiento público.
Donde esta
- Ruta:
/help/[slug] - Acceso en UI:
URL pública del portal - Componente(s):
HelpdeskPortalPage.tsx
Como funciona
- Abre el enlace del centro de ayuda.
- Usa las tarjetas de categoría, artículos destacados o formularios.
- Escribe en
Search support optionssi existen más de tres opciones en total.
Reglas y validaciones
- Solo carga portales activos.
- Sin búsqueda muestra hasta ocho artículos destacados; si no hay destacados, los primeros artículos.
Backend
- Servicios públicos:
helpdesk-portals,helpdesk-forms,helpdesk-knowledge-categories,helpdesk-knowledge-articles(find).
Relaciones
- Requiere: portal activo.
- Afecta: navegación hacia contenido y solicitudes.
id: portal-knowledge-browsing modulo: portal-publico app: helpdesk nombre: Navegación y búsqueda de Knowledge Base tipo: publico
Navegación y búsqueda de Knowledge Base
Filtra localmente los artículos y formularios ya disponibles para el portal.
Que se logra
- Resultado: Permite que el visitante encuentre contenido o formularios sin depender de que un agente intervenga.
- Caso de uso: Un SaaS reduce consultas repetitivas cuando los usuarios encuentran la guía de configuración desde el buscador del portal.
- Se combina con: Artículos, categorías y formulario público.
Donde esta
- Ruta:
/help/[slug] - Acceso en UI:
Public Help Center > Search support options - Componente(s):
HelpdeskPortalPage.tsx
Como funciona
- Escribe texto en
Search support options. - Abre un resultado de artículo o formulario.
- Borra la búsqueda para volver a categorías y destacados.
Reglas y validaciones
- La búsqueda compara nombre y descripción de formularios, y título, extracto y texto de artículos.
- Solo intervienen categorías activas y artículos publicados.
Backend
- Servicios públicos:
helpdesk-knowledge-categoriesyhelpdesk-knowledge-articles(find).
Relaciones
- Requiere:
Knowledge baseactivado en el portal. - Afecta: resultados mostrados.
id: portal-request-form modulo: portal-publico app: helpdesk nombre: Formulario público de solicitud tipo: publico
Formulario público de solicitud
Recibe una solicitud de soporte y muestra su referencia después de crear el ticket.
Que se logra
- Resultado: Convierte una solicitud externa en un ticket con la información definida por la organización.
- Caso de uso: Una empresa de mantenimiento recibe solicitudes de visita desde su portal y las incorpora directamente a su operación de soporte.
- Se combina con: Formularios, tickets, enrutamiento y notificaciones.
Donde esta
- Ruta:
/help/[slug]/forms/[formSlug] - Acceso en UI:
Public Help Center > Open form - Componente(s):
HelpdeskPublicForm.tsx
Como funciona
- Completa los campos del formulario.
- Pulsa
Send request. - La página muestra
Request received, el mensaje de éxito y el número de ticket.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Campo | texto, correo, número, área, selector o casilla | Depende del formulario | La etiqueta, ayuda y opciones proceden de su definición. |
Reglas y validaciones
- Los campos marcados como obligatorios usan validación HTML.
- El formulario debe estar activo; para abrirse desde la portada también debe estar visible en portal.
Backend
- Servicios públicos:
helpdesk-forms(find),helpdesk-form-submissions(create). - Efectos: crea un ticket enrutado y puede enviar confirmación.
Relaciones
- Requiere: portal y formulario activos.
- Afecta: tickets de Helpdesk.
id: portal-ticket-tracking modulo: portal-publico app: helpdesk nombre: Seguimiento público de tickets tipo: publico
Seguimiento público de tickets
Permite consultar el estado y mensajes públicos de un ticket sin iniciar sesión.
Que se logra
- Resultado: Permite que el solicitante consulte un caso por referencia y correo, reduciendo mensajes de seguimiento.
- Caso de uso: Un ISP permite a un cliente consultar el avance de una avería sin que el agente tenga que reenviar el estado.
- Se combina con: Tickets, respuestas y correo de soporte.
Donde esta
- Ruta:
/help/[slug]/tickets - Acceso en UI:
Public Help Center > Check ticket status - Componente(s):
HelpdeskPublicTicketTracking.tsx
Como funciona
- Abre
Check ticket status. - Escribe la referencia y el correo utilizado al contactar soporte.
- Pulsa
Find my ticket. - Revisa prioridad, fechas, estado y conversación.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Ticket reference |
texto | Sí | Acepta TKT-12 o 12. |
Email address |
correo | Sí | Debe coincidir con el solicitante. |
Reglas y validaciones
- Solo aparece cuando el portal tiene
Ticket trackingactivo. - Excluye notas privadas y muestra mensajes de cliente y soporte.
Backend
- Servicio público:
helpdesk-ticket-lookup(create).
Relaciones
- Requiere: portal activo y seguimiento habilitado.
- Afecta: visibilidad de la conversación pública.
id: tickets app: helpdesk nombre: Tickets Helpdesk estado: partial permiso: can_access_helpdesk
Tickets Helpdesk
Espacio de trabajo para que los agentes creen, clasifiquen, asignen y resuelvan solicitudes de soporte. Conserva la conversación, el SLA, la actividad y las relaciones CRM del caso.
Para que sirve
- Un SaaS registra incidencias, asigna especialistas y controla que la respuesta y resolución cumplan el SLA.
- Un e-commerce vincula un reclamo con el contacto, la empresa y el deal antes de decidir cómo atenderlo.
- Un ISP distribuye averías entre grupos de soporte, vigila vencimientos y escala los casos que esperan atención.
- Una empresa de servicios conserva el hilo, notas internas y actividad de cada solicitud para dar continuidad entre turnos.
Que lo hace diferente
- El ticket comparte contexto con el contacto, la compañía y el deal del CRM, en vez de vivir en un repositorio de soporte aislado.
- Las respuestas de correo entrantes y salientes se incorporan al hilo del ticket cuando hay un canal de Helpdesk activo.
- Puede usar SLA basados en horarios laborales, con pausas e incumplimientos visibles en la cola y el detalle.
- Las automatizaciones nativas se activan al crear o actualizar tickets y ante incumplimientos de SLA; pueden asignar, responder, anotar o añadir seguidores.
- Los asistentes IA disponen de herramientas internas para crear, consultar y buscar tickets desde sus conversaciones.
Acceso
- Ruta principal:
/[orgId]/helpdesk - Como se llega:
Header app switcher > Alpha & Beta > Helpdesk - Permiso requerido:
can_access_helpdesk
Alcance técnico
- Frontend:
HelpdeskListView.tsx,HelpdeskNewTicketView.tsx,HelpdeskTicketDetailView.tsxyHelpdeskRelatedCrmSection.tsx. - Backend:
helpdesk-tickets,helpdesk-ticket-messages,helpdesk-ticket-events,helpdesk-ticket-merge,helpdesk-macro-runs,helpdesk-ticket-batch-actionsycron-helpdesk-sla. - Superficies públicas:
helpdesk-csat-surveyrecibe valoraciones desde el enlace enviado al solicitante. - Integraciones externas: los canales Helpdesk envían respuestas por correo y el receptor de SES incorpora los correos entrantes al hilo.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Cola de tickets | ticket-queue.md | Lista tickets por vistas operativas, con SLA y datos de asignación. |
| Vistas guardadas | saved-views.md | Conserva filtros y orden como vista personal o compartida. |
| Filtrado y búsqueda | ticket-filters.md | Busca y reduce la cola por responsable, grupo, fecha, estado, prioridad y tipo. |
| Presentación de cola | ticket-layout.md | Alterna entre las vistas Dense layout y Card layout. |
| Exportación | ticket-export.md | Descarga los resultados filtrados visibles en CSV. |
| Acciones masivas | bulk-ticket-actions.md | Actualiza o elimina hasta el límite permitido de tickets. |
| Crear ticket | create-ticket.md | Crea un ticket manual y su mensaje inicial. |
| Detalle | ticket-details.md | Reúne hilo, información, SLA, actividad, relaciones y responsabilidad. |
| Estados | ticket-status.md | Resuelve, cierra o reabre tickets y ajusta sus temporizadores. |
| Prioridad y tipo | ticket-priority-and-type.md | Clasifica el ticket con las opciones configuradas. |
| Enrutamiento | ticket-routing.md | Asigna grupo, agente y asistente de IA. |
| Respuestas | ticket-replies.md | Registra y, con un canal activo, envía una respuesta al solicitante. |
| Notas privadas | private-notes.md | Añade mensajes visibles solo para agentes. |
| Respuestas guardadas | canned-responses.md | Inserta texto de una respuesta reutilizable. |
| Etiquetas | ticket-tags.md | Añade, crea o retira etiquetas del ticket. |
| Seguimiento | ticket-watchers.md | Suscribe al agente actual a las actualizaciones. |
| SLA | ticket-sla.md | Muestra objetivos de respuesta y resolución, pausas e incumplimientos. |
| Actividad | ticket-activity.md | Muestra cambios auditados y eventos operativos. |
| Relaciones CRM | ticket-crm-relations.md | Vincula contacto, compañía y negocio. |
| Fusión | ticket-merge.md | Integra un ticket origen en otro del mismo espacio de trabajo. |
| Macros | ticket-macros.md | Ejecuta acciones preconfiguradas sobre un ticket. |
| CSAT | ticket-csat.md | Solicita y registra la valoración posterior a la resolución. |
Relaciones
- Depende de: Configuración Helpdesk, Contactos, Compañías, Deals, equipos y canales de correo de Helpdesk.
- Usado por: Insights de Helpdesk, automatizaciones y asistentes de IA de Helpdesk.
Limitaciones y notas
- Convive con CRM
tickets-legacy(customer-service), el inbox anterior para mensajes de correo. No comparten registros, cola ni flujo de ticketing. - Un miembro puede tener alcance
all,groupoassigned; el acceso a configuración requierecan_manage_helpdesk_settings.
id: bulk-ticket-actions modulo: tickets app: helpdesk nombre: Acciones masivas de tickets tipo: accion
Acciones masivas de tickets
Aplica cambios a varios tickets seleccionados desde la cola.
Que se logra
- Resultado: Corrige o distribuye grupos de tickets homogéneos de una sola vez, reduciendo trabajo repetitivo.
- Caso de uso: Un e-commerce reasigna los pedidos afectados por una falla de pago al grupo especializado y eleva su prioridad en una acción.
- Se combina con: Filtros, etiquetas, enrutamiento y macros.
Donde esta
- Ruta:
/[orgId]/helpdesk - Acceso en UI:
Helpdesk > seleccionar tickets > bulk action bar - Componente(s):
HelpdeskListView.tsx
Como funciona
- Marca tickets individuales o usa
Select visible tickets. - Elige un valor en
Status,Priority,Assign agent,GroupoType. - Para eliminar, pulsa
Deletey confirma enDelete selected tickets.
Reglas y validaciones
- La barra actual expone estado, prioridad, agente, grupo, tipo y eliminación; las acciones de etiquetas existen en backend pero no se muestran en esta interfaz.
- Verifica que todos los tickets, grupos, agentes y etiquetas pertenezcan a la organización.
- Procesa cada ticket por separado e informa cuántos se actualizaron y los errores individuales.
Backend
- Servicios:
helpdesk-ticket-batch-actions(create),helpdesk-tickets(patch/remove). - Efectos: cada cambio usa el flujo normal de tickets, incluida actividad, SLA, notificación de asignación y avisos de resolución.
Relaciones
- Requiere: tickets visibles y permiso sobre cada uno.
- Dispara / afecta: cola, SLA, actividad y notificaciones.
Notas
- El límite exacto por operación está definido por el servicio; la interfaz no lo muestra.
id: canned-responses modulo: tickets app: helpdesk nombre: Uso de respuestas guardadas tipo: accion
Uso de respuestas guardadas
Inserta una respuesta reutilizable en el editor de la conversación.
Que se logra
- Resultado: Inserta mensajes aprobados para responder con consistencia sin volver a redactar información recurrente.
- Caso de uso: Un ISP usa una respuesta guardada para solicitar las pruebas básicas antes de escalar una falla de conexión.
- Se combina con: Administración de respuestas guardadas y respuestas de tickets.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Canned response - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- En el compositor, abre
Canned response. - Selecciona una respuesta por título o por su shortcode mostrado como
/shortcode · Title. - Su cuerpo se inserta en el editor; si ya había texto, se añade después de dos saltos de línea.
- Revisa y envía con
Send replyo conviértela enPrivate note.
Reglas y validaciones
- El selector solo se muestra cuando existe al menos una respuesta disponible.
- La selección no envía ni guarda el mensaje automáticamente.
Backend
- Servicios:
helpdesk-canned-responses(find);helpdesk-ticket-messages(create) al enviar. - Efectos: el contenido final sigue las reglas de respuesta pública o nota privada.
Relaciones
- Requiere: respuestas creadas en Configuración Helpdesk.
- Dispara / afecta: compositor de mensajes del ticket.
Notas
- La lista llega ordenada por uso descendente y luego por título.
id: create-ticket modulo: tickets app: helpdesk nombre: Creacion de tickets tipo: accion
Creacion de tickets
Crea un ticket manual y registra su descripción como el primer mensaje entrante del solicitante.
Que se logra
- Resultado: Convierte una solicitud recibida por un agente en un caso trazable con solicitante, contexto y responsable.
- Caso de uso: Una consultora registra la llamada de un cliente como ticket y la vincula con su compañía y oportunidad comercial.
- Se combina con: Contactos, compañías, deals, SLA y grupos.
Donde esta
- Ruta:
/[orgId]/helpdesk/new - Acceso en UI:
Helpdesk > New ticket - Componente(s):
HelpdeskNewTicketView.tsx
Como funciona
- En
New ticket, busca un contacto por nombre o email; al elegirlo se completa el solicitante. - Si no existe, escribe
Requester nameyRequester email. - Completa
SubjectyDescription; seleccionaType,Priority,Group,Agenty, opcionalmente,AI assistant. - Pulsa
Create ticket. La aplicación abre el detalle del ticket creado.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Requester |
buscador de contacto | Sí, o email | Busca tras dos caracteres. |
Requester name |
texto | No | Se usa al crear un contacto nuevo. |
Requester email |
Sí, si no se eligió contacto | Se normaliza antes de buscar o crear el contacto. | |
Subject |
texto | Sí | Resume la incidencia. |
Description |
área de texto | Sí | Se guarda también como primer mensaje del hilo. |
Type |
selector | Sí | Usa los tipos configurados; si faltan, muestra los cuatro predeterminados. |
Priority |
selector | Sí | Low, Normal, High o Urgent. |
Group, Agent, AI assistant |
selectores | No | El agente se limita a miembros del grupo seleccionado. |
Reglas y validaciones
- Requiere solicitante, asunto y descripción. Un email nuevo crea un contacto; uno existente lo reutiliza.
- Cambiar el grupo restablece el agente a
Unassigned. - El backend valida el tipo frente a la configuración de la organización.
Backend
- Servicios:
contacts(search/find/create),helpdesk-tickets(create),helpdesk-ticket-messages(create),helpdesk-groups,helpdesk-group-membersyai-assistants(find). - Efectos: asigna número, registra
ticket_created, aplica SLA, puede autoasignar y enviar acuse al solicitante. El mensaje inicial actualiza la actividad del ticket.
Relaciones
- Requiere: Contactos, Configuración Helpdesk, grupos y asistentes Helpdesk.
- Dispara / afecta: SLA, reglas de autoasignación, notificaciones y automatizaciones de nuevo ticket.
Notas
- La creación manual fija el origen como
manual; no ofrece adjuntos ni relaciones con compañía o deal en este formulario.
id: private-notes modulo: tickets app: helpdesk nombre: Notas internas tipo: accion
Notas internas
Agrega observaciones privadas que no se muestran al solicitante.
Que se logra
- Resultado: Permite dejar instrucciones y contexto operativo que el solicitante no ve.
- Caso de uso: Un BPO documenta la causa interna de un reembolso y el siguiente paso para el agente que tome el turno siguiente.
- Se combina con: Actividad, macros y automatizaciones de tickets.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Private note > Add note - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- Pulsa
Note, la pestañaPrivate noteo activa el interruptor del compositor. - Escribe la nota y pulsa
Add note. - La nota aparece en ámbar, con candado y la etiqueta
Private note.
Reglas y validaciones
- No admite texto vacío.
- Los mensajes de agente con
Private noteno se envían al solicitante.
Backend
- Servicios:
helpdesk-ticket-messages(create). - Efectos: actualiza la fecha de último mensaje del ticket y puede notificar a watchers; no crea correo saliente.
Relaciones
- Requiere: acceso al ticket.
- Dispara / afecta: hilo interno y actividad reciente del ticket.
Notas
- Las notas creadas por el sistema también son privadas cuando se marca esa condición.
id: saved-views modulo: tickets app: helpdesk nombre: Vistas guardadas tipo: configuracion
Vistas guardadas
Guarda filtros de cola para reutilizarlos como vista personal o compartida.
Que se logra
- Resultado: Cada agente o equipo recupera la misma lista de trabajo sin reconstruir filtros en cada turno.
- Caso de uso: Una empresa de servicios guarda una vista compartida de solicitudes urgentes para que el equipo de guardia use siempre el mismo criterio.
- Se combina con: Cola, filtros y permisos de alcance de tickets.
Donde esta
- Ruta:
/[orgId]/helpdesk - Acceso en UI:
Helpdesk > My views - Componente(s):
HelpdeskListView.tsx
Como funciona
- Configura filtros y orden en la cola.
- En
My views, pulsaSave. - En
Save current view, completaView name, decideShare with the organizationy pulsaSave view. - Selecciona la nueva vista desde
My views; para borrarla, usa el icono de papelera al pasar el cursor.
Reglas y validaciones
- Guarda vista lateral, texto de búsqueda, todos los filtros y el orden.
- Las vistas compartidas aparecen a todos los agentes; las personales solo a su creador.
- La interfaz permite pedir la eliminación de cualquier vista visible; la autorización final depende del servicio.
Backend
- Servicios:
helpdesk-saved-views(find/create/remove). - Efectos: la vista creada se activa inmediatamente en la barra lateral.
Relaciones
- Requiere: filtros de la Cola de tickets.
- Dispara / afecta: consulta recurrente de la cola.
Notas
- Las vistas incorporadas no se modifican ni se eliminan desde
My views.
id: ticket-activity modulo: tickets app: helpdesk nombre: Historial de actividad tipo: vista
Historial de actividad
Registra cambios relevantes y ejecuciones operativas del ticket.
Que se logra
- Resultado: Deja una secuencia auditable de cambios y eventos para entender qué ocurrió y quién intervino.
- Caso de uso: Una universidad revisa la actividad de una solicitud de admisión para explicar por qué cambió de responsable y cuándo se resolvió.
- Se combina con: Asignación, estados, SLA y mensajes.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Details > Activity - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- Abre
Activityen el lateral del detalle. - Revisa los eventos más recientes y los valores anterior y nuevo cuando corresponda.
- Abre el ticket destino si el evento o el aviso superior indica una fusión.
Reglas y validaciones
- Registra creación y cambios en estado, prioridad, grupo, agente, asistente de IA, tipo, política SLA y relaciones CRM.
- También incluye aplicación de macros, fusión, envío de CSAT y brechas SLA.
- La interfaz muestra los primeros ocho eventos, ordenados del más nuevo al más antiguo.
Backend
- Servicios:
helpdesk-ticket-events(find);helpdesk-ticketsregistra cambios con patch/create. - Efectos: ofrece trazabilidad sin modificar datos desde este bloque.
Relaciones
- Requiere: Ticket Helpdesk.
- Dispara / afecta: auditoría operativa del ticket.
Notas
- Los eventos de fusión incluyen el identificador del otro ticket en sus metadatos, aunque el lateral no los renderiza.
id: ticket-crm-relations modulo: tickets app: helpdesk nombre: Relaciones con CRM tipo: accion
Relaciones con CRM
Vincula o desvincula el ticket con un contacto, una compañía y un deal.
Que se logra
- Resultado: Relaciona el soporte con el cliente y su contexto comercial para resolver considerando la relación completa.
- Caso de uso: Una agencia ve que un ticket de una marca está ligado a una oportunidad activa antes de decidir la prioridad de la respuesta.
- Se combina con: Contactos, compañías y deals.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Related CRM records - Componente(s):
HelpdeskRelatedCrmSection.tsx
Como funciona
- En
Related CRM records, pulsaAssign contact,Assign companyoAssign deal. - Busca contactos o negocios escribiendo al menos dos caracteres y selecciona un resultado; compañía usa el diálogo CRM habitual.
- Para desvincular un registro ya relacionado, pulsa su
x. - Puedes crear un contacto o negocio desde los controles disponibles si tienes el permiso CRM correspondiente.
Reglas y validaciones
- Al elegir un contacto con compañía y si el ticket no tenía compañía, la aplicación también enlaza esa compañía.
- Al elegir un negocio, intenta enlazar su contacto y compañía si faltaban.
- Los enlaces a contacto y negocio respetan los permisos CRM de consulta; la asignación de contacto y negocio se desactiva sin ellos.
Backend
- Servicios:
helpdesk-tickets(patch),contacts,companiesydeals(get/find). - Efectos: registra cambios de relación en
Activity; modificar compañía puede volver a calcular la política SLA.
Relaciones
- Requiere: Contactos, Compañías y Deals del CRM.
- Dispara / afecta: solicitante, contexto comercial y selección de SLA.
Notas
- El formulario de creación inicial no asigna un negocio; se realiza desde el detalle.
id: ticket-csat modulo: tickets app: helpdesk nombre: Encuesta de satisfacción del ticket tipo: automatizacion
Encuesta de satisfacción del ticket
Envía una valoración pública vinculada al ticket cuando este pasa por primera vez a Solved o Closed.
Que se logra
- Resultado: Recoge una valoración posterior a la resolución para observar la satisfacción de quien abrió el caso.
- Caso de uso: Una empresa de servicios envía una encuesta al cerrar una solicitud y detecta si el cliente valoró negativamente el proceso.
- Se combina con: Configuración de CSAT, portal público e Insights.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Se incluye en el email de ticket resuelto - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- El agente resuelve o cierra el ticket.
- El email de resolución incluye el enlace de CSAT cuando la configuración y un portal activo lo permiten.
- El solicitante selecciona una puntuación de 1 a 5 y puede añadir un comentario.
Reglas y validaciones
- El enlace es público, pero solo vale para un token existente.
- Cada encuesta se responde una vez; el comentario se limita a 2.000 caracteres.
- Si el ticket ya estaba resuelto o cerrado, un nuevo cambio de estado no genera otra encuesta.
Backend
- Servicios:
helpdesk-csat-responses(find),helpdesk-csat-survey(get/create). - Efectos: registra
csat_submitteden la actividad y alimenta Insights.
Relaciones
- Requiere: notificación de resolución, CSAT habilitado y portal activo.
- Dispara / afecta: historial del ticket e Insights de satisfacción.
Notas
- El formulario público expone el asunto y número de ticket, no necesita inicio de sesión.
id: ticket-details modulo: tickets app: helpdesk nombre: Detalle de ticket tipo: vista
Detalle de ticket
Centraliza la conversación y las propiedades del ticket, sus objetivos SLA, actividad, etiquetas y relaciones CRM.
Que se logra
- Resultado: Concentra el contexto, el hilo, la responsabilidad y el progreso de un caso para evitar que el agente trabaje con información dispersa.
- Caso de uso: Una empresa de mantenimiento revisa en un mismo lugar la solicitud, el contacto, el contrato comercial y el tiempo restante de atención.
- Se combina con: Contactos, compañías, deals, mensajes, actividad y SLA.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk > seleccionar un ticket - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- Abre un ticket desde la cola; la cabecera muestra asunto, número, estado, solicitante y última actualización.
- Usa
Reply,Note,Macro,Merge,WatchySolve/Closepara operar el caso. - Consulta el hilo en el panel principal y
Ticket info,Tags,SLA,Activity,ResponsibilityyContexten el lateral. - En móvil alterna entre
ConversationyDetails.
Reglas y validaciones
- Los mensajes privados se muestran con candado; los públicos de agente se distinguen de los del cliente.
- Los adjuntos existentes abren su URL en otra pestaña cuando existe.
- La actividad muestra hasta ocho eventos recientes y los campos personalizados solo aparecen si tienen valor.
Backend
- Servicios:
helpdesk-tickets(get/patch),helpdesk-ticket-messages,helpdesk-ticket-events,helpdesk-ticket-tags,helpdesk-ticket-watchers,helpdesk-canned-responsesyhelpdesk-macros(find). - Efectos: se actualiza en tiempo real ante cambios del ticket o nuevos mensajes.
Relaciones
- Requiere: Tickets Helpdesk, grupos, usuarios, Contactos, Compañías y Deals.
- Dispara / afecta: las acciones individuales documentadas en este módulo.
Notas
- Si el ticket fue fusionado, aparece un aviso con el enlace al ticket destino.
id: ticket-export modulo: tickets app: helpdesk nombre: Exportacion de tickets tipo: accion
Exportacion de tickets
Descarga los tickets visibles de la cola como archivo CSV.
Que se logra
- Resultado: Entrega una copia CSV de la cola filtrada para auditoría o trabajo externo sin alterar los tickets.
- Caso de uso: Un BPO exporta los tickets resueltos del mes para contrastar la operación con su informe contractual.
- Se combina con: Filtros, vistas guardadas e Insights.
Donde esta
- Ruta:
/[orgId]/helpdesk - Acceso en UI:
Helpdesk > Queue toolbar > Export - Componente(s):
HelpdeskListView.tsx
Como funciona
- Ajusta la vista, filtros y orden de la cola.
- Pulsa
Export. - El navegador descarga
helpdesk-tickets-AAAA-MM-DD.csv.
Reglas y validaciones
- Exporta todos los tickets que coinciden con los filtros aplicados, incluso si no están en la página actual.
- Incluye
Ticket,Subject,Requester,Company,Status,Priority,TypeyCreated. - El contenido CSV protege comillas duplicándolas; no incluye mensajes, actividad, SLA ni adjuntos.
Backend
- Servicios:
helpdesk-tickets(find) y los datos relacionados ya cargados de contactos y empresas. - Efectos: genera el archivo localmente; no crea una exportación persistente ni un evento de ticket.
Relaciones
- Requiere: Cola de tickets.
- Dispara / afecta: ninguno fuera de la descarga del navegador.
Notas
- El botón está disponible aun cuando la vista no devuelve tickets; el CSV conserva solo la fila de encabezados.
id: ticket-filters modulo: tickets app: helpdesk nombre: Filtrado y búsqueda de tickets tipo: vista
Filtrado y búsqueda de tickets
Acota la cola por criterios operativos y localiza solicitudes.
Que se logra
- Resultado: Aísla el subconjunto de tickets que requiere atención para responder y escalar con foco.
- Caso de uso: Un SaaS filtra los casos sin asignar de prioridad alta para que el líder de soporte tome decisiones durante una incidencia.
- Se combina con: Cola, vistas guardadas y exportación.
Donde esta
- Ruta:
/[orgId]/helpdesk - Acceso en UI:
Helpdesk > Queue toolbar - Componente(s):
HelpdeskListView.tsx
Como funciona
- Escribe una palabra en
Search ticketspara buscar número, asunto, solicitante, empresa o agente. - Elige valores en
Agent,Group, fecha,Status,PriorityyType. - Combina los filtros con una vista lateral y un orden del menú
Recent activity. - La lista vuelve a la primera página y borra la selección al cambiar cualquier filtro.
Reglas y validaciones
AgentpermiteAll agents,Unassignedy usuarios de la organización;GrouppermiteAll groupsyNo group.- La fecha admite
Any date,Today,Last 7 daysyLast 30 days. - El orden puede ser actividad reciente, creación descendente o ascendente, o prioridad alta primero.
Backend
- Servicios:
helpdesk-tickets(find),helpdesk-settings(find) para los tipos configurados. - Efectos: no guarda los criterios salvo que se cree una vista en
My views.
Relaciones
- Requiere: cola de Tickets Helpdesk.
- Dispara / afecta: exportación, selección masiva y vista guardada.
Notas
- La búsqueda y los filtros se aplican sobre los tickets que cargó la pantalla, no como parámetros de la consulta inicial.
id: ticket-layout modulo: tickets app: helpdesk nombre: Presentacion de la cola tipo: vista
Presentacion de la cola
Alterna la presentación de los mismos resultados entre una lista compacta y tarjetas separadas.
Que se logra
- Resultado: Permite adaptar la lectura de la cola a una revisión rápida o a una comparación visual de los casos.
- Caso de uso: Una universidad usa el diseño compacto durante matrícula para revisar más solicitudes por pantalla; el equipo de calidad usa tarjetas para evaluar contexto.
- Se combina con: Cola de tickets y filtros.
Donde esta
- Ruta:
/[orgId]/helpdesk - Acceso en UI:
Helpdesk > Queue toolbar - Componente(s):
HelpdeskListView.tsx
Como funciona
- En la barra sobre los resultados, pulsa el icono
Dense layoutoCard layout. - La cola conserva la vista, filtros, orden y página actuales.
- Usa la casilla de cada elemento sin abrir su detalle.
Reglas y validaciones
Dense layoutmuestra filas separadas por bordes;Card layoutañade márgenes, bordes redondeados y sombra.- No guarda la preferencia para otra sesión.
Backend
- Servicios: ninguno adicional; usa los resultados cargados por
helpdesk-tickets(find). - Efectos: solo cambia la representación local de la cola.
Relaciones
- Requiere: Cola de tickets.
- Dispara / afecta: lectura y selección de tickets.
Notas
- El modo seleccionado destaca su icono en la barra.
id: ticket-macros modulo: tickets app: helpdesk nombre: Ejecucion de macros tipo: accion
Ejecucion de macros
Aplica una secuencia guardada de cambios y comunicaciones a un ticket con un solo comando.
Que se logra
- Resultado: Aplica una secuencia preparada de cambios y comunicaciones para ejecutar un procedimiento de soporte repetible.
- Caso de uso: Un proveedor de TI aplica la macro de restablecimiento: clasifica, asigna al equipo correcto, deja una nota y envía indicaciones iniciales.
- Se combina con: Macros de Helpdesk, respuestas guardadas y acciones de tickets.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Macro - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- Abre el selector
Macroen la cabecera del ticket. - Elige una macro activa.
- Helpdesk ejecuta sus acciones en orden y recarga el ticket.
Reglas y validaciones
- Solo admite macros activas de la misma organización que el ticket.
- Una macro puede cambiar estado, prioridad, tipo, grupo o agente; añadir o retirar etiquetas; crear una nota privada o enviar una respuesta. Sus textos admiten datos del ticket y solicitante.
Backend
- Servicios:
helpdesk-macros(find),helpdesk-macro-runs(create). - Efectos: guarda
macro_applied; las acciones de ticket disparan los mismos efectos de SLA, correo y notificación que una edición manual.
Relaciones
- Requiere: una macro definida en Configuración Helpdesk.
- Dispara / afecta: propiedades, hilo, etiquetas y actividad del ticket.
Notas
- El selector se oculta cuando no existen macros activas.
id: ticket-merge modulo: tickets app: helpdesk nombre: Fusion de tickets tipo: accion
Fusion de tickets
Consolida un ticket origen dentro de otro ticket de la misma organización.
Que se logra
- Resultado: Evita duplicar atención al consolidar solicitudes equivalentes en un único caso de referencia.
- Caso de uso: Un e-commerce une varios reportes del mismo pedido para que el cliente y los agentes sigan una sola resolución.
- Se combina con: Hilo de mensajes, actividad y ticket de destino.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Merge - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- En el ticket origen, pulsa
Merge. - Escribe el identificador numérico del destino en
Target ticket ID. - Confirma con
Merge ticket; el detalle se recarga y muestra el enlace al destino.
Reglas y validaciones
- No permite usar el mismo ticket, tickets de organizaciones distintas, ni un origen o destino previamente fusionado.
- Transfiere los mensajes al destino, añade etiquetas y seguidores sin duplicados y une las direcciones de copia.
- Cierra el origen y lo vincula al destino; no permite deshacer la fusión desde la interfaz.
Backend
- Servicios:
helpdesk-ticket-merge(create). - Efectos: añade eventos en ambos tickets y una nota privada de sistema en el destino; el cambio de cierre queda en la actividad.
Relaciones
- Requiere: dos tickets accesibles de la misma organización.
- Dispara / afecta: hilo, etiquetas, seguidores y destinatarios en copia del ticket destino.
Notas
- El diálogo solicita el ID interno, no el número visible con prefijo.
id: ticket-priority-and-type modulo: tickets app: helpdesk nombre: Prioridad y tipo de ticket tipo: accion
Prioridad y tipo de ticket
Clasifica el impacto y la naturaleza de la solicitud para su gestión.
Que se logra
- Resultado: Diferencia la urgencia y naturaleza de cada solicitud para que la cola y las reglas de atención reflejen su impacto.
- Caso de uso: Un e-commerce separa una consulta de producto de un reclamo urgente por un cobro duplicado para tratarlos con tiempos distintos.
- Se combina con: SLA, triage con IA, filtros y automatizaciones.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Priority selector o Responsibility > Type - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- En
Responsibility, eligePriorityyType. - Selecciona
Low,Normal,HighoUrgent; en tipo puede elegirseNot set. - Pulsa
Save changes.
Reglas y validaciones
- Los tipos proceden de
Helpdesk settings; sin configuración se usanQuestion,Incident,ProblemyFeature request. - El backend rechaza tipos no configurados. La prioridad es uno de los cuatro valores permitidos.
- Cambiar prioridad o tipo puede aplicar otra política SLA mientras el ticket siga activo.
Backend
- Servicios:
helpdesk-tickets(patch),helpdesk-settings(find). - Efectos: registra ambos cambios en actividad, actualiza los vencimientos SLA si la política aplicable cambia y puede activar automatizaciones de actualización.
Relaciones
- Requiere: tipos configurados en Configuración Helpdesk.
- Dispara / afecta: SLA, vistas, filtros y automatizaciones.
Notas
- La cola permite ordenar por prioridad, pero no expone los controles de clasificación por ticket.
id: ticket-queue modulo: tickets app: helpdesk nombre: Cola de tickets tipo: vista
Cola de tickets
Consulta las solicitudes de soporte en una cola con datos de solicitante, estado, prioridad, responsable, grupo, actividad y SLA.
Que se logra
- Resultado: Mantiene visible el trabajo pendiente, su responsable y los riesgos de atención para que el equipo priorice la jornada.
- Caso de uso: Un ISP revisa al inicio del turno los casos abiertos y vencidos, y distribuye las incidencias de conectividad antes de que acumulen retrasos.
- Se combina con: Vistas guardadas, SLA y enrutamiento de tickets.
Donde esta
- Ruta:
/[orgId]/helpdesk - Acceso en UI:
Helpdesk > Helpdesk - Componente(s):
HelpdeskListView.tsx
Como funciona
- Abre
Helpdesk; la vista inicial esAll unresolved. - Selecciona una vista guardada o una vista por estado en el panel lateral.
- Abre una fila o tarjeta para ir al detalle; marca su casilla para operar varios tickets.
- Cambia de página con los controles inferiores, que muestran 20 resultados por página.
Reglas y validaciones
- Las vistas incorporadas son
All unresolved,All tickets,Unassigned,Overdue,High priorityy una para cada estado. All unresolvedreúneOpen,PendingyOn hold;Overduetambién incluye tickets con una brecha SLA registrada.- La lista carga como máximo 50 tickets y aplica filtro, orden y paginación en el navegador.
Backend
- Servicios:
helpdesk-tickets(find),contacts,companies,helpdesk-groups,organizations-usersyai-assistants(find). - Efectos: escucha creaciones, parches y eliminaciones por socket para recargar la cola.
Relaciones
- Requiere: Tickets Helpdesk y datos de solicitante, empresa, grupo, agente o IA relacionados.
- Dispara / afecta: detalle del ticket y acciones masivas.
Notas
- Cada resultado muestra solicitante, empresa, actividad, prioridad, tipo, agente, IA, grupo, estado y el vencimiento SLA cuando corresponde.
id: ticket-replies modulo: tickets app: helpdesk nombre: Respuestas públicas por email tipo: accion
Respuestas públicas por email
Envía una respuesta del equipo al solicitante y la agrega al hilo del ticket.
Que se logra
- Resultado: Añade una respuesta al historial y, cuando existe un canal activo, la entrega al solicitante por correo.
- Caso de uso: Una compañía de software comunica un avance técnico al cliente manteniendo la respuesta unida al caso original.
- Se combina con: Correo de soporte, respuestas guardadas, SLA y CSAT.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Reply > Send reply - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- Pulsa
Replyo selecciona la pestañaReplydel compositor. - Escribe el mensaje; puedes elegir una entrada de
Canned responsepara añadirla al texto. - Pulsa
Send reply.
Reglas y validaciones
- No permite enviar texto vacío.
- La interfaz actual no adjunta archivos a una respuesta, aunque sí muestra los adjuntos de mensajes existentes.
- Solo los mensajes públicos de
agento IA intentan enviar correo. Se omite el envío si no hay canal activo, email de solicitante o la opción de notificar está desactivada.
Backend
- Servicios:
helpdesk-ticket-messages(create);helpdesk-email-channels(find). - Efectos: actualiza el hilo y las fechas de actividad. Con canal activo, envía al solicitante y conserva el identificador para enlazar la respuesta entrante; un fallo marca la entrega como fallida.
Relaciones
- Requiere: un ticket accesible y, para correo, un canal Helpdesk activo.
- Dispara / afecta: seguimiento por email, notificaciones a watchers y respuesta de IA ante mensajes de contacto.
Notas
- Sin canal de correo, el compositor avisa que la respuesta se guarda solo en el ticket.
id: ticket-routing modulo: tickets app: helpdesk nombre: Asignacion y grupos tipo: accion
Asignacion y grupos
Dirige un ticket a un grupo de soporte y a un agente responsable.
Que se logra
- Resultado: Lleva el caso al grupo, agente o asistente adecuado y deja clara la responsabilidad de respuesta.
- Caso de uso: Una empresa logística dirige incidencias de entrega al grupo regional correspondiente y asigna el seguimiento a un especialista.
- Se combina con: Grupos, miembros, asistente IA y reglas de automatización.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Responsibility > Group or Assignee - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- En
Responsibility, seleccionaGroup,Assigneey, si corresponde,AI assistant. - Al cambiar
Group, el selector de agente vuelve aUnassignedy carga los miembros del grupo. - Pulsa
Save changes.
Reglas y validaciones
- Sin grupo se pueden elegir los miembros de la organización. Con grupo, solo se ofrecen sus miembros, salvo el agente ya asignado al ticket.
- Los tickets nuevos sin agente pueden tomar el grupo predeterminado y asignarse por
weightedoround_robin; si el grupo respeta disponibilidad, se prefieren agentes disponibles y conectados. - La elección manual no exige que el agente pertenezca al grupo en el backend.
Backend
- Servicios:
helpdesk-tickets(patch),helpdesk-groups,helpdesk-group-membersyai-assistants(find). - Efectos: registra cambios de grupo, agente o IA. Notifica al agente nuevo salvo que se asigne a sí mismo o se desactive la notificación.
Relaciones
- Requiere: grupos, miembros y asistentes configurados.
- Dispara / afecta: alcance por grupo, notificaciones y automatización de actualización.
Notas
- Los miembros con alcance
assignedsolo pueden operar tickets asignados a ellos; congroup, también los de sus grupos.
id: ticket-sla modulo: tickets app: helpdesk nombre: SLA visible tipo: vista
SLA visible
Muestra fechas de compromiso y alertas de incumplimiento para el ticket.
Que se logra
- Resultado: Muestra el tiempo comprometido, pausas e incumplimientos para actuar antes de perder el nivel de servicio.
- Caso de uso: Un SaaS detecta que una incidencia de prioridad urgente se acerca al límite de primera respuesta y la escala al equipo de guardia.
- Se combina con: Horarios laborales, políticas SLA, Insights y automatizaciones.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Details > SLA - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- Abre el ticket y consulta el bloque
SLA. - Revisa
First response,Next responseyResolution. - Si el ticket está en
PendinguOn hold, el bloque muestraSLA paused; los valores en rojo indican incumplimiento.
Reglas y validaciones
- La política se selecciona al crear o al cambiar prioridad, tipo, grupo, origen o compañía; no se recalcula para tickets resueltos o cerrados.
- La primera respuesta deja de ser pendiente después de la primera respuesta de agente. Las respuestas posteriores del cliente pueden activar el objetivo
Next response. - El cron marca incumplimientos para tickets activos y no pausados; no vuelve a notificar la misma brecha de seguimiento para el mismo mensaje del cliente.
Backend
- Servicios:
helpdesk-tickets(get/patch),cron-helpdesk-sla(create). - Efectos: crea eventos de brecha, notifica al agente asignado, escalados de la política y responsable de escalamiento del grupo; también ejecuta automatizaciones de SLA.
Relaciones
- Requiere: políticas SLA y horas comerciales configuradas.
- Dispara / afecta: notificaciones, actividad e informes de cumplimiento.
Notas
- La interfaz muestra la fecha de
Next response, pero no expone por separado una marca persistente de su incumplimiento.
id: ticket-status modulo: tickets app: helpdesk nombre: Estados de ticket tipo: accion
Estados de ticket
Cambia el avance operativo de una solicitud.
Que se logra
- Resultado: Hace explícito si el caso sigue activo, espera respuesta o quedó resuelto, y ajusta la atención que debe recibir.
- Caso de uso: Un proveedor SaaS marca una incidencia como resuelta tras aplicar una corrección y puede reabrirla si el cliente reporta que persiste.
- Se combina con: SLA, CSAT, automatizaciones y notificaciones.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Status selector - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- En
Responsibility, elige el valor deStatusy pulsaSave changes; o usaSolveen la cabecera. Solvecambia cualquier estado no cerrado aSolved; si ya está resuelto, el botón cambia aClose.- Para reabrir, selecciona
Open,PendinguOn holdy guarda.
Reglas y validaciones
- Estados:
Open,Pending,On hold,SolvedyClosed. PendingyOn holdpausan SLA. Al volver a un estado activo, los objetivos pendientes se desplazan por el tiempo pausado.- Resolver o cerrar fija la fecha de resolución; reabrir incrementa el contador de reaperturas y limpia las fechas de resolución y cierre.
Backend
- Servicios:
helpdesk-tickets(patch),cron-helpdesk-sla(create). - Efectos: registra un evento de estado; al resolver por primera vez puede enviar el email de resolución y crear la encuesta CSAT. El cron puede cerrar automáticamente tickets resueltos según configuración.
Relaciones
- Requiere: acceso de edición según el alcance del rol.
- Dispara / afecta: SLA, acuse de resolución, CSAT y automatización
helpdesk-ticket-updated.
Notas
- Un ticket ya cerrado no muestra el botón
Solve/Close; puede reabrirse desde el selector.
id: ticket-tags modulo: tickets app: helpdesk nombre: Etiquetas de tickets tipo: accion
Etiquetas de tickets
Asocia etiquetas existentes o crea una nueva etiqueta desde el detalle del ticket.
Que se logra
- Resultado: Añade señales transversales para encontrar, agrupar y automatizar casos más allá de su estado o prioridad.
- Caso de uso: Una tienda en línea etiqueta solicitudes relacionadas con una campaña para medir y atender el impacto de la promoción.
- Se combina con: Filtros, acciones masivas, triage con IA y automatizaciones.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Tags > Add tag - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- En el bloque
Tags, pulsaAdd tag. - Busca una etiqueta y selecciónala en
Available tags, o escribe un nombre nuevo y eligeCreate "...". - Para retirarla, pulsa la
xdel chip.
Reglas y validaciones
- No ofrece etiquetas ya vinculadas entre las opciones disponibles.
- Solo permite crear una etiqueta si el nombre no coincide, sin distinguir mayúsculas, con una etiqueta existente de la organización.
- La barra masiva actual no expone etiquetas, aunque el servicio admite añadirlas y retirarlas.
Backend
- Servicios:
helpdesk-tags(find/create),helpdesk-ticket-tags(find/create/remove). - Efectos: actualiza el bloque
Tags; no modifica el estado ni envía correo.
Relaciones
- Requiere: catálogo de etiquetas de Helpdesk.
- Dispara / afecta: clasificación del ticket y acciones de macros.
Notas
- Una etiqueta creada desde este diálogo se vincula de inmediato al ticket.
id: ticket-watchers modulo: tickets app: helpdesk nombre: Seguidores de tickets tipo: accion
Seguidores de tickets
Suscribe o elimina a un usuario como observador de un ticket.
Que se logra
- Resultado: Mantiene informados a los agentes que deben seguir un caso aunque no sean su responsable.
- Caso de uso: Una empresa de servicios incorpora al supervisor como seguidor de una queja crítica sin quitar el ticket al agente que la atiende.
- Se combina con: Actividad del ticket y automatizaciones.
Donde esta
- Ruta:
/[orgId]/helpdesk/[ticketId] - Acceso en UI:
Helpdesk ticket > Watch / Unwatch - Componente(s):
HelpdeskTicketDetailView.tsx
Como funciona
- Pulsa
Watchen la cabecera del ticket. - Helpdesk añade al usuario actual como watcher y el botón pasa a
Unwatch. - Pulsa
Unwatchpara retirar solo tu suscripción.
Reglas y validaciones
- Requiere un usuario autenticado y acceso al ticket.
- La pantalla solo permite gestionar al usuario actual; no permite añadir a otro agente.
- Durante una fusión, los watchers del origen se copian al destino sin duplicados.
Backend
- Servicios:
helpdesk-ticket-watchers(find/create/remove). - Efectos: los watchers reciben notificaciones de actualizaciones del ticket según el flujo de notificaciones de Helpdesk.
Relaciones
- Requiere: Ticket Helpdesk y sesión de agente.
- Dispara / afecta: notificaciones internas del ticket.
Notas
- No se muestra una lista de todos los watchers en el detalle actual.
APP: internal
Internal
Consola interna de plataforma.
- Etapa: Admin
- Landing:
/internal
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Internal home | home |
admin | Consola admin de plataforma. |
| Partners admin | partners-admin |
admin | Aplicaciones, directory, payouts, analytics. |
| AI Models | ai-models |
admin | Catalogo OpenRouter admin. |
| Internal reports | reports |
admin | Wallet, affiliates, uso de IA. |
Funcionalidades internas
28 funcionalidades documentadas en 4 modulos. Ver la tabla de cada modulo.
id: ai-models app: internal nombre: AI Models estado: admin permiso: admin o superadmin
AI Models
Catálogo interno de modelos de IA, sus precios y las superficies de AchieveApex donde pueden utilizarse.
Para que sirve
- Decidir qué modelos de IA puede elegir cada superficie de asistentes.
- Registrar precios mostrados al cliente y la disponibilidad de un modelo.
- Sincronizar costes y metadatos de modelos ya registrados en OpenRouter.
- Detectar asistentes que usan un modelo antes de retirarlo.
- Ver qué asistentes y organizaciones realmente consumieron un modelo en un rango de fechas, y simular otro multiplicador.
- Migrar en lote asistentes hacia un modelo de reemplazo.
Que lo hace diferente
- El catálogo controla por separado conversaciones, tickets, AI chat y voz.
- Los asistentes que usan OpenRouter se enrutan por la integración de proveedor correspondiente.
- El coste real de OpenRouter se combina con un multiplicador de coste para el cobro de uso.
- Sincronizar el proveedor actualiza sus costes y metadatos sin sustituir los precios al cliente salvo que se solicite.
- Retirar un modelo usa borrado suave, preservando el historial y las configuraciones existentes.
Acceso
- Ruta principal:
/internal/models - Como se llega:
Header app switcher > Internal > AI Models - Permiso requerido: rol de plataforma
adminosuperadmin
Alcance tecnico
- Frontend:
src/app/(internal)/internal/models/ysrc/components/internal/ai-models/ - Backend:
ai-models,ai-models-openrouter,ai-models-migrate-assistantsyai-models-consumption - Superficies publicas: ninguna
- Integraciones externas: OpenRouter
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Catálogo de modelos | model-catalog.md | Busca, filtra y consulta modelos registrados. |
| Configuración de modelo | model-configuration.md | Crea o edita precios y disponibilidad. |
| Sincronización OpenRouter | openrouter-sync.md | Actualiza metadatos y costes del proveedor. |
| Migración de asistentes | assistant-model-migration.md | Cambia en lote el modelo de asistentes existentes. |
Relaciones
- Depende de: OpenRouter y asistentes de IA.
- Usado por: asistentes de conversaciones, tickets, AI chat y voz.
Limitaciones y notas
- Ocultar un modelo de los selectores no elimina sus configuraciones existentes.
id: assistant-model-migration modulo: ai-models app: internal nombre: Migración de modelos de asistentes tipo: accion
Migración de modelos de asistentes
Permite cambiar en lote el modelo de los asistentes que actualmente usan otro modelo.
Que se logra
- Resultado: Los asistentes existentes pasan a un modelo de reemplazo de forma controlada y auditable.
- Caso de uso: Antes de retirar un modelo, el equipo mueve sus asistentes a otro modelo soportado sin reconfigurarlos uno a uno.
- Se combina con: Catálogo y configuración de modelos.
Donde esta
- Ruta:
/internal/models - Acceso en UI:
Internal > AI Models > icono de migración - Componente(s):
MigrateAssistantsDialog.tsx
Como funciona
- El administrador elige un modelo con asistentes asociados.
- Abre la acción de migración.
- Selecciona el modelo de destino y confirma.
- La lista de modelos se actualiza al finalizar.
Reglas y validaciones
- La acción está deshabilitada si el modelo no tiene asistentes asociados.
Backend
- Servicios:
ai-models-migrate-assistants(create),ai-models(find). - Efectos: reasigna el modelo utilizado por asistentes existentes.
Relaciones
- Requiere: Catálogo de modelos.
- Dispara / afecta: asistentes de IA.
Notas
- El selector excluye el modelo de origen y los modelos con estado
not_supported.
id: model-catalog modulo: ai-models app: internal nombre: Catálogo de modelos tipo: vista
Catálogo de modelos
Consulta los modelos de IA registrados, sus costes, disponibilidad y uso por asistentes.
Que se logra
- Resultado: El equipo conoce qué modelos están disponibles, en qué superficies se usan y cuál es su alcance real.
- Caso de uso: Un administrador detecta un modelo obsoleto que aún usan asistentes antes de preparar una migración.
- Se combina con: Configuración de modelo y migración de asistentes.
Donde esta
- Ruta:
/internal/models - Acceso en UI:
Internal > AI Models - Componente(s):
AiModelsAdminList.tsx
Como funciona
- Se busca por nombre y se filtra por proveedor o estado.
- La lista muestra disponibilidad en conversaciones, tickets, AI chat y voz.
- Se consulta el número de asistentes y organizaciones asignados a cada modelo.
- Un rango de fechas (máximo 93 días, por defecto 30) muestra cuántos de esos asistentes y organizaciones tuvieron consumo real, el cobro a clientes, el costo del proveedor y una simulación al cambiar el multiplicador.
- El enlace de asistentes abre el detalle del modelo.
Reglas y validaciones
- La lista se pagina en grupos de 25.
- Se señalan los modelos OpenRouter marcados como obsoletos.
- Asignado no implica uso: un modelo puede tener 100 asistentes y $0 de consumo en el rango.
- El volumen se toma de
organization_wallet_transactionspor elmodel_nameescrito en la descripción. - La simulación es
costo_proveedor × multiplicadory no guarda el catálogo.
Backend
- Servicios:
ai-models(find),ai-model-assistants(find),ai-models-consumption(find). - Efectos: ninguno.
Relaciones
- Requiere: asistentes de IA.
- Dispara / afecta: Configuración de modelo.
Notas
- El estado visible es independiente de la disponibilidad por superficie.
id: model-configuration modulo: ai-models app: internal nombre: Configuración de modelo tipo: configuracion
Configuración de modelo
Permite registrar, editar, ocultar o retirar modelos del catálogo interno.
Que se logra
- Resultado: El catálogo controla qué modelos se ofrecen en cada tipo de asistente y bajo qué precio al cliente.
- Caso de uso: El equipo habilita un modelo para tickets sin exponerlo todavía a asistentes de voz.
- Se combina con: Catálogo de modelos y asistentes de IA.
Donde esta
- Ruta:
/internal/modelsy/internal/models/[modelId] - Acceso en UI:
Internal > AI Models > Add model, editar, estado o eliminar - Componente(s):
AiModelDialog.tsx,AiModelDetail.tsx,AiModelsAdminList.tsx
Como funciona
Add modelcrea una entrada; editar modifica una existente.- Al editar se conservan proveedor y nombre técnico del modelo.
- Al pulsar la insignia de estado alterna entre visible y soportado pero no visible.
Deletesolicita confirmación antes de retirar la entrada.
Reglas y validaciones
- Las superficies configurables son conversaciones, tickets, AI chat y voz.
- Para mostrarse en selectores debe tener estado
visibley estar habilitado para la superficie correspondiente.
Backend
- Servicios:
ai-models(create/patch/remove/find). - Efectos: cambia los modelos disponibles a asistentes.
Relaciones
- Requiere: Catálogo de modelos.
- Dispara / afecta: asistentes de IA.
Notas
- El borrado del servicio se gestiona como borrado suave.
id: openrouter-sync modulo: ai-models app: internal nombre: Sincronización con OpenRouter tipo: integracion
Sincronización con OpenRouter
Actualiza los metadatos y costes de proveedor de los modelos OpenRouter registrados.
Que se logra
- Resultado: Los metadatos y costes de proveedor de los modelos registrados quedan alineados con OpenRouter.
- Caso de uso: El equipo sincroniza el catálogo después de un cambio de precios del proveedor y decide si actualiza precios al cliente.
- Se combina con: Catálogo y configuración de modelos.
Donde esta
- Ruta:
/internal/models - Acceso en UI:
Internal > AI Models > Sync - Componente(s):
AiModelsAdminList.tsx,OpenRouterCatalogDialog.tsx
Como funciona
- Se abre
OpenRouter catalogpara consultar opciones del proveedor y prellenar una alta. Syncsolicita la actualización de los modelos registrados.- La lista se recarga e informa cuántos modelos se actualizaron o no se encontraron.
Reglas y validaciones
- La sincronización normal no sustituye los precios al cliente.
- La interfaz ofrece una sincronización adicional que actualiza los precios al cliente.
Backend
- Servicios:
ai-models-openrouter(find/create). - Efectos: actualiza metadatos y costes de OpenRouter.
Relaciones
- Requiere: Catálogo de modelos y OpenRouter.
- Dispara / afecta: precios presentados en el catálogo.
Notas
- Los slugs de OpenRouter se deben obtener del proveedor, no deducirse.
id: home app: internal nombre: Inicio interno estado: admin permiso: admin o superadmin
Inicio interno
Consola de administración transversal de AchieveApex para personal de plataforma. Reúne el acceso al soporte Nova y a las áreas internas.
Para que sirve
- Supervisar la adopción, fricción, coste y calidad de Nova Support en toda la plataforma.
- Convertir feedback de respuestas de Nova en casos atendidos por personas.
- Mantener habilidades de conocimiento global para que Nova responda sobre configuraciones reales.
- Acceder a las áreas internas sin cambiar el alcance global de administración.
Que lo hace diferente
- Nova conecta las métricas de uso, el feedback y el historial conversacional con el flujo real de soporte.
- Una calificación puede convertirse en un caso enlazado a la conversación que la originó.
- El conocimiento operativo se publica como habilidades consultables por Nova, no como texto fijo en la interfaz.
- La consola opera sobre toda la plataforma y no sobre una organización seleccionada.
Acceso
- Ruta principal:
/internal - Como se llega:
Header app switcher > Internal - Permiso requerido: rol de plataforma
adminosuperadmin
Alcance tecnico
- Frontend: rutas bajo
src/app/(internal)/internal/y componentessrc/components/internal/nova-support/ - Backend:
support-chat-conversations,support-chat-messages,support-chat-message-feedback,nova-support-knowledge-skillsyreports - Superficies publicas: ninguna
- Integraciones externas: OpenRouter para la respuesta de Nova
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Navegación de administración | admin-navigation.md | Entrada y restricciones del área interna. |
| Uso de Nova Support | nova-support-usage.md | Métricas de adopción, fricción y calidad. |
| Feedback de Nova Support | nova-support-feedback.md | Revisión de calificaciones y creación de casos. |
| Conocimiento de Nova Support | nova-support-knowledge.md | Gestión de habilidades de conocimiento globales. |
| Conversaciones de Nova Support | nova-support-conversations.md | Consulta del contexto conversacional desde el feedback. |
Relaciones
- Depende de: Support Admin y AI Models.
- Usado por: administradores de plataforma.
Limitaciones y notas
- Las rutas internas no llevan
[orgId]; el selector de organización del encabezado no cambia su alcance global.
id: admin-navigation modulo: home app: internal nombre: Navegación de administración tipo: vista
Navegación de administración
Da acceso a la consola interna global y sus secciones administrativas.
Que se logra
- Resultado: El equipo interno llega a las herramientas globales correctas sin cambiar el contexto de una organización.
- Caso de uso: Un administrador abre
Internalpara pasar de la supervisión de Nova a partners, payouts o informes de plataforma. - Se combina con: Nova Support, Administración de partners, AI Models e Informes internos.
Donde esta
- Ruta:
/internal - Acceso en UI:
Header app switcher > Internal - Componente(s):
src/app/(internal)/internal/page.tsx
Como funciona
- El administrador abre
Internal. - Usa la barra lateral para entrar a
Home,Nova Support,Partner PayoutsoReports. - Las áreas que requieren más privilegios redirigen a quien no sea
superadmin.
Reglas y validaciones
- Solo los roles de plataforma
adminysuperadminpueden permanecer en/internal. - La sección
Reportses exclusiva desuperadmin.
Backend
- Servicios: ninguno para la navegación.
Relaciones
- Requiere: sesión con rol de plataforma.
- Dispara / afecta: acceso a módulos internos.
Notas
- No usa
[orgId], porque opera sobre toda la plataforma.
id: nova-support-conversations modulo: home app: internal nombre: Conversaciones de Nova Support tipo: vista
Conversaciones de Nova Support
Permite a la administración leer el contexto de una conversación vinculada a una calificación de Nova.
Que se logra
- Resultado: El equipo puede evaluar una respuesta de Nova con el historial que la originó antes de intervenir.
- Caso de uso: Tras una mala calificación, un administrador revisa el diálogo y decide si crea un caso de seguimiento.
- Se combina con: Feedback de Nova Support y Administración de soporte.
Donde esta
- Ruta:
/internal/nova-support/feedback - Acceso en UI:
Internal > Nova Support > Feedback > View details - Componente(s):
NovaSupportFeedbackDetailSheet.tsx
Como funciona
- Se abre el detalle de una fila de feedback.
- La vista obtiene la conversación y sus mensajes.
- El administrador usa el contexto para evaluar la respuesta calificada o crear un caso.
Reglas y validaciones
- Solo se consulta desde una fila que tenga conversación relacionada.
Backend
- Servicios:
support-chat-conversations(get),support-chat-messages(find). - Efectos: ninguno.
Relaciones
- Requiere: Feedback de Nova Support.
- Dispara / afecta: creación de casos de soporte.
Notas
- No se identificó una pantalla interna independiente para explorar todas las conversaciones.
id: nova-support-feedback modulo: home app: internal nombre: Feedback de Nova Support tipo: vista
Feedback de Nova Support
Centraliza las calificaciones y comentarios que los usuarios dejan sobre respuestas de Nova.
Que se logra
- Resultado: Las respuestas mal valoradas quedan trazables y pueden convertirse en atención humana con su contexto.
- Caso de uso: Un usuario califica negativamente una respuesta; el equipo lee el intercambio y abre un caso para contactarlo.
- Se combina con: Conversaciones de Nova Support y Administración de soporte.
Donde esta
- Ruta:
/internal/nova-support/feedback - Acceso en UI:
Internal > Nova Support > Feedback - Componente(s):
NovaSupportFeedbackList.tsx,NovaSupportFeedbackDetailSheet.tsx,NovaSupportFeedbackCreateCaseDialog.tsx
Como funciona
- Se revisa la fila con organización, usuario, calificación, comentario, estado y página.
View detailsabre el contexto de la respuesta y conversación relacionada.Create support casecrea un caso para que Support Admin contacte al solicitante.Open caselleva al caso asociado cuando ya existe.
Reglas y validaciones
- El caso creado desde feedback conserva el vínculo con la conversación de Nova.
Backend
- Servicios:
support-chat-message-feedback(find),support-chat-conversations(get),support-chat-messages(find),support-cases(create). - Efectos: el caso se enlaza al feedback y entra al flujo de routing de soporte.
Relaciones
- Requiere: Uso de Nova Support.
- Dispara / afecta: Support Admin.
Notas
- Un caso creado desde esta vista queda identificado como creado manualmente.
id: nova-support-knowledge modulo: home app: internal nombre: Conocimiento de Nova Support tipo: configuracion
Conocimiento de Nova Support
Permite mantener habilidades de conocimiento globales que Nova consulta cuando son pertinentes.
Que se logra
- Resultado: Nova incorpora conocimiento operativo mantenido por el equipo sin alterar su comportamiento general.
- Caso de uso: Soporte crea una habilidad sobre una configuración frecuente para que Nova la consulte al atender a clientes.
- Se combina con: Uso, feedback y conversaciones de Nova Support.
Donde esta
- Ruta:
/internal/nova-support/knowledge - Acceso en UI:
Internal > Nova Support > Knowledge - Componente(s):
NovaSupportKnowledgeList.tsx,NovaSupportKnowledgeDialog.tsx
Como funciona
Add knowledge skillabre el editor para crear una habilidad.- La lista permite consultar título,
When to use, estado y contenido. Edit knowledge skillactualiza una habilidad.Delete knowledge skillla elimina.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Título | texto | Sí | Identifica la habilidad. |
| When to use | texto | Sí | Indica cuándo debe consultarla Nova. |
| Contenido | Markdown | Sí | Contenido completo de la habilidad. |
| Activa | booleano | No | Se activa por defecto y determina si aparece en el índice de Nova. |
Reglas y validaciones
- Nova recibe en su índice el identificador, título y
When to use; obtiene el Markdown completo al invocar la habilidad.
Backend
- Servicios:
nova-support-knowledge-skills(find/create/patch/remove). - Efectos: actualiza el conocimiento disponible para Nova Support.
Relaciones
- Requiere: Nova Support.
- Dispara / afecta: respuestas de Nova Support.
Notas
- El identificador operativo sigue el formato
knowledge:{id}.
id: nova-support-usage modulo: home app: internal nombre: Uso de Nova Support tipo: vista
Uso de Nova Support
Muestra la adopción, fricción y calidad operativa de Nova Support a nivel plataforma.
Que se logra
- Resultado: El equipo identifica adopción, fricción, calidad, coste y escalaciones de Nova en toda la plataforma.
- Caso de uso: El responsable de soporte excluye el uso interno y detecta qué organizaciones o páginas generan más escalaciones.
- Se combina con: Feedback, conocimiento y escalaciones de Nova Support.
Donde esta
- Ruta:
/internal/nova-support/usage - Acceso en UI:
Internal > Nova Support > Usage - Componente(s):
NovaSupportUsageDashboard.tsx,NovaSupportUsageCharts.tsx
Como funciona
- Se selecciona el rango de fechas y la granularidad.
- Se puede activar
Exclude internal usagepara ocultar conversaciones de administradores. - Se consultan indicadores, crecimiento, cohortes, páginas, herramientas, escalaciones, feedback y organizaciones.
Refreshvuelve a cargar los datos.
Reglas y validaciones
- El filtro de uso interno se activa por defecto.
- Las métricas de coste y latencia solo aparecen cuando existe metadato de IA.
Backend
- Servicios:
reports(get:novaSupportUsageOverview,novaSupportUsagePages,novaSupportUsageTools,novaSupportUsageOrganizations,novaSupportUsageCohorts). - Efectos: ninguno.
Relaciones
- Requiere: conversaciones y mensajes de Nova Support.
- Dispara / afecta: la priorización de mejoras y soporte.
Notas
- La tabla de organizaciones es paginada.
id: partners-admin app: internal nombre: Administración de partners estado: admin permiso: admin o superadmin
Administración de partners
Herramientas internas para revisar partners, su atribución de clientes, comisiones, pagos y desempeño.
Para que sirve
- Revisar y aprobar solicitudes de agencias y afiliados.
- Atribuir organizaciones cliente a partners y verificar sus relaciones.
- Auditar comisiones y decidir qué retiros de partners se procesan.
- Ejecutar y seguir pagos de partners en Wise.
- Medir crecimiento, activación, churn, concentración y economía del programa.
- Identificar organizaciones Implementor y su situación dentro del programa.
Que lo hace diferente
- La atribución de clientes, comisiones y payouts se conectan en el mismo flujo operativo.
- Los payouts se ejecutan en Wise y se concilian por webhook y proceso programado; no se marcan manualmente como pagados.
- Un reintento de financiación reutiliza la transferencia pendiente, evitando duplicar pagos.
- La analítica distingue el tipo de partner desde el cliente referido, evitando una clasificación errónea en el ledger.
- El programa reúne agencias y afiliados bajo una operación común, conservando sus datos de referencia y economía.
Acceso
- Ruta principal:
/internal/partners - Como se llega:
Header app switcher > Internal > Partners - Permiso requerido: rol de plataforma
adminosuperadmin; algunas vistas requierensuperadmin
Alcance tecnico
- Frontend:
src/app/(internal)/internal/partners/ysrc/components/internal/partners/ - Backend:
partners-agency-applications,partners-transactions,partners-payouts,partner-payout-accounts,partners-metricsyreports - Superficies publicas: ninguna en esta consola
- Integraciones externas: Wise para ejecución de payouts
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Directorio de partners | partner-directory.md | Busca y abre organizaciones partner. |
| Revisión de aplicaciones | partner-applications.md | Consulta y cambia el estado de solicitudes. |
| Perfil y atribución de partner | partner-overview.md | Ve el perfil y sus relaciones. |
| Clientes referidos | partner-clients.md | Asigna o desvincula clientes de un partner. |
| Comisiones de partner | partner-commissions.md | Consulta el ledger y sus estados. |
| Cuentas de payout | partner-payout-accounts.md | Consulta destinos de cobro registrados. |
| Cola de payouts | partner-payout-review.md | Revisa solicitudes y sus importes. |
| Ejecución y conciliación Wise | partner-payout-execution.md | Aprueba, reintenta o cancela pagos. |
| Analítica de partners | partner-analytics.md | Analiza crecimiento, red y economía. |
| Implementadores | partner-implementors.md | Consulta organizaciones implementadoras. |
| Equipo de partner | partner-team.md | Consulta integrantes de una organización partner. |
Relaciones
- Depende de: Organizations, Stripe Billing y Wallet.
- Usado por: Agencies & Affiliates y Support Admin.
Limitaciones y notas
- El pago efectivo lo confirma Wise mediante webhooks y conciliación; no se puede marcar manualmente como procesado o pagado.
id: partner-analytics modulo: partners-admin app: internal nombre: Analítica de partners tipo: vista
Analítica de partners
Mide el rendimiento global del programa de agencias y afiliados.
Que se logra
- Resultado: El equipo mide crecimiento, activación, concentración, churn, margen y economía del programa.
- Caso de uso: La dirección compara la productividad de agencias y afiliados durante 12 meses para ajustar el programa.
- Se combina con: Clientes, comisiones, payouts, Stripe Billing y Wallet.
Donde esta
- Ruta:
/internal/partners/analytics - Acceso en UI:
Internal > Partners > Analytics - Componente(s):
PartnersAnalytics.tsx,PartnersAnalyticsSections.tsx
Como funciona
- Se escoge el periodo de 6, 12 o 24 meses.
- Se navega entre
Overview,Growth,NetworkyEconomics. Refreshvuelve a obtener los datos de la vista activa.
Reglas y validaciones
- Los indicadores comparan el mes en curso con el mismo tramo transcurrido del mes anterior.
- El backend admite entre 1 y 36 meses.
Backend
- Servicios:
reports(get:partnersAnalyticsOverview,partnersAnalyticsGrowth,partnersAnalyticsNetwork,partnersAnalyticsEconomics). - Efectos: ninguno.
Relaciones
- Requiere: Partners, Stripe Billing y Wallet.
- Dispara / afecta: decisiones de operación del programa.
Notas
- Los resultados se almacenan temporalmente por vista y periodo en la interfaz.
id: partner-applications modulo: partners-admin app: internal nombre: Revisión de aplicaciones de partner tipo: accion
Revisión de aplicaciones de partner
Permite revisar solicitudes de agencia o afiliado y decidir su estado.
Que se logra
- Resultado: Las solicitudes de agencia o afiliado avanzan por un proceso de revisión con estado visible.
- Caso de uso: El equipo revisa la propuesta y documentación de una agencia y la aprueba para activar su condición de partner.
- Se combina con: Directorio y perfil de partners.
Donde esta
- Ruta:
/internal/partners/applicationsy/internal/partners/applications/[applicationId] - Acceso en UI:
Internal > Partners > Applications - Componente(s):
PartnersApplicationsList.tsx,PartnerApplicationDetail.tsx
Como funciona
- Se filtran y abren las aplicaciones.
- El detalle muestra organización, datos de promoción, expectativa de clientes e información adicional.
- Se selecciona
pending,reviewing,approvedodeniedy se guarda el cambio. - Si existe, se abre el documento W-8BEN asociado.
Reglas y validaciones
- Solo se aceptan los cuatro estados mostrados en el selector.
Backend
- Servicios:
partners-agency-applications(find/get/patch),reports(get:partnerApplicationsList). - Efectos: al aprobar se sincroniza el estado de agencia de la organización.
Relaciones
- Requiere: Organizations.
- Dispara / afecta: directorio de partners.
Notas
- El formulario público de solicitud está fuera de esta consola.
id: partner-clients modulo: partners-admin app: internal nombre: Clientes referidos tipo: accion
Clientes referidos
Administra qué organizaciones cliente se atribuyen a un partner.
Que se logra
- Resultado: La atribución de clientes determina de forma explícita quién recibe las comisiones futuras.
- Caso de uso: Operaciones asigna una organización recién captada a la agencia que la refirió y puede revertir una atribución errónea.
- Se combina con: Perfil y comisiones de partner.
Donde esta
- Ruta:
/internal/partners/directory/[orgId]/clients - Acceso en UI:
Internal > Partners > Directory > partner > Clients - Componente(s):
PartnerClientsSection
Como funciona
- Se revisan los clientes y sus ingresos de suscripción, IA y comisión acumulada.
Assign clientbusca organizaciones sin partner asignado.- Se elige una organización y se confirma la asignación.
Unassignsolicita confirmación antes de desvincularla.
Reglas y validaciones
- No se puede asignar el partner a sí mismo ni una organización ya atribuida.
Backend
- Servicios:
reports(get:partnerClientsList,partnerAssignReferral),organizations(find). - Efectos: la atribución modifica qué partner recibe comisiones futuras.
Relaciones
- Requiere: perfil de partner y Organizations.
- Dispara / afecta: comisiones de partner.
Notas
- El listado carga hasta 50 clientes por consulta.
id: partner-commissions modulo: partners-admin app: internal nombre: Comisiones de partner tipo: vista
Comisiones de partner
Consulta el ledger de comisiones de un partner y su progreso hacia pago.
Que se logra
- Resultado: El equipo puede explicar el origen, estado y avance hacia pago de cada comisión.
- Caso de uso: Finanzas revisa las comisiones elegibles de una agencia antes de validar su retiro.
- Se combina con: Clientes y cola de payouts.
Donde esta
- Ruta:
/internal/partners/directory/[orgId]/commissions - Acceso en UI:
Internal > Partners > Directory > partner > Commissions - Componente(s):
PartnerCommissionsSection
Como funciona
- Se elige un origen:
All, suscripción, uso de IA o administración. - Las tarjetas permiten filtrar por estado.
- La tabla muestra cliente, fecha, tasa, base, importe y estado.
- Se pagina el resultado.
Reglas y validaciones
- Los estados disponibles son
pending,eligible,paidycancelled. - Las comisiones canceladas se excluyen de los agregados de ingresos y costes.
Backend
- Servicios:
reports(get:partnerCommissions),partners-transactions(ledger). - Efectos: ninguno.
Relaciones
- Requiere: Clientes referidos.
- Dispara / afecta: solicitudes de payout.
Notas
- La clasificación agencia/afiliado se determina por el tipo del cliente referido, no por el tipo registrado en la transacción.
id: partner-directory modulo: partners-admin app: internal nombre: Directorio de partners tipo: vista
Directorio de partners
Localiza organizaciones del programa de partners y abre su ficha administrativa.
Que se logra
- Resultado: El equipo localiza rápidamente un partner y accede a sus relaciones, comisiones y pagos.
- Caso de uso: Operaciones busca una agencia antes de revisar los clientes que refirió y los retiros que tiene pendientes.
- Se combina con: Perfil, clientes, comisiones y payouts de partner.
Donde esta
- Ruta:
/internal/partners/directory - Acceso en UI:
Internal > Partners > Directory - Componente(s):
PartnersDirectoryList.tsx
Como funciona
- El administrador consulta el listado y sus filtros.
- Abre una organización para ver sus pestañas de detalle.
Reglas y validaciones
- La ficha usa el identificador de organización en la ruta.
Backend
- Servicios:
reports(get:partnerOrganizationsByIdsy vistas de partner),organizations(find/get). - Efectos: ninguno.
Relaciones
- Requiere: Organizations.
- Dispara / afecta: perfil de partner.
Notas
- La ruta de detalle es
/internal/partners/directory/[orgId]/overview.
id: partner-implementors modulo: partners-admin app: internal nombre: Implementadores tipo: vista
Implementadores
Consulta las organizaciones clasificadas como implementadoras dentro del programa de partners.
Que se logra
- Resultado: La operación identifica organizaciones del plan Implementor y su avance dentro del programa de partners.
- Caso de uso: El equipo filtra implementadores que aún no son partners o tienen una solicitud pendiente para dar seguimiento.
- Se combina con: Directorio y aplicaciones de partners.
Donde esta
- Ruta:
/internal/partners/implementors - Acceso en UI:
Internal > Partners > Implementors - Componente(s):
PartnersImplementorsList.tsx
Como funciona
- Se abre el listado de implementadores.
- Se filtra o navega por los resultados disponibles.
Reglas y validaciones
- El listado se basa en organizaciones con el plan
Implementory permite filtrar por situación de partner o solicitud.
Backend
- Servicios:
reports(get:partnerImplementorsList). - Efectos: ninguno.
Relaciones
- Requiere: Organizations y programa de partners.
- Dispara / afecta: ninguna funcionalidad identificada.
Notas
admin-recruitmentestá asignado al alcance, pero no se localizó una ruta o componente interno equivalente en las rutas solicitadas.
id: partner-overview modulo: partners-admin app: internal nombre: Perfil de partner tipo: vista
Perfil de partner
Muestra el estado de partner, plan, tarifas de comisión y organización que lo refirió.
Que se logra
- Resultado: La operación obtiene una visión unificada de la situación comercial y de referencia de cada partner.
- Caso de uso: Un responsable comprueba el plan, las tasas habituales y la organización que refirió a un partner antes de atender una consulta.
- Se combina con: Clientes, comisiones, cuentas de payout y equipo.
Donde esta
- Ruta:
/internal/partners/directory/[orgId]/overview - Acceso en UI:
Internal > Partners > Directory > partner > Overview - Componente(s):
PartnerOverviewSection
Como funciona
- Se abre un partner desde el directorio.
Overviewmuestra su estado, plan, tarifas típicas, antigüedad y relación de referencia.- Se puede abrir el partner que lo refirió cuando existe.
Reglas y validaciones
- Las tarifas típicas dependen de los clientes referidos; pueden no estar disponibles sin clientes.
Backend
- Servicios:
reports(get:partnerOverview). - Efectos: ninguno.
Relaciones
- Requiere: Directorio de partners.
- Dispara / afecta: clientes, comisiones y payouts del partner.
Notas
- Esta vista incluye una pestaña
Applicationpara consultar la solicitud asociada.
id: partner-payout-accounts modulo: partners-admin app: internal nombre: Cuentas de payout tipo: vista
Cuentas de payout
Consulta las cuentas de cobro que un partner ha registrado para recibir payouts.
Que se logra
- Resultado: El equipo verifica que un payout se dirija a una cuenta activa sin revelar información bancaria sensible.
- Caso de uso: Antes de aprobar un retiro, operaciones confirma la moneda, país y cuenta predeterminada del partner.
- Se combina con: Perfil y ejecución de payouts.
Donde esta
- Ruta:
/internal/partners/directory/[orgId]/payout-accounts - Acceso en UI:
Internal > Partners > Directory > partner > Payout accounts - Componente(s):
PartnerPayoutAccountsSection
Como funciona
- Se abre la pestaña de cuentas de payout del partner.
- Se consultan identificador, etiqueta, moneda, país, estado y cuenta predeterminada.
Reglas y validaciones
- La consola muestra detalles enmascarados; no expone datos bancarios sin proteger.
Backend
- Servicios:
partner-payout-accounts(find). - Efectos: ninguno.
Relaciones
- Requiere: perfil de partner.
- Dispara / afecta: ejecución de payouts.
Notas
- La creación de cuentas ocurre en la superficie del partner, no en esta vista.
id: partner-payout-execution modulo: partners-admin app: internal nombre: Ejecución y conciliación de payouts tipo: integracion
Ejecución y conciliación de payouts
Permite aprobar y gestionar ejecuciones reales de payout con Wise.
Que se logra
- Resultado: Los payouts se ejecutan en Wise y sus resultados vuelven conciliados con las comisiones reservadas.
- Caso de uso: Finanzas aprueba un retiro; si Wise espera fondos, reintenta su financiación sin crear una transferencia duplicada.
- Se combina con: Cola de payouts, comisiones y notificaciones de payout.
Donde esta
- Ruta:
/internal/partners/payouts/[payoutId](también/internal/partner-payouts) - Acceso en UI:
Internal > Partner Payouts > payout - Componente(s):
PartnerPayoutDetailDialog.tsx,PartnerPayoutDetailPage.tsx
Como funciona
- Se abre el payout y se revisan importe fuente, fee, importe objetivo, tasa y estado de Wise.
Approve & executesolicita una confirmación explícita y envía la ejecución.- Según el estado se puede
Reject,Cancel payout,Reopen as pending,Retry executionoRetry funding. - Tras aprobar o financiar de nuevo, la interfaz consulta el payout hasta que cambie de estado.
Reglas y validaciones
adminysuperadminde plataforma pueden hacer patch sin pertenecer a la organización del partner; el partner solo puede pedir el retiro si es miembro de su org.pendingpuede aprobarse, rechazarse o cancelarse;rejectedpuede volver a pendiente.processingypaidsolo los actualizan Wise y la conciliación programada.Retry fundingreutiliza la transferencia cuando Wise espera fondos; no crea una segunda transferencia.- Un payout fallido conserva sus comisiones reservadas; solo cancelarlo las libera.
- Fallos
amount_mismatchycharged_backrequieren investigación manual y no admiten reintento automático.
Backend
- Servicios:
partners-payouts(patch). - Hooks relevantes: al aprobar ejecuta el payout; los cambios sincronizan comisiones y envían notificaciones.
- Efectos: crea o financia transferencias Wise; el webhook y
cron-reconcile-partner-payoutsactualizan el resultado.
Relaciones
- Requiere: Cola de payouts y cuenta de payout activa.
- Dispara / afecta: ledger de comisiones y notificaciones de payout.
Notas
- La comisión de Wise se descuenta del importe que recibirá el partner.
id: partner-payout-review modulo: partners-admin app: internal nombre: Cola de payouts tipo: vista
Cola de payouts
Permite revisar solicitudes de retiro de partners antes y después de su ejecución.
Que se logra
- Resultado: La operación tiene una cola única para priorizar retiros y comprobar su estado antes o después de ejecutarlos.
- Caso de uso: Finanzas filtra los retiros pendientes y abre uno para validar las comisiones y el destino de pago.
- Se combina con: Comisiones, cuentas y ejecución de payouts.
Donde esta
- Ruta:
/internal/partner-payoutsy/internal/partners/payouts - Acceso en UI:
Internal > Partner Payouts - Componente(s):
PartnerPayoutsReviewList.tsx,PartnerPayoutDetailDialog.tsx
Como funciona
- Se elige una pestaña de estado:
All,Pending,Approved,Processing,PaidoFailed. - Se revisan partner, importe, transacciones, fecha y datos de ejecución de Wise.
- Se abre una fila para ver el detalle y acciones permitidas.
Refreshactualiza la cola.
Reglas y validaciones
- El filtro inicial es
Pending. rejectedycancelledexisten pero no tienen pestaña propia.
Backend
- Servicios:
partners-payouts(find/get),reports(get:partnerOrganizationsByIds). - Efectos: ninguno al consultar.
Relaciones
- Requiere: Comisiones de partner y cuentas de payout.
- Dispara / afecta: Ejecución y conciliación Wise.
Notas
- La lista usa paginación de 50 elementos.
id: partner-team modulo: partners-admin app: internal nombre: Equipo de partner tipo: vista
Equipo de partner
Consulta los miembros de una organización partner y sus roles.
Que se logra
- Resultado: La operación sabe quién integra un partner y con qué rol, sin modificar su equipo.
- Caso de uso: Soporte identifica al contacto adecuado de una agencia antes de atender una incidencia de pagos.
- Se combina con: Perfil y Administración de soporte.
Donde esta
- Ruta:
/internal/partners/directory/[orgId]/team - Acceso en UI:
Internal > Partners > Directory > partner > Team - Componente(s):
PartnerTeamSection
Como funciona
- Se abre la ficha de una organización.
- La pestaña
Teammuestra nombre, correo y rol de cada integrante.
Reglas y validaciones
- Es una vista de consulta; no expone acciones para cambiar miembros.
Backend
- Servicios:
organizations-users(find). - Efectos: ninguno.
Relaciones
- Requiere: Organizations.
- Dispara / afecta: ninguna funcionalidad identificada.
Notas
- Carga hasta 50 miembros por consulta.
id: reports app: internal nombre: Informes internos estado: admin permiso: superadmin
Informes internos
Informes globales de plataforma, incluidos el constructor asistido por IA y las vistas administrativas de wallet, suscripciones y afiliados.
Para que sirve
- Crear páginas globales para vigilar la operación de toda la plataforma.
- Construir gráficos, tablas y métricas sobre suscripciones, wallet, partners u otros datos internos.
- Pedir a la IA que cree o modifique informes desde una descripción en lenguaje natural.
- Aplicar filtros por página solo a los widgets que los necesitan.
- Consultar reportes administrativos preexistentes de wallet, suscripciones y afiliados.
Que lo hace diferente
- El constructor con IA crea y ajusta páginas y widgets internos después de probar sus consultas.
- Los informes son globales y no se limitan automáticamente a una organización.
- El modelo de filtros enlaza explícitamente cada widget, evitando cambios no deseados en una página.
- Conviven un lienzo configurable por IA y reportes administrativos especializados de wallet, suscripciones y afiliados.
- El acceso es exclusivo de
superadmin, separado de los informes de cada organización.
Acceso
- Ruta principal:
/internal/reports - Como se llega:
Header app switcher > Internal > Reports - Permiso requerido: rol de plataforma
superadmin; las rutas/reports/*son reportes administrativos separados
Alcance tecnico
- Frontend:
src/app/(internal)/internal/reports/,src/components/internal/reports/ysrc/app/(reports)/reports/ - Backend:
internal-report-pages,internal-report-widgets,internal-report-widget-data,internal-ai-report-builderyreports - Superficies publicas: ninguna
- Integraciones externas: OpenRouter para el constructor asistido
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Páginas de informe | report-pages.md | Crea y selecciona páginas globales. |
| Constructor de informes con IA | ai-report-builder.md | Pide a IA crear o modificar informes. |
| Widgets y diseño | report-widgets.md | Consulta, mueve y ajusta visualizaciones. |
| Filtros de informe | report-filters.md | Define filtros por página y su alcance. |
| Wallet: resumen | wallet-overview.md | Consulta el reporte global de wallet. |
| Wallet: tendencias y conceptos | wallet-breakdowns.md | Consulta cortes diarios, mensuales y por concepto. |
| Suscripciones activas | active-subscriptions.md | Filtra las suscripciones activas. |
| Reportes de afiliados | affiliate-reports.md | Consulta resumen, listado y transacciones. |
Relaciones
- Depende de: Organizations, Wallet, Stripe Billing y Partners.
- Usado por: personal de plataforma.
Limitaciones y notas
- Los informes internos son globales y no se limitan automáticamente a una organización.
id: active-subscriptions modulo: reports app: internal nombre: Suscripciones activas tipo: vista
Suscripciones activas
Permite consultar y filtrar el reporte de suscripciones activas de la plataforma.
Que se logra
- Resultado: La plataforma dispone de una lista filtrable de suscripciones activas para seguimiento comercial y operativo.
- Caso de uso: El equipo filtra por plan y estado para revisar las cuentas activas de una oferta concreta.
- Se combina con: Stripe Billing e Informes internos.
Donde esta
- Ruta:
/reports/subscriptions/active - Acceso en UI:
Reports > Subscriptions > Active - Componente(s):
src/app/(reports)/reports/subscriptions/active/page.tsx
Como funciona
- La página carga opciones de planes y estados.
- El administrador aplica los filtros disponibles.
- Se consulta y muestra el listado de suscripciones activas.
Reglas y validaciones
- La página carga opciones de planes y estados antes de consultar el listado.
Backend
- Servicios:
reports/activeSubscriptions,reports/subscriptionPlans,reports/subscriptionStatuses. - Efectos: ninguno.
Relaciones
- Requiere: Stripe Billing.
- Dispara / afecta: ninguna funcionalidad identificada.
Notas
- Es un reporte administrativo independiente de los widgets internos.
id: affiliate-reports modulo: reports app: internal nombre: Reportes de afiliados tipo: vista
Reportes de afiliados
Reúne vistas administrativas de resumen, listado y transacciones de afiliados.
Que se logra
- Resultado: El equipo revisa la deuda, pagos y transacciones del canal de afiliados desde vistas separadas.
- Caso de uso: Finanzas consulta las transacciones de un afiliado y exporta el detalle para una conciliación interna.
- Se combina con: Administración y analítica de partners.
Donde esta
- Ruta:
/reports/affiliates/overview,/reports/affiliates/listy/reports/affiliates/transactions - Acceso en UI:
Reports > Affiliates - Componente(s): páginas bajo
src/app/(reports)/reports/affiliates/
Como funciona
- Se elige el resumen, listado o transacciones.
- La vista consulta los datos administrativos correspondientes.
Reglas y validaciones
- La vista de transacciones permite filtrar por afiliado, estado, tipo, origen y fechas, y exportar el resultado.
Backend
- Servicios:
reports,partners-transactions. - Efectos: ninguno.
Relaciones
- Requiere: Administración de partners.
- Dispara / afecta: ninguna funcionalidad identificada.
Notas
- No confundir estas vistas globales con la analítica de partners en
/internal/partners/analytics.
id: ai-report-builder modulo: reports app: internal nombre: Constructor de informes con IA tipo: automatizacion
Constructor de informes con IA
Permite pedir en lenguaje natural la creación o modificación de páginas y widgets de informes internos.
Que se logra
- Resultado: El equipo crea o ajusta informes de plataforma desde una solicitud en lenguaje natural con consultas probadas.
- Caso de uso: Un superadministrador pide una vista de ingresos por partner y la IA añade los widgets a la página seleccionada.
- Se combina con: Páginas, widgets y filtros de informes.
Donde esta
- Ruta:
/internal/reports - Acceso en UI:
Internal > Reports > Add with AI - Componente(s):
InternalReportsAddSheet.tsx,useInternalAIReportBuilder.ts
Como funciona
- Se abre
Add with AI. - El administrador describe el informe o cambio solicitado.
- Nova analiza el esquema disponible, prueba las consultas necesarias y crea o modifica páginas y widgets.
- El lienzo vuelve a cargar las piezas afectadas.
Reglas y validaciones
- Las consultas guardadas deben ser solo de lectura y se prueban antes de guardar un widget.
- El constructor opera con datos globales de plataforma.
Backend
- Servicios:
internal-ai-report-builder(create),internal-report-pagesyinternal-report-widgets. - Efectos: puede crear, actualizar o eliminar páginas y widgets.
Relaciones
- Requiere: Páginas de informe y Widgets y diseño.
- Dispara / afecta: datos mostrados en el lienzo.
Notas
- El progreso se entrega por usuario, no por organización.
id: report-filters modulo: reports app: internal nombre: Filtros de informe tipo: configuracion
Filtros de informe
Permite definir filtros de una página y elegir qué widgets responden a ellos.
Que se logra
- Resultado: Cada página entrega a sus widgets solo los filtros que correspondan, sin alterar los demás resultados.
- Caso de uso: Un superadministrador aplica un rango de fechas y actualiza únicamente los gráficos vinculados a ese filtro.
- Se combina con: Páginas y widgets de informes.
Donde esta
- Ruta:
/internal/reports - Acceso en UI:
Internal > Reports > página > filtros - Componente(s):
ReportFilterBar.tsx,InternalReportsCanvasView.tsx
Como funciona
- Se definen filtros para la página al crearla o mediante el constructor con IA.
- Cada widget vincula de forma explícita los filtros que debe recibir.
- El usuario aplica valores en la barra de filtros.
- Solo los widgets vinculados recargan sus datos.
Reglas y validaciones
- Un filtro sin vínculo no afecta al widget.
- Los filtros pueden ser de fecha, selección, selección múltiple, rango numérico, texto o booleano.
Backend
- Servicios:
internal-report-pages(patch),internal-report-widgets(patch),internal-report-widget-data(create). - Efectos: modifica el conjunto de datos mostrado por los widgets vinculados.
Relaciones
- Requiere: Páginas de informe y Widgets y diseño.
- Dispara / afecta: ejecución de datos de widgets.
Notas
- Los filtros fijos de un widget no se exponen al lector del informe.
id: report-pages modulo: reports app: internal nombre: Páginas de informe internas tipo: configuracion
Páginas de informe internas
Organiza los informes globales de plataforma en páginas seleccionables desde una barra lateral.
Que se logra
- Resultado: Los informes globales se agrupan en páginas reutilizables y enlazables para la operación de plataforma.
- Caso de uso: Un superadministrador crea una página de crecimiento y comparte su enlace interno con el equipo directivo.
- Se combina con: Widgets, filtros y constructor de informes con IA.
Donde esta
- Ruta:
/internal/reports - Acceso en UI:
Internal > Reports > New report - Componente(s):
ReportsSidebar.tsx,InternalReportsProvider.tsx
Como funciona
New reportcrea una nueva página.- La barra lateral permite seleccionarla.
- La URL conserva la página seleccionada para enlaces directos.
- El nombre se puede editar directamente en el lienzo.
Reglas y validaciones
- Solo
superadminpuede acceder a Informes internos.
Backend
- Servicios:
internal-report-pages(find/create/patch/remove). - Efectos: al seleccionar una página se cargan sus widgets.
Relaciones
- Requiere: Widgets y diseño.
- Dispara / afecta: Constructor de informes con IA.
Notas
- Las páginas son globales, no pertenecen a una organización.
id: report-widgets modulo: reports app: internal nombre: Widgets y diseño de informes tipo: configuracion
Widgets y diseño de informes
Presenta visualizaciones y bloques de contenido en un lienzo que se puede mover y redimensionar.
Que se logra
- Resultado: Una página de informe presenta métricas, gráficos, tablas y contenido en un diseño adaptable.
- Caso de uso: Operaciones reorganiza los widgets de una página para revisar primero suscripciones y después consumo de wallet.
- Se combina con: Páginas, filtros y constructor de informes con IA.
Donde esta
- Ruta:
/internal/reports - Acceso en UI:
Internal > Reports > página seleccionada - Componente(s):
InternalReportsCanvasView.tsx,ReportCanvasGrid.tsx,ReportCanvasWidget.tsx,ReportWidgetChart.tsx
Como funciona
- Al elegir una página se cargan sus widgets.
- Se arrastra o redimensiona un widget para ajustar el diseño.
- Se edita el título en línea o se elimina desde sus acciones.
- Los widgets con consulta actualizan sus datos al cambiar filtros vinculados o refrescar.
Reglas y validaciones
- Los tipos disponibles incluyen métricas, gráficos, tablas y bloques de diseño.
- El diseño se guarda por widget.
Backend
- Servicios:
internal-report-widgets(find/create/patch/remove),internal-report-widget-data(create). - Efectos: ejecuta la consulta guardada de cada widget al obtener sus datos.
Relaciones
- Requiere: Páginas de informe y Filtros de informe.
- Dispara / afecta: Constructor de informes con IA.
Notas
- Un widget sin consulta puede funcionar como bloque de diseño.
id: wallet-breakdowns modulo: reports app: internal nombre: Desgloses de wallet tipo: vista
Desgloses de wallet
Ofrece cortes administrativos de wallet por día, mes, concepto y organización.
Que se logra
- Resultado: El equipo puede localizar variaciones de consumo de wallet por tiempo, concepto u organización.
- Caso de uso: Finanzas detecta un aumento mensual y lo desglosa por concepto para ubicar el origen.
- Se combina con: Resumen de wallet e Informes internos.
Donde esta
- Ruta:
/reports/wallet/daily,/reports/wallet/monthly,/reports/wallet/by-concepty/reports/wallet/by-organization - Acceso en UI:
Reports > Wallet - Componente(s): páginas de wallet bajo
src/app/(reports)/reports/wallet/
Como funciona
- Se abre el desglose necesario.
- Las vistas diaria y mensual cargan los conceptos disponibles.
- Se aplican los filtros de la página para consultar el corte.
Reglas y validaciones
- Las vistas diaria y mensual cargan los conceptos disponibles antes de aplicar sus filtros.
Backend
- Servicios:
reports/daily,reports/monthly,reports/by-concept,reports/walletConcepts. - Efectos: ninguno.
Relaciones
- Requiere: Wallet y Organizations.
- Dispara / afecta: ninguna funcionalidad identificada.
Notas
- Son vistas administrativas separadas del constructor de informes internos.
id: wallet-overview modulo: reports app: internal nombre: Resumen de wallet tipo: vista
Resumen de wallet
Muestra el informe administrativo de resumen de movimientos y saldo de wallet.
Que se logra
- Resultado: La operación obtiene una visión consolidada del consumo y los movimientos de wallet de la plataforma.
- Caso de uso: Finanzas abre el resumen para revisar el consumo de wallet y exportar el resultado del periodo.
- Se combina con: Desgloses de wallet e Informes internos.
Donde esta
- Ruta:
/reports/wallet/overview - Acceso en UI:
Reports > Wallet > Overview - Componente(s):
src/app/(reports)/reports/wallet/overview/page.tsx
Como funciona
- El administrador abre el resumen de wallet.
- Consulta los indicadores y resultados que devuelve el reporte.
Reglas y validaciones
- La vista permite exportar el resumen de consumo de wallet en CSV.
Backend
- Servicios:
reports. - Efectos: ninguno.
Relaciones
- Requiere: Wallet.
- Dispara / afecta: ninguna funcionalidad identificada.
Notas
- Los desgloses complementarios se documentan por separado.
APP: links
Links
Short links branded, actividad y analitica.
- Etapa: Beta
- Landing:
/{orgId}/links
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Smart Links | smart-links |
beta | Short links branded (apx.red) y QR. |
| Activity | activity |
beta | Stream de eventos de clicks. |
| Analytics | analytics |
beta | Metricas agregadas de links. |
Funcionalidades internas
14 funcionalidades documentadas en 3 modulos. Ver la tabla de cada modulo.
id: activity app: links nombre: Actividad de Links estado: beta permiso: can_access_links
Actividad de Links
Registro de eventos individuales generados por los smart links.
Para que sirve
- Una agencia distingue escáneres automáticos de navegadores al evaluar la respuesta a una campaña.
- Un equipo comercial consulta la actividad reciente de un enlace antes de contactar al destinatario previsto.
- Una inmobiliaria abre el contacto o deal relacionado desde el evento para continuar la gestión comercial.
Que lo hace diferente
- Cada evento conserva el contexto CRM del enlace dentro de Apex, sin convertir una atribución en identificación comprobada.
- El modelo de confianza separa actividad técnica, automatización, humano probable y evidencia verificada.
- Las visitas medidas alimentan Activity, Analytics y el timeline CRM desde el mismo enlace
apx.red.
Acceso
- Ruta principal:
/[orgId]/links/activity - Como se llega:
Links > Activity - Permiso requerido:
can_access_links
Alcance tecnico
- Frontend: página de Activity
- Backend:
smart-link-eventsysmart-link-engagement - Superficies públicas: bridge de medición de enlaces
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar actividad de links | activity-stream.md | Link Activity page |
| Interpretar confianza y atribución | event-confidence.md | Link Activity page |
Relaciones
- Depende de: Smart Links.
- Usado por: Analytics y CRM timeline.
Limitaciones y notas
- La clasificación de confianza no confirma identidad salvo evidencia
Verified.
id: activity-stream modulo: activity app: links nombre: Consultar actividad de links tipo: vista
Consultar actividad de links
Muestra eventos individuales de smart links con su tipo, confianza, QR, dispositivo, país y contexto CRM.
Que se logra
- Resultado: investiga la actividad concreta detrás de una métrica y abre los registros CRM relacionados cuando existen.
- Caso de uso: un ejecutivo comprueba si un enlace de propuesta recibió visitas antes de retomar el deal.
- Se combina con: confianza y atribución, analítica y timeline CRM.
Donde esta
- Ruta:
/[orgId]/links/activity - Acceso en UI:
Links >Activity`` - Componente(s):
Link Activity page
Como funciona
- Abra
Activity. - Revise los eventos más recientes.
- Use el contexto CRM para abrir registros relacionados cuando esté disponible.
Reglas y validaciones
- Un request técnico no prueba que un contacto específico abrió el enlace.
- Las asociaciones CRM son contexto de destinatario, no identidad verificada.
Backend
- Servicios:
smart-link-events(find).
Relaciones
- Requiere: acceso a Links.
- Afecta: investigación de engagement.
id: event-confidence modulo: activity app: links nombre: Interpretar confianza y atribución tipo: vista
Interpretar confianza y atribución
Distingue solicitudes técnicas, automatización probable, interacción humana probable y evidencia verificada.
Que se logra
- Resultado: evita interpretar como apertura humana las solicitudes de crawlers, vistas previas o escáneres.
- Caso de uso: una agencia reporta resultados de campaña sin inflar el interés de prospectos por tráfico automatizado.
- Se combina con: actividad de links, atribución CRM y analítica.
Donde esta
- Ruta:
/[orgId]/links/activity - Acceso en UI:
Links >Activity`` - Componente(s):
Link Activity page
Como funciona
- Abra un evento en
Activityo el detalle de un link. - Revise su clasificación de confianza.
- Interprete el vínculo CRM como atribución, no como confirmación de identidad.
Reglas y validaciones
Automated probablecubre scanners, previews y crawlers conocidos.Human probablese basa en evidencia del bridge;Verifiedrequiere evidencia explícita.
Backend
- Servicios:
smart-link-events(find),smart-link-engagement(create).
Relaciones
- Requiere: eventos existentes.
- Afecta: lectura correcta de métricas.
id: analytics app: links nombre: Analítica de Links estado: beta permiso: can_access_links
Analítica de Links
Métricas agregadas y por enlace de las visitas de Apex Links.
Para que sirve
- Una agencia compara el interés técnico y humano probable de sus enlaces de campaña.
- Una inmobiliaria identifica el QR o enlace que concentra más actividad antes de invertir en otra promoción.
- Un equipo comercial analiza país, dispositivo y tendencia de un enlace asociado a un prospecto o deal.
Que lo hace diferente
- La analítica usa los eventos del enlace
apx.redy los conecta con Activity y el contexto CRM. - Distingue solicitudes automáticas de interacción humana probable, en vez de presentar todo request como una apertura de persona.
- Combina totales de vida útil con tendencias diarias, QR, país y dispositivo por enlace.
Acceso
- Ruta principal:
/[orgId]/links/analytics - Como se llega:
Links > Analytics - Permiso requerido:
can_access_links
Alcance tecnico
- Frontend: analítica de organización y detalle del enlace
- Backend:
smart-linksysmart-link-events - Superficies públicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Ver analítica agregada | analytics-overview.md | Links Analytics page |
| Analizar un smart link | link-detail-analytics.md | SmartLinkDetailView.tsx |
| Consultar tendencia diaria por período | daily-trends.md | SmartLinkDailyTrendChart.tsx |
Relaciones
- Depende de: Smart Links y Activity.
- Usado por: equipos de campañas y CRM.
Limitaciones y notas
- La tendencia diaria es UTC; los totales son de vida útil.
id: analytics-overview modulo: analytics app: links nombre: Ver analítica agregada tipo: vista
Ver analítica agregada
Resume métricas agregadas de todos los smart links cargados y destaca los enlaces con mayor actividad.
Que se logra
- Resultado: detecta qué enlaces concentran solicitudes, visitas humanas probables y actividad QR.
- Caso de uso: una agencia prioriza las campañas que generan interacción antes de ajustar su inversión.
- Se combina con: analítica por enlace y actividad de links.
Donde esta
- Ruta:
/[orgId]/links/analytics - Acceso en UI:
Links >Analytics`` - Componente(s):
Links Analytics page
Como funciona
- Abra
Analytics. - Revise requests, visitantes, humanos probables, automatización y QR.
- Seleccione un enlace para profundizar.
Reglas y validaciones
- Las métricas distinguen actividad técnica de probabilidad de interacción humana.
- Los totales de enlace son de vida útil.
Backend
- Servicios:
smart-links(find),smart-link-events(find).
Relaciones
- Requiere: acceso a Links.
- Afecta: seguimiento general.
id: daily-trends modulo: analytics app: links nombre: Consultar tendencia diaria por período tipo: vista
Consultar tendencia diaria por período
Grafica requests, humanos probables y actividad QR por día para el enlace seleccionado.
Que se logra
- Resultado: observa cuándo cambia la actividad de un enlace en períodos de 7, 14 o 30 días.
- Caso de uso: una agencia compara el impacto diario de un QR distribuido en una campaña reciente.
- Se combina con: analítica por enlace y actividad de links.
Donde esta
- Ruta:
/[orgId]/links/[linkId] - Acceso en UI:
Smart Link Detail >7d/14d/30d`` - Componente(s):
SmartLinkDailyTrendChart.tsx
Como funciona
- Abra el detalle de un enlace.
- Seleccione
7d,14do30d. - Compare las series diarias con los totales de vida útil.
Reglas y validaciones
- La tendencia se agrupa por días UTC.
- Las tarjetas de resumen no se limitan al período seleccionado.
Backend
- Servicios:
smart-link-events(find con tendencia diaria).
Relaciones
- Requiere: smart link existente.
- Afecta: análisis temporal.
id: link-detail-analytics modulo: analytics app: links nombre: Analizar un smart link tipo: vista
Analizar un smart link
Muestra las métricas de vida útil, mezcla de dispositivo/país y eventos recientes de un enlace específico.
Que se logra
- Resultado: diagnostica la respuesta de una campaña concreta por actividad, país y dispositivo.
- Caso de uso: una inmobiliaria compara la respuesta móvil y los países de un enlace de propiedad compartido.
- Se combina con: tendencia diaria, Activity y atribución CRM.
Donde esta
- Ruta:
/[orgId]/links/[linkId] - Acceso en UI:
Links > Smart Links > link row - Componente(s):
SmartLinkDetailView.tsx
Como funciona
- Abra una fila de enlace.
- Revise las tarjetas de resumen.
- Si hay prueba A/B, use
Record conversionspara ver WhatsApp automático, formulario web, snippet y nodo de automatización. - Consulte países, dispositivos y eventos recientes.
- Copie o edite el enlace si necesita ajustar la campaña.
Reglas y validaciones
- El país se conserva como código ISO.
- La atribución CRM no convierte engagement probable en identidad verificada.
Backend
- Servicios:
smart-links(get),smart-link-events(find).
Relaciones
- Requiere: smart link existente.
- Afecta: diagnóstico de una campaña.
id: smart-links app: links nombre: Smart Links estado: beta permiso: can_access_links
Smart Links
Gestión de enlaces cortos de Apex Links, códigos QR y atribución CRM.
Para que sirve
- Una agencia añade enlaces cortos con UTM a campañas y mide sus visitas sin exponer los parámetros en la URL compartida.
- Una inmobiliaria imprime un QR en una ficha y observa la actividad y el contexto del deal asociado.
- Un equipo comercial comparte un enlace para un prospecto y conserva la atribución prevista en el timeline CRM.
- Una empresa de eventos desactiva o vence enlaces promocionales cuando una campaña deja de estar vigente.
Que lo hace diferente
- Los enlaces usan el dominio
apx.red, QR dinámico y UTM aplicados al destino sin incluir datos personales en el slug. - Puede relacionar un enlace con contacto, empresa, deal o conversación del CRM y llevar sus eventos al timeline.
- Separa solicitudes técnicas, automatización probable, interacción humana probable y evidencia verificada, sin afirmar identidad por asociación CRM.
- La creación está disponible para Nova mediante una herramienta interna que entrega el enlace para enviarlo en conversaciones.
Acceso
- Ruta principal:
/[orgId]/links - Como se llega:
Header app switcher > Links - Permiso requerido:
can_access_links
Alcance tecnico
- Frontend: lista, creación, QR y edición de enlaces
- Backend:
smart-links, redirect y eventos - Superficies públicas:
https://apx.red/{slug} - Integraciones externas: Route 53/ALB e IP2Location LITE
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear un smart link | create-smart-link.md | CreateSmartLinkDialog.tsx |
| Personalizar el slug del enlace | custom-slug.md | Define o genera el Back-half de apx.red. |
| Generar código QR dinámico | smart-link-qr.md | SmartLinkQrDialog.tsx |
| Definir vencimiento del enlace | link-expiration.md | Configura cuándo deja de redirigir. |
| Asociar un smart link con CRM | crm-attribution.md | RelatedEntitySelector.tsx |
| Configurar seguimiento UTM | utm-tracking.md | CreateSmartLinkDialog.tsx |
| Registrar conversiones de Apex Link | record-conversions.md | WhatsApp automático vs formulario web con click_token y contact_id. |
| Editar, desactivar y eliminar smart links | edit-smart-link.md | EditSmartLinkDialog.tsx, SmartLinksView.tsx |
| Redirigir y medir visitas | redirect-measurement.md | smart-link-redirect.js |
| Consultar configuración de Links | link-settings.md | Links Settings page |
Relaciones
- Depende de: CRM y Organizations.
- Usado por: Activity, Analytics y timeline de CRM.
Limitaciones y notas
- No se deben incluir datos personales en el slug.
id: create-smart-link modulo: smart-links app: links nombre: Crear un smart link tipo: accion
Crear un smart link
Crea un enlace corto de apx.red hacia una URL HTTP(S), con opciones de medición y atribución.
Que se logra
- Resultado: publica un enlace corto medible hacia un destino web y puede asociarlo a contexto CRM.
- Caso de uso: una agencia crea un enlace de campaña para un prospecto y conoce su actividad posterior.
- Se combina con: QR dinámico, seguimiento UTM y atribución CRM.
Donde esta
- Ruta:
/[orgId]/links - Acceso en UI:
Links >Create smart link`` - Componente(s):
CreateSmartLinkDialog.tsx
Como funciona
- Seleccione
Create smart link. - Pegue el destino.
- Defina el back-half o use
Generate. - Si activa A/B test, lea la guía de conversión: WhatsApp crea el contact source solo; un formulario web debe conservar
apx_clicky luego enviarclick_tokenconcontact_id. - Configure medición, vencimiento, CRM o UTM y confirme.
Reglas y validaciones
- La URL de destino debe ser HTTP(S) y no puede volver a
apx.red. - El slug no debe contener datos personales.
- El título puede completarse desde el destino.
Backend
- Servicios:
smart-links(create). - Efectos: genera URL corta y métricas iniciales.
Relaciones
- Requiere: acceso a Links.
- Afecta: redirects, QR, actividad y analítica.
id: crm-attribution modulo: smart-links app: links nombre: Asociar un smart link con CRM tipo: configuracion
Asociar un smart link con CRM
Relaciona el enlace con un contacto, empresa o deal para dar contexto de atribución en eventos y timeline CRM.
Que se logra
- Resultado: permite leer la actividad de un enlace desde el contexto del contacto, empresa o deal previsto.
- Caso de uso: un equipo comercial relaciona una propuesta compartida con el deal correspondiente para revisar sus eventos.
- Se combina con: Activity, Analytics y timeline CRM.
Donde esta
- Ruta:
/[orgId]/links - Acceso en UI:
Create smart link >Related CRM records`` - Componente(s):
RelatedEntitySelector.tsx
Como funciona
- Expanda
Related CRM records. - Seleccione registros o revise la guía de query parameters.
- Cree o edite el enlace.
Reglas y validaciones
- La asociación identifica al destinatario previsto, no una identidad verificada.
- Los query parameters de CRM prevalecen sobre las asociaciones guardadas.
Backend
- Servicios:
smart-links(create/patch),smart-link-events(find). - Efectos: los eventos guardan la atribución disponible.
Relaciones
- Requiere: registros del CRM de la misma organización.
- Afecta: Activity, Analytics y timeline CRM.
id: custom-slug modulo: smart-links app: links nombre: Personalizar el slug del enlace tipo: configuracion
Personalizar el slug del enlace
Permite definir o generar el identificador final de una URL corta de apx.red.
Que se logra
- Resultado: entrega una URL corta identificable para una campaña sin incluir datos personales.
- Caso de uso: una inmobiliaria genera un enlace corto para una propiedad y lo comparte en su material promocional.
- Se combina con: QR dinámico y redirección medida.
Donde esta
- Ruta:
/[orgId]/links - Acceso en UI:
Create smart link > Back-half - Componente(s):
CreateSmartLinkDialog.tsx
Como funciona
- Pegue una URL de destino.
- Escriba el valor de
Back-halfo seleccioneGenerate. - Cree el enlace para obtener la URL corta.
Reglas y validaciones
- El slug forma parte de la URL pública
apx.red. - No debe contener datos de contacto, deals u otra información personal.
- Editar un enlace existente no cambia el slug.
Backend
- Servicios:
smart-links(create/patch). - Efectos: el middleware de redirect resuelve el enlace usando el slug.
Relaciones
- Requiere: una URL de destino válida.
- Afecta: URL corta, QR, redirects y métricas.
Notas
- El slug no cambia al editar el enlace, para no invalidar URLs o QR ya distribuidos.
id: edit-smart-link modulo: smart-links app: links nombre: Editar, desactivar y eliminar smart links tipo: accion
Editar, desactivar y eliminar smart links
Permite actualizar destino, nombre, modo de acceso o estado sin cambiar el código corto, y retirar enlaces del listado.
Que se logra
- Resultado: corrige o retira una campaña manteniendo intacto el código corto cuando el enlace sigue activo.
- Caso de uso: una agencia cambia la página de destino de un QR ya impreso sin volver a distribuirlo.
- Se combina con: QR dinámico, vencimiento y analítica.
Donde esta
- Ruta:
/[orgId]/links - Acceso en UI:
Link row > More - Componente(s):
EditSmartLinkDialog.tsx, SmartLinksView.tsx
Como funciona
- Abra
Moresobre la fila. - Seleccione
Edit destinationpara cambiar datos. - Si el A/B test no está en Off, revise la guía de conversión antes de elegir destinos WhatsApp o landing.
- Ajuste
Statuspara desactivar. - Use
Deletepara eliminar.
Reglas y validaciones
- La edición no cambia el slug ni el QR.
- Un enlace desactivado, vencido o eliminado no redirige.
Backend
- Servicios:
smart-links(patch/remove). - Efectos: el redirect rechaza enlaces inactivos.
Relaciones
- Requiere: smart link existente.
- Afecta: redirects y disponibilidad del QR.
id: link-expiration modulo: smart-links app: links nombre: Definir vencimiento del enlace tipo: configuracion
Definir vencimiento del enlace
Configura cuándo un smart link debe dejar de redirigir a visitantes.
Que se logra
- Resultado: limita la disponibilidad de una campaña sin cambiar su URL corta ni QR.
- Caso de uso: una academia deja de redirigir el enlace de inscripción al cerrar la convocatoria.
- Se combina con: editar enlaces y QR dinámico.
Donde esta
- Ruta:
/[orgId]/links - Acceso en UI:
Create smart link > Expiration - Componente(s):
CreateSmartLinkDialog.tsx
Como funciona
- Abra
Create smart link. - Complete el destino y las opciones necesarias.
- Establezca una fecha en
Expiration, si el enlace debe ser temporal. - Cree el enlace.
Reglas y validaciones
- El vencimiento es opcional.
- Un enlace vencido no redirige, aunque su código QR o URL corta sigan siendo los mismos.
Backend
- Servicios:
smart-links(create/patch). - Hooks relevantes: la comprobación de estado del redirect rechaza enlaces vencidos.
- Efectos: evita que el destino se abra después de la fecha configurada.
Relaciones
- Requiere: smart link.
- Afecta: redirect, QR y disponibilidad de campañas temporales.
Notas
- La ficha confirma la configuración al crear el enlace; no afirma una interfaz específica para modificarla después.
id: link-settings modulo: smart-links app: links nombre: Consultar configuración de Links tipo: vista
Consultar configuración de Links
Explica el dominio administrado apx.red, los modos de redirección, la atribución y el tratamiento de privacidad de las métricas.
Que se logra
- Resultado: permite interpretar el alcance del dominio, la medición y la privacidad antes de compartir enlaces.
- Caso de uso: un equipo de marketing elige entre rapidez y medición según el tipo de campaña.
- Se combina con: redirección medida y confianza de eventos.
Donde esta
- Ruta:
/[orgId]/links/settings - Acceso en UI:
Links navigation >Settings`` - Componente(s):
Links Settings page
Como funciona
- Abra
Settingsdesde Links. - Consulte el dominio corto y los modos de medición.
- Revise las definiciones de confianza y privacidad.
Reglas y validaciones
- Las IP se convierten en hash y no se muestran como dato crudo.
- El país se obtiene de cabeceras CDN o una base local de geolocalización.
Backend
- Servicios: no realiza una configuración persistente confirmada; se apoya en
smart-linksy eventos.
Relaciones
- Requiere: acceso a Links.
- Afecta: comprensión de las métricas.
id: record-conversions modulo: smart-links app: links nombre: Registrar conversiones de Apex Link tipo: accion
Registrar conversiones de Apex Link
Explica cómo contar una conversión de prueba A/B y cómo asociar el Apex Link como origen del contacto.
Que se logra
- Resultado: quien configura el enlace entiende que WhatsApp crea el origen del contacto solo, y que un formulario web debe enviar
click_tokenycontact_id. - Caso de uso: una agencia compara dos landings y luego marca deal ganado con el nodo de automatización.
- Se combina con: pruebas A/B, contact sources y Mark Apex Link Conversion.
Donde esta
- Ruta:
/[orgId]/linksy/[orgId]/links/[linkId] - Acceso en UI:
Create smart link > A/B test,Edit destinationyRecord conversions - Componente(s):
SmartLinkConversionGuide.tsx,SmartLinkConversionSetup.tsx,MarkSmartLinkConversionDialog.tsx
Como funciona
- WhatsApp: el primer mensaje inbound que sigue incluyendo
#TOKEN(6 caracteres; los mensajes antiguos[APX-TOKEN]de 10 también) crea o encuentra el contacto, escribe el contact source, marca la conversión y cuenta una conversación en la variante del clic. Un botón web que abre WhatsApp debe incluir el mismoapx_clickcomo#TOKEN. - Formulario web: el destino solo recibe
apx_click. Conserve ese token, cree el contacto y envíeclick_tokenmáscontact_idaPOST /smart-link-conversion. - Snippet de landing: cuenta la conversión de la prueba A/B. No crea contacto ni contact source.
- Nodo Mark Apex Link Conversion: busca el clic más reciente ya asociado a ese contacto. En web solo funciona después del paso 2.
Reglas y validaciones
- Contar la prueba A/B no es lo mismo que crear un contact source.
- El snippet solo no permite que el nodo de automatización encuentre el clic.
- Si la API recibe
contact_id, Apex rellena el evento de clic original y escribe el origensmart-link.
Backend
- Servicios:
smart-link-conversion,contacts-sources,automation-node-system-mark-smart-link-conversion. - Efectos: conversión por
click_token, atribución CRM opcional y nodo posterior.
Relaciones
- Requiere: Apex Link con destino URL o WhatsApp.
- Afecta: resultados A/B, timeline del contacto y automatizaciones.
id: redirect-measurement modulo: smart-links app: links nombre: Redirigir y medir visitas tipo: integracion
Redirigir y medir visitas
Resuelve enlaces cortos y mide requests, redirects, vistas del bridge y engagement sin almacenar IP cruda.
Que se logra
- Resultado: lleva al visitante al destino y registra evidencia diferenciada de actividad técnica o humana probable.
- Caso de uso: una empresa de eventos mide el interés de un enlace compartido sin tratar escáneres de seguridad como asistentes.
- Se combina con: seguimiento UTM, Activity y Analytics.
Donde esta
- Ruta:
https://apx.red/{slug} - Acceso en UI:
Abrir enlace corto - Componente(s):
smart-link-redirect.js
Como funciona
- Un visitante abre la URL corta.
- El sistema valida estado y vencimiento.
- Según el modo, redirige inmediatamente o muestra un bridge de medición.
- El visitante llega al destino con UTM aplicables.
Reglas y validaciones
Fastprioriza la redirección inmediata.Measuredagrega evidencia de navegador para clasificar interacción humana probable.- Solicitudes automatizadas se clasifican separadamente.
Backend
- Servicios:
smart-link-engagement(create),smart-link-events; middlewaresmart-link-redirect. - Efectos: cookie de visitante, evento y redirect HTTP.
Relaciones
- Requiere: enlace activo.
- Afecta: Activity y Analytics.
id: smart-link-qr modulo: smart-links app: links nombre: Generar código QR dinámico tipo: accion
Generar código QR dinámico
Muestra, copia o descarga un QR PNG que apunta al smart link y conserva su funcionamiento si cambia el destino.
Que se logra
- Resultado: produce un QR reutilizable cuya visita se identifica como QR y sigue el destino actual del enlace.
- Caso de uso: una empresa de eventos imprime un QR en una invitación y mide su actividad en Apex.
- Se combina con: editar enlace y analítica de Links.
Donde esta
- Ruta:
/[orgId]/links - Acceso en UI:
Link row > More >View QR code`` - Componente(s):
SmartLinkQrDialog.tsx
Como funciona
- Abra el menú del enlace.
- Seleccione
View QR code. - Copie la URL o descargue el PNG.
Reglas y validaciones
- El QR incluye el parámetro que identifica la visita como QR.
- Cambiar el destino no requiere reimprimir el QR.
Backend
- Servicios:
smart-links(get); la generación se hace en frontend conqrcode.
Relaciones
- Requiere: smart link existente.
- Afecta: métricas de QR.
id: utm-tracking modulo: smart-links app: links nombre: Configurar seguimiento UTM tipo: configuracion
Configurar seguimiento UTM
Guarda parámetros UTM para añadirlos al destino en el momento del redirect sin revelar seguimiento en la URL corta.
Que se logra
- Resultado: conserva el origen de campaña en el destino sin hacer más larga la URL compartida.
- Caso de uso: una agencia distingue el tráfico de una campaña de correo y un código QR hacia la misma página.
- Se combina con: redirección medida y analítica de Links.
Donde esta
- Ruta:
/[orgId]/links - Acceso en UI:
Create smart link >Campaign tracking`` - Componente(s):
CreateSmartLinkDialog.tsx
Como funciona
- Abra
Campaign tracking. - Complete los parámetros UTM necesarios.
- Cree o guarde el enlace.
Reglas y validaciones
- Los UTM no se añaden a la URL
apx.red. - No sobrescriben parámetros UTM que ya existan en el destino.
Backend
- Servicios:
smart-links(create/patch); middlewaresmart-link-redirect.
Relaciones
- Requiere: smart link.
- Afecta: URL final de visitantes.
APP: marketplace
Marketplace
Marketplace installs versioned CRM configuration templates into an organization: roles, custom fields, tags, pipelines, activity types, lost reasons, email templates, quick replies, and forms.
Private templates stay visible to the author. Public templates appear in the catalog only after AchieveApex approval.
Updates keep local changes unless you choose to apply the template version.
APP: meetings
Meetings
Grabaciones, booking links y transcripts.
- Etapa: Produccion
- Landing:
/{orgId}/meetings
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Recordings | recordings |
shipped | Grabaciones Recall.ai, transcripcion y resumen. |
| Booking links | booking-links |
shipped | Scheduling tipo Calendly. |
| Settings | settings |
shipped | Defaults de org y share publico. |
| Transcript publico | transcript-publico |
shipped | Share /mt/{token}. |
Funcionalidades internas
19 funcionalidades documentadas en 4 modulos. Ver la tabla de cada modulo.
id: booking-links app: meetings nombre: Enlaces de reserva estado: shipped permiso: acceso a la app Meetings
Enlaces de reserva
Permite publicar páginas para que invitados reserven tiempo en el calendario conectado de un miembro del equipo. Se pueden ver y crear enlaces para otros anfitriones si ya conectaron Google u Outlook.
Para que sirve
- Una agencia permite que cada asesor comercial reciba reuniones sin coordinar horarios por correo.
- Una clínica agenda llamadas de orientación respetando los bloques y excepciones del profesional.
- Una inmobiliaria convierte solicitudes de visita en una actividad CRM y un contacto desde la página pública.
- Una firma B2B reduce ausencias con confirmaciones y recordatorios automáticos para prospectos.
Que lo hace diferente
- Cada reserva consulta la disponibilidad real de Google Calendar u Outlook y crea una actividad CRM vinculada al contacto.
- Funciona como una página personal de agenda, no como reservas de servicios, pagos, grupos o round robin.
- El formulario público puede actualizar contactos y usar campos personalizados seleccionados de Apex.
- La reserva sincroniza el evento con el calendario del anfitrión y puede crear Google Meet.
Acceso
- Ruta principal:
/[orgId]/meetings/booking-links - Como se llega:
Header app switcher > Meetings > Booking links - Permiso requerido: acceso a la app Meetings
Alcance tecnico
- Frontend: lista, editor y página pública de reserva.
- Backend:
meeting-booking-links,meeting-bookings,public-meeting-booking. - Superficies publicas:
/m/[orgId]/[slug]y su página de gestión. - Integraciones externas: Google Calendar, Outlook, S3 y SES.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Gestionar enlaces | manage-booking-links.md | Crea, edita, comparte y pausa páginas. |
| Configurar disponibilidad | availability.md | Define duración, horarios y excepciones. |
| Reglas de reserva | booking-rules.md | Aplica ventanas, aviso, buffers y límites. |
| Formulario del invitado | guest-form.md | Recoge datos y actualiza el CRM. |
| Confirmación y correos | confirmation-emails.md | Configura página, avisos y recordatorios. |
| Reserva pública | public-booking.md | El invitado elige horario y confirma. |
Relaciones
- Depende de: Calendar Sync, Contactos, Actividades y campos personalizados.
- Usado por: calendario conectado y CRM.
Limitaciones y notas
- Es una reserva uno a uno; no ofrece pagos, grupos ni round robin.
id: availability modulo: booking-links app: meetings nombre: Configurar disponibilidad tipo: configuracion
Configurar disponibilidad
Define cuándo puede reservar un invitado.
Que se logra
- Resultado: ofrece solo horarios que encajan con las horas definidas, el calendario ocupado y reservas existentes.
- Caso de uso: una clínica habilita franjas de orientación y bloquea festivos sin cerrar toda la agenda.
- Se combina con: Calendar Sync y reglas de reserva.
Donde esta
- Ruta:
/[orgId]/meetings/booking-links/[linkId] - Acceso en UI:
Booking links > Edit > Scheduling - Componente(s):
MeetingBookingLinkEditor.tsx
Como funciona
- Elige una o más duraciones, zona horaria y franjas semanales.
- Añade franjas adicionales o elimina las que no apliquen.
- Bloquea fechas puntuales o define horas especiales para ellas.
Reglas y validaciones
- La duración personalizada debe ser de al menos 5 minutos.
- La disponibilidad final cruza horarios, calendario ocupado y reservas existentes.
Backend
- Servicios:
meeting-booking-links(patch),public-meeting-booking(find).
Relaciones
- Requiere: calendario conectado.
id: booking-rules modulo: booking-links app: meetings nombre: Reglas de reserva tipo: configuracion
Reglas de reserva
Limita con qué anticipación y frecuencia se puede reservar.
Que se logra
- Resultado: protege la agenda del anfitrión con avisos, buffers, ventana y límite diario.
- Caso de uso: un abogado evita que clientes reserven una consulta con poca anticipación o sin tiempo entre citas.
- Se combina con: disponibilidad y reserva pública.
Donde esta
- Ruta:
/[orgId]/meetings/booking-links/[linkId] - Acceso en UI:
Booking links > Edit > Scheduling > Booking rules - Componente(s):
MeetingBookingLinkEditor.tsx
Como funciona
- Configura una ventana móvil, rango de fechas o disponibilidad indefinida.
- Establece aviso mínimo, buffers antes y después, e incremento de inicio.
- Define opcionalmente un límite diario.
Reglas y validaciones
- La ventana indefinida se expone con un horizonte máximo de 180 días.
- Los buffers también bloquean los horarios del calendario.
Backend
- Servicios:
meeting-booking-links(patch),public-meeting-booking(find).
Relaciones
- Afecta: horarios de la página pública.
id: confirmation-emails modulo: booking-links app: meetings nombre: Confirmación y correos de reserva tipo: automatizacion
Confirmación y correos de reserva
Define qué sucede después de reservar y qué mensajes recibe cada parte.
Que se logra
- Resultado: confirma la cita, avisa al anfitrión y programa recordatorios para reducir ausencias.
- Caso de uso: una agencia recuerda a un prospecto su reunión de descubrimiento sin crear una automatización aparte.
- Se combina con: reserva pública y Calendar Sync.
Donde esta
- Ruta:
/[orgId]/meetings/booking-links/[linkId] - Acceso en UI:
Booking links > Edit > Confirmation / Automation - Componente(s):
MeetingBookingLinkEditor.tsx
Como funciona
- En
Confirmation, mantiene un mensaje en la página o redirige a otra URL. - En
Automation, activa la confirmación al invitado y el aviso al anfitrión. - Añade texto introductorio y hasta tres recordatorios con su anticipación.
Reglas y validaciones
- La configuración de confirmación en pantalla es independiente de los correos.
- Los mensajes usan una plantilla de sistema de
Notifications AchieveApex.
Backend
- Servicios:
meeting-bookings(create),cron-meeting-booking-reminders. - Efectos: SES envía confirmación, aviso y recordatorios.
Relaciones
- Dispara / afecta: gestión pública de la reserva.
id: guest-form modulo: booking-links app: meetings nombre: Formulario del invitado tipo: configuracion
Formulario del invitado
Configura la información que se pide antes de confirmar una reserva.
Que se logra
- Resultado: convierte los datos de la reserva en un contacto CRM creado o actualizado para el anfitrión.
- Caso de uso: una empresa B2B solicita datos de calificación antes de conceder una demostración.
- Se combina con: contactos, campos personalizados y reserva pública.
Donde esta
- Ruta:
/[orgId]/meetings/booking-links/[linkId] - Acceso en UI:
Booking links > Edit > Form - Componente(s):
MeetingBookingLinkEditor.tsx
Como funciona
- Puede exigir teléfono y permitir invitados adicionales.
- Puede bloquear dominios de correo libre o dominios específicos.
- Añade preguntas cortas o largas y marca cuáles son obligatorias.
- Selecciona campos personalizados del contacto.
Reglas y validaciones
- No permite campos de archivo como pregunta de contacto.
- Nombre, correo y preguntas requeridas se validan antes de reservar.
Backend
- Servicios:
public-meeting-booking(get/create). - Efectos: crea o actualiza el contacto y le asigna como propietario el anfitrión.
Relaciones
- Requiere: Contactos y campos personalizados.
id: manage-booking-links modulo: booking-links app: meetings nombre: Gestionar enlaces de reserva tipo: accion
Gestionar enlaces de reserva
Crea y administra páginas de agenda para ti o para otro miembro del equipo.
Que se logra
- Resultado: publica y mantiene una página de reserva que refleja el calendario conectado del anfitrión.
- Caso de uso: una asesora inmobiliaria comparte su página para que prospectos soliciten una llamada. Un admin crea la página de un compañero si ese compañero ya conectó su calendario.
- Se combina con: Calendar Sync, disponibilidad y formulario del invitado.
Donde esta
- Ruta:
/[orgId]/meetings/booking-links - Acceso en UI:
Header app switcher > Meetings > Booking links - Componente(s):
MeetingBookingLinksView.tsx,MeetingBookingLinkEditor.tsx
Como funciona
- Filtra por miembro del equipo si quieres ver los enlaces de otra persona.
- Selecciona
Create scheduling pageo edita un enlace existente. - En Overview elige el anfitrión. Si no tiene calendario, copia el enlace de Calendar sync y envíaselo.
- Define nombre, título del evento, ubicación y si el enlace está activo.
- Guarda, copia la URL, obtiene un QR o abre la previsualización.
Reglas y validaciones
- Crear requiere una conexión activa de Google u Outlook del anfitrión seleccionado, no necesariamente del usuario que crea.
- Un enlace pausado no ofrece horarios a invitados.
Backend
- Servicios:
meeting-booking-links(find/get/create/patch).findes org-scoped;createpuede asignarowned_by_user_id.
Relaciones
- Requiere: Calendar Sync del anfitrión.
id: public-booking modulo: booking-links app: meetings nombre: Reserva pública de reunión tipo: publico
Reserva pública de reunión
Permite a un invitado elegir un horario disponible y confirmar una reunión.
Que se logra
- Resultado: agenda una cita en el calendario del anfitrión y deja una actividad asociada al contacto en Apex.
- Caso de uso: una firma de consultoría permite que un prospecto elija una demostración sin intercambiar correos.
- Se combina con: formulario del invitado, contactos y Calendar Sync.
Donde esta
- Ruta:
/m/[orgId]/[slug] - Acceso en UI: URL compartida por el anfitrión
- Componente(s):
PublicMeetingBookingView.tsx,PublicMeetingMonthCalendar.tsx
Como funciona
- El invitado selecciona duración, fecha, zona horaria y una hora disponible.
- Completa sus datos y confirma.
- Recibe confirmación, enlaces para añadir al calendario y, si está habilitado, un enlace de gestión.
- En la página de gestión puede cancelar o reprogramar con disponibilidad actual.
Reglas y validaciones
- Una conexión de calendario desconectada pausa la página.
- La reserva crea un evento en el calendario y una actividad CRM; Google Meet se crea para esa ubicación.
Backend
- Servicios:
public-meeting-booking(get/find/create),meeting-bookings.
Relaciones
- Requiere: disponibilidad del enlace y calendario del anfitrión.
id: recordings app: meetings nombre: Grabaciones de reuniones estado: shipped permiso: acceso a la app Meetings
Grabaciones de reuniones
Consulta y comparte reuniones capturadas por el bot de AchieveApex, con reproducción y transcripción.
Para que sirve
- Una consultora conserva reuniones de descubrimiento junto al contacto y deal para preparar propuestas con el contexto original.
- Una inmobiliaria revisa conversaciones con prospectos y comparte la transcripción con agentes que no asistieron.
- Un equipo de ventas identifica participantes e historial de una llamada antes de retomar una oportunidad.
- Una empresa de servicios convierte audios grabados desde el CRM en texto cuando necesita documentar una interacción.
Que lo hace diferente
- La reunión se relaciona con contactos, empresas y deals del CRM en lugar de quedar aislada en una biblioteca de notas.
- Puede capturarse con un bot de Recall desde reuniones de calendario o transcribirse desde una grabación de micrófono del CRM.
- El procesamiento de grabaciones y transcripciones consume saldo de la wallet de la organización.
- Las transcripciones se pueden compartir mediante un enlace público administrable desde el detalle de la reunión.
Acceso
- Ruta principal:
/[orgId]/meetings - Como se llega:
Header app switcher > Meetings > Recordings - Permiso requerido: acceso a la app Meetings
Alcance tecnico
- Frontend: lista, detalle y controles de compartición de Meetings.
- Backend:
meeting-transcriptions,recall-webhooks,meeting-recording-transcription. - Integraciones externas: Recall, OpenAI, S3 y wallet.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Lista y filtros | recordings-list.md | Busca y filtra grabaciones Recall. |
| Detalle y reproducción | meeting-detail.md | Revisa contenido y contexto de una reunión. |
| Transcripción interactiva | interactive-transcript.md | Navega la grabación desde el texto. |
| Resumen de participantes | participants.md | Distingue equipo e invitados. |
| Compartir transcripción | share-transcript.md | Controla el enlace público. |
| Captura con bot Recall | recall-bot.md | Procesa reuniones de calendario. |
| Transcribir audio del CRM | crm-audio-transcription.md | Solicita STT para una grabación local. |
| Recuperar transcripciones | transcript-recovery.md | Continúa tras un fallo del proveedor. |
Relaciones
- Depende de: Calendar Sync, Contactos, Deals y wallet.
- Usado por: actividad CRM y transcripción pública.
Limitaciones y notas
- La lista muestra solo grabaciones de origen Recall; las reservas no aparecen aquí.
id: crm-audio-transcription modulo: recordings app: meetings nombre: Transcribir audio grabado en CRM tipo: accion
Transcribir audio grabado en CRM
Solicita una transcripción bajo demanda para un audio capturado con el micrófono del CRM.
Que se logra
- Resultado: transforma una grabación local del CRM en texto disponible para el historial del cliente.
- Caso de uso: un asesor de seguros documenta una llamada grabada antes de actualizar el seguimiento del contacto.
- Se combina con: historial CRM y wallet.
Donde esta
- Ruta:
/[orgId]/contacts/[id] - Acceso en UI:
CRM History > Recordings > Request transcription - Componente(s):
RequestTranscriptionDialog
Como funciona
- El usuario selecciona un modelo de transcripción.
- Se valida saldo disponible y se inicia el trabajo en segundo plano.
- El historial actualiza el resultado cuando el proceso termina.
Reglas y validaciones
- No acepta grabaciones Recall ni audios ya transcritos.
- Puede reintentarse si la transcripción anterior falló.
Backend
- Servicios:
meeting-recording-transcription(find/create),meeting-transcriptions(patch). - Efectos: OpenAI procesa el audio y el cargo se hace tras éxito.
Relaciones
- Requiere: una grabación de micrófono y wallet con saldo.
id: interactive-transcript modulo: recordings app: meetings nombre: Transcripción interactiva tipo: vista
Transcripción interactiva
Permite leer la transcripción y navegar el audio o video por segmentos.
Que se logra
- Resultado: encuentra y reproduce el momento exacto de una conversación desde el texto transcrito.
- Caso de uso: una agencia verifica lo acordado con un cliente sin escuchar nuevamente toda la reunión.
- Se combina con: detalle y reproducción de reunión.
Donde esta
- Ruta:
/[orgId]/meetings/[id] - Acceso en UI:
Meeting detail > Transcript - Componente(s):
MeetingInteractiveTranscript.tsx
Como funciona
- Muestra segmentos temporizados o el texto disponible.
- Al pulsar un segmento, mueve la reproducción a ese momento.
- Resalta el segmento activo mientras avanza el reproductor.
Reglas y validaciones
- La navegación requiere segmentos y una fuente de audio o video reproducible.
- Si el proveedor aún procesa o no puede recuperar el texto, informa el estado correspondiente.
Backend
- Servicios:
meeting-transcriptions(get). - Efectos: Recall puede entregar la transcripción en eventos separados de la grabación.
Relaciones
- Requiere: Detalle y reproducción de reunión.
id: meeting-detail modulo: recordings app: meetings nombre: Detalle y reproducción de reunión tipo: vista
Detalle y reproducción de reunión
Presenta el contenido grabado, su estado y los vínculos CRM de una reunión.
Que se logra
- Resultado: consulta una grabación, su transcripción y los registros CRM relacionados desde un único detalle.
- Caso de uso: un ejecutivo de ventas repasa la llamada con un prospecto antes de retomar el deal.
- Se combina con: transcripción interactiva y transcripción pública.
Donde esta
- Ruta:
/[orgId]/meetings/[id] - Acceso en UI:
Meetings > Recordings > fila - Componente(s):
MeetingDetailView.tsx
Como funciona
- Consulta la reunión y muestra título, fecha, duración, plataforma y estado.
- Reproduce video cuando está disponible; si no, ofrece audio almacenado.
- Muestra enlaces al contacto y deal relacionados si existen.
- Expone
Sharepara gestionar el enlace de transcripción pública.
Reglas y validaciones
- Un enlace de descarga de video vencido se informa como no disponible.
- Mientras la transcripción está procesándose, la vista se actualiza cada 15 segundos.
Backend
- Servicios:
meeting-transcriptions(get). - Efectos: puede renovar la URL temporal de video.
Relaciones
- Requiere: Lista de grabaciones.
- Dispara / afecta: transcripción pública.
id: participants modulo: recordings app: meetings nombre: Participantes de una reunión tipo: vista
Participantes de una reunión
Organiza los asistentes identificados como equipo o invitados.
Que se logra
- Resultado: diferencia quién participó desde el equipo y quién fue invitado externo.
- Caso de uso: una consultora identifica a los decisores de una llamada para asignar el seguimiento comercial.
- Se combina con: Calendar Sync y actividad CRM.
Donde esta
- Ruta:
/[orgId]/meetings/[id] - Acceso en UI:
Meeting detail > Participants - Componente(s):
MeetingParticipantsList.tsx
Como funciona
- Compara participantes con integrantes de la organización por correo y luego por nombre.
- Muestra coincidencias en
Team membersy el resto enGuests. - Usa los asistentes de la actividad de calendario para completar correos cuando es posible.
- Permite copiar un correo disponible.
Reglas y validaciones
- Personas no invitadas, nombres ambiguos o sin coincidencia pueden quedar sin correo.
Backend
- Servicios:
meeting-transcriptionsyactivities(get).
Relaciones
- Requiere: Calendar Sync y actividad CRM vinculada cuando exista.
id: recall-bot modulo: recordings app: meetings nombre: Captura automática con bot Recall tipo: integracion
Captura automática con bot Recall
Recibe reuniones de calendario grabadas por el bot AchieveApex y las deja disponibles en Meetings.
Que se logra
- Resultado: convierte reuniones de calendario en grabaciones y transcripciones consultables por la organización.
- Caso de uso: una consultora registra automáticamente llamadas de descubrimiento para que el equipo conserve el contexto.
- Se combina con: Calendar Sync, wallet y transcripción pública.
Donde esta
- Ruta:
/[orgId]/meetings - Acceso en UI:
My Profile > Calendar Sync > Record my meetings - Componente(s):
MeetingsView.tsx
Como funciona
- El bot se une a una reunión de calendario compatible.
- Recall comunica los cambios de grabación y transcripción.
- AchieveApex persiste los archivos, participantes y texto.
- La reunión pasa por estados de programación, unión, grabación, proceso y transcripción.
Reglas y validaciones
- Eventos de Recall repetidos no deben duplicar el cobro ni la persistencia.
- Una grabación terminada puede requerir una transcripción posterior.
Backend
- Servicios:
recall-webhooks,recall-webhook-logs,meeting-transcriptions. - Efectos: archivos en S3, consumo de wallet y correo público cuando esté habilitado.
Relaciones
- Requiere: Calendar Sync y Recall.
id: recordings-list modulo: recordings app: meetings nombre: Lista y filtros de grabaciones tipo: vista
Lista y filtros de grabaciones
Muestra las reuniones capturadas por el bot Recall de la organización.
Que se logra
- Resultado: localiza reuniones transcritas y su contexto CRM para revisarlas sin buscar en el calendario.
- Caso de uso: una consultora filtra por deal antes de preparar la siguiente propuesta para un cliente.
- Se combina con: detalle de reunión, contactos y deals.
Donde esta
- Ruta:
/[orgId]/meetings - Acceso en UI:
Header app switcher > Meetings > Recordings - Componente(s):
MeetingsView.tsx
Como funciona
- La vista abre con el estado
Transcribedy las más recientes primero. - Busca, filtra por integrante, contacto, empresa, deal, estado o rango de fechas.
- Permite ordenar por título o fecha y ocultar columnas.
- Al seleccionar una fila abre el detalle.
Reglas y validaciones
- Solo incluye registros Recall;
Booking linksno son grabaciones. - Con
All statusessin resultados ofrece abrirCalendar Sync.
Backend
- Servicios:
meeting-transcriptions(find). - Hooks relevantes: búsqueda y enriquecimiento de relaciones para la lista.
Relaciones
- Requiere: Calendar Sync.
- Dispara / afecta: detalle de reunión.
id: share-transcript modulo: recordings app: meetings nombre: Compartir transcripción tipo: accion
Compartir transcripción
Entrega un enlace público para consultar la transcripción sin acceso a la organización.
Que se logra
- Resultado: entrega acceso externo a la transcripción y puede retirarlo o reemplazarlo cuando sea necesario.
- Caso de uso: una firma de servicios comparte los acuerdos de una reunión con el cliente que no usa Apex.
- Se combina con: transcripción pública y controles de Meetings.
Donde esta
- Ruta:
/[orgId]/meetings/[id] - Acceso en UI:
Meeting detail > Share - Componente(s):
MeetingShareControls.tsx
Como funciona
- Abre
Sharey activaPublic link. - Copia la URL generada.
- Puede apagar el enlace para revocar el acceso o usar
Regenerate linkpara crear otro.
Reglas y validaciones
- Desactivar y reactivar conserva el mismo enlace; regenerarlo invalida el anterior.
Backend
- Servicios:
meeting-transcriptions(patch),public-meeting-transcript(get).
Relaciones
- Dispara / afecta: página
/mt/[token].
id: transcript-recovery modulo: recordings app: meetings nombre: Recuperación de transcripción tipo: automatizacion
Recuperación de transcripción
Intenta obtener una transcripción diferida cuando la transcripción en vivo de Recall falla.
Que se logra
- Resultado: recupera texto de una reunión conservada aunque falle la transcripción inicial del proveedor.
- Caso de uso: una agencia mantiene accesible el registro de una reunión crítica pese a un fallo temporal de Recall.
- Se combina con: captura con bot Recall y envío automático de enlace.
Donde esta
- Ruta:
/[orgId]/meetings/[id] - Acceso en UI:
Meeting detail > Transcript - Componente(s):
MeetingDetailView.tsx
Como funciona
- La grabación se conserva aunque el proveedor marque fallida la transcripción en vivo.
- Al existir los archivos, se solicita una transcripción posterior.
- Cuando llega el resultado se guarda y aparece en el detalle.
Reglas y validaciones
- Un estado de reunión transcrita no basta: debe existir texto o segmentos.
- No vuelve a cargar el audio si ya está disponible.
Backend
- Servicios:
recall-webhooks,cron-recall-recording-reconciliation,meeting-transcriptions. - Efectos: puede continuar con el correo de transcripción y el cargo de wallet de forma idempotente.
Notas
- La reconciliación es un proceso de recuperación sin una superficie UI propia.
id: settings app: meetings nombre: Ajustes de Meetings estado: shipped permiso: acceso a la app Meetings
Ajustes de Meetings
Centraliza la configuración organizacional de los correos automáticos de transcripciones.
Para que sirve
- Una consultora decide que todos los asistentes reciban el enlace a la transcripción después de una reunión capturada.
- Un despacho regula centralmente el envío de transcripciones para evitar compartirlas automáticamente.
- Un equipo de ventas mantiene el mismo criterio de seguimiento de reuniones para toda la organización.
Que lo hace diferente
- El ajuste gobierna el envío de enlaces públicos generados por las grabaciones Recall de Apex, no una campaña de correo independiente.
- Los destinatarios se obtienen de asistentes de calendario y participantes de la reunión, sin duplicados.
- El enlace público se integra con las grabaciones y su control de acceso, por lo que apagar el envío no altera enlaces ya creados.
Acceso
- Ruta principal:
/[orgId]/meetings/settings - Como se llega:
Header app switcher > Meetings > Settings - Permiso requerido: acceso a la app Meetings
Alcance tecnico
- Frontend:
MeetingsSettingsView. - Backend:
organization-meetings-settings. - Integraciones externas: SES.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Correo automático de transcripción | transcript-emails.md | Activa o detiene los correos a asistentes. |
| Valores predeterminados | default-settings.md | Crea la configuración inicial de la organización. |
Relaciones
- Depende de: Grabaciones de reuniones.
- Usado por: transcripción pública.
Limitaciones y notas
- Este ajuste no cambia enlaces públicos ya creados.
id: default-settings modulo: settings app: meetings nombre: Valores predeterminados de Meetings tipo: automatizacion
Valores predeterminados de Meetings
Garantiza una configuración inicial para cada organización que consulta los ajustes.
Que se logra
- Resultado: toda organización dispone de una configuración coherente para el envío de transcripciones desde su primer acceso.
- Caso de uso: una empresa nueva empieza a compartir las transcripciones Recall con el comportamiento predeterminado de Meetings.
- Se combina con: correos automáticos de transcripción.
Donde esta
- Ruta:
/[orgId]/meetings/settings - Acceso en UI:
Header app switcher > Meetings > Settings - Componente(s):
MeetingsSettingsView.tsx
Como funciona
- Al abrir ajustes, la aplicación solicita la configuración organizacional.
- Si aún no existe, el backend crea el valor inicial.
- La interfaz considera activo el envío automático salvo que se haya desactivado.
Reglas y validaciones
- La organización conserva una sola configuración de Meetings.
Backend
- Servicios:
organization-meetings-settings(find). - Hooks relevantes: creación de la fila predeterminada.
Relaciones
- Requiere: organización activa.
id: transcript-emails modulo: settings app: meetings nombre: Correos automáticos de transcripción tipo: configuracion
Correos automáticos de transcripción
Controla si los asistentes reciben un enlace público al finalizar una reunión Recall.
Que se logra
- Resultado: distribuye el enlace de la transcripción a los asistentes al terminar una reunión Recall.
- Caso de uso: una consultora entrega automáticamente el registro de una sesión a clientes y participantes.
- Se combina con: captura con bot Recall y transcripción pública.
Donde esta
- Ruta:
/[orgId]/meetings/settings - Acceso en UI:
Meetings > Settings > Email transcript to participants - Componente(s):
MeetingsSettingsView.tsx
Como funciona
- Activa o desactiva el interruptor.
- Con la opción activa, una transcripción Recall terminada crea el enlace público y envía el correo.
Reglas y validaciones
- Está habilitado de forma predeterminada.
- Los destinatarios combinan asistentes del calendario y participantes con correo, sin duplicados.
- Apagarlo no revoca enlaces que ya existen.
Backend
- Servicios:
organization-meetings-settings(find/patch). - Efectos: condiciona el envío por SES.
Relaciones
- Afecta: envío automático de transcripción pública.
id: transcript-publico app: meetings nombre: Transcripción pública estado: public permiso: ninguno
Transcripción pública
Comparte una transcripción de reunión mediante un enlace que no requiere iniciar sesión.
Para que sirve
- Una consultora entrega a clientes el registro de una sesión de trabajo sin crearles usuarios en Apex.
- Una agencia comparte la llamada de aprobación con un cliente y mantiene el detalle asociado al CRM.
- Un equipo comercial envía a los asistentes el enlace a la conversación cuando termina la transcripción Recall.
Que lo hace diferente
- El enlace nace desde una grabación de Meetings y se puede revocar o regenerar desde el detalle CRM.
- Para reuniones Recall, Apex puede enviar el enlace automáticamente a asistentes y participantes mediante correo de sistema.
- La página pública muestra participantes sin revelar sus correos y renueva el acceso temporal al video cuando corresponde.
Acceso
- Ruta principal:
/mt/[token] - Como se llega:
Meetings > Recordings > Share - Permiso requerido: ninguno para la página; acceso a Meetings para administrarla
Alcance tecnico
- Frontend:
PublicMeetingTranscriptViewyMeetingShareControls. - Backend:
public-meeting-transcriptymeeting-transcriptions. - Superficies publicas:
/mt/[token]. - Integraciones externas: Recall, S3 y SES.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar transcripción pública | view-transcript.md | Presenta contenido sanitizado a cualquier visitante. |
| Administrar enlace público | manage-share-link.md | Habilita, deshabilita o regenera el enlace. |
| Enviar enlace por correo | automatic-email.md | Avisa a los asistentes de reuniones Recall. |
Relaciones
- Depende de: Grabaciones y Ajustes de Meetings.
- Usado por: asistentes de una reunión.
Limitaciones y notas
- El correo automático no se aplica a grabaciones de micrófono del CRM.
id: automatic-email modulo: transcript-publico app: meetings nombre: Envío automático de enlace tipo: automatizacion
Envío automático de enlace
Envía a los asistentes un correo de sistema al transcribirse una reunión Recall.
Que se logra
- Resultado: los asistentes reciben una vía directa a la transcripción cuando Recall entrega contenido utilizable.
- Caso de uso: una empresa de servicios comparte los acuerdos de una sesión con clientes sin envío manual del equipo.
- Se combina con: ajustes de Meetings y captura con bot Recall.
Donde esta
- Ruta:
/[orgId]/meetings/settings - Acceso en UI:
Meetings > Settings > Email transcript to participants - Componente(s):
MeetingsSettingsView.tsx
Como funciona
- Recall entrega una transcripción con texto o segmentos.
- Con el ajuste habilitado, se habilita un enlace público.
- El sistema envía el enlace a asistentes y participantes, excluyendo al remitente y direcciones bloqueadas.
Reglas y validaciones
- Solo se envía para origen Recall y una vez por reunión.
- Las grabaciones de micrófono del CRM no activan este correo.
Backend
- Servicios:
meeting-transcriptions,organization-meetings-settings. - Efectos: SES usa
AchieveApex Meetingsy responde al organizador.
Relaciones
- Requiere: Ajustes de Meetings activados.
id: manage-share-link modulo: transcript-publico app: meetings nombre: Administrar enlace público tipo: accion
Administrar enlace público
Permite al usuario controlar la vigencia del enlace compartido de una reunión.
Que se logra
- Resultado: controla quién puede abrir la transcripción y revoca enlaces anteriores al regenerarlos.
- Caso de uso: un despacho reemplaza un enlace compartido por error sin modificar la grabación interna.
- Se combina con: consultar transcripción pública.
Donde esta
- Ruta:
/[orgId]/meetings/[id] - Acceso en UI:
Meeting detail > Share - Componente(s):
MeetingShareControls.tsx
Como funciona
- Activa
Public linkpara habilitar el acceso. - Copia la URL resultante.
- Desactiva el interruptor para deshabilitarla.
- Selecciona
Regenerate linkpara sustituirla por otra.
Reglas y validaciones
- La regeneración cambia el token y deja inutilizable el enlace anterior.
Backend
- Servicios:
meeting-transcriptions(patch).
Relaciones
- Afecta:
/mt/[token].
id: view-transcript modulo: transcript-publico app: meetings nombre: Consultar transcripción pública tipo: publico
Consultar transcripción pública
Muestra la transcripción y los medios disponibles mediante un enlace compartido.
Que se logra
- Resultado: un destinatario externo consulta la reunión sin una cuenta de AchieveApex y sin ver correos de participantes.
- Caso de uso: una agencia entrega a su cliente el video y los acuerdos de una reunión de seguimiento.
- Se combina con: administrar enlace público y grabaciones de reuniones.
Donde esta
- Ruta:
/mt/[token] - Acceso en UI: URL pública recibida o copiada desde
Share - Componente(s):
PublicMeetingTranscriptView.tsx
Como funciona
- El visitante abre la URL sin iniciar sesión.
- Ve título, fecha, duración, plataforma, participantes sin correos y texto o segmentos.
- Puede usar el reproductor si hay video o audio disponible.
Reglas y validaciones
- Un enlace deshabilitado o inexistente no muestra el contenido.
- La respuesta pública excluye los correos de participantes.
Backend
- Servicios:
public-meeting-transcript(get). - Efectos: actualiza la URL temporal de video cuando procede.
Notas
- La página es de sistema y muestra la marca AchieveApex.
APP: operations
Operations
Proyectos, tareas, equipos y OKRs.
- Etapa: Produccion
- Landing:
/{orgId}/operations/tasks
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Proyectos | proyectos |
shipped | Workspaces con tasks, scope, roadmap, docs y miembros. |
| My Tasks | my-tasks |
shipped | Hub de tareas cross-project. |
| Teams | teams |
shipped | Equipos de operaciones. |
| Strategy / OKRs | strategy-okrs |
shipped | Estrategias, ciclos, objetivos y key results. |
| Reports | reports |
shipped | Reportes de operaciones. |
Funcionalidades internas
52 funcionalidades documentadas en 5 modulos. Ver la tabla de cada modulo.
id: my-tasks app: operations nombre: Mis tareas estado: shipped permiso: can_access_tasks
Mis tareas
Hub transversal para consultar y ejecutar tareas de proyectos, de una persona o de un equipo.
Para que sirve
- Una consultora permite a cada especialista concentrar los compromisos de varios clientes en una sola vista personal.
- Una agencia revisa la carga de un equipo y redistribuye tareas vencidas antes de afectar una entrega.
- Un equipo de implementación coordina bloqueos, subtareas, comentarios y responsables para cerrar un despliegue.
- Un estudio profesional sigue tareas por proyecto, hito y prioridad sin separar el trabajo operativo de su contexto.
Que lo hace diferente
- Reúne tareas de Projects y tareas que ejecutan resultados clave de Strategy / OKRs.
- Las asignaciones se apoyan en miembros de proyectos y equipos, y actualizan My Tasks, Workload y Reports.
- Las tareas alimentan progreso de proyecto, hitos, bitácora de actividad y reportes de cumplimiento.
- Nova y el MCP de AchieveApex pueden crear, consultar y actualizar tareas, dependencias, comentarios y asignaciones.
Acceso
- Ruta principal:
/[orgId]/operations/tasks - Como se llega:
Operations sidebar > My Tasks. - Permiso requerido:
can_access_tasks; las acciones respetan permisos de Tasks para todos o tareas propias.
Alcance tecnico
- Frontend:
operations/tasks, tablero de tareas y panel/detalle. - Backend:
ops-project-tasks,ops-tasks, statuses, listas, assignees, comments, dependencies, attachments y activities. - Integraciones externas: notificaciones de asignación.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Hub cross-project | cross-project-hub.md | Consulta tareas propias, de una persona o equipo. |
| Crear y editar tareas | task-management.md | Gestiona atributos y programación. |
| Vistas de tareas | task-views.md | Alterna List, Kanban, Calendar, Timeline, Swimlane y Workload. |
| Buscar, filtrar y agrupar | task-filtering.md | Reduce y organiza el conjunto visible. |
| Acciones masivas | bulk-task-actions.md | Actualiza o elimina tareas seleccionadas. |
| Subtareas | subtasks.md | Crea, completa y elimina tareas hijas. |
| Asignación | task-assignees.md | Asigna miembros y notifica cambios. |
| Estados e hitos | task-statuses-milestones.md | Define estados y vincula tareas a hitos. |
| Comentarios | task-comments.md | Conversaciones con respuestas en hilo. |
| Dependencias | task-dependencies.md | Conecta bloqueos y relaciones. |
| Actividad | task-activity.md | Consulta la bitácora de cambios. |
| Adjuntos | task-attachments.md | Consulta y elimina adjuntos existentes. |
Relaciones
- Depende de: Projects y Teams.
- Usado por: Reports, Project Tasks y Strategy / OKRs.
Limitaciones y notas
My Taskses el destino por defecto al abrir Operations.- La carga de archivos desde
AttachmentsmuestraComing soon; solo pueden abrirse o eliminarse adjuntos existentes. - El panel lateral no administra dependencias; están únicamente en la página completa de tarea.
id: bulk-task-actions modulo: my-tasks app: operations nombre: Acciones masivas de tareas tipo: accion
Acciones masivas de tareas
Actualiza varias tareas seleccionadas desde List view.
Que se logra
- Resultado: aplica una decisión operativa a varias tareas sin editarlas una por una.
- Caso de uso: un líder de implementación reasigna y cambia la fecha de todas las tareas afectadas por un retraso del cliente.
- Se combina con: filtros, estados e hitos, asignación y actividad.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks - Acceso en UI:
List > task checkboxes > bulk actions bar. - Componente(s):
BulkTaskActions.tsx.
Como funciona
- En
List, selecciona una o varias filas;Shift+clickpermite rangos. - Actualiza Status, Priority, Assignees, Milestone o Due date.
- Selecciona
Deletey confirma para eliminar las tareas.
Reglas y validaciones
- La asignación masiva reemplaza los asignados existentes; aplicar una selección vacía los elimina.
- La eliminación es soft-delete.
Backend
- Servicios:
ops-project-tasks(patch/remove),ops-task-assignees(create/remove).
Relaciones
- Requiere: Task management.
- Dispara / afecta: Activity y Project progress.
id: cross-project-hub modulo: my-tasks app: operations nombre: Hub transversal de tareas tipo: vista
Hub transversal de tareas
Concentra tareas de varios proyectos según una persona o equipo seleccionado.
Que se logra
- Resultado: ofrece una cola única de trabajo para una persona o equipo aunque sus tareas pertenezcan a proyectos distintos.
- Caso de uso: una consultora revisa las tareas de un consultor asignado a varias implementaciones y prioriza su jornada.
- Se combina con: equipos, asignación de tareas y vistas de tareas.
Donde esta
- Ruta:
/[orgId]/operations/tasks - Acceso en UI:
Operations sidebar > My Tasks. - Componente(s):
TaskViewAsPicker.tsx,ProjectTasksBoard.tsx.
Como funciona
- Abre
My Tasks. - En
View as, escoge tus tareas, otro miembro o un equipo. - Activa
Group by projectpara ver secciones plegables por proyecto. - Abre el enlace de una sección para continuar en las tareas de ese proyecto.
Reglas y validaciones
- Solo aparecen tareas cuando la persona o equipo está asignada mediante
ops-task-assignees. - El filtro de asignado se oculta porque
View asya determina ese alcance.
Backend
- Servicios:
ops-project-tasks,ops-task-assignees,ops-teams,ops-team-members(find).
Relaciones
- Requiere: Projects y Teams.
- Dispara / afecta: abre Project Tasks.
id: subtasks modulo: my-tasks app: operations nombre: Subtareas tipo: accion
Subtareas
Organiza trabajo hijo bajo una tarea principal mediante una lista de verificación.
Que se logra
- Resultado: descompone una tarea en pasos controlables sin perder la relación con el trabajo principal.
- Caso de uso: un estudio de arquitectura separa las revisiones de un plano en subtareas antes de marcar completa la entrega.
- Se combina con: gestión de tareas, vistas y actividad.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks/[taskId] - Acceso en UI:
Task detail > Subtasks. - Componente(s):
TaskSubtasks.tsx.
Como funciona
- Escribe en
Add subtask...y confirma. - Marca la casilla para completar o usa su selector de estado.
- Pasa el cursor sobre la fila y selecciona el icono de papelera para eliminarla.
Reglas y validaciones
- Las subtareas se numeran con el prefijo del proyecto.
- La eliminación pide confirmación y realiza soft-delete.
- La opción global de subtareas define si se ocultan, anidan o muestran separadas.
Backend
- Servicios:
ops-project-tasks(find/create/patch/remove).
Relaciones
- Requiere: Task management.
- Dispara / afecta: List, Timeline y Swimlane.
id: task-activity modulo: my-tasks app: operations nombre: Actividad de tarea tipo: vista
Actividad de tarea
Muestra en orden reciente los cambios relevantes de una tarea.
Que se logra
- Resultado: aporta una bitácora verificable de quién cambió qué y cuándo durante la ejecución.
- Caso de uso: una consultora revisa si una fecha o asignación fue modificada antes de analizar un retraso.
- Se combina con: comentarios, gestión de tareas y Activity Timeline.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks/[taskId] - Acceso en UI:
Task detail > Activity. - Componente(s):
TaskActivityLog.tsx.
Como funciona
- Abre una tarea en panel o página completa.
- Selecciona
Activity. - Consulta creación, cambios de estado, prioridad, fechas, asignados, lista, título, descripción y comentarios.
Reglas y validaciones
- Las marcas de tiempo usan la zona horaria de organización.
Backend
- Servicios:
ops-task-activities(find),ops-project-tasksyops-task-assignees.
Relaciones
- Requiere: Task management.
- Dispara / afecta: Activity Timeline report.
id: task-assignees modulo: my-tasks app: operations nombre: Asignación de tareas tipo: accion
Asignación de tareas
Asocia uno o varios miembros de proyecto a una tarea y comunica la nueva asignación.
Que se logra
- Resultado: establece responsables claros y hace aparecer el trabajo en las vistas personales y de capacidad.
- Caso de uso: una consultora asigna una configuración a analista y líder técnico, quienes reciben el contexto dentro de
My Tasks. - Se combina con: miembros de proyecto, equipos, carga de trabajo y notificaciones.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks/[taskId] - Acceso en UI:
Task detail > Assignees. - Componente(s):
TaskAssigneesSelect.tsx.
Como funciona
- Abre la tarea y selecciona
Assignees. - Escoge o desmarca miembros del proyecto.
- Guarda el cambio; la tarea aparece en My Tasks de la persona o equipo pertinente.
Reglas y validaciones
- Solo aparecen usuarios que pertenecen simultáneamente a organización y proyecto.
- Los cambios generan actividad y pueden enviar notificación de asignación.
Backend
- Servicios:
ops-task-assignees(find/create/remove),ops-project-members(find). - Efectos: registra actividad y notifica asignaciones.
Relaciones
- Requiere: Project Members.
- Dispara / afecta: My Tasks, Workload y Reports.
id: task-attachments modulo: my-tasks app: operations nombre: Adjuntos de tarea tipo: vista
Adjuntos de tarea
Lista archivos ya asociados a una tarea y permite abrirlos o quitarlos.
Que se logra
- Resultado: permite consultar o retirar los archivos ya vinculados a una tarea.
- Caso de uso: un equipo de implementación abre un archivo de referencia adjunto antes de ejecutar una configuración.
- Se combina con: gestión de tareas y duplicación de proyectos cuando se habilita copiar adjuntos.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks/[taskId] - Acceso en UI:
Task detail > Attachments. - Componente(s):
TaskAttachments.tsx.
Como funciona
- Abre la tarea y elige
Attachments. - Haz clic en un archivo para abrir su URL.
- Usa la papelera para eliminar un adjunto.
Reglas y validaciones
Uploadactualmente solo muestra un avisoComing soon; no carga archivos.
Backend
- Servicios:
ops-task-attachments(find/remove).
Relaciones
- Requiere: Task management.
- Dispara / afecta: duplicación de proyectos cuando se activa la opción de copiar adjuntos.
id: task-comments modulo: my-tasks app: operations nombre: Comentarios de tarea tipo: accion
Comentarios de tarea
Permite discutir una tarea y responder mensajes en hilo.
Que se logra
- Resultado: conserva decisiones y aclaraciones junto al trabajo al que pertenecen.
- Caso de uso: una agencia deja en la tarea los ajustes solicitados por una cuenta para que diseño y gestión trabajen sobre la misma instrucción.
- Se combina con: actividad de tarea y gestión de tareas.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks/[taskId] - Acceso en UI:
Task detail > Comments. - Componente(s):
TaskComments.tsx.
Como funciona
- Abre la tarea y selecciona
Comments. - Escribe en
Add a comment...y envía. - Selecciona
Replypara responder a un comentario existente.
Reglas y validaciones
- No se envían comentarios vacíos.
- La lista se actualiza en tiempo real con eventos del servicio.
Backend
- Servicios:
ops-task-comments(find/create). - Efectos: crea un registro de actividad.
Relaciones
- Requiere: Task management.
- Dispara / afecta: Task Activity.
id: task-dependencies modulo: my-tasks app: operations nombre: Dependencias de tareas tipo: accion
Dependencias de tareas
Relaciona tareas que bloquean, son bloqueadas o están relacionadas entre sí.
Que se logra
- Resultado: muestra bloqueos y secuencias de trabajo para evitar iniciar tareas sin sus precondiciones.
- Caso de uso: un equipo de implementación marca la configuración del cliente como bloqueo de la capacitación posterior.
- Se combina con: gestión de tareas, subtareas y actividad.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks/[taskId] - Acceso en UI:
full task page > Dependencies. - Componente(s):
TaskDependencies.tsx.
Como funciona
- Abre la página completa de una tarea.
- En
Dependencies, seleccionaAddy busca otra tarea. - Elige
Blocked byoRelates to. - Usa
Xpara remover una relación.
Reglas y validaciones
- Las tareas ya vinculadas se identifican como
Addedy no se vuelven a agregar. - Esta sección no existe en el panel lateral.
Backend
- Servicios:
ops-task-dependencies(find/create/remove),ops-project-tasks(find).
Relaciones
- Requiere: Task management.
- Dispara / afecta: contexto de ejecución de la tarea.
id: task-filtering modulo: my-tasks app: operations nombre: Buscar, filtrar y agrupar tareas tipo: vista
Buscar, filtrar y agrupar tareas
Reduce el conjunto de tareas y organiza las vistas por atributos operativos.
Que se logra
- Resultado: enfoca la revisión en el trabajo relevante por estado, prioridad, fecha, responsable o proyecto.
- Caso de uso: una agencia filtra las tareas vencidas de una cuenta y las agrupa por responsable para desbloquear la entrega.
- Se combina con: hub transversal, vistas y acciones masivas de tareas.
Donde esta
- Ruta:
/[orgId]/operations/tasks - Acceso en UI:
task toolbar > search,Filters,Subtasks,Group by. - Componente(s):
TaskFilters.tsx,TaskGroupingSelector.tsx,TaskSubtaskVisibilityControl.tsx.
Como funciona
- Busca por texto y elige
Active,CompletedoAll. - En
Filters, combina estado, prioridad y fecha; Project Tasks también permite asignado. - Agrupa por Status, Milestone, Assignee, Priority o Due Date.
- En
Subtasks, usaHide subtasks,Nested in parentoShow as separate tasks.
Reglas y validaciones
- En My Tasks los estados se filtran por categoría; en Project Tasks se muestran estados configurados.
viewysubtasksquedan reflejados en la URL.
Backend
- Servicios:
ops-project-tasks,ops-task-statuses,ops-task-assignees(find).
Relaciones
- Requiere: Task management.
- Dispara / afecta: todas las Task Views.
id: task-management modulo: my-tasks app: operations nombre: Crear y editar tareas tipo: accion
Crear y editar tareas
Crea tareas de proyecto y edita sus datos desde el panel lateral o la página completa.
Que se logra
- Resultado: convierte el plan del proyecto en trabajo asignable, fechable y medible.
- Caso de uso: una agencia divide la entrega de una campaña en tareas con prioridad, responsables y fecha de compromiso con el cliente.
- Se combina con: estados e hitos, asignaciones, dependencias, actividad y reportes.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks - Acceso en UI:
Tasks > Add task, una fila/tarjeta oOpen full page. - Componente(s):
CreateTaskDialog.tsx,TaskDetailPanel.tsx.
Como funciona
- Crea una tarea desde List, Kanban o Calendar y escribe
Title. - Configura descripción, fechas, prioridad, estado, hito, horas estimadas y asignados.
- Haz clic en la tarea para editarla rápidamente en el panel.
- Abre
Open full pagepara la edición completa.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Title |
texto | Sí | No admite solo espacios. |
| Descripción | Markdown | No | Se guarda automáticamente. |
| Fechas | fecha | No | Inicio, vencimiento y compromiso del cliente. |
Priority |
selección | No | Urgent, High, Medium, Low o None. |
Estimated Hours |
número | No | Mínimo cero; pasos de media hora. |
Reglas y validaciones
- Crear, editar y eliminar siguen permisos granulares de Tasks.
- El panel lateral muestra el identificador con prefijo y número de tarea.
Backend
- Servicios:
ops-project-tasks(find/get/create/patch/remove). - Efectos: numera tareas, asigna creador, sincroniza fechas y actualiza progreso del proyecto.
Relaciones
- Requiere: Projects, statuses, milestones y Project Members.
- Dispara / afecta: Activity, Reports y Assignment notifications.
id: task-statuses-milestones modulo: my-tasks app: operations nombre: Estados e hitos de tareas tipo: configuracion
Estados e hitos de tareas
Clasifica tareas por estado y las vincula con hitos del proyecto.
Que se logra
- Resultado: traduce el avance diario de tareas en progreso del proyecto y en fases visibles del roadmap.
- Caso de uso: un equipo de implementación agrupa tareas de salida a producción en un hito y mide cuánto falta para cerrarlo.
- Se combina con: roadmap, dashboard, acciones masivas y Deadline Accuracy.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/tasks - Acceso en UI:
Task detail > StatusyMilestone. - Componente(s):
TaskStatusSelect.tsx,BulkMilestoneSelect.tsx.
Como funciona
- Selecciona una tarea.
- Elige su estado configurado para el proyecto.
- Elige un hito o
No milestone. - Usa las mismas opciones en acciones masivas.
Reglas y validaciones
- Los estados son específicos del proyecto y cuentan con uno predeterminado al crear este.
- Un estado marcado como hecho actualiza la finalización y el progreso del proyecto.
Backend
- Servicios:
ops-task-statuses,ops-task-lists,ops-project-tasks(find/create/patch).
Relaciones
- Requiere: Projects y Roadmap.
- Dispara / afecta: Project progress, dashboard y Reports.
id: task-views modulo: my-tasks app: operations nombre: Vistas de tareas tipo: vista
Vistas de tareas
Presenta el mismo trabajo en seis disposiciones que se guardan en la URL.
Que se logra
- Resultado: permite revisar y actualizar el mismo conjunto de tareas desde la visualización apropiada para planificar, ejecutar o balancear carga.
- Caso de uso: un equipo de implementación usa
Timelinepara ajustar fechas yWorkloadpara detectar sobrecarga por responsable. - Se combina con: filtros, estados e hitos y asignación de tareas.
Donde esta
- Ruta:
/[orgId]/operations/tasksy/[orgId]/operations/projects/[projectId]/tasks - Acceso en UI:
task toolbar > view switcher. - Componente(s):
TaskViewSwitcher.tsxy vistasTask*View.tsx.
Como funciona
- Elige
List,Kanban,Calendar,Timeline,SwimlaneoWorkload. - Comparte la URL para preservar
view. - En List y Kanban reordena o mueve tareas; en Calendar navega
Month,WeekoDay. - En Timeline ajusta fechas arrastrando barras y cambia zoom
D/W/M/Y. - En Swimlane mueve entre celdas de estado; en Workload revisa carga por asignado.
Reglas y validaciones
- Calendar usa la fecha de vencimiento.
- Timeline requiere fecha de inicio o vencimiento para dibujar tareas.
- Agrupación no está disponible en Calendar, Timeline ni Workload.
Backend
- Servicios:
ops-project-tasks(find/patch).
Relaciones
- Requiere: Task filtering y Task management.
- Dispara / afecta: estado, hito, asignado, prioridad o fechas al arrastrar.
id: proyectos app: operations nombre: Proyectos estado: shipped permiso: can_access_projects
Proyectos
Workspaces para planificar y ejecutar trabajo por proyecto. Reúnen tareas, alcance, roadmap, documentos, miembros y vínculos con CRM.
Para que sirve
- Una agencia digital convierte cada
Dealganado en un proyecto con responsable, entregables y fechas comprometidas con el cliente. - Una consultora conserva alcance, documentos y cambios aprobados de una implementación en el mismo workspace que ejecuta el equipo.
- Un estudio de arquitectura organiza hitos, planos y entregables de cada obra, sin perder la relación con la empresa contratante.
- Un equipo de servicios recurrentes genera y sigue los entregables de cada período para detectar compromisos pendientes.
Que lo hace diferente
- Vincula el proyecto con Contacts, Companies, Deals, Invoices y Quotes del CRM; desde esos registros se puede volver al trabajo de entrega.
- Formaliza entregables, documentos de alcance y cambios manuales o generados al modificar el alcance.
- Conecta la ejecución con My Tasks, Teams, Strategy / OKRs y los reportes de plazos y alcance.
- Nova y el MCP de AchieveApex pueden crear y consultar proyectos, tareas, documentos, entregables y cambios de alcance.
Acceso
- Ruta principal:
/[orgId]/operations/projects - Como se llega:
Operations sidebar > Projectso una colección/proyecto del sidebar. - Permiso requerido:
can_access_projects; crear, editar y eliminar respetan permisos granulares de Projects. Los miembrosAdminpueden administrar miembros y archivar su proyecto.
Alcance tecnico
- Frontend: rutas de Projects, workspace del proyecto y
Operations settings. - Backend:
ops-projects, miembros, documentos, entregables, cambios de alcance, hitos, colecciones y duplicación. - Integraciones externas: vínculos con Contactos, Companies, Deals, Invoices y Quotes del CRM.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear y editar proyectos | project-management.md | Configura identidad, fechas, visibilidad, colección y CRM. |
| Explorar proyectos | project-browse.md | Busca, filtra y abre workspaces. |
| Dashboard del proyecto | project-dashboard.md | Resume progreso, tareas, miembros, alcance e hitos. |
| Vínculos CRM | project-crm-links.md | Relaciona el proyecto con entidades comerciales. |
| Favoritos | project-favorites.md | Fija proyectos personales en el sidebar. |
| Miembros del proyecto | project-members.md | Agrega usuarios y asigna roles. |
| Documentos de proyecto | project-documents.md | Crea, edita y organiza documentos Markdown. |
| Acceso a documentos | document-access.md | Define quién puede ver, editar y administrar documentos. |
| Entregables | deliverables.md | Define y sigue entregables del alcance. |
| Entregables recurrentes | recurring-deliverables.md | Genera y administra instancias periódicas. |
| Cambios de alcance | scope-changes.md | Registra cambios manuales y automáticos. |
| Documentos de entregable | deliverable-documents.md | Vincula documentos de alcance con entregables. |
| Roadmap e hitos | roadmap-milestones.md | Planifica hitos y tareas en una línea de tiempo. |
| Archivado y restauración | project-archiving.md | Archiva, restaura y elimina proyectos archivados. |
| Colecciones | project-collections.md | Agrupa proyectos y administra miembros. |
| Duplicación de proyecto | project-duplication.md | Previsualiza y copia un proyecto. |
| Templates | project-templates.md | Expone el estado actual de templates. |
Relaciones
- Depende de: My Tasks, Teams, Strategy / OKRs, Contactos, Companies y Deals.
- Usado por: Reports, CRM y el sidebar de Operations.
Limitaciones y notas
- El layout del proyecto expone
Dashboard,Scope,Roadmap,Tasks,DocsyMembers; no existe una pestañaCalendarpropia. - El acceso rápido
Calendarde la página raíz de Operations apunta a/[orgId]/operations/calendar, pero esa ruta no tiene página implementada. Templatesy usarTemplatecomo fuente de duplicación están marcados comoComing soon.
id: deliverable-documents modulo: proyectos app: operations nombre: Documentos de entregable tipo: accion
Documentos de entregable
Vincula documentos Scope of Work del proyecto con un entregable específico.
Que se logra
- Resultado: conecta cada entregable con la evidencia documental de lo que fue acordado para su entrega.
- Caso de uso: un estudio de arquitectura asocia las especificaciones de una fase al entregable correspondiente para revisar el alcance.
- Se combina con: documentos de proyecto, entregables y cambios de alcance.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/scope/[deliverableId] - Acceso en UI:
deliverable detail > Docs > Link Document. - Componente(s):
DeliverableDocumentsTab.tsx.
Como funciona
- Crea un documento de tipo
Scope of WorkenProject > Docs. - Abre el entregable y selecciona
Docs. - Usa
Link Documentpara asociarlo. - Abre el documento con el enlace externo o desvincúlalo con
X.
Reglas y validaciones
- Solo aparecen documentos
Scope of Workaún no vinculados. - Vincular o desvincular produce un cambio de alcance automático.
Backend
- Servicios:
ops-deliverable-documents(find/create/remove),ops-project-documents(find).
Relaciones
- Requiere: Project Docs y Deliverables.
- Dispara / afecta: Scope Changes.
id: deliverables modulo: proyectos app: operations nombre: Entregables tipo: accion
Entregables
Define y realiza seguimiento de los resultados comprometidos en el alcance de un proyecto.
Que se logra
- Resultado: hace visible qué resultados se prometieron, cuál es su estado y si se entregaron en la fecha comprometida.
- Caso de uso: una agencia registra cada pieza de una campaña como entregable y detecta lo pendiente antes de la fecha de lanzamiento.
- Se combina con: documentos de alcance, cambios de alcance y Scope Compliance.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/scope - Acceso en UI:
project header > Scope > Create; detalle al seleccionar una fila. - Componente(s):
DeliverableTable.tsx,CreateDeliverableDialog.tsx,EditDeliverableDialog.tsx.
Como funciona
- Crea un entregable con título, descripción y fecha prometida opcionales.
- Busca por título, modifica el estado desde la tabla o abre su detalle.
- En el detalle edita título, descripción, estado y fechas.
- Usa el menú de fila para ver detalle o remover el entregable.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Title |
texto | Sí | Identifica el entregable. |
Description |
texto largo | No | Editable en el detalle. |
Status |
selección | Sí | Pending, In Progress, Completed o Cancelled. |
| Fechas | fecha | No | Prometida y entregada. |
Reglas y validaciones
- Al completar se puede registrar la fecha entregada; se puede reabrir un entregable completado o cancelado.
- El resumen de progreso cuenta únicamente entregables padre.
Backend
- Servicios:
ops-project-deliverables(find/get/create/patch/remove). - Efectos: registra cambios de alcance al modificar o retirar entregables.
Relaciones
- Requiere: Project Scope.
- Dispara / afecta: Scope Changes y Scope Compliance report.
id: document-access modulo: proyectos app: operations nombre: Acceso a documentos tipo: configuracion
Acceso a documentos
Define acceso explícito de usuarios del proyecto a cada documento.
Que se logra
- Resultado: protege documentos del proyecto y permite compartirlos solo con quienes deben leerlos, editarlos o administrarlos.
- Caso de uso: una consultora deja el alcance visible para el equipo y restringe la edición de notas internas a los responsables.
- Se combina con: miembros y documentos de proyecto.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/docs - Acceso en UI:
Docs > documento seleccionado > Manage access. - Componente(s):
DocumentAccessEditor.tsx.
Como funciona
- Crea un documento con la lista de acceso inicial o selecciona uno existente.
- Abre
Manage access. - Agrega o ajusta participantes y guarda los cambios.
- Los usuarios sin edición ven el documento identificado como solo lectura.
Reglas y validaciones
- El botón
Manage accesssolo se muestra a quien puede administrar el acceso. - El backend filtra los documentos por la autorización efectiva y enriquece la respuesta con capacidades de vista, edición y administración.
Backend
- Servicios:
ops-project-documents(find/create/patch). - Hooks relevantes: verifica, captura, aplica y filtra listas de acceso.
Relaciones
- Requiere: Project Members.
- Dispara / afecta: lectura y edición en Project Docs.
id: project-archiving modulo: proyectos app: operations nombre: Archivado y restauración de proyectos tipo: accion
Archivado y restauración de proyectos
Oculta proyectos sin perder su trabajo, permite restaurarlos y ofrece eliminación desde el archivo.
Que se logra
- Resultado: retira proyectos terminados de la operación diaria y preserva la posibilidad de recuperar su historial.
- Caso de uso: una consultora archiva una implementación cerrada para limpiar el portafolio activo, sin borrar sus tareas y entregables.
- Se combina con: explorar proyectos, colecciones y reportes.
Donde esta
- Ruta:
/[orgId]/operations/settings/archived-projects - Acceso en UI:
Operations sidebar > Settings > Archived Projects; también desde el menú del encabezado del proyecto. - Componente(s):
ArchivedProjectsTable.tsx, diálogos de archive, restore y delete.
Como funciona
- Desde el proyecto o el selector de activos, confirma
Archive Project. - El proyecto sale del sidebar y de las listas principales.
- En
Archived Projects, seleccionaRestorepara devolverlo a activo. - Owners y admins ven
Deletepara eliminar un proyecto archivado.
Reglas y validaciones
- Archivar preserva tareas y el proyecto puede restaurarse.
- Restaurar establece el proyecto como activo.
- La eliminación está restringida a owners y admins; elimina el proyecto y sus registros relacionados de las superficies de producto.
Backend
- Servicios:
ops-projects(find/patch/remove). - Efectos: al eliminar, el soft-delete se propaga a tareas, hitos, entregables y registros relacionados.
Relaciones
- Requiere: Operations Settings.
- Dispara / afecta: sidebar, Projects y Reports.
id: project-browse modulo: proyectos app: operations nombre: Explorar proyectos tipo: vista
Explorar proyectos
Presenta proyectos en tarjetas y permite encontrarlos por estado o nombre.
Que se logra
- Resultado: localiza rápidamente el workspace correcto entre proyectos activos, completados o archivados.
- Caso de uso: una agencia encuentra los proyectos activos de una cuenta antes de revisar su avance semanal.
- Se combina con: colecciones, favoritos y dashboard del proyecto.
Donde esta
- Ruta:
/[orgId]/operations/projects - Acceso en UI:
Operations sidebar > Projects. - Componente(s):
ProjectCard.tsx,OperationsSidebar.tsx.
Como funciona
- Abre
Projects. - Filtra con
All,Active,ArchivedoCompleted. - Usa la búsqueda por nombre.
- Selecciona una tarjeta para abrir
Tasksdel proyecto. - En el sidebar, busca colecciones y proyectos y despliega una colección.
Reglas y validaciones
- Los proyectos archivados no se muestran en el sidebar principal.
- La visibilidad y los permisos de Projects determinan qué proyectos se pueden consultar.
Backend
- Servicios:
ops-projects(find/get),ops-collections(find),ops-project-favorites(find).
Relaciones
- Requiere: permisos de Projects.
- Dispara / afecta: abre el workspace del proyecto.
id: project-collections modulo: proyectos app: operations nombre: Colecciones de proyectos tipo: configuracion
Colecciones de proyectos
Agrupa proyectos en el sidebar y permite administrar miembros aplicables a esos proyectos.
Que se logra
- Resultado: organiza el portafolio y acelera la incorporación consistente de personas a proyectos relacionados.
- Caso de uso: una agencia agrupa las cuentas de una línea de negocio y añade a su equipo de cuentas a los proyectos existentes y futuros.
- Se combina con: miembros de proyecto, explorar proyectos y archivado.
Donde esta
- Ruta:
/[orgId]/operations/projects - Acceso en UI:
Operations sidebar > Add Collection; iconos de colección para renombrar y administrar miembros. - Componente(s):
CreateCollectionDialog.tsx,RenameCollectionDialog.tsx,CollectionMembersDialog.tsx.
Como funciona
- Crea una colección con nombre, descripción, color e icono.
- Despliega la colección para navegar a sus proyectos.
- Renómbrala o abre el icono de miembros.
- Agrega miembros y activa opcionalmente
Add new members to existing projects.
Reglas y validaciones
- Crear requiere
can_create_collections; editar, archivar y restaurar requierencan_edit_collections. - Los miembros de colección se agregan automáticamente a proyectos nuevos dentro de ella.
- La sincronización opcional agrega miembros nuevos también a proyectos existentes.
- Archivar una colección archiva sus proyectos activos y completados; restaurar la colección no restaura sus proyectos.
Backend
- Servicios:
ops-collections,ops-collection-members,ops-project-members(find/create/patch/remove). - Efectos: sincroniza miembros y estado de archivado de proyectos.
Relaciones
- Requiere: Project Members.
- Dispara / afecta: navegación y archivado de Projects.
id: project-crm-links modulo: proyectos app: operations nombre: Vínculos CRM del proyecto tipo: integracion
Vínculos CRM del proyecto
Relaciona un proyecto con Contact, Company y Deal, y permite consultar relaciones comerciales asociadas.
Que se logra
- Resultado: conserva la trazabilidad entre el trabajo entregado y el cliente, empresa u oportunidad que lo originó.
- Caso de uso: una agencia vincula la producción de una campaña con su
Deal, empresa y presupuesto para que cuentas y operaciones consulten el mismo contexto. - Se combina con: proyectos, Contacts, Companies, Deals, Invoices y Quotes.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/dashboard - Acceso en UI:
Dashboard > Linked entities. - Componente(s):
ProjectRelatedCRM.tsx,CRMProjectsSection.tsx.
Como funciona
- En
Linked entities, abre la selección de Contact, Company o Deal. - Vincula o desvincula los registros necesarios.
- Con una relación CRM configurada, usa las pestañas
InvoicesoQuotespara enlazar sus líneas al proyecto. - Desde los detalles CRM, abre el acordeón
Projectspara volver al proyecto vinculado.
Reglas y validaciones
- Los selectores de invoices y quotes dependen de que exista primero un vínculo Contact, Company o Deal.
Backend
- Servicios:
ops-projects(patch), servicios CRM relacionados (find).
Relaciones
- Requiere: módulos CRM.
- Dispara / afecta: Projects aparece en Contacts, Companies y Deals.
id: project-dashboard modulo: proyectos app: operations nombre: Dashboard del proyecto tipo: vista
Dashboard del proyecto
Ofrece una lectura rápida de ejecución, equipo, alcance, hitos y vínculos CRM.
Que se logra
- Resultado: identifica el estado operativo y los riesgos de un proyecto sin recorrer cada tarea o documento.
- Caso de uso: un director de implementación revisa tareas vencidas, entregables y cambios de alcance antes de una reunión de seguimiento con el cliente.
- Se combina con: tareas, entregables, cambios de alcance, hitos y vínculos CRM.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/dashboard - Acceso en UI:
project header > Dashboard. - Componente(s):
ProjectDashboardPage.tsx,DeliverablesPanel.tsx,ScopeChangeTimeline.tsx.
Como funciona
- Abre un proyecto y selecciona
Dashboard. - Revisa total, completadas, en progreso y vencidas de las tareas.
- Consulta el porcentaje de progreso y la vista previa de miembros.
- Revisa entidades CRM, entregables, hitos y cambios de alcance recientes.
Reglas y validaciones
- Un hito es una lista de tareas que tiene fecha de inicio.
- La tarjeta de entregables compacta muestra hasta cinco elementos.
- La línea de cambios de alcance compacta muestra los cinco más recientes.
Backend
- Servicios:
ops-projects,ops-project-tasks,ops-project-members,ops-task-lists,ops-project-deliverables,ops-scope-changes(find/get).
Relaciones
- Requiere: tareas, miembros, entregables e hitos del proyecto.
- Dispara / afecta: enlaza a Scope y a registros CRM.
id: project-documents modulo: proyectos app: operations nombre: Documentos de proyecto tipo: accion
Documentos de proyecto
Centraliza documentos Markdown del proyecto, clasificados como alcance, notas, notas de reunión u otros.
Que se logra
- Resultado: mantiene el conocimiento, acuerdos y documentos de trabajo junto al proyecto que los necesita.
- Caso de uso: un estudio de arquitectura guarda minutas y el documento de alcance de una obra para que el equipo consulte la versión vigente.
- Se combina con: acceso a documentos, entregables y cambios de alcance.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/docs - Acceso en UI:
project header > Docs. - Componente(s):
DocumentMarkdownEditor.tsx.
Como funciona
- Selecciona
New Document, indica título, tipo y, opcionalmente, acceso inicial. - Encuentra documentos por
RecentsoBy type. - Edita título y contenido en el editor; el contenido se guarda automáticamente tras un breve retraso.
- Cambia entre
MarkdownyCode; el modo de código permitePreview. - Elimina un documento desde su fila cuando tiene permiso para administrarlo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Título | texto | Sí | No admite solo espacios. |
| Tipo | selección | Sí | Scope of Work, Notes, Meeting Notes u Other. |
| Contenido | Markdown | No | Admite formato y archivos/imágenes desde el editor. |
Reglas y validaciones
- Un documento sin permiso de edición es de solo lectura.
- La eliminación y la administración de acceso requieren permiso de administración sobre el documento.
Backend
- Servicios:
ops-project-documents(find/create/patch/remove).
Relaciones
- Requiere: proyecto y sus miembros.
- Dispara / afecta: documentos vinculables a entregables.
id: project-duplication modulo: proyectos app: operations nombre: Duplicación de proyecto tipo: accion
Duplicación de proyecto
Duplica un proyecto mediante una previsualización que permite controlar fechas, estado, personas y contenido copiado.
Que se logra
- Resultado: reutiliza una estructura probada de proyecto y adapta responsables, fechas y contenido antes de crear la copia.
- Caso de uso: una consultora replica la implementación estándar para un nuevo cliente, conservando tareas y dependencias pero reiniciando su ejecución.
- Se combina con: proyectos, tareas, entregables, documentos y vínculos CRM.
Donde esta
- Ruta:
/[orgId]/operations/settings - Acceso en UI:
Operations settings > Project Duplication. - Componente(s):
ProjectDuplicationSettingsPage.tsx.
Como funciona
- En
Source, selecciona un proyecto de origen. - En
Identity, define la identidad destino, fechas, CRM y opciones de copia. - En
People, conserva, limpia o mapea asignados tras usarAnalyze source project. - En
Status, reinicia, conserva o mapea estados. - En
Preview, actualiza la previsualización y confirmaDuplicate project.
Reglas y validaciones
- Solo owners, admins y platform admins acceden al wizard.
- La fuente
Templateestá deshabilitada. - El nombre destino, si se omite, se forma como una copia del nombre fuente.
- La previsualización queda obsoleta después de cambiar la configuración y debe regenerarse.
- Por defecto no se copian elementos completados, documentos, adjuntos, comentarios ni actividad; se pueden activar en opciones.
Backend
- Servicios:
ops-project-duplicate(create),ops-projects, Tasks, statuses, lists, members, deliverables y documentos. - Efectos: crea proyecto activo, estados, tareas, subtareas, dependencias y relaciones seleccionadas; puede desplazar o limpiar fechas.
Relaciones
- Requiere: Projects y usuarios activos de la organización.
- Dispara / afecta: todo el workspace del proyecto destino.
id: project-favorites modulo: proyectos app: operations nombre: Favoritos de proyectos tipo: configuracion
Favoritos de proyectos
Permite fijar proyectos personales para acceso rápido en el sidebar de Operations.
Que se logra
- Resultado: reduce el tiempo para volver a los proyectos que un usuario consulta con frecuencia.
- Caso de uso: una líder de cuentas fija las implementaciones que supervisa para abrirlas desde el sidebar durante la jornada.
- Se combina con: explorar proyectos y colecciones.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/* - Acceso en UI:
project header > star; resultado enOperations sidebar > Favorites. - Componente(s):
ProjectHeader.tsx,OperationsSidebar.tsx.
Como funciona
- Abre cualquier workspace de proyecto.
- Selecciona la estrella del encabezado para agregar o quitar el favorito.
- Abre la sección
Favoritesdel sidebar y elige el proyecto.
Reglas y validaciones
- La lista es individual para cada usuario.
- Solo contiene proyectos que siguen disponibles para el usuario.
Backend
- Servicios:
ops-project-favorites(find/create/remove).
Relaciones
- Requiere: un proyecto accesible y usuario autenticado.
- Dispara / afecta: navegación del sidebar.
id: project-management modulo: proyectos app: operations nombre: Crear y editar proyectos tipo: accion
Crear y editar proyectos
Crea un proyecto y actualiza su información operativa y sus vínculos comerciales.
Que se logra
- Resultado: convierte un servicio, iniciativa o compromiso comercial en un workspace con responsables, tareas, alcance y fechas.
- Caso de uso: una consultora abre un proyecto al cerrar una implementación y vincula el cliente y el
Dealpara entregar con contexto. - Se combina con: Vínculos CRM, tareas, entregables, hitos y reportes.
Donde esta
- Ruta:
/[orgId]/operations/projects - Acceso en UI:
Projects > Create Project; para editar,project header > project name > Edit project. - Componente(s):
CreateProjectDialog.tsx,EditProjectDialog.tsx.
Como funciona
- Crea el proyecto desde la lista o desde el botón
+de una colección. - Define nombre, colección, tipo, prefijo de tareas, color, visibilidad y fechas.
- Opcionalmente vincula Contact, Company y Deal.
- Al crear, se abre la pestaña
Tasksdel proyecto. - Desde el encabezado se puede modificar la misma información y registrar la fecha de finalización real.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | No admite solo espacios. |
Collection |
selección | No | Incluye colecciones activas. |
Project Type |
selección | No | One-off, Recurring o Internal. |
Task Prefix |
texto | No | Se genera desde el nombre si se deja vacío; máximo 10 caracteres en mayúsculas. |
Visibility |
selección | No | Public o Private. |
| Fechas | fecha | No | Inicio, fin interno y compromiso con cliente. |
| CRM | relación | No | Contact, Company y Deal. |
Reglas y validaciones
- Crear requiere permiso
can_create_projects. - Edición y eliminación se limitan a todos o propios según permisos granulares; owners y admins tienen acceso total.
- Al crear se agregan estados de tarea predeterminados y el creador queda como miembro del proyecto.
Backend
- Servicios:
ops-projects(find/get/create/patch/remove). - Efectos: sincroniza fechas de compromiso cuando corresponde, miembros de colección y estados predeterminados.
Relaciones
- Requiere: Colecciones y miembros de organización.
- Dispara / afecta: Tasks, members, dashboard y Reports.
id: project-members modulo: proyectos app: operations nombre: Miembros del proyecto tipo: configuracion
Miembros del proyecto
Controla qué usuarios de la organización pueden participar en un proyecto y con qué rol.
Que se logra
- Resultado: delimita quién puede colaborar y administrar un proyecto, y quién estará disponible para asignar tareas.
- Caso de uso: una consultora incorpora a analistas como
Membery deja a un líder comoAdminen una implementación sensible. - Se combina con: asignación de tareas, documentos y equipos.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/members - Acceso en UI:
project header > Members. - Componente(s):
ProjectMembersPage.tsx.
Como funciona
- Abre
Membersy busca entre los miembros existentes. - Selecciona
Add Member, escoge uno o varios usuarios de la organización y defineAdmin,MemberoViewer. - Actualiza el rol desde cada fila o elimina al miembro con su menú.
Reglas y validaciones
- Solo owners/admins de la organización o un
Admindel proyecto administran miembros. MemberyViewerpueden ver la lista sin editarla.- Solo se pueden añadir usuarios que pertenezcan a la organización y aún no estén en el proyecto.
Backend
- Servicios:
ops-project-members(find/create/patch/remove),organizations-users(find).
Relaciones
- Requiere: miembros de organización.
- Dispara / afecta: disponibilidad de asignados para tareas.
id: project-templates modulo: proyectos app: operations nombre: Templates de proyecto tipo: vista
Templates de proyecto
Reserva la superficie donde se administrarán templates de proyectos y tareas.
Que se logra
- Resultado: informa que los templates aún no están disponibles y orienta hacia el flujo existente de duplicación.
- Caso de uso: una agencia que necesita repetir una estructura de campaña usa por ahora la duplicación de un proyecto anterior.
- Se combina con: duplicación de proyecto.
Donde esta
- Ruta:
/[orgId]/operations/settings/templates - Acceso en UI:
Operations settings > Templates. - Componente(s):
TemplatesComingSoonSection.tsx.
Como funciona
- Abre
Templatesdesde Operations Settings. - La pantalla muestra
Coming soon. - Usa
Project Duplicationpara copiar un proyecto existente mientras los templates no estén disponibles.
Reglas y validaciones
- No existen acciones de creación, edición ni selección de templates.
Templatetampoco está habilitado como fuente del wizard de duplicación.
Backend
- Servicios: ninguno para templates.
Relaciones
- Requiere: Operations Settings.
- Dispara / afecta: mientras permanece en
Coming soon, dirige a Duplicación de proyecto como alternativa disponible.
id: recurring-deliverables modulo: proyectos app: operations nombre: Entregables recurrentes tipo: automatizacion
Entregables recurrentes
Convierte un entregable en una programación repetitiva y conserva sus instancias por período.
Que se logra
- Resultado: controla compromisos repetitivos mediante instancias individuales con sus propios estados y fechas.
- Caso de uso: una agencia de marketing genera el entregable mensual de optimización para cada período y mide cuáles siguen pendientes.
- Se combina con: entregables, cambios de alcance y Scope Compliance.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/scope/[deliverableId] - Acceso en UI:
deliverable detail > Recurring; luegoInstances > Add Instance. - Componente(s):
CreateDeliverableDialog.tsx,CreateInstanceDialog.tsx.
Como funciona
- Al crear o editar el entregable, activa
Recurring. - Selecciona
Weekly,Every 2 weeks,MonthlyoQuarterlyy una fecha de inicio. - El sistema crea la primera instancia de inmediato.
- Desde
Instances, crea una instancia para un período y ajusta su fecha prometida si hace falta.
Reglas y validaciones
- La fecha de inicio es obligatoria para un entregable recurrente.
- Una instancia pertenece a un entregable padre y se ve anidada en Scope.
- No se permite duplicar el mismo período para un padre.
- Las instancias tienen sus propios estado y fechas.
Backend
- Servicios:
ops-project-deliverables(create/find/patch). - Efectos: el hook crea automáticamente la instancia vigente al crear el padre; el cron de entregables recurrentes genera las futuras mientras el proyecto esté activo.
Relaciones
- Requiere: Deliverables.
- Dispara / afecta: Scope y Scope Compliance report.
id: roadmap-milestones modulo: proyectos app: operations nombre: Roadmap e hitos tipo: vista
Roadmap e hitos
Muestra un timeline de hitos y tareas planificadas y permite reprogramarlos visualmente.
Que se logra
- Resultado: permite planificar y ajustar la secuencia de hitos y trabajo sin perder las fechas comprometidas.
- Caso de uso: un equipo de implementación reprograma una fase bloqueada y ve el efecto en las tareas del roadmap.
- Se combina con: tareas de proyecto, dashboard y Deadline Accuracy.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/roadmap - Acceso en UI:
project header > Roadmap. - Componente(s):
ProjectRoadmapBoard.tsx,RoadmapTimeline.tsx,CreateMilestoneDialog.tsx,EditMilestoneDialog.tsx.
Como funciona
- Abre
Roadmap; los hitos son listas de tareas con fecha de inicio. - Filtra hitos
Active,CompletedoAlly elige orden. - Navega al día actual y cambia zoom con
D,W,MoY. - Crea un hito desde
Add Milestone. - Haz clic o arrastra barras para editar o reprogramar hitos; despliega tareas y ajusta sus fechas.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí al crear | Nombre del hito. |
| Fechas | fecha | Sí al crear | Inicio y fin interno. |
Client Deadline |
fecha | No | Se usa en reportes de precisión. |
Status |
selección | No | Upcoming, Active o Completed. |
Progress |
número | No | Se edita en el hito. |
Reglas y validaciones
- El orden manual es el único que permite arrastrar filas para reordenarlas.
- Arrastrar una barra guarda las nuevas fechas sin abrir el diálogo.
Backend
- Servicios:
ops-task-lists(find/create/patch),ops-project-tasks(find/patch).
Relaciones
- Requiere: Project Tasks.
- Dispara / afecta: dashboard y Deadline Accuracy.
id: scope-changes modulo: proyectos app: operations nombre: Cambios de alcance tipo: accion
Cambios de alcance
Mantiene la bitácora de adiciones, modificaciones y remociones del alcance.
Que se logra
- Resultado: deja evidencia cronológica de cómo cambió lo acordado y por qué, incluso cuando el cambio se genera desde el sistema.
- Caso de uso: una consultora registra una funcionalidad adicional solicitada por un cliente y la distingue del alcance original.
- Se combina con: entregables, documentos de entregable, dashboard y Scope Compliance.
Donde esta
- Ruta:
/[orgId]/operations/projects/[projectId]/scope/[deliverableId] - Acceso en UI:
Scope Changes > Add Scope Change; vista resumida enDashboard. - Componente(s):
DeliverableScopeChangesTab.tsx,ScopeChangeTimeline.tsx,CreateScopeChangeDialog.tsx.
Como funciona
- Abre un entregable y selecciona
Scope Changes. - Selecciona
Add Scope Change. - Registra título, tipo, razón y, opcionalmente, descripción y entregable.
- Revisa el historial; los elementos manuales pueden editarse o eliminarse.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Title |
texto | Sí | Describe el cambio. |
Change Type |
selección | Sí | Addition, Modification o Removal. |
Reason |
texto largo | Sí | Justificación del cambio. |
Linked Deliverable |
selección | No | Asocia el cambio a un entregable. |
Reglas y validaciones
- Las entradas con etiqueta
Autoson generadas por el sistema y no se editan ni eliminan en UI. - Título y razón son obligatorios.
Backend
- Servicios:
ops-scope-changes(find/create/patch/remove). - Efectos: entregables y vínculos de documentos pueden generar entradas automáticas.
Relaciones
- Requiere: Deliverables.
- Dispara / afecta: dashboard y Scope Compliance.
id: reports app: operations nombre: Reportes de operaciones estado: shipped permiso: can_access_operations
Reportes de operaciones
Analiza ejecución, carga, plazos y alcance de Operations.
Para que sirve
- Una agencia detecta proyectos con tareas vencidas, entregables atrasados o cambios de alcance antes de la reunión con el cliente.
- Una consultora compara la carga y las horas estimadas por miembro para reasignar trabajo.
- Un equipo de implementación evalúa si sus entregas se completan antes, en o después de las fechas comprometidas.
- Un estudio profesional revisa el volumen de actividad y avance del portafolio en un período común.
Que lo hace diferente
- Reporta sobre proyectos, tareas, hitos, entregables y cambios de alcance que se ejecutan dentro de AchieveApex.
- Relaciona cumplimiento de plazos y alcance con los proyectos que pueden estar vinculados a Deals, Contacts y Companies del CRM.
- Usa equipos, miembros, colecciones y proyectos como filtros compartidos con Operations.
- Complementa el seguimiento operativo con OKRs conectados a tareas, en vez de limitarse a tableros aislados.
Acceso
- Ruta principal:
/[orgId]/operations/reports - Como se llega:
Operations sidebar > Reports. - Permiso requerido: acceso a Operations.
Alcance tecnico
- Frontend:
ReportsPage.tsx, filtros y siete pestañas. - Backend:
ops-reporting.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Filtros globales | report-filters.md | Acota todos los reportes. |
| Resumen ejecutivo | executive-summary.md | KPIs y salud del portafolio. |
| Vista de proyectos | projects-overview.md | Progreso, plazos e hitos. |
| Analítica de tareas | task-analytics.md | Estado, prioridad y tendencia. |
| Carga de equipos | team-workload.md | Distribución por miembro. |
| Actividad | activity-timeline.md | Tendencias y feed operativo. |
| Precisión de plazos | deadline-accuracy.md | Desviación de proyectos y tareas. |
| Cumplimiento de alcance | scope-compliance.md | Entregables y cambios de alcance. |
Relaciones
- Depende de: Projects, My Tasks y Teams.
- Usado por: responsables de Operations.
Limitaciones y notas
- El período inicial corresponde a los últimos 30 días.
id: activity-timeline modulo: reports app: operations nombre: Línea de tiempo de actividad tipo: vista
Línea de tiempo de actividad
Visualiza actividad operativa por volumen, tipo y eventos recientes.
Que se logra
- Resultado: permite auditar el ritmo de ejecución y consultar los cambios recientes con su proyecto y tarea de origen.
- Caso de uso: un líder de una agencia verifica qué acciones realizó el equipo en una cartera durante la última semana.
- Se combina con: actividad de tarea, filtros globales y proyectos.
Donde esta
- Ruta:
/[orgId]/operations/reports - Acceso en UI:
Reports > Activity Timeline. - Componente(s):
ActivityTimelineTab.tsx.
Como funciona
- Consulta Activity Volume y Activity by Type.
- Recorre Recent Activity para ver usuario, acción, tarea, proyecto y tiempo relativo.
Backend
- Servicios:
ops-reporting,ops-task-activities(find).
Relaciones
- Requiere: Task Activity.
id: deadline-accuracy modulo: reports app: operations nombre: Precisión de plazos tipo: vista
Precisión de plazos
Evalúa desempeño de fechas comprometidas de proyectos y tareas.
Que se logra
- Resultado: cuantifica si los proyectos y tareas se completan antes, en o después de lo comprometido.
- Caso de uso: una consultora identifica las fases que sistemáticamente se entregan tarde para corregir su planificación futura.
- Se combina con: roadmap, tareas, proyectos y filtros globales.
Donde esta
- Ruta:
/[orgId]/operations/reports - Acceso en UI:
Reports > Deadline Accuracy. - Componente(s):
DeadlineAccuracyTab.tsx.
Como funciona
- Alterna
ProjectsyTasks. - En Projects revisa KPIs, tipos y detalle de fechas.
- En Tasks revisa distribución de finalización y cortes por proyecto o miembro.
Notas
- Las categorías de tareas van desde 3+ días temprano hasta 7+ días tarde.
Backend
- Servicios:
ops-reporting(find).
Relaciones
- Requiere: Projects, My Tasks y Roadmap.
id: executive-summary modulo: reports app: operations nombre: Resumen ejecutivo tipo: vista
Resumen ejecutivo
Presenta KPIs, salud de proyectos, distribución de tareas, entregables y alcance.
Que se logra
- Resultado: ofrece una visión consolidada para detectar qué proyectos requieren atención por avance, entregables o alcance.
- Caso de uso: el director de una consultora revisa el portafolio semanal y prioriza las implementaciones en riesgo.
- Se combina con: filtros globales, proyectos, tareas, entregables y cambios de alcance.
Donde esta
- Ruta:
/[orgId]/operations/reports - Acceso en UI:
Reports > Executive Summary. - Componente(s):
ExecutiveSummaryTab.tsx.
Como funciona
- Revisa proyectos totales/activos, completitud, vencidas, progreso y miembros.
- Consulta entregables, entregas a tiempo y cambios de alcance.
- Analiza salud por proyecto, estados, prioridades y tendencia creada/completada.
Backend
- Servicios:
ops-reporting(find).
Relaciones
- Requiere: filtros, Projects y Tasks.
id: projects-overview modulo: reports app: operations nombre: Vista general de proyectos tipo: vista
Vista general de proyectos
Ordena proyectos y permite expandir sus hitos.
Que se logra
- Resultado: permite comparar el avance y los vencimientos de proyectos e hitos desde una sola lista.
- Caso de uso: una agencia revisa qué campañas próximas a vencer tienen hitos o tareas aún pendientes.
- Se combina con: filtros globales, proyectos y roadmap.
Donde esta
- Ruta:
/[orgId]/operations/reports - Acceso en UI:
Reports > Projects Overview. - Componente(s):
ProjectsOverviewTab.tsx.
Como funciona
- Ordena por Name, Progress, Status o Due Date.
- Expande un proyecto para consultar hitos, progreso y tareas.
- Identifica vencimientos con su etiqueta.
Backend
- Servicios:
ops-reporting(find).
Relaciones
- Requiere: Projects y Roadmap.
id: report-filters modulo: reports app: operations nombre: Filtros globales de reportes tipo: vista
Filtros globales de reportes
Acota todas las pestañas por colección, proyecto, equipo, miembro y período.
Que se logra
- Resultado: compara todos los indicadores sobre el mismo subconjunto operativo y período.
- Caso de uso: una agencia filtra una colección de cuentas y el último mes para preparar una revisión de cartera.
- Se combina con: proyectos, equipos y todas las vistas de reportes.
Donde esta
- Ruta:
/[orgId]/operations/reports - Acceso en UI:
Reports > filter bar. - Componente(s):
ReportFilters.tsx.
Como funciona
- Elige Collection, Project, Team o Member.
- Selecciona un rango: Today, Yesterday, últimos 7/30/90 días, mes actual/anterior o personalizado.
- Usa
Clearpara limpiar filtros de entidad sin cambiar el rango.
Reglas y validaciones
- Cambiar colección limpia Project porque la lista se limita a esa colección.
Backend
- Servicios:
ops-reporting(find),ops-collections,ops-projects,ops-teams(find).
Relaciones
- Dispara / afecta: todas las pestañas de Reports.
id: scope-compliance modulo: reports app: operations nombre: Cumplimiento de alcance tipo: vista
Cumplimiento de alcance
Analiza entregables y cambios de alcance por proyecto.
Que se logra
- Resultado: permite comparar el alcance comprometido con entregables completados y cambios registrados durante el proyecto.
- Caso de uso: una agencia prepara la revisión de una cuenta mostrando qué se entregó a tiempo y qué solicitudes ampliaron el alcance.
- Se combina con: entregables, cambios de alcance, documentos de entregable y filtros globales.
Donde esta
- Ruta:
/[orgId]/operations/reports - Acceso en UI:
Reports > Scope Compliance. - Componente(s):
ScopeComplianceTab.tsx.
Como funciona
- Revisa total, completitud, entregas a tiempo y cambios.
- Compara estados de entregable y adiciones, modificaciones o remociones.
- Consulta cambios por semana, entregables y cambios por proyecto cuando existan datos.
Backend
- Servicios:
ops-reporting(find).
Relaciones
- Requiere: Deliverables y Scope Changes.
id: task-analytics modulo: reports app: operations nombre: Analítica de tareas tipo: vista
Analítica de tareas
Desglosa las tareas por estado, prioridad y evolución temporal.
Que se logra
- Resultado: muestra si el equipo está creando, cerrando o acumulando trabajo y dónde se concentra la prioridad.
- Caso de uso: un equipo de implementación detecta que las tareas urgentes crecen más rápido que las completadas durante un ciclo.
- Se combina con: filtros globales, My Tasks y carga de equipo.
Donde esta
- Ruta:
/[orgId]/operations/reports - Acceso en UI:
Reports > Task Analytics. - Componente(s):
TaskAnalyticsTab.tsx.
Como funciona
- Consulta el gráfico y lista de estados.
- Revisa distribución por prioridad.
- Compara creadas frente a completadas en el período.
Notas
- Los nombres de estado pueden ser personalizados; el gráfico agrega por categoría.
Backend
- Servicios:
ops-reporting(find).
Relaciones
- Requiere: My Tasks y filtros.
id: team-workload modulo: reports app: operations nombre: Carga de equipo tipo: vista
Carga de equipo
Compara volumen, avance, vencimientos y horas estimadas por miembro.
Que se logra
- Resultado: revela desequilibrios de carga y responsables con trabajo vencido o capacidad excedida.
- Caso de uso: una consultora mueve tareas de un especialista sobrecargado a otro miembro antes de comprometer una nueva fecha.
- Se combina con: equipos, asignación de tareas y filtros globales.
Donde esta
- Ruta:
/[orgId]/operations/reports - Acceso en UI:
Reports > Team Workload. - Componente(s):
TeamWorkloadTab.tsx.
Como funciona
- Filtra adicionalmente por
All Teams. - Consulta asignadas, en progreso, completadas, vencidas, tasa y horas.
- Revisa capacidad
Overloaded(>15),Busy(>8) oBalanced. - Observa Assignment Distribution.
Backend
- Servicios:
ops-reporting(find).
Relaciones
- Requiere: Teams y My Tasks.
id: strategy-okrs app: operations nombre: Estrategia y OKRs estado: shipped permiso: can_access_strategy
Estrategia y OKRs
Espacio para definir estrategias, ciclos, objetivos, resultados clave y las tareas que los ejecutan.
Para que sirve
- Una consultora traduce su plan anual en ciclos, objetivos medibles y tareas con responsables.
- Una agencia conecta la meta de retención de clientes con resultados clave y el trabajo que debe ejecutarla.
- Un equipo de implementación actualiza avances y notas para detectar objetivos que requieren intervención.
- Un estudio profesional prioriza iniciativas por ciclo y revisa si su ejecución alcanza la meta definida.
Que lo hace diferente
- Une objetivos y resultados clave con tareas ejecutables que también aparecen en My Tasks.
- Calcula progreso de objetivos y estrategias al cambiar resultados o registrar actualizaciones.
- Los equipos y responsables de la organización se usan en la planeación y ejecución, en lugar de mantener listas separadas.
- Nova y el MCP de AchieveApex pueden crear y consultar objetivos, key results, ciclos y tareas de OKR.
Acceso
- Ruta principal:
/[orgId]/operations/strategy - Como se llega:
Operations sidebar > Strategy. - Permiso requerido:
can_access_strategy; vista, creación, edición y eliminación distinguen registros propios y todos.
Alcance tecnico
- Frontend: lista de estrategias, detalle y árbol de OKRs.
- Backend:
ops-strategies, ciclos, objetivos, grupos, key results, actualizaciones, motivaciones yops-tasks.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Estrategias | strategy-management.md | Crea y consulta programas estratégicos. |
| Ciclos | strategy-cycles.md | Administra períodos simples o por lotes. |
| Grupos de objetivos | objective-groups.md | Filtra objetivos por agrupación. |
| Objetivos | objectives.md | Crea y edita objetivos. |
| Cálculo ponderado | weighted-objectives.md | Configura ponderación de resultados clave. |
| Key results | key-results.md | Mide objetivos con varios tipos de resultado. |
| Progreso | okr-progress-updates.md | Actualiza y consulta el historial de avance. |
| Motivación y factibilidad | objective-context.md | Mantiene contexto cualitativo del objetivo. |
| Árbol de OKRs | okr-tree.md | Navega jerarquía de objetivos, resultados y tareas. |
| Tareas de OKR | okr-tasks.md | Ejecuta tareas dependientes de un key result. |
| Acciones masivas de tareas | okr-task-bulk-actions.md | Actualiza varias tareas del árbol. |
Relaciones
- Depende de: Teams y miembros de organización.
- Usado por: My Tasks y Reports.
Limitaciones y notas
- Las tareas de estrategia usan
ops-tasks; no son Project Tasks. - Componentes alternos de tarjetas y diálogos existen en el código, pero la interfaz actual usa
StrategyTreey paneles laterales.
id: key-results modulo: strategy-okrs app: operations nombre: Resultados clave tipo: accion
Resultados clave
Mide el avance de un objetivo con resultados numéricos, monetarios, booleanos o porcentuales.
Que se logra
- Resultado: hace comprobable el avance de un objetivo mediante una meta y un tipo de medición explícitos.
- Caso de uso: una consultora mide un objetivo de crecimiento con ingresos, cantidad de proyectos y un hito de cumplimiento.
- Se combina con: objetivos, actualizaciones de progreso y tareas de OKR.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
objective row > Add Key Resulto fila de key result. - Componente(s):
EditKeyResultSheet.tsx.
Como funciona
- Agrega o abre un key result.
- Define título, owner, estado, descripción y tipo de medición.
- Según el tipo, configura valores inicial/meta/unidad, completado o porcentaje.
- Guarda para reflejarlo en el árbol.
Reglas y validaciones
- Título y tipo de medición son obligatorios.
- El método de cálculo aplica a Number y Currency.
Backend
- Servicios:
ops-key-results(find/create/patch/remove). - Efectos: actualiza el progreso del objetivo y estrategia.
Relaciones
- Requiere: Objectives.
- Dispara / afecta: Progress Updates y OKR Tasks.
id: objective-context modulo: strategy-okrs app: operations nombre: Contexto del objetivo tipo: configuracion
Contexto del objetivo
Registra motivación, factibilidad y memo como contexto cualitativo del objetivo.
Que se logra
- Resultado: documenta por qué importa una meta, qué tan viable es y qué decisiones la acompañan.
- Caso de uso: una consultora deja los supuestos y riesgos de un objetivo de expansión para que el equipo lo priorice con contexto.
- Se combina con: objetivos, key results y actualizaciones de progreso.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
objective sheet > Motivation,FeasibilityyMemo. - Componente(s):
EditObjectiveSheet.tsx.
Como funciona
- Abre un objetivo.
- Agrega o ajusta elementos de Motivation y Feasibility.
- Escribe el Memo y guarda.
Backend
- Servicios:
ops-objective-motivations,ops-objectives(find/create/patch/remove).
Relaciones
- Requiere: Objectives.
- Dispara / afecta: contexto de planeación del objetivo.
id: objective-groups modulo: strategy-okrs app: operations nombre: Grupos de objetivos tipo: configuracion
Grupos de objetivos
Agrupa y filtra objetivos dentro de una estrategia.
Que se logra
- Resultado: ordena objetivos relacionados y reduce el ruido al revisar una estrategia extensa.
- Caso de uso: una consultora agrupa sus objetivos por líneas de servicio para revisarlas por separado.
- Se combina con: estrategias, ciclos y objetivos.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
strategy detail > Group > +. - Componente(s):
CreateGroupDialog.tsx.
Como funciona
- Pulsa
+junto a Group. - Indica
Group Name. - Selecciona el grupo para mostrar sus objetivos.
Reglas y validaciones
- El nombre es obligatorio.
Backend
- Servicios:
ops-objective-groups(find/create).
Relaciones
- Requiere: Strategies.
- Dispara / afecta: filtro de Objectives.
id: objectives modulo: strategy-okrs app: operations nombre: Objetivos tipo: accion
Objetivos
Define objetivos de una estrategia y sus responsables.
Que se logra
- Resultado: convierte una prioridad estratégica en una meta con responsable, período y resultados medibles.
- Caso de uso: un equipo de implementación fija el objetivo de reducir el tiempo de activación y asigna sus indicadores a un líder.
- Se combina con: ciclos, key results, actualizaciones de progreso y tareas de OKR.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
strategy detail > New Objectiveo menú del objetivo. - Componente(s):
CreateOKRDialog.tsx,EditObjectiveSheet.tsx.
Como funciona
- Selecciona ciclo y grupo opcionales.
- Pulsa
New Objective, escribe objetivo y al menos un key result. - Edita título, descripción, owner, ciclo, grupo, fecha final y memo desde el panel.
Reglas y validaciones
- El ciclo es requerido al editar; el objetivo y el título del key result son obligatorios al crear.
Backend
- Servicios:
ops-objectives(find/create/patch/remove). - Efectos: actualiza el progreso de la estrategia.
Relaciones
- Requiere: Strategy Cycles.
- Dispara / afecta: Key Results y progreso.
id: okr-progress-updates modulo: strategy-okrs app: operations nombre: Actualizaciones de progreso tipo: accion
Actualizaciones de progreso
Registra una nueva medición y notas para un objetivo o key result.
Que se logra
- Resultado: conserva el historial de mediciones y contexto que explica cómo evolucionó una meta.
- Caso de uso: un equipo de implementación actualiza cada semana el avance de activaciones y deja la causa de cualquier desvío.
- Se combina con: objetivos, key results y árbol de OKRs.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
objective/key result row > Update Progress. - Componente(s):
UpdateProgressDialog.tsx,ProgressTimelineDialog.tsx.
Como funciona
- Abre
Update Progress. - Revisa la línea de tiempo anterior.
- Introduce el nuevo valor o marca completado en resultados booleanos.
- Añade nota opcional y confirma.
Reglas y validaciones
- El control se adapta al tipo de medición.
Backend
- Servicios:
ops-objective-updates(find/create),ops-objectives,ops-key-results(patch).
Relaciones
- Requiere: Objectives o Key Results.
- Dispara / afecta: progreso y Strategy Tree.
id: okr-task-bulk-actions modulo: strategy-okrs app: operations nombre: Acciones masivas de tareas OKR tipo: accion
Acciones masivas de tareas OKR
Actualiza varias tareas seleccionadas dentro del árbol.
Que se logra
- Resultado: ajusta en conjunto las tareas que ejecutan una misma parte de la estrategia.
- Caso de uso: una consultora reasigna las tareas de un resultado clave cuando cambia el responsable de la iniciativa.
- Se combina con: tareas de OKR, key results y árbol de OKRs.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
StrategyTree > shift+click tasks > floating toolbar. - Componente(s):
BulkTaskActions.tsx.
Como funciona
- Usa
Shift+clickpara seleccionar tareas. - Cambia estado, asignado o vencimiento, o elimina las tareas.
- Pulsa
EscoXpara limpiar selección.
Reglas y validaciones
ListyTargetse muestran comoComing soon.
Backend
- Servicios:
ops-tasks(patch/remove).
Relaciones
- Requiere: OKR Tasks.
- Dispara / afecta: progreso visible en Strategy Tree.
id: okr-tasks modulo: strategy-okrs app: operations nombre: Tareas de OKR tipo: accion
Tareas de OKR
Ejecuta trabajo asociado a un key result dentro del árbol estratégico.
Que se logra
- Resultado: vincula la ejecución diaria con el resultado clave que debe mejorar.
- Caso de uso: una agencia asigna tareas de optimización a un key result de retención y las consulta junto al resto de su trabajo.
- Se combina con: key results, My Tasks y asignaciones.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
key result > Add Tasko fila de tarea. - Componente(s):
EditTaskSheet.tsx.
Como funciona
- Crea una tarea bajo un key result o abre una existente.
- Edita owner, vencimiento, descripción, valor registrado, tiempo, recurrencia, recordatorio y memo.
- Comparte
?task={taskId}para abrirla directamente.
Reglas y validaciones
- Estas tareas pertenecen a
ops-tasks, no a Project Tasks.
Backend
- Servicios:
ops-tasks(find/create/patch/remove). - Efectos: puede notificar asignación.
Relaciones
- Requiere: Key Results.
- Dispara / afecta: Strategy Tree y My Tasks.
id: okr-tree modulo: strategy-okrs app: operations nombre: Árbol de OKRs tipo: vista
Árbol de OKRs
Navega la jerarquía expandible de objetivos, key results y tareas.
Que se logra
- Resultado: permite seguir desde una estrategia hasta las tareas concretas que impulsan cada resultado clave.
- Caso de uso: una líder de operaciones abre un objetivo atrasado y localiza las tareas pendientes que están frenando su indicador.
- Se combina con: objetivos, key results, tareas de OKR y actualizaciones de progreso.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
strategy detail > Objectives & Key Results. - Componente(s):
StrategyTree.tsx.
Como funciona
- Expande un objetivo para ver resultados y tareas.
- Usa menús de fila para editar, añadir o eliminar.
- Filtra las tareas con
Active,CompletedoAll Tasks.
Reglas y validaciones
- El filtro no elimina tareas.
Backend
- Servicios:
ops-objectives,ops-key-results,ops-tasks(find).
Relaciones
- Requiere: Objectives, Key Results y OKR Tasks.
id: strategy-cycles modulo: strategy-okrs app: operations nombre: Ciclos estratégicos tipo: configuracion
Ciclos estratégicos
Organiza los objetivos en períodos de ejecución.
Que se logra
- Resultado: separa objetivos por períodos comparables para enfocar y revisar la ejecución estratégica.
- Caso de uso: una agencia crea ciclos trimestrales para evaluar metas de crecimiento y retención por trimestre.
- Se combina con: estrategias, objetivos y árbol de OKRs.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
strategy detail > calendar > Manage Cycles. - Componente(s):
CycleManagerDialog.tsx.
Como funciona
- Abre
Manage Cycles. - Crea uno en
Add Singleo varios ciclos quarterly, half-yearly o yearly. - Edita fechas o elimina un ciclo.
- Selecciona un ciclo o
All cyclespara filtrar objetivos.
Reglas y validaciones
- Nombre, inicio y fin son obligatorios.
- No se puede eliminar el último ciclo.
Backend
- Servicios:
ops-strategy-cycles(find/create/patch/remove).
Relaciones
- Requiere: Strategies.
- Dispara / afecta: filtrado y asignación de Objectives.
id: strategy-management modulo: strategy-okrs app: operations nombre: Estrategias tipo: accion
Estrategias
Crea programas estratégicos y abre su workspace de OKRs.
Que se logra
- Resultado: establece un espacio común para medir el avance de una iniciativa estratégica y sus responsables.
- Caso de uso: una consultora crea la estrategia anual de expansión y reúne sus ciclos, objetivos y resultados clave.
- Se combina con: ciclos, objetivos, key results y tareas de OKR.
Donde esta
- Ruta:
/[orgId]/operations/strategy - Acceso en UI:
Strategy > Create Strategy. - Componente(s):
CreateStrategyDialog.tsx,StrategyCard.tsx.
Como funciona
- Selecciona
Create Strategy. - Define
Strategy Name, descripción yOwner. - Confirma y abre la tarjeta para administrar su detalle.
Reglas y validaciones
- Nombre y owner son obligatorios; las estrategias nuevas comienzan activas.
- Aplica
can_access_strategyy permisos propios/todos.
Backend
- Servicios:
ops-strategies(find/get/create/patch/remove). - Efectos: recalcula progreso de la estrategia.
Relaciones
- Dispara / afecta: cycles, objectives y key results.
id: weighted-objectives modulo: strategy-okrs app: operations nombre: Cálculo ponderado de objetivos tipo: configuracion
Cálculo ponderado de objetivos
Permite calcular el avance del objetivo ponderando sus key results.
Que se logra
- Resultado: refleja que algunos resultados clave aportan más que otros al avance total de una meta.
- Caso de uso: una agencia da mayor peso a la renovación de cuentas que a una métrica secundaria dentro de su objetivo de retención.
- Se combina con: objetivos, key results y actualizaciones de progreso.
Donde esta
- Ruta:
/[orgId]/operations/strategy/[strategyId] - Acceso en UI:
objective sheet > Weight. - Componente(s):
EditObjectiveSheet.tsx,EditKeyResultSheet.tsx.
Como funciona
- Abre un objetivo.
- Activa
Weight. - Configura el peso de cada key result al editarlo.
- Guarda para recalcular el avance.
Reglas y validaciones
- Los pesos se configuran en key results; el modo pertenece al objetivo.
Backend
- Servicios:
ops-objectives,ops-key-results(patch). - Efectos: recalcula progreso de objetivo y estrategia.
Relaciones
- Requiere: Objectives y Key Results.
id: teams app: operations nombre: Equipos estado: shipped permiso: can_access_operations
Equipos
Agrupa miembros de organización para visualizar carga de trabajo y filtrar Operations.
Para que sirve
- Una agencia separa diseño, cuentas y desarrollo para revisar el trabajo asignado a cada disciplina.
- Una consultora compara la carga de sus equipos de implementación antes de aceptar una nueva fase.
- Un estudio de arquitectura identifica qué equipo concentra tareas vencidas o demasiadas horas estimadas.
Que lo hace diferente
- Los equipos se usan directamente en
View as teamde My Tasks y en los filtros de Operations Reports. - La carga se calcula sobre tareas reales de Projects y no sobre una planificación aislada.
- Convive con los miembros específicos de cada proyecto, de modo que asignación y capacidad pueden revisarse en conjunto.
Acceso
- Ruta principal:
/[orgId]/operations/team - Como se llega:
Operations sidebar > Team. - Permiso requerido: acceso a Operations.
Alcance tecnico
- Frontend: página y diálogos de Teams.
- Backend:
ops-teamsyops-team-members.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Explorar equipos | team-browse.md | Consulta tarjetas, información y miembros. |
| Crear equipos | team-create.md | Crea un equipo identificado por nombre y color. |
| Editar y eliminar equipos | team-edit-delete.md | Mantiene o retira un equipo. |
| Miembros de equipo | team-members.md | Agrega y elimina miembros de organización. |
Relaciones
- Depende de: miembros de organización.
- Usado por: My Tasks y Operations Reports.
Limitaciones y notas
- La eliminación se ejecuta desde el menú del equipo y no muestra un diálogo de confirmación.
id: team-browse modulo: teams app: operations nombre: Explorar equipos tipo: vista
Explorar equipos
Muestra los equipos de la organización mediante tarjetas con su descripción, color y miembros.
Que se logra
- Resultado: permite identificar equipos y consultar rápidamente quién los compone.
- Caso de uso: una agencia revisa qué personas integran el equipo de diseño antes de filtrar su carga de trabajo.
- Se combina con: My Tasks y Team Workload.
Donde esta
- Ruta:
/[orgId]/operations/team - Acceso en UI:
Operations sidebar > Team. - Componente(s):
TeamsPage.tsx,TeamCard.tsx.
Como funciona
- Abre
Team. - Revisa las tarjetas de equipos y sus avatares.
- Haz clic en la fila de miembros para administrarlos.
Backend
- Servicios:
ops-teams,ops-team-members(find).
Relaciones
- Requiere: miembros de organización.
- Dispara / afecta:
View as teamen My Tasks y filtros de Reports.
id: team-create modulo: teams app: operations nombre: Crear equipos tipo: accion
Crear equipos
Da de alta equipos de Operations con identidad visual y descripción opcional.
Que se logra
- Resultado: crea una unidad de trabajo reutilizable para consultar capacidad y tareas por disciplina o área.
- Caso de uso: una consultora crea el equipo de onboarding para revisar sus implementaciones como grupo.
- Se combina con: miembros de equipo, My Tasks y Team Workload.
Donde esta
- Ruta:
/[orgId]/operations/team - Acceso en UI:
Team > New TeamoCreate your first team. - Componente(s):
CreateTeamDialog.tsx.
Como funciona
- Selecciona
New Team. - Ingresa
Name. - Opcionalmente añade
Descriptiony selecciona un color. - Confirma
Create.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Name |
texto | Sí | No admite solo espacios. |
Description |
texto largo | No | Contexto del equipo. |
Color |
color | No | Usa uno de los tonos predefinidos. |
Backend
- Servicios:
ops-teams(create).
Relaciones
- Dispara / afecta: Team Members y filtros de Operations.
id: team-edit-delete modulo: teams app: operations nombre: Editar y eliminar equipos tipo: accion
Editar y eliminar equipos
Actualiza la identidad de un equipo o lo elimina desde su tarjeta.
Que se logra
- Resultado: mantiene la estructura de equipos alineada con la operación actual o retira agrupaciones que dejaron de aplicar.
- Caso de uso: una agencia renombra su equipo de contenido tras reorganizar sus servicios y elimina una unidad ya disuelta.
- Se combina con: explorar equipos, My Tasks y filtros de reportes.
Donde esta
- Ruta:
/[orgId]/operations/team - Acceso en UI:
team card > ⋮ > EditoDelete. - Componente(s):
EditTeamDialog.tsx,TeamCard.tsx.
Como funciona
- Abre
⋮en una tarjeta. - Selecciona
Edit, cambia nombre, descripción o color y guarda. - Selecciona
Deletepara retirar el equipo.
Reglas y validaciones
- Editar requiere un nombre no vacío.
- Delete no solicita confirmación y no es reversible desde esta interfaz.
Backend
- Servicios:
ops-teams(patch/remove).
Relaciones
- Dispara / afecta: My Tasks y filtros de Reports dejan de usar el equipo eliminado.
id: team-members modulo: teams app: operations nombre: Miembros de equipo tipo: configuracion
Miembros de equipo
Agrega o retira usuarios de organización dentro de un equipo.
Que se logra
- Resultado: define los grupos con los que se revisa trabajo y capacidad en Operations.
- Caso de uso: una consultora incorpora nuevos analistas al equipo que atenderá las tareas de varias implementaciones.
- Se combina con: equipos, hub transversal de tareas y carga de equipo.
Donde esta
- Ruta:
/[orgId]/operations/team - Acceso en UI:
team card > members row. - Componente(s):
TeamMembersDialog.tsx.
Como funciona
- Selecciona la fila de avatares y miembros.
- En
Current members, usaXpara retirar un usuario. - En
Add members, selecciona usuarios para añadirlos.
Reglas y validaciones
- Solo se muestran usuarios unidos a la organización.
- Un usuario ya incluido no vuelve a aparecer como candidato.
Backend
- Servicios:
ops-team-members(find/create/remove),organizations-users(find).
Relaciones
- Requiere: Teams y miembros de organización.
- Dispara / afecta: My Tasks por equipo y Team Workload.
APP: plataforma
Plataforma
Settings, billing, identidad, copilot y superficies de crecimiento.
- Etapa: Transversal
- Landing:
/{orgId}/settings
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Organizacion | organizacion |
shipped | Settings generales, tags, custom fields, lost reasons. |
| Billing y Wallet | billing-wallet |
shipped | Plan Stripe, wallet prepaid y auto-recharge. |
| Equipo y permisos | equipo-permisos |
shipped | Members, roles y ACL granular (CASL). |
| Mi perfil | mi-perfil |
shipped | Perfil, calendar sync, Gmail, notificaciones. |
| Notificaciones | notificaciones |
shipped | Campana in-app, push, preferencias, platform alerts y announcements. |
| Partners / Affiliates | partners-affiliates |
partial | Agencias, comisiones y payouts Wise. |
| Developers | developers |
shipped | API keys, MCP, data sync. |
| Nova | nova |
shipped | Copilot interno de la org. |
| Nova Support | nova-support |
shipped | Asistente de soporte in-app + knowledge. |
| SoftPhone | softphone |
shipped | Llamadas WebRTC en el header. |
| AI Voices | ai-voices |
shipped | Marketplace TTS y clonacion de voz. |
| Ads | ads |
shipped | Facebook Lead Ads y Meta CAPI. |
| Academy | academy |
shipped | Cursos y lecciones para usuarios. |
| Community | community |
shipped | Ideas, roadmap y announcements. |
| API Docs | api-docs |
shipped | Referencia REST y tutorials. |
| Marketing site | marketing-site |
shipped | Paginas publicas de adquisicion. |
Funcionalidades internas
100 funcionalidades documentadas en 16 modulos. Ver la tabla de cada modulo.
id: academy app: plataforma nombre: Academy estado: shipped permiso: Por confirmar
Academy
Área de aprendizaje con cursos y lecciones localizadas, progreso del estudiante y superficies de administración.
Para que sirve
- Una empresa prepara cursos de onboarding para nuevos usuarios de AchieveApex.
- Un equipo de operaciones ofrece formación localizada para distintos mercados.
- Un administrador mantiene cursos, categorías, capítulos y lecciones desde el área administrativa.
- Un estudiante retoma su recorrido formativo con el progreso registrado por lección.
Que lo hace diferente
- Combina catálogo público localizado, contenido de curso y avance individual en una sola experiencia.
- El progreso se registra desde el consumo de lecciones, en lugar de depender de un seguimiento externo.
- Mantiene una superficie administrativa separada para el contenido que alimenta el catálogo público.
Acceso
- Ruta principal:
/academy/[localization]. - Como se llega: Por confirmar: entrada visible desde la aplicación.
- Permiso requerido: Por confirmar para contenido y administración.
Alcance tecnico
- Frontend: rutas
academy/[localization]yacademy/admin. - Backend:
academy-courses,academy-categories,academy-chapters,academy-lessons,academy-lesson-progress. - Superficies publicas:
/academy/[localization].
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Explorar cursos | courses.md | Catálogo localizado de cursos. |
| Consumir lecciones | lessons.md | Vista de curso y lecciones individuales. |
| Registrar progreso | lesson-progress.md | Seguimiento del avance del alumno. |
| Administrar Academy | academy-admin.md | Cursos, lecciones y categorías. |
Relaciones
- Depende de: contenido de Academy y localización.
- Usado por: usuarios que acceden a formación.
Limitaciones y notas
- Por confirmar: el modelo de acceso y publicación de cursos.
id: academy-admin modulo: academy app: plataforma nombre: Administrar Academy tipo: configuracion
Administrar Academy
Ofrece páginas administrativas separadas para gestionar cursos, lecciones, categorías y el contenido de un curso.
Que se logra
- Resultado: un equipo responsable mantiene el catálogo formativo y sus lecciones actualizados.
- Caso de uso: una empresa SaaS publica un curso para usuarios nuevos y organiza sus lecciones por categoría.
- Se combina con: catálogo de cursos, lecciones y progreso de Academy.
Donde esta
- Ruta:
/academy/admin,/academy/admin/courses,/academy/admin/lessons,/academy/admin/categoriesy/academy/[localization]/course/[courseId]/admin. - Acceso en UI: área
Academy admin. - Componente(s): páginas de administración de Academy.
Como funciona
- Abrir el área administrativa.
- Elegir cursos, lecciones o categorías.
- Crear o actualizar el contenido disponible.
- Abrir la administración específica desde un curso cuando corresponda.
Reglas y validaciones
- Por confirmar: roles autorizados para estas rutas.
Backend
- Servicios:
academy-courses,academy-categories,academy-chapters,academy-lessons.
Relaciones
- Requiere: contenido de Academy.
- Dispara / afecta: catálogo y experiencia de aprendizaje.
Notas
- La administración por curso conserva la localización y el identificador del curso en la URL.
id: courses modulo: academy app: plataforma nombre: Explorar cursos tipo: vista
Explorar cursos
Presenta el catálogo de cursos de Academy en la localización elegida.
Que se logra
- Resultado: los estudiantes encuentran el contenido formativo publicado en el idioma o localización elegidos.
- Caso de uso: un nuevo cliente explora los cursos de onboarding antes de configurar su organización.
- Se combina con: lecciones y progreso de Academy.
Donde esta
- Ruta:
/academy/[localization]. - Acceso en UI: página principal de Academy.
- Componente(s): página de Academy.
Como funciona
- Abrir Academy con la localización deseada.
- Revisar los cursos publicados.
- Seleccionar un curso para abrir su detalle.
Reglas y validaciones
- La ruta incluye la localización del contenido.
Backend
- Servicios:
academy-courses(find/get),academy-categories(find).
Relaciones
- Requiere: cursos y categorías.
- Dispara / afecta: navegación al detalle de curso.
Notas
- Por confirmar: filtros y criterios de visibilidad del catálogo.
id: lesson-progress modulo: academy app: plataforma nombre: Registrar progreso de lecciones tipo: automatizacion
Registrar progreso de lecciones
Conserva el avance del usuario sobre las lecciones para reflejar su progreso formativo.
Que se logra
- Resultado: Academy conserva el avance individual de cada estudiante por lección.
- Caso de uso: un equipo distribuido puede retomar su formación y ver qué lecciones ya ha recorrido.
- Se combina con: cursos y lecciones de Academy.
Donde esta
- Ruta:
/academy/[localization]/course/[courseId]/lesson/[lessonId]. - Acceso en UI: al consumir una lección.
- Componente(s): página de lección.
Como funciona
- Abrir una lección.
- Interactuar con el contenido.
- El avance se registra para el usuario.
Reglas y validaciones
- Por confirmar: condición exacta que marca una lección como completada.
Backend
- Servicios:
academy-lesson-progress(find/create/patch).
Relaciones
- Requiere: usuario y lección.
- Dispara / afecta: progreso mostrado en Academy.
Notas
- El código confirma el servicio de progreso, no el criterio visual exacto de finalización.
id: lessons modulo: academy app: plataforma nombre: Consumir lecciones tipo: vista
Consumir lecciones
Permite abrir la estructura de un curso, navegar por sus lecciones y consultar una lección individual.
Que se logra
- Resultado: el estudiante recorre contenido organizado por cursos y lecciones.
- Caso de uso: un agente nuevo sigue las lecciones de un curso para aprender el proceso de atención de su empresa.
- Se combina con: catálogo de cursos y registro de progreso.
Donde esta
- Ruta:
/academy/[localization]/course/[courseId]y/academy/[localization]/course/[courseId]/lesson/[lessonId]. - Acceso en UI:
Academy > curso > lección. - Componente(s): páginas de curso y lección.
Como funciona
- Abrir un curso del catálogo.
- Revisar las lecciones disponibles.
- Elegir una lección para abrir su contenido.
- Volver al curso para continuar la navegación.
Reglas y validaciones
- La lección se resuelve dentro del curso y de la localización de la ruta.
Backend
- Servicios:
academy-courses,academy-chapters,academy-lessons(find/get).
Relaciones
- Requiere: curso, capítulos y lecciones publicados.
- Dispara / afecta: progreso de lección.
Notas
- También existe una ruta de lección fuera del detalle de curso.
id: ads app: plataforma nombre: Ads estado: shipped permiso: owner o admin de la organización
Ads
Integra Meta Lead Ads y conversiones de CRM para optimización de campañas.
Para que sirve
- Una inmobiliaria recibe leads de formularios de Meta y los crea como contactos con la información mapeada.
- Un centro educativo distribuye los registros de campañas a asesores y dispara seguimientos automáticos.
- Un ecommerce devuelve conversiones del CRM a Meta para relacionar campañas con resultados comerciales.
Que lo hace diferente
- Integra Lead Ads, el mapeo hacia contactos, la distribución de propietarios y automatizaciones dentro del mismo CRM.
- La configuración de Meta Conversions permite mapear etapas estándar o personalizadas para flujos de Click-to-WhatsApp y Lead Ads.
- Mantiene historial de leads y conversiones para revisar atribución y enviar eventos de conversión manualmente cuando corresponde.
Acceso
- Ruta principal:
/[orgId]/settings - Como se llega:
Avatar menu > Settings - Permiso requerido: owner o admin de la organización
Alcance tecnico
- Frontend: rutas de Settings y My Profile relacionadas
- Backend: servicios Feathers de este módulo
- Superficies publicas: no aplica salvo integraciones de terceros
- Integraciones externas: Stripe, Google, Microsoft, Wise, Meta, S3 o proveedores de voz según la funcionalidad
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Conexión de Meta Lead Ads | lead-ads-connection.md | Conecta cuentas y páginas de Meta para recibir envíos de formularios Instant Form. |
| Formularios y mapeo de leads | lead-ads-forms.md | Configura la recepción de formularios y el mapeo de respuestas hacia contactos. |
| Distribución y automatización de leads | lead-distribution.md | Distribuye propietarios según reglas configuradas y puede disparar automatizaciones. |
| Leads y campañas de Meta | lead-ads-history.md | Consulta leads sincronizados, detalle por página y el resumen de campañas de solo lectura. |
| Configuración de Meta Conversions | meta-conversions.md | Configura dataset, eventos, pruebas de conexión y mapeo de etapas estándar o personalizadas para WhatsApp y Lead Ads. |
| Historial de conversiones Meta | conversion-history.md | Filtra contactos atribuidos por Click-to-WhatsApp o Lead Ads y permite enviar manualmente eventos de conversión. |
Relaciones
- Depende de: organizaciones, miembros y autenticación.
- Usado por: CRM, automatizaciones y las integraciones descritas.
Limitaciones y notas
- Se documenta únicamente el comportamiento confirmado en frontend, servicios y hooks revisados.
id: conversion-history modulo: ads app: plataforma nombre: Historial de conversiones Meta tipo: vista
Historial de conversiones Meta
Filtra contactos atribuidos por Click-to-WhatsApp o Lead Ads y permite enviar manualmente eventos de conversión.
Que se logra
- Resultado: El equipo revisa contactos atribuidos y puede enviar conversiones manuales cuando aplica.
- Caso de uso: Una agencia valida conversiones de una campaña Click-to-WhatsApp antes de optimizarla.
- Se combina con: Contactos, conversaciones, automatizaciones y conversiones Meta.
Donde esta
- Ruta:
/[orgId]/settings/meta-conversions/history - Acceso en UI:
Meta Conversions >View history`` - Componente(s):
ConversionHistoryPage.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- La columna de eventos muestra los envíos ya registrados.
Backend
- Servicios:
meta-conversions - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: lead-ads-connection modulo: ads app: plataforma nombre: Conexión de Meta Lead Ads tipo: integracion
Conexión de Meta Lead Ads
Conecta cuentas y páginas de Meta para recibir envíos de formularios Instant Form.
Que se logra
- Resultado: Apex recibe los envíos de formularios Instant Form de las cuentas y páginas conectadas.
- Caso de uso: Una inmobiliaria centraliza en el CRM los interesados captados desde Meta.
- Se combina con: Contactos, conversaciones, automatizaciones y conversiones Meta.
Donde esta
- Ruta:
/[orgId]/settings/facebook-ads - Acceso en UI:
Settings > Channels > Meta Lead Ads - Componente(s):
FacebookAdsSettings.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- No permite crear, editar ni pausar anuncios; eso se gestiona en Meta Ads Manager.
Backend
- Servicios:
facebook-ads-connections - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: lead-ads-forms modulo: ads app: plataforma nombre: Formularios y mapeo de leads tipo: configuracion
Formularios y mapeo de leads
Configura la recepción de formularios y el mapeo de respuestas hacia contactos.
Que se logra
- Resultado: Las respuestas de formularios se traducen a información útil de contactos.
- Caso de uso: Una universidad mapea programa, ciudad y teléfono del aspirante a su ficha de CRM.
- Se combina con: Contactos, conversaciones, automatizaciones y conversiones Meta.
Donde esta
- Ruta:
/[orgId]/settings/facebook-ads - Acceso en UI:
Meta Lead Ads > página conectada - Componente(s):
FacebookAdsConnectionsList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Al llegar un lead se crea o actualiza el contacto con atribución de Facebook Lead.
Backend
- Servicios:
facebook-ads-forms, facebook-ads-leads - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: lead-ads-history modulo: ads app: plataforma nombre: Leads y campañas de Meta tipo: vista
Leads y campañas de Meta
Consulta leads sincronizados, detalle por página y el resumen de campañas de solo lectura.
Que se logra
- Resultado: El equipo consulta los leads sincronizados y el resumen disponible de campañas.
- Caso de uso: Marketing revisa qué formularios trajeron prospectos a ventas.
- Se combina con: Contactos, conversaciones, automatizaciones y conversiones Meta.
Donde esta
- Ruta:
/[orgId]/settings/facebook-ads/leads - Acceso en UI:
Meta Lead Ads >View LeadsoCampaigns`` - Componente(s):
FacebookAdsLeadsTableView.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Las campañas no se gestionan desde AchieveApex.
Backend
- Servicios:
facebook-ads-leads, facebook-ads-campaigns - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: lead-distribution modulo: ads app: plataforma nombre: Distribución y automatización de leads tipo: automatizacion
Distribución y automatización de leads
Distribuye propietarios según reglas configuradas y puede disparar automatizaciones.
Que se logra
- Resultado: Los leads entrantes se asignan a propietarios y pueden iniciar automatizaciones.
- Caso de uso: Un concesionario reparte solicitudes entre asesores y dispara el primer seguimiento.
- Se combina con: Contactos, conversaciones, automatizaciones y conversiones Meta.
Donde esta
- Ruta:
/[orgId]/settings/facebook-ads - Acceso en UI:
Meta Lead Ads > configuración de página - Componente(s):
FacebookAdsSettings.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Una persona referenciada por distribución de Lead Ads bloquea su remoción del equipo.
Backend
- Servicios:
facebook-ads-leads, conversations-auto-assignment-rules - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: meta-conversions modulo: ads app: plataforma nombre: Configuración de Meta Conversions tipo: configuracion
Configuración de Meta Conversions
Configura dataset, eventos, pruebas de conexión y mapeo de etapas estándar o personalizadas para WhatsApp y Lead Ads.
Que se logra
- Resultado: Los eventos de conversión del CRM se configuran contra el dataset y las etapas elegidas.
- Caso de uso: Un ecommerce devuelve a Meta el avance comercial de contactos provenientes de anuncios.
- Se combina con: Contactos, conversaciones, automatizaciones y conversiones Meta.
Donde esta
- Ruta:
/[orgId]/settings/meta-conversions - Acceso en UI:
Settings > Channels > Meta Conversions - Componente(s):
MetaConversionsSettings.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Los eventos se envían a Meta para optimización de campañas.
Backend
- Servicios:
meta-capi-configs, meta-conversions - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: ai-voices app: plataforma nombre: Voces de IA estado: shipped permiso: owner o admin de la organización
Voces de IA
Catálogo de voces, síntesis de audio y biblioteca de la organización.
Para que sirve
- Una tienda genera anuncios de audio con una voz elegida y los conserva organizados para reutilizarlos.
- Un equipo de soporte envía respuestas de audio por WhatsApp, Instagram, Messenger o Webchat desde una conversación.
- Una empresa configura un asistente para responder con audio cuando la intención de la conversación lo requiere.
Que lo hace diferente
- Reúne marketplace, biblioteca por organización, síntesis y archivos de audio en el mismo entorno de conversaciones y asistentes IA.
- La síntesis se cobra por wallet según el uso real reportado por el proveedor; las previsualizaciones de catálogo no consumen saldo.
- El asistente puede listar voces guardadas y sintetizar respuestas de audio; el audio se incorpora al canal desde el servidor.
- La pestaña de clonación existe como
Coming Soon; el código actual no implementa todavía un flujo operativo de clonación.
Acceso
- Ruta principal:
/[orgId]/settings - Como se llega:
Avatar menu > Settings - Permiso requerido: owner o admin de la organización
Alcance tecnico
- Frontend: rutas de Settings y My Profile relacionadas
- Backend: servicios Feathers de este módulo
- Superficies publicas: no aplica salvo integraciones de terceros
- Integraciones externas: Stripe, Google, Microsoft, Wise, Meta, S3 o proveedores de voz según la funcionalidad
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Marketplace de voces | voice-marketplace.md | Busca, filtra, ordena, previsualiza y agrega voces del catálogo a la biblioteca. |
| Biblioteca de voces | saved-voices.md | Administra voces guardadas y abre la generación de audio desde cada voz. |
| Generación de audio | voice-generation.md | Convierte texto a voz con voz y modelo seleccionados y guarda el resultado. |
| Carpetas de generaciones | voice-collections.md | Crea, renombra, elimina y organiza generaciones por carpetas. |
| Audio de voz en conversaciones | voice-conversation-audio.md | Envía una generación guardada o crea audio nuevo para WhatsApp, Instagram, Messenger y Webchat. |
| Voces desde asistentes IA | assistant-voice-tools.md | Permite al asistente listar voces guardadas y sintetizar audio para respuestas. |
| Clonación de voz | voice-cloning.md | Presenta la pestaña de clonación como Coming Soon. |
Relaciones
- Depende de: organizaciones, miembros y autenticación.
- Usado por: CRM, automatizaciones y las integraciones descritas.
Limitaciones y notas
- Se documenta únicamente el comportamiento confirmado en frontend, servicios y hooks revisados.
id: assistant-voice-tools modulo: ai-voices app: plataforma nombre: Voces desde asistentes IA tipo: integracion
Voces desde asistentes IA
Permite al asistente listar voces guardadas y sintetizar audio para respuestas.
Que se logra
- Resultado: Un asistente IA autorizado puede elegir voces guardadas y responder con audio sintetizado.
- Caso de uso: Un negocio ofrece respuestas de voz automáticas para consultas repetitivas.
- Se combina con: Conversaciones y asistentes IA.
Donde esta
- Ruta:
/[orgId]/ai-assistant - Acceso en UI:
AI Assistant > Tools > Internal - Componente(s):
AssistantSettingsForm.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Requiere habilitar
Can send audio, herramientas internas y saldo de wallet; el audio bajo demanda no se guarda en generaciones.
Backend
- Servicios:
organization-ai-voices, ai-voice-synthesize - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: saved-voices modulo: ai-voices app: plataforma nombre: Biblioteca de voces tipo: configuracion
Biblioteca de voces
Administra voces guardadas y abre la generación de audio desde cada voz.
Que se logra
- Resultado: Las voces disponibles para la organización se mantienen listas para generar audio.
- Caso de uso: Un equipo de soporte reutiliza su voz aprobada en distintos mensajes.
- Se combina con: Conversaciones y asistentes IA.
Donde esta
- Ruta:
/[orgId]/settings/ai-voices/my-voices - Acceso en UI:
AI Voices > My Voices - Componente(s):
OrganizationAiVoicesList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Guardar una voz es un marcador local y no elimina generaciones al quitarla.
Backend
- Servicios:
organization-ai-voices - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: voice-cloning modulo: ai-voices app: plataforma nombre: Clonación de voz tipo: vista
Clonación de voz
Presenta la pestaña de clonación como Coming Soon.
Que se logra
- Resultado: La interfaz comunica que la clonación de voz está prevista, sin habilitar aún una operación.
- Caso de uso: Una productora identifica el lugar donde se ofrecerá esa capacidad cuando esté disponible.
Donde esta
- Ruta:
/[orgId]/settings/ai-voices/clone - Acceso en UI:
AI Voices > Clone Voice - Componente(s):
CloneVoicePage.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- No existe un flujo operativo de clonación en el código revisado; la pestaña solo muestra
Coming Soon.
Backend
- Servicios:
ninguno - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: voice-collections modulo: ai-voices app: plataforma nombre: Carpetas de generaciones tipo: configuracion
Carpetas de generaciones
Crea, renombra, elimina y organiza generaciones por carpetas.
Que se logra
- Resultado: Las generaciones se organizan por carpetas para encontrarlas en la operación.
- Caso de uso: Una agencia separa locuciones de campañas, soporte y anuncios.
- Se combina con: Conversaciones y asistentes IA.
Donde esta
- Ruta:
/[orgId]/settings/ai-voices/generations - Acceso en UI:
Generations > sidebar de folders - Componente(s):
AiVoiceGenerationsList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Al eliminar una carpeta, sus generaciones quedan como
Uncategorized.
Backend
- Servicios:
ai-voice-collections - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: voice-conversation-audio modulo: ai-voices app: plataforma nombre: Audio de voz en conversaciones tipo: integracion
Audio de voz en conversaciones
Envía una generación guardada o crea audio nuevo para WhatsApp, Instagram, Messenger y Webchat.
Que se logra
- Resultado: Un audio generado se envía a los canales de conversación que admiten audio.
- Caso de uso: Una tienda responde por WhatsApp con una guía de compra hablada.
- Se combina con: Conversaciones y asistentes IA.
Donde esta
- Ruta:
/[orgId]/conversations - Acceso en UI:
Conversation composer > botón de audio IA - Componente(s):
AiVoiceGenerationPicker.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- La creación desde el compositor puede no guardarse, pero se cobra; el archivo se copia en servidor al adjuntarlo.
Backend
- Servicios:
ai-voice-synthesize, conversation-files - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: voice-generation modulo: ai-voices app: plataforma nombre: Generación de audio tipo: accion
Generación de audio
Convierte texto a voz con voz y modelo seleccionados y guarda el resultado.
Que se logra
- Resultado: Un texto se convierte en un archivo de audio que puede conservarse y reutilizarse.
- Caso de uso: Una inmobiliaria crea una explicación de visita para enviarla a prospectos.
- Se combina con: Conversaciones y asistentes IA.
Donde esta
- Ruta:
/[orgId]/settings/ai-voices/generations - Acceso en UI:
AI Voices > Generations >Generate audio`` - Componente(s):
AiVoiceGenerateDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Consume wallet; el costo no se presenta en la UI y las generaciones de Settings siempre se guardan.
Backend
- Servicios:
ai-voice-synthesize, ai-voice-generations - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: voice-marketplace modulo: ai-voices app: plataforma nombre: Marketplace de voces tipo: vista
Marketplace de voces
Busca, filtra, ordena, previsualiza y agrega voces del catálogo a la biblioteca.
Que se logra
- Resultado: El equipo descubre voces y añade las que necesita a su biblioteca de organización.
- Caso de uso: Una marca de ecommerce selecciona una voz en español para sus comunicaciones de audio.
- Se combina con: Conversaciones y asistentes IA.
Donde esta
- Ruta:
/[orgId]/settings/ai-voices/marketplace - Acceso en UI:
Settings > AI Voices > Marketplace - Componente(s):
AiVoiceMarketplace.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- La previsualización de catálogo es gratis. El filtro de acento aparece tras elegir idioma.
Backend
- Servicios:
ai-voice-marketplace - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: api-docs app: plataforma nombre: API Docs estado: shipped permiso: ninguno
API Docs
Sitio público para descubrir la referencia REST, la autenticación, códigos de error y tutoriales de producto.
Para que sirve
- Un integrador revisa las operaciones REST disponibles para conectar su sistema con Apex.
- Un desarrollador configura autenticación mediante API key antes de automatizar operaciones.
- Un equipo técnico interpreta un error de WhatsApp recibido durante una integración.
- Un partner aprende flujos de contactos, deals, productos o tickets desde tutoriales públicos.
Que lo hace diferente
- Documenta recursos de negocio de Apex —incluidos reservas y asistentes— además de la autenticación técnica.
- Incluye conexiones de herramientas MCP que pueden adjuntarse a asistentes.
- Distingue la referencia REST de tutoriales de uso y de los códigos específicos de WhatsApp.
Acceso
- Ruta principal:
/docs. - Como se llega: navegación pública de documentación.
- Permiso requerido: ninguno.
Alcance tecnico
- Frontend:
src/app/(docs)/docs/**ycomponents/docs/sidebar.tsx. - Superficies publicas:
/docs,/docs/api-reference,/docs/tutorialsy/docs/error-codes.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Navegar la referencia REST | api-reference.md | Recursos y operaciones agrupadas. |
| Autenticarse con API key | authentication.md | Guía de autenticación de la API. |
| Consultar códigos de error | error-codes.md | Referencia de errores, incluida WhatsApp. |
| Aprender con tutoriales | tutorials.md | Guías de uso de producto. |
Relaciones
- Depende de: páginas de documentación pública.
- Usado por: desarrolladores e integradores.
Limitaciones y notas
- La referencia expone REST; no es documentación de uso interno de servicios Feathers.
id: api-reference modulo: api-docs app: plataforma nombre: Navegar la referencia REST tipo: publico
Navegar la referencia REST
Organiza la documentación por recurso y muestra las operaciones disponibles con su método HTTP.
Que se logra
- Resultado: un integrador identifica qué operaciones REST usar para conectar recursos de Apex.
- Caso de uso: un sistema de reservas consulta la referencia para sincronizar servicios o disponibilidad.
- Se combina con: autenticación, códigos de error y conexiones MCP.
Donde esta
- Ruta:
/docs/api-reference. - Acceso en UI:
Docs > API Reference. - Componente(s):
sidebar.tsx.
Como funciona
- Abrir una categoría de recurso en la barra lateral.
- Elegir la vista general o una operación.
- Revisar el método mostrado como
GET,POST,PATCHoDELETE.
Reglas y validaciones
- La navegación incluye recursos como contactos, compañías, conversaciones, deals, productos, reservas, asistentes y organizaciones.
Backend
- Servicios: las rutas REST documentadas por cada página.
Relaciones
- Requiere: autenticación cuando la operación lo exige.
- Dispara / afecta: integración por API externa.
Notas
- La estructura de navegación está definida estáticamente en la barra lateral.
id: authentication modulo: api-docs app: plataforma nombre: Autenticarse con API key tipo: publico
Autenticarse con API key
Explica la autenticación requerida para consumir la API REST de AchieveApex.
Que se logra
- Resultado: una aplicación externa puede autenticarse para operar recursos autorizados de una organización.
- Caso de uso: una empresa conecta su sistema interno para consultar contactos y crear deals con una API key.
- Se combina con: referencia REST y permisos de la organización.
Donde esta
- Ruta:
/docs/api-reference/authentication. - Acceso en UI:
Docs > API Reference > Authentication. - Componente(s): página de autenticación.
Como funciona
- Abrir la guía de
Authentication. - Generar u obtener una API key desde la configuración correspondiente.
- Incluir la key en las solicitudes REST según la guía.
Reglas y validaciones
- Las operaciones documentadas respetan los permisos de la identidad o contexto asociado.
Backend
- Servicios: autenticación y servicios REST protegidos.
Relaciones
- Requiere: API key válida.
- Dispara / afecta: acceso programático a recursos de la organización.
Notas
- Por confirmar: interfaz exacta de generación de la API key enlazada desde esta página.
id: error-codes modulo: api-docs app: plataforma nombre: Consultar códigos de error tipo: publico
Consultar códigos de error
Agrupa códigos de error conocidos para ayudar a diagnosticar integraciones, con una sección dedicada a WhatsApp.
Que se logra
- Resultado: un equipo técnico traduce un código recibido en una causa y un punto de diagnóstico.
- Caso de uso: una empresa que integra WhatsApp identifica un error de Meta y decide qué revisar en su configuración.
- Se combina con: referencia REST y tutoriales.
Donde esta
- Ruta:
/docs/error-codesy/docs/error-codes/whatsapp. - Acceso en UI:
Docs > Error Codes. - Componente(s):
sidebar.tsx.
Como funciona
- Abrir
Error Codes. - Elegir
WhatsAppcuando el error corresponde a ese canal. - Abrir el código concreto para revisar su descripción.
Reglas y validaciones
- La barra lateral incluye códigos de WhatsApp como
130403,130472,131026y131050.
Backend
- Servicios: no aplica; es documentación pública.
Relaciones
- Requiere: conocer el código recibido.
- Dispara / afecta: diagnóstico operativo de integraciones.
Notas
- La lista concreta puede evolucionar con los códigos de Meta.
id: tutorials modulo: api-docs app: plataforma nombre: Aprender con tutoriales tipo: publico
Aprender con tutoriales
Ofrece guías paso a paso de funcionalidades de plataforma, separadas de la referencia técnica de API.
Que se logra
- Resultado: un usuario o partner aprende flujos de producto antes de configurarlos en una organización.
- Caso de uso: un implementador sigue un tutorial de contactos y deals para preparar una demostración comercial.
- Se combina con: referencia REST, autenticación y documentación de códigos de error.
Donde esta
- Ruta:
/docs/tutorials. - Acceso en UI:
Docs > Tutorials. - Componente(s):
sidebar.tsx.
Como funciona
- Abrir una categoría de tutoriales.
- Seleccionar una guía.
- Seguir el flujo descrito en la página.
Reglas y validaciones
- Hay categorías para canales, contactos, deals, productos y tickets, además de
Quick Start.
Backend
- Servicios: no aplica; es documentación pública.
Relaciones
- Requiere: ninguna autenticación para lectura.
- Dispara / afecta: adopción de funcionalidades del producto.
Notas
- Los tutoriales documentan uso de producto, no contratos REST.
id: billing-wallet app: plataforma nombre: Billing y wallet estado: shipped permiso: owner o admin de la organización
Billing y wallet
Administra la suscripción de Stripe, pagos y saldo prepago para consumo.
Para que sirve
- Una agencia contrata un plan y conserva el saldo para el consumo variable de sus clientes sin mezclar ambos cobros.
- Un contact center mantiene continuidad en mensajería, IA y voz recargando saldo cuando llega a un umbral definido.
- Un negocio revisa créditos, débitos y consumo diario para explicar el gasto operativo de la cuenta.
- Un administrador recibe alertas cuando falla el cobro del plan o de un reintento de Stripe.
Que lo hace diferente
- Separa el plan recurrente de Stripe del wallet prepago: el wallet registra recargas y consumos variables de asistentes y herramientas de IA, síntesis de voz, transcripción y grabación de reuniones, envíos masivos de correo, búsqueda de productos, generación de contenido y trámites 10DLC.
- La auto-recarga se programa por saldo mínimo y monto; límites móviles de 24 horas y 30 días pueden desactivarla después de una recarga pagada, conservando el motivo.
- Las notificaciones de cobro fallido alcanzan a owners y admins de cliente, sin afectar el estado por la mera notificación.
Acceso
- Ruta principal:
/[orgId]/settings - Como se llega:
Avatar menu > Settings - Permiso requerido: owner o admin de la organización
Alcance tecnico
- Frontend: rutas de Settings y My Profile relacionadas
- Backend: servicios Feathers de este módulo
- Superficies publicas: no aplica salvo integraciones de terceros
- Integraciones externas: Stripe, Google, Microsoft, Wise, Meta, S3 o proveedores de voz según la funcionalidad
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Plan de suscripción | subscription-plan.md | Muestra el plan y complementos recurrentes, con acceso a cambio de plan. |
| Checkout de Stripe | stripe-checkout.md | Inicia el checkout de Stripe para contratar o cambiar la suscripción. |
| Cambio de plan | plan-changes.md | Permite actualizar o reducir el plan y compara las opciones disponibles. |
| Cancelación de suscripción | subscription-cancellation.md | Solicita la cancelación de la suscripción de la organización. |
| Facturas de Stripe | billing-invoices.md | Lista el historial de facturas de Stripe cuando existe cliente de Stripe. |
| Recarga de wallet | wallet-recharge.md | Añade fondos prepagos al wallet mediante Stripe. |
| Auto-recarga de wallet | wallet-auto-recharge.md | Configura el umbral y monto para recargar automáticamente cuando el saldo baja. |
| Protecciones de auto-recarga | wallet-safeguards.md | Desactiva futuras auto-recargas anómalas y muestra el motivo al superar los límites móviles de 24 horas o 30 días. |
| Uso de wallet | wallet-usage.md | Muestra el consumo por día y concepto, respetando la zona horaria de la organización. |
| Transacciones de wallet | wallet-transactions.md | Consulta créditos, débitos y referencias de movimientos de saldo. |
| Notificaciones de cobro fallido | billing-notifications.md | Envía email a owners y admins de cliente cuando falla el cobro del plan o un reintento. |
Relaciones
- Depende de: organizaciones, miembros y autenticación.
- Usado por: CRM, automatizaciones y las integraciones descritas.
Limitaciones y notas
- Se documenta únicamente el comportamiento confirmado en frontend, servicios y hooks revisados.
id: billing-invoices modulo: billing-wallet app: plataforma nombre: Facturas de Stripe tipo: vista
Facturas de Stripe
Lista el historial de facturas de Stripe cuando existe cliente de Stripe.
Que se logra
- Resultado: El responsable consulta las facturas emitidas por Stripe.
- Caso de uso: Finanzas descarga el historial para conciliación mensual.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing >Invoices`` - Componente(s):
BillingInvoices.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- No aparece si la organización no tiene cliente asociado.
Backend
- Servicios:
stripe - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: billing-notifications modulo: billing-wallet app: plataforma nombre: Notificaciones de cobro fallido tipo: automatizacion
Notificaciones de cobro fallido
Envía email a owners y admins de cliente cuando falla el cobro del plan o un reintento.
Que se logra
- Resultado: Owners y admins reciben aviso cuando falla el cobro del plan o un reintento.
- Caso de uso: Una pyme corrige una tarjeta antes de que el estado de su suscripción afecte su servicio.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Automática, desde Stripe - Componente(s):
BillingPlan.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- No avisa por complementos de teléfonos/10DLC y no modifica la suscripción desde la ruta de notificación.
Backend
- Servicios:
stripe-webhooks - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: plan-changes modulo: billing-wallet app: plataforma nombre: Cambio de plan tipo: accion
Cambio de plan
Permite actualizar o reducir el plan y compara las opciones disponibles.
Que se logra
- Resultado: El responsable puede seleccionar una alternativa de plan acorde con la operación.
- Caso de uso: Un negocio estacional ajusta su plan después de una campaña.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing >Change plan`` - Componente(s):
PlanComparison.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Free admite 1 asiento, o 2 con partner; Basic 2; Pro y Enterprise no tienen límite.
Backend
- Servicios:
stripe, organizations - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: stripe-checkout modulo: billing-wallet app: plataforma nombre: Checkout de Stripe tipo: integracion
Checkout de Stripe
Inicia el checkout de Stripe para contratar o cambiar la suscripción.
Que se logra
- Resultado: La contratación o cambio de suscripción se completa en el checkout seguro de Stripe.
- Caso de uso: Una empresa pasa a un plan superior al incorporar nuevos equipos.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing > elegir plan - Componente(s):
BillingPlan.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- El retorno válido requiere una sesión de Stripe.
Backend
- Servicios:
stripe - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: subscription-cancellation modulo: billing-wallet app: plataforma nombre: Cancelación de suscripción tipo: accion
Cancelación de suscripción
Solicita la cancelación de la suscripción de la organización.
Que se logra
- Resultado: La organización puede solicitar la cancelación de su suscripción.
- Caso de uso: Una compañía que deja de operar centraliza el cierre de su plan.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing > gestión de suscripción - Componente(s):
BillingPlan.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Una suscripción activa impide eliminar la organización.
Backend
- Servicios:
stripe - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: subscription-plan modulo: billing-wallet app: plataforma nombre: Plan de suscripción tipo: vista
Plan de suscripción
Muestra el plan y complementos recurrentes, con acceso a cambio de plan.
Que se logra
- Resultado: La organización visualiza su plan y complementos recurrentes para administrar su capacidad contratada.
- Caso de uso: Una agencia revisa el plan de cada cliente antes de ampliar su operación.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Settings > Billing & Subscription >Subscription Plan`` - Componente(s):
BillingPlan.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- La reducción se bloquea si los miembros activos exceden el límite del plan destino.
Backend
- Servicios:
stripe - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: wallet-auto-recharge modulo: billing-wallet app: plataforma nombre: Auto-recarga de wallet tipo: configuracion
Auto-recarga de wallet
Configura el umbral y monto para recargar automáticamente cuando el saldo baja.
Que se logra
- Resultado: El wallet se repone automáticamente cuando el saldo baja del umbral configurado.
- Caso de uso: Una tienda evita interrumpir respuestas automatizadas durante horas no laborales.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing > Wallet > configuración de auto-recarga - Componente(s):
BillingWallet.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- El umbral minimo es $5 USD.
- El umbral no puede estar por debajo del consumo diario promedio de los ultimos 5 dias.
- El monto de recarga debe ser mayor que el umbral.
Backend
- Servicios:
organizations, organization-wallet-usage, wallet-auto-recharge-webhook - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: wallet-recharge modulo: billing-wallet app: plataforma nombre: Recarga de wallet tipo: accion
Recarga de wallet
Añade fondos prepagos al wallet mediante Stripe.
Que se logra
- Resultado: El saldo prepago queda disponible para consumos variables después del pago por Stripe.
- Caso de uso: Un contact center añade saldo antes de una campaña de mensajería e IA.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing > Wallet >Add Funds`` - Componente(s):
AddFundsDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- La recarga genera una transacción de wallet.
Backend
- Servicios:
stripe, organization-wallet-transactions - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: wallet-safeguards modulo: billing-wallet app: plataforma nombre: Protecciones de auto-recarga tipo: automatizacion
Protecciones de auto-recarga
Desactiva futuras auto-recargas anómalas y muestra el motivo al superar los límites móviles de 24 horas o 30 días.
Que se logra
- Resultado: Las recargas futuras se detienen ante un patrón anómalo y se muestra la causa.
- Caso de uso: Un administrador detecta un ciclo de consumo antes de que siga generando recargas.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing > Wallet - Componente(s):
BillingWallet.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- La recarga ya pagada se conserva; las recargas manuales también cuentan. Rehabilitar no borra el historial.
Backend
- Servicios:
organization-wallet-transactions, wallet-auto-recharge-webhook - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: wallet-transactions modulo: billing-wallet app: plataforma nombre: Transacciones de wallet tipo: vista
Transacciones de wallet
Consulta créditos, débitos y referencias de movimientos de saldo.
Que se logra
- Resultado: Créditos y débitos quedan disponibles para auditar el saldo.
- Caso de uso: Finanzas explica una variación de saldo con sus referencias de movimiento.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing > Wallet - Componente(s):
BillingWallet.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Los movimientos reflejan recargas y consumos de la organización.
Backend
- Servicios:
organization-wallet-transactions - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: wallet-usage modulo: billing-wallet app: plataforma nombre: Uso de wallet tipo: vista
Uso de wallet
Muestra el consumo por día y concepto, respetando la zona horaria de la organización.
Que se logra
- Resultado: El negocio observa el consumo de saldo por día y concepto en su propia zona horaria.
- Caso de uso: Una agencia compara el uso de IA y mensajería entre periodos de campaña.
- Se combina con: Suscripción, asistentes IA, voces de IA y mensajería.
Donde esta
- Ruta:
/[orgId]/settings/billing - Acceso en UI:
Billing > Wallet - Componente(s):
WalletUsageGraph.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Incluye costos como generaciones de voz y servicios que consumen saldo.
Backend
- Servicios:
organization-wallet-usage - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: community app: plataforma nombre: Community estado: shipped permiso: Por confirmar
Community
Espacio público de producto para compartir ideas, seguir el roadmap y leer anuncios.
Para que sirve
- Clientes de software proponen mejoras concretas desde una comunidad pública.
- Equipos de producto identifican interés mediante votos y comentarios sobre una idea.
- Un prospecto revisa iniciativas y anuncios para entender la evolución del producto.
Que lo hace diferente
- Reúne propuestas, votos, comentarios, roadmap y anuncios en una superficie pública de producto.
- Separa los anuncios de novedades de las alertas operativas mostradas dentro de la aplicación autenticada.
- Vincula la conversación de una idea con su detalle público, en vez de limitarse a un formulario de sugerencias.
Acceso
- Ruta principal:
/community. - Como se llega: navegación pública de Community.
- Permiso requerido: Por confirmar según la acción.
Alcance tecnico
- Frontend: rutas
/community, ideas, roadmap y announcements. - Backend: servicios community de ideas, votos, comentarios y
community-announcements. - Superficies publicas: rutas Community.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Explorar ideas | ideas.md | Lista y detalle de ideas. |
| Proponer una idea | submit-idea.md | Formulario de contribución. |
| Votar y comentar | idea-engagement.md | Participación sobre una idea. |
| Consultar roadmap | roadmap.md | Estado de iniciativas de producto. |
| Leer anuncios | announcements.md | Novedades de Community. |
Relaciones
- Depende de: servicios Community y anuncios.
- Usado por: comunidad y visitantes autorizados.
Limitaciones y notas
- Por confirmar: requisitos de autenticación para votar y comentar.
id: announcements modulo: community app: plataforma nombre: Leer anuncios de Community tipo: vista
Leer anuncios de Community
Presenta los anuncios de producto publicados para la comunidad.
Que se logra
- Resultado: la comunidad consulta novedades de producto en una página pública y permanente.
- Caso de uso: una agencia revisa los anuncios para conocer una función nueva antes de recomendarla a sus clientes.
- Se combina con: roadmap e ideas de Community.
Donde esta
- Ruta:
/community/announcements. - Acceso en UI:
Community > Announcements. - Componente(s): página de anuncios.
Como funciona
- Abrir
Announcements. - Consultar los anuncios disponibles.
Reglas y validaciones
- Por confirmar: criterios de publicación, fijación y archivo.
Backend
- Servicios:
community-announcements(find/get).
Relaciones
- Requiere: anuncios publicados.
- Dispara / afecta: comunicación de novedades de plataforma.
Notas
- Los anuncios de Community son distintos de los banners de alerta autenticados.
id: idea-engagement modulo: community app: plataforma nombre: Votar y comentar ideas tipo: accion
Votar y comentar ideas
Permite interactuar con una propuesta desde su página de detalle mediante votos y comentarios.
Que se logra
- Resultado: la comunidad expresa interés y aporta contexto sobre una propuesta concreta.
- Caso de uso: varios administradores votan una mejora de reservas y explican en comentarios cómo afectaría su operación.
- Se combina con: exploración y envío de ideas.
Donde esta
- Ruta:
/community/ideas/[id]. - Acceso en UI:
Community > Ideas > idea. - Componente(s): página de detalle de idea.
Como funciona
- Abrir una idea.
- Emitir o retirar un voto según las opciones disponibles.
- Escribir y publicar un comentario.
Reglas y validaciones
- Por confirmar: requisitos de sesión, edición y eliminación de comentarios.
Backend
- Servicios: servicios Community de votos y comentarios.
Relaciones
- Requiere: una idea existente.
- Dispara / afecta: prioridad social y discusión de la propuesta.
Notas
- Los nombres exactos de los servicios no se confirman en el alcance inspeccionado.
id: ideas modulo: community app: plataforma nombre: Explorar ideas tipo: vista
Explorar ideas
Muestra las ideas de la comunidad y permite abrir el detalle de una propuesta.
Que se logra
- Resultado: los visitantes encuentran propuestas de mejora y su discusión asociada.
- Caso de uso: un cliente de una plataforma B2B revisa si una necesidad ya fue propuesta antes de crear una nueva idea.
- Se combina con: envío de ideas, votos y comentarios.
Donde esta
- Ruta:
/community/ideasy/community/ideas/[id]. - Acceso en UI:
Community > Ideas. - Componente(s): páginas de ideas.
Como funciona
- Abrir
Ideas. - Revisar las propuestas listadas.
- Seleccionar una idea para abrir su detalle.
Reglas y validaciones
- Por confirmar: filtros, orden y visibilidad de estados.
Backend
- Servicios: servicios Community de ideas (find/get).
Relaciones
- Requiere: ideas publicadas.
- Dispara / afecta: voto y comentarios de idea.
Notas
- La idea usa un identificador dinámico en la ruta.
id: roadmap modulo: community app: plataforma nombre: Consultar roadmap tipo: vista
Consultar roadmap
Presenta la página pública del roadmap de producto.
Que se logra
- Resultado: los clientes pueden consultar las iniciativas de producto visibles y su estado.
- Caso de uso: un comprador de software revisa el roadmap para evaluar si una capacidad relevante está contemplada.
- Se combina con: ideas y anuncios de Community.
Donde esta
- Ruta:
/community/roadmap. - Acceso en UI:
Community > Roadmap. - Componente(s): página de roadmap.
Como funciona
- Abrir
Roadmap. - Revisar las iniciativas y sus estados visibles.
Reglas y validaciones
- Por confirmar: fuente y estados exactos del roadmap.
Backend
- Servicios: Por confirmar: servicio que alimenta el roadmap.
Relaciones
- Requiere: datos de roadmap publicados.
- Dispara / afecta: comprensión de prioridades de producto.
Notas
- No se asume que una idea votada entre automáticamente al roadmap.
id: submit-idea modulo: community app: plataforma nombre: Proponer una idea tipo: accion
Proponer una idea
Permite enviar una nueva propuesta desde la comunidad.
Que se logra
- Resultado: una necesidad de cliente queda registrada como propuesta visible en Community.
- Caso de uso: una agencia propone una mejora para el flujo de campañas y la comparte con otros usuarios.
- Se combina con: exploración de ideas, votos y comentarios.
Donde esta
- Ruta:
/community/ideas/submit-idea. - Acceso en UI:
Community > Ideas > Submit idea. - Componente(s): página de envío de idea.
Como funciona
- Abrir
Submit idea. - Completar el formulario.
- Enviar la propuesta.
- Revisar la idea creada.
Campos y opciones
Por confirmar: campos, obligatoriedad y categorías del formulario.
Reglas y validaciones
- Por confirmar: validaciones y flujo de moderación.
Backend
- Servicios: servicios Community de ideas (create).
Relaciones
- Requiere: participación en Community.
- Dispara / afecta: listado y detalle de ideas.
Notas
- La existencia de la ruta de envío está confirmada; los campos no se documentan sin confirmarlos.
id: developers app: plataforma nombre: Developers estado: shipped permiso: owner o admin de la organización
Developers
Herramientas de integración técnica de la organización.
Para que sirve
- Una empresa conecta un sistema propio con la API REST mediante claves revocables de organización.
- Un equipo habilita el conector oficial para que ChatGPT o Claude consulte y opere datos autorizados de Apex.
- Una compañía exporta entidades seleccionadas a BigQuery para análisis corporativo.
Que lo hace diferente
- Las API keys se administran por organización, mientras el acceso MCP usa consentimiento con identidad de Apex y selección de organizaciones autorizadas.
- El servidor MCP descubre herramientas en tiempo de ejecución: puede gestionar contactos, conversaciones y mensajes, deals, facturas, reservas, proyectos, tareas, productos, formularios, asistentes IA y datos autorizados de la organización.
- Los conectores MCP no reciben el JWT del backend; el acceso se limita a las organizaciones concedidas durante OAuth.
Acceso
- Ruta principal:
/[orgId]/settings - Como se llega:
Avatar menu > Settings - Permiso requerido: owner o admin de la organización
Alcance tecnico
- Frontend: rutas de Settings y My Profile relacionadas
- Backend: servicios Feathers de este módulo
- Superficies publicas: no aplica salvo integraciones de terceros
- Integraciones externas: Stripe, Google, Microsoft, Wise, Meta, S3 o proveedores de voz según la funcionalidad
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Claves de API | api-keys.md | Crea y revoca claves para integraciones REST. |
| Activación de MCP | mcp-access.md | Activa o desactiva el acceso MCP de la organización y permite copiar la URL del servidor. |
| Conexión de conectores MCP | mcp-connectors.md | Guía la configuración de conectores de Claude y ChatGPT, incluido inicio de sesión y selección de organizaciones. |
| Sincronización de datos | data-sync.md | Configura la exportación programada de datos de la organización a BigQuery y sus entidades. |
Relaciones
- Depende de: organizaciones, miembros y autenticación.
- Usado por: CRM, automatizaciones y las integraciones descritas.
Limitaciones y notas
- Se documenta únicamente el comportamiento confirmado en frontend, servicios y hooks revisados.
id: api-keys modulo: developers app: plataforma nombre: Claves de API tipo: configuracion
Claves de API
Crea y revoca claves para integraciones REST.
Que se logra
- Resultado: Integraciones externas autentican operaciones de API con claves de organización que se pueden revocar.
- Caso de uso: Un ERP sincroniza clientes con Apex sin compartir credenciales personales.
- Se combina con: CRM, reservas, proyectos, facturación, asistentes IA y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/developers/api-keys - Acceso en UI:
Settings > Developers > API Keys - Componente(s):
ApiKeysList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- El secreto completo se muestra una sola vez al crearlo.
Backend
- Servicios:
organization-api-keys - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: data-sync modulo: developers app: plataforma nombre: Sincronización de datos tipo: integracion
Sincronización de datos
Configura la exportación programada de datos de la organización a BigQuery y sus entidades.
Que se logra
- Resultado: Las entidades seleccionadas se exportan de forma programada a BigQuery.
- Caso de uso: Una empresa consolida datos de Apex con su analítica corporativa.
- Se combina con: CRM, reservas, proyectos, facturación, asistentes IA y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/developers/data-sync - Acceso en UI:
Settings > Developers > Data Sync - Componente(s):
DataSyncSettings.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Disponible solo para Enterprise, AdminOnly o Implementor; la documentación pública de API permanece en
/docs.
Backend
- Servicios:
export-data - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: mcp-access modulo: developers app: plataforma nombre: Activación de MCP tipo: configuracion
Activación de MCP
Activa o desactiva el acceso MCP de la organización y permite copiar la URL del servidor.
Que se logra
- Resultado: La organización controla si sus datos pueden usarse desde el servidor MCP oficial.
- Caso de uso: Una empresa habilita su conector de IA solo después de aprobar el uso por organización.
- Se combina con: CRM, reservas, proyectos, facturación, asistentes IA y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/developers/mcp - Acceso en UI:
Settings > Developers > MCP - Componente(s):
McpSettingsPage.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- MCP activo bloquea la eliminación de organización hasta desactivarlo.
Backend
- Servicios:
organizations - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: mcp-connectors modulo: developers app: plataforma nombre: Conexión de conectores MCP tipo: integracion
Conexión de conectores MCP
Guía la configuración de conectores de Claude y ChatGPT, incluido inicio de sesión y selección de organizaciones.
Que se logra
- Resultado: ChatGPT o Claude se conectan mediante OAuth y pueden actuar dentro de las organizaciones autorizadas.
- Caso de uso: Un equipo comercial pide a Claude crear un contacto y preparar una reserva en la cuenta correcta.
- Se combina con: CRM, reservas, proyectos, facturación, asistentes IA y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/developers/mcp - Acceso en UI:
MCP >View guide`` - Componente(s):
McpSettingsPage.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Cada llamada opera en una organización autorizada; los permisos granulares de roles no se aplican dentro de herramientas MCP.
Backend
- Servicios:
mcp-internal-tools, mcp-tool-connection-proxy - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: equipo-permisos app: plataforma nombre: Equipo y permisos estado: shipped permiso: owner o admin de la organización
Equipo y permisos
Gestiona miembros, invitaciones y las reglas de acceso de cada organización.
Para que sirve
- Una clínica incorpora recepcionistas con acceso solo a las áreas que necesitan para atender pacientes.
- Una agencia crea roles reutilizables para ejecutivos de cuenta, operadores y administradores de cada cliente.
- Una empresa reasigna trabajo pendiente antes de retirar a un colaborador.
Que lo hace diferente
- Combina permisos por sección y módulo con acciones granulares de ver, crear, editar o eliminar sobre registros propios o de todos.
- Los roles personalizados se aplican dentro de cada organización y se integran con el control de acceso de los módulos operativos.
- La salida de un miembro contempla las referencias que deben reasignarse, en lugar de dejar asignaciones huérfanas.
Acceso
- Ruta principal:
/[orgId]/settings - Como se llega:
Avatar menu > Settings - Permiso requerido: owner o admin de la organización
Alcance tecnico
- Frontend: rutas de Settings y My Profile relacionadas
- Backend: servicios Feathers de este módulo
- Superficies publicas: no aplica salvo integraciones de terceros
- Integraciones externas: Stripe, Google, Microsoft, Wise, Meta, S3 o proveedores de voz según la funcionalidad
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Listado de miembros | team-members.md | Lista miembros facturables, implementadores y personal Apex; permite buscar. |
| Invitación de miembros | member-invitations.md | Invita por email y asigna rol o rol personalizado. |
| Invitaciones pendientes | pending-invitations.md | Revisa el estado de invitaciones enviadas. |
| Roles personalizados | organization-roles.md | Crea y edita roles reutilizables para miembros de la organización. |
| Permisos por sección y módulo | granular-permissions.md | Define acceso a secciones, módulos y acciones de ver, crear, editar o eliminar propias/todas. |
| Remoción de miembros | member-removal.md | Permite reasignar referencias antes de retirar a una persona. |
Relaciones
- Depende de: organizaciones, miembros y autenticación.
- Usado por: CRM, automatizaciones y las integraciones descritas.
Limitaciones y notas
- Se documenta únicamente el comportamiento confirmado en frontend, servicios y hooks revisados.
id: granular-permissions modulo: equipo-permisos app: plataforma nombre: Permisos por sección y módulo tipo: configuracion
Permisos por sección y módulo
Define acceso a secciones, módulos y acciones de ver, crear, editar o eliminar propias/todas.
Que se logra
- Resultado: Cada rol limita el alcance por sección, módulo y acción sobre registros propios o de todos.
- Caso de uso: Una inmobiliaria permite a sus asesores editar solo sus oportunidades y a un gerente ver todas.
- Se combina con: Miembros, roles y todos los módulos protegidos de Apex.
Donde esta
- Ruta:
/[orgId]/settings/team-members - Acceso en UI:
Manage Roles > editor de permisos - Componente(s):
PermissionsEditor.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Si una bandera no existe aún se interpreta como permitida por compatibilidad.
Backend
- Servicios:
organization-roles - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: member-invitations modulo: equipo-permisos app: plataforma nombre: Invitación de miembros tipo: accion
Invitación de miembros
Invita por email y asigna rol o rol personalizado.
Que se logra
- Resultado: Un nuevo colaborador recibe una invitación con el rol definido para comenzar.
- Caso de uso: Una clínica incorpora una recepcionista con el acceso correspondiente.
- Se combina con: Miembros, roles y todos los módulos protegidos de Apex.
Donde esta
- Ruta:
/[orgId]/settings/team-members - Acceso en UI:
Team Members >Invite Member`` - Componente(s):
InviteMemberDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Se bloquea al alcanzar el límite de asientos; la persona también puede aceptar o rechazar desde el menú de avatar.
Backend
- Servicios:
organizations-users-invites - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: member-removal modulo: equipo-permisos app: plataforma nombre: Remoción de miembros tipo: accion
Remoción de miembros
Permite reasignar referencias antes de retirar a una persona.
Que se logra
- Resultado: Las referencias pendientes se reasignan antes de retirar a una persona.
- Caso de uso: Una agencia transfiere clientes y tareas cuando un ejecutivo deja la cuenta.
- Se combina con: Miembros, roles y todos los módulos protegidos de Apex.
Donde esta
- Ruta:
/[orgId]/settings/team-members - Acceso en UI:
Fila de miembro > eliminar - Componente(s):
RemoveMemberDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- No se puede quitar al último owner ni usuarios sin permiso; bloquean asignaciones de CRM, tickets, documentos, integraciones, automatizaciones, handoffs, voz, reservas y Lead Ads.
Backend
- Servicios:
organizations-users - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: organization-roles modulo: equipo-permisos app: plataforma nombre: Roles personalizados tipo: configuracion
Roles personalizados
Crea y edita roles reutilizables para miembros de la organización.
Que se logra
- Resultado: La organización reutiliza perfiles de acceso consistentes para puestos recurrentes.
- Caso de uso: Un BPO crea un rol de supervisor y lo asigna a cada líder de turno.
- Se combina con: Miembros, roles y todos los módulos protegidos de Apex.
Donde esta
- Ruta:
/[orgId]/settings/team-members - Acceso en UI:
Team Members >Manage Roles`` - Componente(s):
ManageRolesDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Owners y admins tienen acceso sin restricciones; las restricciones aplican a miembros.
Backend
- Servicios:
organization-roles - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: pending-invitations modulo: equipo-permisos app: plataforma nombre: Invitaciones pendientes tipo: vista
Invitaciones pendientes
Revisa el estado de invitaciones enviadas.
Que se logra
- Resultado: El administrador puede detectar invitaciones que aún no se han aceptado.
- Caso de uso: Un gerente hace seguimiento a la incorporación de un nuevo equipo comercial.
- Se combina con: Miembros, roles y todos los módulos protegidos de Apex.
Donde esta
- Ruta:
/[orgId]/settings/team-members - Acceso en UI:
Team Members >Pending Invitations`` - Componente(s):
PendingInvitationsDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Las invitaciones tienen estado y expiración administrados por el backend.
Backend
- Servicios:
organizations-users-invites - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: team-members modulo: equipo-permisos app: plataforma nombre: Listado de miembros tipo: vista
Listado de miembros
Lista miembros facturables, implementadores y personal Apex; permite buscar.
Que se logra
- Resultado: Los responsables visualizan quién integra la organización y su condición de acceso.
- Caso de uso: Una agencia confirma qué implementadores y usuarios atienden la cuenta de un cliente.
- Se combina con: Miembros, roles y todos los módulos protegidos de Apex.
Donde esta
- Ruta:
/[orgId]/settings/team-members - Acceso en UI:
Settings > Organization > Team Members - Componente(s):
TeamMembersList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- El personal de plataforma e implementadores no consumen asientos.
Backend
- Servicios:
organizations-users - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: marketing-site app: plataforma nombre: Sitio de marketing estado: public permiso: ninguno
Sitio de marketing
Conjunto de páginas públicas en español para adquisición, información comercial y solicitud de demostraciones.
Para que sirve
- Un prospecto conoce las capacidades y planes antes de solicitar una demo o registrarse.
- Un comprador explora cada producto por separado y entiende tanto sus funciones como el resultado operativo que produce.
- Una empresa explica su principal necesidad para recibir una demostración enfocada en su proceso.
- Una organización comparte un formulario de consentimiento SMS con sus contactos.
Que lo hace diferente
- Reúne adquisición, producto y consentimiento SMS en superficies públicas de Apex.
- Presenta Apex como un sistema conectado alrededor de un contacto único y no como una lista de herramientas independientes.
- Cada producto principal tiene una ruta pública propia bajo
/producto/{slug}, con capacidades, resultados, casos de uso y conexiones con el resto de Apex. - El formulario de consentimiento SMS se asocia a una organización y registra el consentimiento mediante Apex.
Acceso
- Ruta principal:
/. - Como se llega: sitio público.
- Permiso requerido: ninguno.
Alcance tecnico
- Frontend:
src/app/(site)/**, además de SMS opt-in y desuscripción de correo. - Backend:
blog-posts,blog-categoriesy formularios relacionados. - Superficies publicas: todas las rutas del sitio.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Presentar producto | home-and-pricing.md | Inicio y planes. |
| Explorar páginas de producto | product-pages.md | Índice de plataforma y páginas públicas por producto. |
| Solicitar una demostración | request-demo.md | Formulario vigente de contacto comercial y confirmación. |
| Gestionar consentimiento SMS | sms-opt-in.md | Formulario público por organización. |
| Desuscribir correo | email-unsubscribe.md | Página pública de preferencias de correo. |
Relaciones
- Depende de: blog, formularios y configuración pública.
- Usado por: prospectos, clientes y partners.
Limitaciones y notas
- Las páginas de pruebas técnicas públicas no se consideran funcionalidades de adquisición.
id: email-unsubscribe modulo: marketing-site app: plataforma nombre: Desuscribir correo tipo: publico
Desuscribir correo
Proporciona una página pública para tramitar la desuscripción de comunicaciones por correo.
Que se logra
- Resultado: un destinatario puede gestionar la desuscripción desde un enlace incluido en una comunicación por correo.
- Caso de uso: un comercio reduce envíos no deseados cuando un suscriptor solicita dejar de recibir sus campañas.
- Se combina con: email broadcasts y preferencias de notificación.
Donde esta
- Ruta:
/email-broadcast-unsubscribe. - Acceso en UI: enlace de desuscripción recibido en email.
- Componente(s): página pública de email unsubscribe.
Como funciona
- Abrir el enlace incluido en una comunicación por correo.
- Confirmar o gestionar la preferencia disponible.
Reglas y validaciones
- Por confirmar: validación del enlace y alcance de la desuscripción.
Backend
- Servicios: integración de correo y desuscripción.
Relaciones
- Requiere: enlace público emitido desde una comunicación.
- Dispara / afecta: preferencias de recepción de email.
Notas
- La página está en un grupo de rutas público independiente del sitio de marketing.
id: home-and-pricing modulo: marketing-site app: plataforma nombre: Presentar producto y precios tipo: publico
Presentar producto y precios
Comunica en español la propuesta de AchieveApex como plataforma todo en uno y presenta sus opciones comerciales.
Que se logra
- Resultado: un prospecto entiende que Apex conecta el recorrido completo del cliente y accede a las opciones comerciales publicadas.
- Caso de uso: una empresa de servicios compara la oferta antes de solicitar una demostración o registrarse.
- Se combina con: páginas de producto, solicitud de demostración y registro.
Donde esta
- Ruta:
/,/pricingy/pricing/ai-assistant. - Acceso en UI: sitio público.
- Componente(s):
HomePageContent,PlanComparisonyPricingFAQ.
Como funciona
- Abrir la página principal.
- Recorrer la historia desde el primer mensaje hasta venta, entrega, cobro y soporte.
- Explorar los productos o abrir
Preciospara comparar la oferta. - Crear una cuenta o solicitar una demostración enfocada en un proceso.
Reglas y validaciones
- No requiere sesión para lectura.
- El contenido principal y la navegación pública se presentan en español.
- Los espacios reservados para screenshots y videos describen la demostración de producto que debe reemplazarlos.
Backend
- Servicios: Por confirmar: fuentes de precios visibles.
Relaciones
- Requiere: sitio público.
- Dispara / afecta: registro, demo o selección comercial según CTA.
Notas
- No se infieren precios o condiciones sin confirmarlos en la interfaz.
id: product-pages modulo: marketing-site app: plataforma nombre: Explorar páginas públicas de producto tipo: publico
Explorar páginas públicas de producto
Presenta la plataforma completa y explica cada producto principal por sus capacidades, resultados y relación con el resto de Apex.
Que se logra
- Resultado: un prospecto puede evaluar el producto que resuelve su necesidad inmediata sin perder de vista la ventaja de operar todo en una plataforma conectada.
- Caso de uso: una clínica comienza evaluando Reservas y descubre cómo se combina con contactos, asistentes de IA y automatizaciones.
- Se combina con: inicio, precios, registro y solicitud de demo.
Donde esta
- Ruta:
/productoy/producto/[slug]. - Acceso en UI:
Header > Productoo las tarjetas de plataforma en la página de inicio. - Componente(s):
ProductModulePage,MarketingVisualySiteHeaderDark.
Como funciona
- Abrir
Productodesde el header flotante. - Elegir un producto agrupado bajo vender y atender, operar y cobrar, crear y compartir, o conectar y ampliar.
- Revisar su promesa, capacidades, resultados y casos de uso.
- Ver con qué otras áreas de Apex comparte contexto.
- Iniciar el registro gratuito o solicitar una demo.
Reglas y validaciones
- No requiere sesión.
- Cada slug publicado debe existir en
marketingModules; un slug desconocido responde con página no encontrada. - Las páginas se generan estáticamente a partir del inventario de marketing.
- Los bloques de media presentan una vista visual provisional hasta que se reemplacen por capturas o videos reales.
- El contenido no presenta métricas de clientes no verificadas.
- Finanzas, Mesa de ayuda, Contratos y Enlaces inteligentes se identifican como Beta.
Backend
- Servicios: ninguno para lectura; las llamadas a registro, login y demo llevan a sus flujos públicos existentes.
Relaciones
- Requiere: catálogo técnico de funcionalidades como fuente de capacidades confirmadas.
- Dispara / afecta: registro, solicitud de demo y navegación hacia precios.
Notas
- Las páginas cubren CRM y conversaciones, asistentes de IA, automatizaciones, Finanzas, Operaciones, Mesa de ayuda, Reservas, Eventos, Reuniones, Sitios, Presentaciones, Pizarras, Contratos, Enlaces inteligentes, y Plataforma y API.
id: request-demo modulo: marketing-site app: plataforma nombre: Solicitar una demostración tipo: publico
Solicitar una demostración
Recoge el contexto inicial de un prospecto para coordinar una demostración enfocada en el proceso que quiere mejorar.
Que se logra
- Resultado: el equipo comercial recibe los datos de contacto, empresa y necesidad principal de un prospecto sin prometer una fecha inexistente.
- Caso de uso: una empresa de servicios explica que quiere conectar sus ventas por WhatsApp con reservas y cobros antes de coordinar la demostración.
- Se combina con: inicio, páginas de producto, precios y registro.
Donde esta
- Ruta:
/demoy confirmación/demo/confirmacion. - Acceso en UI: CTA
Ver Apex en acción,Solicitar una demooHablar con un especialista. - Componente(s):
DemoRequestForm.
Como funciona
- Abrir la solicitud de demostración desde un CTA del sitio.
- Completar nombre, apellido, correo de trabajo, empresa y necesidad principal.
- Enviar la solicitud.
- Ver una confirmación genérica que indica que el equipo coordinará el siguiente paso.
Campos
| Campo | Tipo | Requerido | Regla |
|---|---|---|---|
| Nombre | texto | Sí | Usa autocompletado de nombre. |
| Apellido | texto | Sí | Usa autocompletado de apellido. |
| Correo de trabajo | Sí | Validación nativa de email. | |
| Empresa | texto | Sí | Usa autocompletado de organización. |
| Necesidad principal | texto largo | Sí | Describe el proceso a revisar. |
Reglas y validaciones
- El botón muestra estado de envío y queda deshabilitado para evitar duplicados.
- Una respuesta HTTP fallida muestra un error inline y ofrece un correo alternativo.
- La confirmación no coloca nombre ni email en la URL.
- La página no promete una fecha, hora o invitación de calendario hasta que el equipo la coordine.
- La confirmación usa
noindex.
Backend
- Servicios: webhook comercial existente de Make.
- Efectos visibles: envío de la solicitud y navegación a la confirmación.
Relaciones
- Requiere: endpoint comercial disponible.
- Dispara / afecta: seguimiento del prospecto por el equipo de AchieveApex.
Notas
- Las rutas legadas bajo
discovery-vdeo-callredirigen a las rutas vigentes en español.
id: sms-opt-in modulo: marketing-site app: plataforma nombre: Gestionar consentimiento SMS tipo: publico
Gestionar consentimiento SMS
Ofrece un formulario público de consentimiento de SMS asociado a una organización.
Que se logra
- Resultado: una organización recoge consentimiento de SMS mediante un enlace público asociado a su cuenta.
- Caso de uso: una clínica comparte el enlace en su web para registrar el consentimiento de pacientes que desean recibir recordatorios.
- Se combina con: configuración de SMS y contactos de la organización.
Donde esta
- Ruta:
/sms-opt-in/[orgId]. - Acceso en UI: enlace público compartido por la organización.
- Componente(s): página de SMS opt-in.
Como funciona
- Abrir el enlace de la organización.
- Completar el formulario de consentimiento.
- Enviar la solicitud.
Campos y opciones
Por confirmar: campos exactos y textos visibles del formulario.
Reglas y validaciones
- La organización se obtiene desde la ruta.
Backend
- Servicios:
public-sms-opt-in(create).
Relaciones
- Requiere: una organización con enlace compartido.
- Dispara / afecta: consentimiento de mensajería SMS del contacto.
Notas
- Es independiente de las campañas SMS autenticadas.
id: mi-perfil app: plataforma nombre: Mi perfil estado: shipped permiso: usuario autenticado
Mi perfil
Preferencias personales del usuario dentro de una organización.
Para que sirve
- Un asesor comercial conecta su calendario para trabajar reuniones y disponibilidad desde Apex.
- Un equipo de ventas usa una cuenta de Gmail personal para intercambiar correo desde el CRM o automatizaciones autorizadas.
- Un usuario ajusta alertas y dispositivos para enterarse de mensajes, asignaciones y recordatorios relevantes.
Que lo hace diferente
- Cada persona controla integraciones y preferencias propias sin alterar la configuración compartida de la organización.
- La sincronización de calendario contempla modos bidireccional, unidireccional y de solo consulta, además del registro de reuniones con enlace de video.
- La cuenta de Gmail puede habilitarse para compartirla o utilizarla en automatizaciones, conectando comunicación personal y operación de CRM.
Acceso
- Ruta principal:
/[orgId]/my-profile/profile - Como se llega:
Header > My Account - Permiso requerido: usuario autenticado
Alcance tecnico
- Frontend: rutas de Settings y My Profile relacionadas
- Backend: servicios Feathers de este módulo
- Superficies publicas: no aplica salvo integraciones de terceros
- Integraciones externas: Stripe, Google, Microsoft, Wise, Meta, S3 o proveedores de voz según la funcionalidad
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Datos del perfil | profile-details.md | Actualiza nombre, email y teléfono del usuario. |
| Foto de perfil | profile-photo.md | Carga o elimina el avatar personal y lo guarda de inmediato. |
| Restablecimiento de contraseña | password-reset.md | Confirma el cierre de sesión y redirige al flujo de recuperación. |
| Sincronización de calendario | calendar-sync.md | Conecta Google Calendar u Outlook y configura sincronización bidireccional, unidireccional o solo consulta. |
| Grabación de reuniones de calendario | meeting-recording.md | Activa que el bot registre reuniones con enlace de video, independientemente del tipo de sincronización. |
| Integración personal de Gmail | gmail-sync.md | Conecta Gmail para enviar/recibir desde CRM y habilita compartir la cuenta o usarla en automatizaciones. |
| Preferencias y dispositivos de notificación | notification-preferences.md | Configura alertas in-app y del navegador para mensajes, asignaciones y recordatorios; permite registrar, probar y desactivar dispositivos. |
Relaciones
- Depende de: organizaciones, miembros y autenticación.
- Usado por: CRM, automatizaciones y las integraciones descritas.
Limitaciones y notas
- Se documenta únicamente el comportamiento confirmado en frontend, servicios y hooks revisados.
id: calendar-sync modulo: mi-perfil app: plataforma nombre: Sincronización de calendario tipo: integracion
Sincronización de calendario
Conecta Google Calendar u Outlook y configura sincronización bidireccional, unidireccional o solo consulta.
Que se logra
- Resultado: Las reuniones y disponibilidad se sincronizan con Google Calendar u Outlook según el modo elegido.
- Caso de uso: Un consultor evita duplicar citas entre su calendario y el CRM.
- Se combina con: Calendario, CRM, conversaciones y automatizaciones.
Donde esta
- Ruta:
/[orgId]/my-profile/calendar-sync - Acceso en UI:
My Profile > Calendar Sync >Add Account`` - Componente(s):
ConnectCalendarDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Solo se sincronizan eventos futuros; Google bidireccional puede requerir
Renew.
Backend
- Servicios:
organization-users-calendar-integrations - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: gmail-sync modulo: mi-perfil app: plataforma nombre: Integración personal de Gmail tipo: integracion
Integración personal de Gmail
Conecta Gmail para enviar/recibir desde CRM y habilita compartir la cuenta o usarla en automatizaciones.
Que se logra
- Resultado: El correo personal de Gmail se conecta para enviar y recibir desde flujos autorizados de CRM.
- Caso de uso: Un asesor atiende correos de clientes sin salir del historial comercial.
- Se combina con: Calendario, CRM, conversaciones y automatizaciones.
Donde esta
- Ruta:
/[orgId]/my-profile/gmail-sync - Acceso en UI:
My Profile > Gmail Sync - Componente(s):
GmailSyncSettings.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Una integración activa se desconecta primero; eliminar permanentemente solo está disponible inactiva.
Backend
- Servicios:
organization-users-gmail-integrations - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: meeting-recording modulo: mi-perfil app: plataforma nombre: Grabación de reuniones de calendario tipo: configuracion
Grabación de reuniones de calendario
Activa que el bot registre reuniones con enlace de video, independientemente del tipo de sincronización.
Que se logra
- Resultado: Las reuniones de calendario con enlace de video pueden registrarse mediante el bot.
- Caso de uso: Un equipo de ventas conserva evidencia de sus reuniones de descubrimiento.
- Se combina con: Calendario, CRM, conversaciones y automatizaciones.
Donde esta
- Ruta:
/[orgId]/my-profile/calendar-sync - Acceso en UI:
Calendar Sync >Record my meetings`` - Componente(s):
EditSyncSettingsDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Las grabaciones y transcripciones aparecen en Meetings.
Backend
- Servicios:
organization-users-calendar-integrations - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: notification-preferences modulo: mi-perfil app: plataforma nombre: Preferencias y dispositivos de notificación tipo: configuracion
Preferencias y dispositivos de notificación
Configura alertas in-app y del navegador para mensajes, asignaciones y recordatorios; permite registrar, probar y desactivar dispositivos.
Que se logra
- Resultado: El usuario decide qué avisos y dispositivos usar para eventos operativos.
- Caso de uso: Un agente recibe alertas del navegador para nuevas asignaciones mientras atiende chats.
- Se combina con: Calendario, CRM, conversaciones y automatizaciones.
Donde esta
- Ruta:
/[orgId]/my-profile/notification-preferences - Acceso en UI:
My Profile > Notification Preferences - Componente(s):
NotificationPreferences.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Email aparece como
Coming soon. Los recordatorios se envían 10 minutos antes.
Backend
- Servicios:
user-notification-preferences - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: password-reset modulo: mi-perfil app: plataforma nombre: Restablecimiento de contraseña tipo: accion
Restablecimiento de contraseña
Confirma el cierre de sesión y redirige al flujo de recuperación.
Que se logra
- Resultado: El usuario inicia el flujo seguro de recuperación y cierra la sesión actual.
- Caso de uso: Un colaborador recupera acceso después de olvidar su contraseña.
- Se combina con: Calendario, CRM, conversaciones y automatizaciones.
Donde esta
- Ruta:
/[orgId]/my-profile/profile - Acceso en UI:
Profile >Reset Password`` - Componente(s):
ProfileSettings.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- El usuario debe autenticarse nuevamente.
Backend
- Servicios:
users - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: profile-details modulo: mi-perfil app: plataforma nombre: Datos del perfil tipo: configuracion
Datos del perfil
Actualiza nombre, email y teléfono del usuario.
Que se logra
- Resultado: El usuario conserva sus datos de contacto actualizados para su operación en Apex.
- Caso de uso: Un asesor actualiza su teléfono corporativo tras cambiar de línea.
- Se combina con: Calendario, CRM, conversaciones y automatizaciones.
Donde esta
- Ruta:
/[orgId]/my-profile/profile - Acceso en UI:
My Profile > Profile & Account - Componente(s):
ProfileSettings.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Nombre y apellido son obligatorios; el teléfono solo admite dígitos.
Backend
- Servicios:
users - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: profile-photo modulo: mi-perfil app: plataforma nombre: Foto de perfil tipo: accion
Foto de perfil
Carga o elimina el avatar personal y lo guarda de inmediato.
Que se logra
- Resultado: La cuenta muestra un avatar personal reconocible dentro del equipo.
- Caso de uso: Un contact center facilita identificar al responsable de una conversación.
- Se combina con: Calendario, CRM, conversaciones y automatizaciones.
Donde esta
- Ruta:
/[orgId]/my-profile/profile - Acceso en UI:
Profile > avatar - Componente(s):
ProfileSettings.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Acepta JPEG, PNG o GIF de hasta 5 MB.
Backend
- Servicios:
users, s3-url-signing - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: notificaciones app: plataforma nombre: Notificaciones estado: shipped permiso: usuario autenticado
Notificaciones
Agrupa avisos in-app, preferencias de notificación, push y banners operativos de plataforma.
Para que sirve
- Un asesor abre avisos pendientes desde el encabezado para continuar con un recurso relacionado.
- Un usuario ajusta qué notificaciones recibe desde su perfil.
- Una organización recibe avisos push en dispositivos registrados cuando sucede un evento relevante.
- La plataforma comunica una incidencia o cambio operativo mediante un banner autenticado.
Que lo hace diferente
- Integra avisos del producto, preferencias por usuario, entrega push y alertas globales.
- Las alertas operativas pueden programarse, traducirse y recordarse como descartadas por usuario.
- Distingue las alertas operativas de los anuncios públicos de Community.
- Las notificaciones pueden dirigir al recurso de Apex que originó el aviso.
Acceso
- Ruta principal:
/[orgId]/my-profile/notification-preferences. - Como se llega:
Header > NotificationsyHeader > avatar > My profile. - Permiso requerido: usuario autenticado; alertas globales para usuarios autenticados.
Alcance tecnico
- Frontend: header, preferencias,
PlatformAlertsBanner. - Backend:
notifications,push-notifications,user-notification-preferences,platform-alerts,platform-alert-dismissals,community-announcements.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar avisos in-app | in-app-notifications.md | Notificaciones disponibles desde el header. |
| Configurar preferencias | notification-preferences.md | Preferencias del perfil. |
| Recibir push | push-notifications.md | Entrega push basada en eventos. |
| Ver alertas de plataforma | platform-alerts.md | Banner global activo y programado. |
| Leer anuncios | announcements-banner.md | Relación de anuncios con superficies de aviso. |
Relaciones
- Depende de: sesión, perfil y eventos de módulos.
- Usado por: usuarios autenticados y Community.
Limitaciones y notas
- Los anuncios de Community y las alertas operativas son funcionalidades distintas.
id: announcements-banner modulo: notificaciones app: plataforma nombre: Relación entre anuncios y avisos tipo: vista
Relación entre anuncios y avisos
Aclara que Community publica novedades y que el banner autenticado se reserva para alertas operativas de plataforma.
Que se logra
- Resultado: el equipo elige la superficie correcta para comunicar una novedad o una incidencia operativa.
- Caso de uso: un equipo de producto publica una novedad en Community y reserva el banner para informar una interrupción.
- Se combina con: anuncios de Community y alertas de plataforma.
Donde esta
- Ruta:
/community/announcementsy layouts autenticados. - Acceso en UI:
Community > Announcementso banner de plataforma. - Componente(s): página de anuncios,
PlatformAlertsBanner.tsx.
Como funciona
- Abrir
Announcementspara leer novedades de Community. - Consultar el banner autenticado cuando exista una alerta operativa.
Reglas y validaciones
- Las alertas pueden tener programación y cierre por usuario; los anuncios de Community no comparten ese flujo confirmado.
Backend
- Servicios:
community-announcements(find/get),platform-alerts(find).
Relaciones
- Requiere: anuncios o alertas publicados.
- Dispara / afecta: comunicación de producto u operación.
Notas
- No se deben confundir las dos superficies al comunicar una incidencia.
id: in-app-notifications modulo: notificaciones app: plataforma nombre: Consultar avisos in-app tipo: vista
Consultar avisos in-app
Permite recibir y consultar notificaciones generadas por acciones de la plataforma desde la experiencia autenticada.
Que se logra
- Resultado: el usuario ve avisos originados por la plataforma y puede continuar hacia el recurso relacionado.
- Caso de uso: un asesor recibe una notificación de una actividad pendiente y abre el contexto desde el encabezado.
- Se combina con: preferencias de notificación y los módulos que generan avisos.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Notifications. - Componente(s): Header.
Como funciona
- Ingresar a la organización.
- Abrir el área de notificaciones del header cuando haya avisos.
- Seleccionar el aviso para continuar con el recurso relacionado, si aplica.
Reglas y validaciones
- Por confirmar: comportamiento de lectura, agrupación y retención en la UI.
Backend
- Servicios:
notifications(find/get/create/patch).
Relaciones
- Requiere: evento que origine una notificación.
- Dispara / afecta: navegación y seguimiento de acciones.
Notas
- La disponibilidad de cada aviso depende del módulo que lo genera.
id: notification-preferences modulo: notificaciones app: plataforma nombre: Configurar preferencias de notificación tipo: configuracion
Configurar preferencias de notificación
Ofrece una página de perfil para gestionar preferencias de notificación del usuario.
Que se logra
- Resultado: cada usuario controla las opciones de notificación disponibles en su perfil.
- Caso de uso: un gerente ajusta sus avisos para mantenerse informado sin recibir interrupciones innecesarias.
- Se combina con: avisos in-app y notificaciones push.
Donde esta
- Ruta:
/[orgId]/my-profile/notification-preferences. - Acceso en UI:
Header > avatar > My profile > Notification preferences. - Componente(s): página de notification preferences.
Como funciona
- Abrir
My profile. - Elegir
Notification preferences. - Ajustar las opciones disponibles y guardar.
Campos y opciones
Por confirmar: categorías, canales y estados presentados.
Reglas y validaciones
- Las preferencias pertenecen al usuario.
Backend
- Servicios:
user-notification-preferences(find/get/create/patch).
Relaciones
- Requiere: usuario autenticado.
- Dispara / afecta: entrega de avisos del producto.
Notas
- Esta página es distinta de la disponibilidad de chat o de voz.
id: platform-alerts modulo: notificaciones app: plataforma nombre: Ver alertas de plataforma tipo: vista
Ver alertas de plataforma
Muestra un banner global para avisos operativos activos, programados y traducidos de la plataforma.
Que se logra
- Resultado: los usuarios autenticados reciben una comunicación visible sobre un incidente o cambio operativo.
- Caso de uso: una plataforma informa a todos los equipos sobre una incidencia de canal y ofrece un enlace de seguimiento.
- Se combina con: anuncios de Community cuando la comunicación es una novedad de producto, no una alerta operativa.
Donde esta
- Ruta: sobre layouts autenticados.
- Acceso en UI: banner de ancho completo sobre header y sidebar.
- Componente(s):
PlatformAlertsBanner.tsx.
Como funciona
- Ingresar a una vista autenticada.
- La aplicación consulta alertas activas y vigentes.
- Leer el título, detalle y enlace opcional.
- Si aparece
X, cerrar la alerta para el usuario actual.
Reglas y validaciones
- Las alertas críticas no son descartables de forma predeterminada.
- Solo se puede descartar una alerta activa que sea descartable.
- El cierre se recuerda por usuario.
Backend
- Servicios:
platform-alerts(find),platform-alert-dismissals(create). - Efectos: el banner se actualiza periódicamente.
Relaciones
- Requiere: autenticación.
- Dispara / afecta: comunicación de incidentes o cambios relevantes.
Notas
- La creación y administración de alertas está restringida a administradores y se excluye de este módulo.
id: push-notifications modulo: notificaciones app: plataforma nombre: Recibir notificaciones push tipo: integracion
Recibir notificaciones push
Permite que la plataforma entregue avisos push asociados a eventos de producto.
Que se logra
- Resultado: un evento relevante puede avisar al usuario fuera de la vista activa de Apex.
- Caso de uso: un asesor recibe un aviso en su dispositivo cuando ocurre una acción que requiere seguimiento.
- Se combina con: preferencias de notificación y avisos in-app.
Donde esta
- Ruta: no tiene ruta propia.
- Acceso en UI: depende del sistema operativo y del dispositivo.
- Componente(s): Por confirmar: superficie cliente de registro push.
Como funciona
- El usuario habilita permisos de notificación en su dispositivo cuando se le solicite.
- Un evento de la plataforma genera una notificación.
- El servicio de push la entrega al dispositivo registrado.
Reglas y validaciones
- La entrega depende de permiso del dispositivo y de la preferencia aplicable.
Backend
- Servicios:
push-notifications(create),notifications(create).
Relaciones
- Requiere: configuración push y permiso de notificaciones.
- Dispara / afecta: aviso fuera de la vista activa.
Notas
- Por confirmar: canales cliente y gestión de dispositivos registrados.
id: nova app: plataforma nombre: Nova estado: shipped permiso: Por confirmar
Nova
Copilot interno para consultar y operar información de la organización desde áreas autenticadas. Requiere un asistente de tipo ai-chat.
Para que sirve
- Un equipo comercial consulta contactos y crea o actualiza deals sin salir del CRM.
- Una empresa de servicios pide a Nova el estado de conversaciones para priorizar seguimiento.
- Un operador revisa productos, reservas o automatizaciones desde una misma consola.
Que lo hace diferente
- Trabaja dentro de la sesión de la organización y sobre las capacidades habilitadas para su asistente.
- Puede ejecutar herramientas para operar contactos, conversaciones, deals, productos, automatizaciones y reservas, cuando estén activadas.
- Permite revisar cada herramienta ejecutada y su resultado desde el chat.
- Conserva conversaciones separadas por asistente y admite dictado desde el navegador.
Acceso
- Ruta principal: disponible sobre rutas autenticadas de la organización.
- Como se llega:
Header > Nova. - Permiso requerido: Por confirmar: control de acceso específico del panel.
Alcance tecnico
- Frontend:
NovaIcon,NovaConsole,NovaProvideryHeader. - Backend:
ai-chat-conversations,ai-chat-messagesy respuesta del asistente. - Integraciones externas: proveedores de IA configurados para AI Assistant y dictado de voz.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Abrir y consultar a Nova | chat.md | Conversación contextual con un asistente ai-chat. |
| Elegir asistente y herramientas | assistant-tools.md | Cambia de asistente y revisa capacidades activas. |
| Gestionar historial | conversation-history.md | Crea, abre y renombra conversaciones. |
| Revisar proceso y ejecuciones | thinking-and-tools.md | Muestra razonamiento y resultados de herramientas. |
| Dictar mensajes | voice-input.md | Graba y transcribe una pregunta. |
Relaciones
- Depende de: AI Assistant, permisos de organización y módulos habilitados como herramientas.
- Usado por: usuarios autenticados.
Limitaciones y notas
- Nova no está disponible si no existe un asistente
ai-chat. - Las acciones dependen de las herramientas habilitadas en el asistente.
id: assistant-tools modulo: nova app: plataforma nombre: Elegir asistente y herramientas tipo: configuracion
Elegir asistente y herramientas
Nova permite alternar entre los asistentes disponibles y consultar qué herramientas tiene habilitadas el seleccionado.
Que se logra
- Resultado: el usuario elige el asistente con las capacidades adecuadas y conoce el alcance de sus acciones.
- Caso de uso: una agencia selecciona un asistente con herramientas de CRM para buscar contactos y crear deals.
- Se combina con: configuración de AI Assistant y consultas de Nova.
Donde esta
- Ruta: disponible en
/[orgId]/.... - Acceso en UI:
Header > Nova > Switch AI AssistantyTools. - Componente(s):
NovaConsole.tsx.
Como funciona
- Abrir el selector del asistente.
- Elegir un asistente de la lista.
- Nova abre o recupera la conversación correspondiente.
- Si el asistente tiene herramientas activas, abrir
Toolspara verlas. - Usar
Configure tools in AI Assistant settingspara ir a su configuración.
Reglas y validaciones
- El primer asistente con herramientas internas habilitadas se selecciona preferentemente.
- Solo se muestran herramientas activadas para ese asistente.
Backend
- Servicios:
ai-assistants(find/get/patch). - Efectos: cambia el contexto y las capacidades del chat.
Relaciones
- Requiere: AI Assistant.
- Dispara / afecta: consultas de CRM, conversaciones, productos, automatizaciones o reservas según las herramientas habilitadas.
Notas
- La lista de herramientas no concede permisos adicionales al usuario.
id: chat modulo: nova app: plataforma nombre: Consultar a Nova tipo: accion
Consultar a Nova
Permite enviar preguntas en lenguaje natural a un asistente de la organización y recibir respuestas en formato Markdown.
Que se logra
- Resultado: consultas y respuestas operativas sobre la organización desde el área donde trabaja el usuario.
- Caso de uso: un gerente comercial pregunta qué contactos requieren seguimiento y recibe una respuesta sin abrir varios módulos.
- Se combina con: herramientas de AI Assistant e historial de conversaciones de Nova.
Donde esta
- Ruta: disponible en
/[orgId]/.... - Acceso en UI:
Header > Nova. - Componente(s):
NovaIcon.tsx,NovaConsole.tsx.
Como funciona
- Abrir Nova desde el encabezado.
- Elegir un asistente si hay más de uno.
- Escribir una pregunta y pulsar enviar, o usar
Enter. - Esperar el estado
Nova is working...y revisar la respuesta.
Reglas y validaciones
- No se envían mensajes vacíos ni se permite un segundo envío mientras el actual está en curso.
- El panel informa
No AI Assistants Availablecuando no hay asistenteai-chat.
Backend
- Servicios:
ai-chat-conversations(find/get/create/patch),ai-chat-messages(create). - Efectos: el mensaje puede provocar la ejecución de herramientas del asistente.
Relaciones
- Requiere: AI Assistant de tipo
ai-chat. - Dispara / afecta: historial y ejecución de herramientas de Nova.
Notas
- La bienvenida cambia según la ruta actual.
id: conversation-history modulo: nova app: plataforma nombre: Historial de conversaciones de Nova tipo: vista
Historial de conversaciones de Nova
Conserva conversaciones por asistente para reabrirlas, iniciar una nueva o cambiar su título.
Que se logra
- Resultado: consultas recurrentes quedan organizadas y se pueden retomar con su contexto anterior.
- Caso de uso: un equipo de ventas conserva una conversación sobre oportunidades y la continúa en el siguiente turno.
- Se combina con: consultas de Nova y herramientas del asistente.
Donde esta
- Ruta: disponible en
/[orgId]/.... - Acceso en UI:
Header > Nova > Conversation history. - Componente(s):
NovaConsole.tsx.
Como funciona
- Pulsar
Conversation history. - Elegir una conversación para cargar sus mensajes.
- Pulsar
New Conversationpara comenzar otra. - Pasar sobre una conversación y usar
Rename conversation. - Confirmar el nombre con el icono de confirmación,
Enter, o salir conEscape.
Reglas y validaciones
- No se guarda un título vacío.
- El historial se consulta para el asistente seleccionado.
Backend
- Servicios:
ai-chat-conversations(find/create/patch),ai-chat-messages(find).
Relaciones
- Requiere: un asistente
ai-chat. - Dispara / afecta: el contexto que Nova usa en el chat.
Notas
- Las fechas se presentan de forma relativa para conversaciones recientes.
id: thinking-and-tools modulo: nova app: plataforma nombre: Proceso y ejecuciones de Nova tipo: vista
Proceso y ejecuciones de Nova
Muestra opcionalmente el proceso de trabajo de Nova y el detalle de las herramientas ejecutadas para una respuesta.
Que se logra
- Resultado: el usuario puede verificar qué operación realizó Nova y cuál fue el resultado antes de actuar.
- Caso de uso: un administrador confirma si Nova consultó contactos o ejecutó una acción sobre una automatización.
- Se combina con: selección de herramientas y chat de Nova.
Donde esta
- Ruta: disponible en
/[orgId]/.... - Acceso en UI:
Header > Nova > Show thinking process; expandir una ejecución de herramienta. - Componente(s):
NovaConsole.tsx.
Como funciona
- Abrir Nova.
- Usar el icono de ojo para mostrar u ocultar el proceso.
- Expandir una herramienta para revisar su estado, parámetros y resultado.
- Usar los iconos de copia para copiar el detalle visible.
Reglas y validaciones
- Al ocultar el proceso solo permanecen visibles los mensajes de usuario y las respuestas.
- La ejecución indica éxito, error o procesamiento.
Backend
- Servicios:
ai-chat-messages(find/create). - Efectos: registra mensajes de herramientas internos o de API junto a la conversación.
Relaciones
- Requiere: herramientas habilitadas en el asistente.
- Dispara / afecta: las operaciones disponibles de los módulos integrados.
Notas
- El detalle expone los resultados de la ejecución dentro de la consola.
id: voice-input modulo: nova app: plataforma nombre: Dictado para Nova tipo: accion
Dictado para Nova
Permite grabar una pregunta, transcribirla y enviarla directamente al chat de Nova.
Que se logra
- Resultado: una consulta hablada se convierte en una pregunta enviada a Nova.
- Caso de uso: un asesor que está revisando conversaciones dicta una consulta sin interrumpir su atención al cliente.
- Se combina con: chat e historial de conversaciones de Nova.
Donde esta
- Ruta: disponible en
/[orgId]/.... - Acceso en UI:
Header > Nova > Start voice input. - Componente(s):
NovaConsole.tsx,useVoiceRecorder.ts.
Como funciona
- Abrir Nova y una conversación.
- Pulsar
Start voice input. - Hablar y pulsar el mismo control para detener la grabación.
- Nova envía la transcripción cuando contiene texto.
Reglas y validaciones
- El control queda deshabilitado mientras se envía o transcribe.
- Si ocurre un error se muestra
Voice Error.
Backend
- Servicios:
ai-chat-messages(create).
Relaciones
- Requiere: permisos de micrófono en el navegador.
- Dispara / afecta: la conversación activa de Nova.
Notas
- Por confirmar: el proveedor concreto de transcripción.
id: nova-support app: plataforma nombre: Nova Support estado: shipped permiso: usuario autenticado
Nova Support
Asistente de ayuda dentro de la app que responde desde guías estructuradas y el contexto de la página actual.
Para que sirve
- Un nuevo agente de soporte pregunta cómo operar la pantalla que tiene abierta.
- Un administrador adjunta una captura para explicar un bloqueo en una configuración.
- Un equipo de producto recoge valoraciones sobre respuestas de ayuda para identificar guías que deben mejorar.
Que lo hace diferente
- Recibe la ruta actual y carga guías estructuradas de esa página o de componentes relacionados.
- Puede consultar datos de la organización en modo de solo lectura para orientar la respuesta.
- Admite imágenes y captura de pantalla como evidencia visual.
- Una valoración negativa puede alimentar la revisión interna y la creación de casos de soporte.
Acceso
- Ruta principal: disponible en
/[orgId]/.... - Como se llega:
Header > Help. - Permiso requerido: usuario autenticado en una organización.
Alcance tecnico
- Frontend:
NovaSupportIcon,NovaSupportConsole,NovaSupportProvider,src/support-skills. - Backend:
support-chat-conversations,support-chat-messages,support-chat-response,support-skills,support-chat-message-feedback. - Integraciones externas: carga de imágenes.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar soporte contextual | contextual-chat.md | Preguntas guiadas por la ruta actual. |
| Adjuntar evidencia visual | image-attachments.md | Comparte imágenes y captura la pantalla. |
| Consultar historial | conversation-history.md | Retoma conversaciones de soporte. |
| Calificar una respuesta | message-feedback.md | Registra valoración positiva o negativa. |
| Alimentar las guías | support-metas.md | Explica el origen de las metas de soporte. |
Relaciones
- Depende de: catálogo de metas de soporte y de la sesión autenticada.
- Usado por: todas las áreas autenticadas.
Limitaciones y notas
- La gestión administrativa de feedback y knowledge no se documenta en este módulo.
- Solo se admiten imágenes JPEG, PNG, WEBP y GIF.
id: contextual-chat modulo: nova-support app: plataforma nombre: Consultar soporte contextual tipo: accion
Consultar soporte contextual
Responde preguntas de uso basándose en la ruta actual y en las guías de producto registradas.
Que se logra
- Resultado: el usuario recibe orientación vinculada a la pantalla que está usando.
- Caso de uso: un administrador pregunta cómo configurar una función sin tener que explicar en qué sección está trabajando.
- Se combina con: guías de soporte, historial y adjuntos de Nova Support.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Help. - Componente(s):
NovaSupportConsole.tsx,usePageContext.ts.
Como funciona
- Abrir
Help. - Escribir la pregunta y pulsar enviar o
Enter. - Nova Support muestra
Context:con la ruta que está usando. - Revisar la respuesta y sus enlaces internos.
Reglas y validaciones
- No se envía un mensaje vacío mientras haya otro envío o una carga activa.
- El soporte puede consultar guías y datos de la organización en modo de solo lectura.
Backend
- Servicios:
support-chat-conversations,support-chat-messages,support-chat-response,support-skills.
Relaciones
- Requiere: sesión y contexto de página.
- Dispara / afecta: selección de guías relevantes.
Notas
- Los enlaces internos de las respuestas navegan dentro de la aplicación.
id: conversation-history modulo: nova-support app: plataforma nombre: Historial de soporte tipo: vista
Historial de soporte
Permite recuperar conversaciones anteriores de Nova Support y crear una nueva.
Que se logra
- Resultado: el usuario retoma una consulta de ayuda sin volver a explicar el problema.
- Caso de uso: un administrador recupera una conversación sobre una configuración y continúa el diagnóstico al día siguiente.
- Se combina con: consulta contextual de Nova Support.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Help > Conversation history. - Componente(s):
NovaSupportConsole.tsx.
Como funciona
- Abrir
Conversation history. - Seleccionar una conversación para restaurarla.
- Pulsar
New Conversationpara iniciar una consulta independiente.
Reglas y validaciones
- La conversación activa aparece resaltada.
Backend
- Servicios:
support-chat-conversations(find/create),support-chat-messages(find).
Relaciones
- Requiere: usuario autenticado.
- Dispara / afecta: el contexto conversacional de soporte.
Notas
- Los títulos que faltan se muestran como una conversación de soporte identificada por la interfaz.
id: image-attachments modulo: nova-support app: plataforma nombre: Adjuntar evidencia visual tipo: accion
Adjuntar evidencia visual
Permite enviar imágenes o una captura de la página como contexto para una consulta de soporte.
Que se logra
- Resultado: la respuesta de soporte puede considerar la evidencia visual aportada por el usuario.
- Caso de uso: un operador adjunta el mensaje de error que ve al configurar un canal para recibir una guía más precisa.
- Se combina con: consulta contextual de Nova Support.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Help > Attach imageoCapture screenshot. - Componente(s):
NovaSupportConsole.tsx,uploadSupportAttachment.ts.
Como funciona
- Abrir una conversación de soporte cargada.
- Usar
Attach imagey elegir imágenes, oCapture screenshot. - Revisar las miniaturas y retirar las que no se quieren enviar.
- Escribir una pregunta opcional y enviarla.
Reglas y validaciones
- Solo acepta JPEG, PNG, WEBP y GIF.
- Se pueden adjuntar hasta cuatro imágenes.
- El adjunto se bloquea mientras hay carga o envío.
Backend
- Servicios:
support-chat-messages(create), firma/carga de archivos de soporte.
Relaciones
- Requiere: una conversación de soporte inicializada.
- Dispara / afecta: contexto visual de la respuesta.
Notas
- Si la carga expira, la interfaz solicita intentarlo de nuevo.
id: message-feedback modulo: nova-support app: plataforma nombre: Calificar respuestas de soporte tipo: accion
Calificar respuestas de soporte
Permite valorar cada respuesta de Nova Support con thumbs up o thumbs down para mejorar las guías.
Que se logra
- Resultado: se identifica si una respuesta ayudó y se conserva contexto cuando no resolvió la necesidad.
- Caso de uso: un equipo de soporte detecta que una guía de configuración falla repetidamente y puede priorizar su revisión.
- Se combina con: consulta contextual y casos internos de soporte.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Help > respuesta de Nova Support > Was this helpful?. - Componente(s):
NovaSupportMessageFeedback.tsx.
Como funciona
- Recibir una respuesta de Nova Support.
- Elegir valoración positiva o negativa.
- Para una negativa, escribir el comentario y usar
Submit feedback. - La interfaz confirma con
Thanks for your feedback.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Valoración | opción | Sí | Positiva o negativa. |
| Comentario | texto | Sí, para negativa | Mínimo cinco caracteres. |
Reglas y validaciones
- Cada usuario puede valorar una respuesta una sola vez.
- Una valoración negativa requiere comentario.
Backend
- Servicios:
support-chat-message-feedback(create).
Relaciones
- Requiere: una respuesta del asistente.
- Dispara / afecta: revisión interna de calidad y posibles casos de soporte.
Notas
- El usuario no puede cambiar la valoración después de enviarla.
id: support-metas modulo: nova-support app: plataforma nombre: Alimentar las guías de soporte tipo: integracion
Alimentar las guías de soporte
Nova Support se alimenta de metadatos estructurados de páginas y componentes, recopilados desde el frontend y publicados para el backend.
Que se logra
- Resultado: Nova Support encuentra conocimiento específico de la página o componente que el usuario está usando.
- Caso de uso: un equipo de producto actualiza una guía de una pantalla y la ayuda contextual refleja ese flujo en la aplicación.
- Se combina con: consulta contextual de Nova Support y validación de metas de soporte.
Donde esta
- Ruta: no tiene una ruta de usuario.
- Acceso en UI: no aplica.
- Componente(s):
src/support-skills/registry.ts, archivos.support-meta.ts.
Como funciona
- Un desarrollador describe una ruta, panel o diálogo real en una meta de soporte.
- La registra en el índice de metas.
- El proceso de recopilación genera el inventario consumido por soporte.
- Nova Support recibe la guía de la página actual y puede cargar guías relacionadas.
Reglas y validaciones
- Las metas deben reflejar UI, rutas y campos reales.
- Los archivos recopilados son generados y no deben editarse manualmente.
Backend
- Servicios:
support-skills(get),nova-support-knowledge-skills(find/get).
Relaciones
- Requiere: registro de metas de frontend.
- Dispara / afecta: precisión contextual de las respuestas.
Notas
- Las metas de administración interna no pertenecen a este módulo de experiencia de usuario.
id: organizacion app: plataforma nombre: Organización estado: shipped permiso: owner o admin de la organización
Organización
Configuración compartida de la organización y catálogos que alimentan el CRM.
Para que sirve
- Una inmobiliaria adapta formularios y catálogos para registrar la información que necesita en contactos, empresas y oportunidades.
- Un centro de atención distribuye conversaciones y tickets entre equipos según su capacidad y horarios.
- Una empresa con varias líneas comerciales mantiene etiquetas y motivos de cierre consistentes para medir la operación.
Que lo hace diferente
- La configuración alimenta directamente CRM, conversaciones, tickets, reservas y documentos de venta; no opera como un catálogo aislado.
- Los campos personalizados se pueden aplicar a varias entidades operativas, incluidas reservas y productos, y los campos de archivos se adjuntan al registro ya creado.
- La asignación automática cubre conversaciones y tickets, con modos básico y avanzado separados.
Acceso
- Ruta principal:
/[orgId]/settings - Como se llega:
Avatar menu > Settings - Permiso requerido: owner o admin de la organización
Alcance tecnico
- Frontend: rutas de Settings y My Profile relacionadas
- Backend: servicios Feathers de este módulo
- Superficies publicas: no aplica salvo integraciones de terceros
- Integraciones externas: Stripe, Google, Microsoft, Wise, Meta, S3 o proveedores de voz según la funcionalidad
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Configuración general de la organización | organization-settings.md | Actualiza nombre, zona horaria, idioma predeterminado, código telefónico y logo. |
| Eliminación de organización | organization-deletion.md | Muestra un preflight, enlaza los bloqueos y exige escribir el nombre antes de confirmar. |
| Gestión de etiquetas | tags-management.md | Crea, edita, duplica, elimina y copia etiquetas de la organización. |
| Definición de campos personalizados | custom-fields-management.md | Crea, edita, elimina y reordena campos para contactos, empresas, deals, tickets, reservas, productos y documentos de venta. |
| Categorías de campos personalizados | custom-field-categories.md | Organiza campos personalizados en categorías visibles en formularios. |
| Archivos en campos personalizados | custom-field-files.md | Permite campos File y Multiple files; los archivos se adjuntan cuando ya existe el registro. |
| Motivos de pérdida de deals | deal-lost-reasons.md | Mantiene el catálogo de motivos disponible al marcar un deal como perdido. |
| Motivos de rechazo de cotizaciones | quote-declined-reasons.md | Mantiene los motivos disponibles al rechazar una cotización. |
| Modos de asignación automática | conversation-auto-assignment.md | Configura de forma independiente la asignación de conversaciones y tickets como Off, Basic o Advanced. |
| Distribución básica de conversaciones | basic-assignment.md | Selecciona el equipo que recibe la distribución simple de conversaciones o tickets. |
| Reglas avanzadas de asignación | advanced-assignment.md | Configura distribución ponderada, horarios y límites por usuario; los tickets tienen su configuración avanzada separada. |
Relaciones
- Depende de: organizaciones, miembros y autenticación.
- Usado por: CRM, automatizaciones y las integraciones descritas.
Limitaciones y notas
- Se documenta únicamente el comportamiento confirmado en frontend, servicios y hooks revisados.
id: advanced-assignment modulo: organizacion app: plataforma nombre: Reglas avanzadas de asignación tipo: configuracion
Reglas avanzadas de asignación
Configura distribución ponderada, horarios y límites por usuario; los tickets tienen su configuración avanzada separada.
Que se logra
- Resultado: La carga se reparte considerando ponderación, horarios y capacidad por usuario.
- Caso de uso: Un BPO distribuye conversaciones entre agentes disponibles sin sobrecargar a un turno.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/conversation-auto-assignment - Acceso en UI:
Auto Assignment >Advanced`` - Componente(s):
AdvancedAssignmentConfig.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Las referencias a usuarios o equipos deben retirarse antes de eliminar un miembro.
Backend
- Servicios:
conversations-auto-assignment-rules - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: basic-assignment modulo: organizacion app: plataforma nombre: Distribución básica de conversaciones tipo: configuracion
Distribución básica de conversaciones
Selecciona el equipo que recibe la distribución simple de conversaciones o tickets.
Que se logra
- Resultado: El trabajo entrante se dirige al equipo definido para distribución simple.
- Caso de uso: Una tienda dirige todas las consultas de preventa al equipo comercial.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/conversation-auto-assignment - Acceso en UI:
Auto Assignment >Basic`` - Componente(s):
BasicAssignmentConfig.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Requiere guardar la configuración para activarla.
Backend
- Servicios:
conversations-auto-assignment-rules - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: conversation-auto-assignment modulo: organizacion app: plataforma nombre: Modos de asignación automática tipo: configuracion
Modos de asignación automática
Configura de forma independiente la asignación de conversaciones y tickets como Off, Basic o Advanced.
Que se logra
- Resultado: Conversaciones y tickets se enrutan usando el modo de asignación seleccionado para cada flujo.
- Caso de uso: Un contact center activa reparto automático de chats y mantiene tickets con otra política.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/conversation-auto-assignment - Acceso en UI:
Settings > Organization > Auto Assignment - Componente(s):
ConversationAutoAssignment.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Una persona referenciada por una regla no se puede remover del equipo.
Backend
- Servicios:
conversations-auto-assignment-rules - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: custom-field-categories modulo: organizacion app: plataforma nombre: Categorías de campos personalizados tipo: configuracion
Categorías de campos personalizados
Organiza campos personalizados en categorías visibles en formularios.
Que se logra
- Resultado: Los campos personalizados se presentan agrupados para facilitar su diligenciamiento.
- Caso de uso: Un concesionario separa datos de vehículo, financiación y documentos en sus formularios.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/custom-fields - Acceso en UI:
Custom Fields >Manage Categories`` - Componente(s):
ManageCategoriesDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Las categorías agrupan antes que el orden de posición.
Backend
- Servicios:
custom-field-categories - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: custom-field-files modulo: organizacion app: plataforma nombre: Archivos en campos personalizados tipo: integracion
Archivos en campos personalizados
Permite campos File y Multiple files; los archivos se adjuntan cuando ya existe el registro.
Que se logra
- Resultado: Los registros existentes pueden conservar archivos asociados a campos personalizados.
- Caso de uso: Una firma legal adjunta soportes del cliente a su ficha de CRM.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/custom-fields - Acceso en UI:
Custom Fields >Add Custom Field`` - Componente(s):
CustomFieldFileUpload.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Los formularios de creación y las superficies públicas ocultan estos campos hasta que el registro existe.
Backend
- Servicios:
custom-fields, s3-url-signing - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: custom-fields-management modulo: organizacion app: plataforma nombre: Definición de campos personalizados tipo: configuracion
Definición de campos personalizados
Crea, edita, elimina y reordena campos para contactos, empresas, deals, tickets, reservas, productos y documentos de venta.
Que se logra
- Resultado: Formularios y registros capturan datos propios del negocio en las entidades que utiliza.
- Caso de uso: Una inmobiliaria agrega datos de presupuesto y tipo de inmueble a sus contactos y oportunidades.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/custom-fields - Acceso en UI:
Settings > Organization > Custom Fields - Componente(s):
CustomFieldsList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Un nombre activo no puede repetirse en el mismo tipo de entidad; el orden se conserva por entidad.
Backend
- Servicios:
custom-fields - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: deal-lost-reasons modulo: organizacion app: plataforma nombre: Motivos de pérdida de deals tipo: configuracion
Motivos de pérdida de deals
Mantiene el catálogo de motivos disponible al marcar un deal como perdido.
Que se logra
- Resultado: Las oportunidades perdidas quedan clasificadas con causas comparables.
- Caso de uso: Un equipo B2B identifica si pierde negocios por precio, competencia o falta de presupuesto.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/deals-lost-reasons - Acceso en UI:
Settings > Organization > Deal Lost Reasons - Componente(s):
DealsLostReasonsList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Se puede agregar, editar y eliminar desde la lista.
Backend
- Servicios:
deals-lost-reasons - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: organization-deletion modulo: organizacion app: plataforma nombre: Eliminación de organización tipo: accion
Eliminación de organización
Muestra un preflight, enlaza los bloqueos y exige escribir el nombre antes de confirmar.
Que se logra
- Resultado: Se evita eliminar una organización hasta conocer bloqueos y confirmar explícitamente la intención.
- Caso de uso: Una agencia cierra una cuenta inactiva sin perder de vista las dependencias que deben resolverse antes.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/general - Acceso en UI:
General >Delete organization`` - Componente(s):
DeleteOrganizationDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Solo owner o superadmin. La eliminación es lógica y se bloquea con suscripción activa, auto-recarga, canales, Webchat, teléfonos, API keys, MCP o clientes de agencia.
Backend
- Servicios:
organizations - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: organization-settings modulo: organizacion app: plataforma nombre: Configuración general de la organización tipo: configuracion
Configuración general de la organización
Actualiza nombre, zona horaria, idioma predeterminado, código telefónico y logo. El logo se guarda inmediatamente; los demás cambios se confirman con Update Settings.
Que se logra
- Resultado: La organización conserva una configuración común para que las áreas de Apex presenten una identidad y preferencias coherentes.
- Caso de uso: Una franquicia define idioma, zona horaria y logo para que cada operador trabaje con la misma referencia.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/general - Acceso en UI:
Settings > Organization > General - Componente(s):
OrganizationSettingsPage.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- El nombre no puede estar vacío. El logo debe ser una imagen de hasta 5 MB.
Backend
- Servicios:
organizations - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: quote-declined-reasons modulo: organizacion app: plataforma nombre: Motivos de rechazo de cotizaciones tipo: configuracion
Motivos de rechazo de cotizaciones
Mantiene los motivos disponibles al rechazar una cotización.
Que se logra
- Resultado: Las cotizaciones rechazadas conservan un motivo para analizar objeciones comerciales.
- Caso de uso: Un proveedor de servicios detecta por qué sus propuestas no avanzan.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/estimates-declined-reasons - Acceso en UI:
Settings > Organization > Quote Declined Reasons - Componente(s):
EstimatesDeclinedReasonsList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Se puede agregar, editar y eliminar desde la lista.
Backend
- Servicios:
estimates-declined-reasons - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: tags-management modulo: organizacion app: plataforma nombre: Gestión de etiquetas tipo: configuracion
Gestión de etiquetas
Crea, edita, duplica, elimina y copia etiquetas de la organización.
Que se logra
- Resultado: Los equipos pueden clasificar contactos y trabajo con etiquetas reutilizables.
- Caso de uso: Una clínica etiqueta prospectos por servicio de interés para segmentar su seguimiento.
- Se combina con: Configuración de organización, CRM y automatizaciones.
Donde esta
- Ruta:
/[orgId]/settings/tags - Acceso en UI:
Settings > Organization > Tags - Componente(s):
TagsList.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Las etiquetas se reutilizan para segmentar entidades del CRM.
Backend
- Servicios:
tags - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: partners-affiliates app: plataforma nombre: Agencias y afiliados estado: partial permiso: owner o admin de la organización
Agencias y afiliados
Superficie tenant del programa de partners: captación, clientes, comisiones y cobros.
Para que sirve
- Una agencia incorpora organizaciones cliente y sigue las comisiones derivadas de sus suscripciones y consumo elegible.
- Un afiliado comparte enlaces de referido y revisa las visitas y clientes atribuidos.
- Un partner solicita el pago de comisiones elegibles hacia una cuenta bancaria o de mobile money configurada para Wise.
Que lo hace diferente
- Agencia y afiliado comparten un programa de atribución, clientes y libro de comisiones dentro de la misma plataforma donde se facturan los clientes.
- Las comisiones se registran por eventos de cobro y se distinguen entre pendientes, elegibles, pagadas o canceladas.
- Los payouts se solicitan hacia destinos Wise o bancarios gestionados por el partner, sin exportar el seguimiento a otra herramienta.
Acceso
- Ruta principal:
/[orgId]/settings - Como se llega:
Avatar menu > Settings - Permiso requerido: owner o admin de la organización
Alcance tecnico
- Frontend: rutas de Settings y My Profile relacionadas
- Backend: servicios Feathers de este módulo
- Superficies publicas: no aplica salvo integraciones de terceros
- Integraciones externas: Stripe, Google, Microsoft, Wise, Meta, S3 o proveedores de voz según la funcionalidad
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Solicitud de agencia | partner-application.md | Permite postular la organización al programa de agencias. |
| Enlaces de referido | referral-links.md | Muestra y copia enlaces de registro e inicio con atribución de partner. |
| Asignación de organizaciones cliente | partner-clients.md | Crea y asigna un cliente o vincula una organización existente al partner. |
| Resumen y proyección de comisiones | partner-commissions.md | Muestra saldo pendiente, elegible, pagado, clientes y gráficas diarias/mensuales de ganancias. |
| Historial de transacciones de comisión | partner-transactions.md | Lista transacciones de comisión y su estado. |
| Cuenta de cobro Wise | payout-accounts.md | Registra destinos bancarios o de mobile money y presenta el resumen enmascarado. |
| Solicitud de payout | partner-payouts.md | Solicita el retiro de comisiones elegibles hacia la cuenta activa. |
Relaciones
- Depende de: organizaciones, miembros y autenticación.
- Usado por: CRM, automatizaciones y las integraciones descritas.
Limitaciones y notas
- Se documenta únicamente el comportamiento confirmado en frontend, servicios y hooks revisados.
id: partner-application modulo: partners-affiliates app: plataforma nombre: Solicitud de agencia tipo: accion
Solicitud de agencia
Permite postular la organización al programa de agencias.
Que se logra
- Resultado: Una organización puede postularse para participar como agencia.
- Caso de uso: Una consultora CRM inicia su proceso para referir y administrar clientes.
- Se combina con: Suscripciones, wallet y organizaciones cliente.
Donde esta
- Ruta:
/[orgId]/settings/agencies-and-affiliates - Acceso en UI:
Settings > Agencies & Affiliates >Apply`` - Componente(s):
AgencyApplicationDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- La aplicación pasa por estados; las herramientas de partner requieren aprobación.
Backend
- Servicios:
partners-agency-applications - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: partner-clients modulo: partners-affiliates app: plataforma nombre: Asignación de organizaciones cliente tipo: accion
Asignación de organizaciones cliente
Crea y asigna un cliente o vincula una organización existente al partner.
Que se logra
- Resultado: El partner vincula una organización cliente nueva o existente a su red.
- Caso de uso: Una agencia conecta a un cliente que acaba de implementar Apex.
- Se combina con: Suscripciones, wallet y organizaciones cliente.
Donde esta
- Ruta:
/[orgId]/settings/agencies-and-affiliates - Acceso en UI:
Agencies & Affiliates > Assign Organization - Componente(s):
AssignExistingOrganizationDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Una agencia con clientes activos no puede eliminar su organización.
Backend
- Servicios:
organizations, partners-metrics - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: partner-commissions modulo: partners-affiliates app: plataforma nombre: Resumen y proyección de comisiones tipo: vista
Resumen y proyección de comisiones
Muestra saldo pendiente, elegible, pagado, clientes y gráficas diarias/mensuales de ganancias.
Que se logra
- Resultado: El partner sigue saldos y proyecciones de las comisiones generadas por su cartera.
- Caso de uso: Una agencia revisa sus ingresos antes de planificar el cobro del mes.
- Se combina con: Suscripciones, wallet y organizaciones cliente.
Donde esta
- Ruta:
/[orgId]/settings/agencies-and-affiliates - Acceso en UI:
Agencies & Affiliates > panel principal - Componente(s):
AgenciesAndAffiliatesPage.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Las comisiones pasan a elegibles 60 días después de la transacción original.
Backend
- Servicios:
partners-metrics - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: partner-payouts modulo: partners-affiliates app: plataforma nombre: Solicitud de payout tipo: accion
Solicitud de payout
Solicita el retiro de comisiones elegibles hacia la cuenta activa.
Que se logra
- Resultado: Las comisiones elegibles pueden convertirse en una solicitud de pago hacia la cuenta activa.
- Caso de uso: Un afiliado solicita el retiro de su saldo acumulado.
- Se combina con: Suscripciones, wallet y organizaciones cliente.
Donde esta
- Ruta:
/[orgId]/settings/agencies-and-affiliates - Acceso en UI:
Agencies & Affiliates >Payouts>Request Payout`` - Componente(s):
RequestPayoutDialog.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Mínimo USD 100 y solo una solicitud abierta; la tarifa del proveedor se descuenta del monto recibido.
Backend
- Servicios:
partners-payouts - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: partner-transactions modulo: partners-affiliates app: plataforma nombre: Historial de transacciones de comisión tipo: vista
Historial de transacciones de comisión
Lista transacciones de comisión y su estado.
Que se logra
- Resultado: Cada comisión queda trazable con su estado y evento de origen.
- Caso de uso: Un afiliado concilia qué pagos de clientes ya son elegibles para retiro.
- Se combina con: Suscripciones, wallet y organizaciones cliente.
Donde esta
- Ruta:
/[orgId]/settings/agencies-and-affiliates - Acceso en UI:
Agencies & Affiliates >Transactions`` - Componente(s):
AgencyAffiliatesTabs.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Los estados visibles incluyen pendiente, elegible, pagada o cancelada.
Backend
- Servicios:
partners-transactions - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: payout-accounts modulo: partners-affiliates app: plataforma nombre: Cuenta de cobro Wise tipo: configuracion
Cuenta de cobro Wise
Registra destinos bancarios o de mobile money y presenta el resumen enmascarado.
Que se logra
- Resultado: El partner registra un destino para recibir pagos y revisa su resumen protegido.
- Caso de uso: Una agencia configura su cuenta bancaria para cobrar comisiones mediante Wise.
- Se combina con: Suscripciones, wallet y organizaciones cliente.
Donde esta
- Ruta:
/[orgId]/settings/agencies-and-affiliates - Acceso en UI:
Agencies & Affiliates >Payout Method`` - Componente(s):
PayoutAccountsTab.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- Los detalles completos se envían al proveedor; debe existir una cuenta activa antes de solicitar retiro.
Backend
- Servicios:
partner-payout-accounts - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: referral-links modulo: partners-affiliates app: plataforma nombre: Enlaces de referido tipo: vista
Enlaces de referido
Muestra y copia enlaces de registro e inicio con atribución de partner.
Que se logra
- Resultado: El partner comparte enlaces que permiten atribuir nuevos registros a su organización.
- Caso de uso: Un afiliado publica su enlace en una campaña y mide los clientes resultantes.
- Se combina con: Suscripciones, wallet y organizaciones cliente.
Donde esta
- Ruta:
/[orgId]/settings/agencies-and-affiliates - Acceso en UI:
Agencies & Affiliates > Partner Links - Componente(s):
AgenciesAndAffiliatesPage.tsx
Como funciona
- El usuario abre la sección indicada.
- Revisa o completa las opciones disponibles.
- Confirma la acción con el control de la interfaz cuando aplica.
- La interfaz actualiza el resultado o informa el error.
Reglas y validaciones
- La atribución de navegador se conserva 10 días; las visitas se deduplican 24 horas.
Backend
- Servicios:
partner-link-visits - Hooks relevantes solo si cambian el comportamiento visible: validación, autorización y efectos de integración asociados.
- Efectos: se aplican los movimientos, sincronizaciones, notificaciones o webhooks descritos por esta capacidad.
Relaciones
- Requiere: organización activa y acceso a la sección.
- Dispara / afecta: las entidades e integraciones administradas por esta funcionalidad.
Notas
- Los comportamientos no expuestos en las superficies revisadas no se detallan.
id: softphone app: plataforma nombre: SoftPhone estado: shipped permiso: agente de voz configurado
SoftPhone
Teléfono WebRTC dentro de la aplicación para agentes de voz, con marcación, llamadas entrantes y controles de llamada.
Para que sirve
- Un contact center atiende llamadas entrantes y salientes desde el CRM.
- Una clínica devuelve llamadas a pacientes desde el contacto o el historial reciente.
- Un equipo comercial toma la siguiente llamada de una cola sin cambiar de aplicación.
Que lo hace diferente
- Se conecta como agente mediante WebRTC desde el
Header, sin ingresar credenciales SIP. - Relaciona contactos y llamadas recientes con la marcación desde la misma aplicación.
- Incluye cola, disponibilidad del agente y controles de audio durante la llamada.
- Usa la infraestructura de llamadas de Telnyx configurada para la organización.
Acceso
- Ruta principal: disponible en
/[orgId]/.... - Como se llega:
Header > Phone icon. - Permiso requerido: ser agente de voz y tener un número activo en la organización.
Alcance tecnico
- Frontend:
VoiceIcon,SoftPhone,VoiceProvidery paneles de voz. - Backend: canales y eventos de voz; credenciales WebRTC.
- Integraciones externas: Telnyx WebRTC.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Conectarse al teléfono | webrtc-connection.md | Conexión automática como agente. |
| Llamar desde el marcador | outbound-calling.md | Número, país e identificador de salida. |
| Atender llamadas entrantes | incoming-calls.md | Aceptar o rechazar la llamada. |
| Controlar una llamada | call-controls.md | Silencio, espera, DTMF y colgar. |
| Usar cola de llamadas | call-queue.md | Atiende el siguiente o uno específico. |
| Consultar contactos e historial | contacts-and-recents.md | Llamadas desde CRM y recientes. |
Relaciones
- Depende de: Calling & SMS, agentes de voz, números activos y permisos del navegador.
- Usado por: conversaciones, CRM e historial de llamadas.
Limitaciones y notas
- No se ingresan credenciales SIP en el SoftPhone; se conecta automáticamente.
- Las credenciales para Zoiper se consultan aparte en
Settings > Calling & SMS > Agents.
id: call-controls modulo: softphone app: plataforma nombre: Controlar una llamada tipo: accion
Controlar una llamada
Durante una llamada activa, el agente puede silenciar audio, ponerla en espera, enviar tonos y terminarla.
Que se logra
- Resultado: el agente gestiona la conversación telefónica sin usar un softphone externo.
- Caso de uso: una mesa de ayuda pone en espera a un cliente mientras consulta información y después retoma la llamada.
- Se combina con: llamadas entrantes y salientes, historial de llamadas y dispositivos de audio.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Phone icon > llamada activa. - Componente(s):
SoftPhone.tsx,AudioControls.tsx.
Como funciona
- Establecer o atender una llamada.
- Pulsar
Mutepara alternar el micrófono. - Pulsar
Holdpara alternar espera. - Abrir
DTMFo#y marcar tonos. - Pulsar
Hang uppara finalizar.
Reglas y validaciones
- Los controles solo aparecen durante una llamada activa.
Backend
- Servicios:
voice-call-events(create/find).
Relaciones
- Requiere: llamada WebRTC activa.
- Dispara / afecta: estado y registro de la llamada.
Notas
- La selección de micrófono y parlante está disponible en
Audio.
id: call-queue modulo: softphone app: plataforma nombre: Usar cola de llamadas tipo: vista
Usar cola de llamadas
Muestra las llamadas en espera y permite atender la siguiente o una llamada elegida por el agente.
Que se logra
- Resultado: las llamadas en espera se distribuyen a agentes disponibles desde una cola visible.
- Caso de uso: un contact center atiende primero al siguiente cliente o prioriza una llamada con mayor tiempo de espera.
- Se combina con: configuración de cola, conexión WebRTC y llamadas entrantes.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Phone icon > Queue. - Componente(s):
VoiceQueuePanel.tsx.
Como funciona
- Habilitar la cola en
Settings > Calling & SMS > Calling > Queue. - Abrir
Queueen el SoftPhone. - Consultar conteo, posición y tiempo de espera.
- Elegir
Answer next in queueoAnsweren una fila.
Reglas y validaciones
- Solo se puede atender si hay conexión, disponibilidad, ninguna llamada activa y llamadas esperando.
Backend
- Servicios: canal de voz y cola.
Relaciones
- Requiere: cola habilitada y conexión WebRTC.
- Dispara / afecta: llamadas entrantes de la organización.
Notas
- La pestaña no se muestra si la cola está deshabilitada.
id: contacts-and-recents modulo: softphone app: plataforma nombre: Llamar desde contactos e historial tipo: vista
Llamar desde contactos e historial
Permite buscar contactos y reutilizar llamadas recientes desde el SoftPhone.
Que se logra
- Resultado: un agente llama a contactos o devuelve llamadas anteriores sin volver a escribir el número.
- Caso de uso: una agencia de cobro busca un cliente y devuelve su última llamada desde el mismo panel.
- Se combina con: CRM, historial de llamadas y marcador.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Phone icon > ContactsoRecent. - Componente(s):
SoftPhone.tsx,useContactSearch.ts,useRecentCalls.ts.
Como funciona
- Abrir
Contactspara buscar una persona. - Pulsar el botón de teléfono del contacto.
- O abrir
Recenty seleccionar una llamada anterior. - Confirmar o editar el número antes de llamar.
Reglas y validaciones
- Se aplican los mismos requisitos de conexión y número activo del marcador.
Backend
- Servicios: contactos y
voice-call-events(find).
Relaciones
- Requiere: CRM y conexión WebRTC.
- Dispara / afecta: llamada saliente e historial.
Notas
- Por confirmar: si todas las entradas recientes permiten rellamada directa.
id: incoming-calls modulo: softphone app: plataforma nombre: Atender llamadas entrantes tipo: accion
Atender llamadas entrantes
Presenta una llamada entrante al agente conectado y permite aceptarla o rechazarla.
Que se logra
- Resultado: una llamada enrutada llega al agente disponible y se atiende desde el CRM.
- Caso de uso: un equipo de admisiones responde una llamada de un paciente sin abandonar la ficha de trabajo.
- Se combina con: conexión WebRTC, routing de llamadas y controles de llamada.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI: aviso de llamada entrante desde
Header > Phone icon. - Componente(s):
VoiceNotifications.tsx,SoftPhone.tsx.
Como funciona
- Mantener el teléfono conectado y el agente disponible.
- Recibir el aviso de llamada.
- Elegir
AnsweroDecline.
Reglas y validaciones
- La llamada no se puede atender desde la cola si el agente no está disponible o ya tiene una llamada activa.
Backend
- Servicios:
voice-call-events(create/find).
Relaciones
- Requiere: WebRTC, disponibilidad del agente y routing configurado.
- Dispara / afecta: controles y registro de la llamada.
Notas
- La disponibilidad para voz es independiente de la disponibilidad de chat.
id: outbound-calling modulo: softphone app: plataforma nombre: Llamar desde el marcador tipo: accion
Llamar desde el marcador
Permite marcar un número o utilizar un contacto, seleccionando el identificador de llamada cuando hay varios números activos.
Que se logra
- Resultado: un agente inicia una llamada saliente usando un número válido de la organización.
- Caso de uso: una inmobiliaria devuelve una llamada a un prospecto desde el CRM y selecciona la línea de su sede.
- Se combina con: contactos, llamadas recientes y conexión WebRTC.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Phone icon > Dial. - Componente(s):
SoftPhone.tsx.
Como funciona
- Abrir
Dial. - Elegir
Outgoing Caller IDsi hay varias opciones. - Escribir el número o usar el teclado y el prefijo de país.
- Pulsar
Call.
Reglas y validaciones
Callexige una llamada inactiva y al menos un número activo.
Backend
- Servicios: canales y eventos de voz.
Relaciones
- Requiere: conexión WebRTC activa.
- Dispara / afecta: historial y eventos de llamadas.
Notas
- Desde
ContactsyRecenttambién se puede iniciar una llamada.
id: webrtc-connection modulo: softphone app: plataforma nombre: Conectarse al teléfono WebRTC tipo: integracion
Conectarse al teléfono WebRTC
Abre el teléfono in-app y establece la conexión WebRTC del agente de voz.
Que se logra
- Resultado: el agente queda disponible para atender y originar llamadas desde el CRM.
- Caso de uso: un asesor de una aseguradora inicia su turno y se conecta sin configurar un teléfono externo.
- Se combina con: llamadas entrantes, marcador y cola de llamadas.
Donde esta
- Ruta:
/[orgId]/.... - Acceso en UI:
Header > Phone icon. - Componente(s):
VoiceIcon.tsx,VoiceProvider.tsx.
Como funciona
- Ingresar como agente de voz.
- Pulsar el icono de teléfono.
- Esperar el estado de conexión.
- Confirmar que el agente esté disponible antes de llamar.
Reglas y validaciones
- Requiere número de organización activo y agente configurado.
- La interfaz puede mostrar conexión, desconexión, error o indisponibilidad.
Backend
- Servicios: canales de voz y credenciales WebRTC.
Relaciones
- Requiere: Telnyx y permisos de micrófono.
- Dispara / afecta: disponibilidad de llamadas salientes y entrantes.
Notas
- Por confirmar: nombre exacto del servicio que emite las credenciales temporales.
APP: presentations
id: presentations app: presentations nombre: Presentations estado: shipped permiso: can_access_presentations
Presentations
Creador de presentaciones con diapositivas HTML/CSS, IA, versiones y reproducción pública. Esta app es un módulo único; sus capacidades viven directamente en esta carpeta.
Para que sirve
- Una consultora crea y comparte una propuesta comercial con un enlace público que solo muestra la versión aprobada.
- Un equipo de ventas adapta un deck a la identidad de cada cuenta, genera un PDF y conserva su guion de presentación.
- Una agencia duplica una presentación de referencia para acelerar entregables sin reutilizar el enlace público anterior.
- Una empresa prepara una capacitación con animaciones, gráficos y notas sincronizadas para el facilitador.
Que lo hace diferente
- Presentation AI puede crear, reordenar y editar diapositivas, generar imágenes y consultar una web pública desde el builder.
- Cada deck separa el borrador de la versión
Live: los cambios de trabajo no alteran el enlace compartido hastaPublish. - El enlace público usa un token y ofrece modo de presentación, notas sincronizadas y descarga de la versión
Liveen PDF. - El contexto y las skills se conservan por deck, e incluyen capacidades nativas para movimiento y gráficos de diapositivas.
Acceso
- Ruta principal:
/[orgId]/presentations - Como se llega:
Header app switcher > Presentations - Permiso requerido:
can_access_presentations
Alcance tecnico
- Frontend: lista, builder y vistas públicas de Presentations
- Backend: decks, slides, render, IA, versiones y PDFs
- Superficies públicas:
/p/[token]y/p/[token]/notes - Integraciones externas: S3, OpenRouter y Puppeteer
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear una presentación | create-presentation.md | CreatePresentationDialog.tsx |
| Organizar carpetas y acceso | collections-access.md | PresentationsListView.tsx, PresentationAccessDialog.tsx |
| Duplicar una presentación | duplicate-presentation.md | DuplicatePresentationDialog.tsx |
| Gestionar y editar diapositivas | slides-inline-editing.md | PresentationsBuilderView.tsx, PresentationReplaceImageDialog.tsx |
| Añadir notas y guion del orador | speaker-notes.md | PresentationSlideNotesDialog.tsx |
| Configurar tema y marca | presentation-theme.md | PresentationThemePanel.tsx, GetThemeFromWebsiteDialog.tsx |
| Crear con Presentation AI | presentation-ai.md | usePresentationBuilderAI.ts, PresentationsBuilderView.tsx |
| Configurar contexto y skills de Presentation AI | presentation-ai-context-skills.md | PresentationAIContextPanel.tsx |
| Gestionar versiones y publicar Live | versions-publish.md | PresentationVersionsMenu.tsx |
| Compartir y presentar públicamente | public-presentation.md | PresentationPublicView.tsx, PresentationSpeakerNotesView.tsx |
| Descargar presentación en PDF | presentation-pdf.md | PresentationsBuilderView.tsx, PresentationPublicView.tsx |
Relaciones
- Depende de: Organizations, wallet y recursos S3.
- Usado por: personas presentadoras y visitantes con enlace público.
Limitaciones y notas
- El borrador no actualiza el enlace público hasta
Publish. - La visibilidad interna y el enlace público son controles independientes.
id: collections-access modulo: presentations app: presentations nombre: Organizar carpetas y acceso tipo: configuracion
Organizar carpetas y acceso
Agrupa presentaciones y controla propietario, visibilidad y miembros de carpetas o decks.
Que se logra
- Resultado: cada equipo ve y administra únicamente las carpetas y presentaciones que le corresponden.
- Caso de uso: una agencia mantiene privadas las propuestas de cada cliente y comparte una carpeta con las personas asignadas.
- Se combina con: duplicación de presentaciones y publicación pública.
Donde esta
- Ruta:
/[orgId]/presentations - Acceso en UI:
Presentations > folder menu / card menu >Manage access`` - Componente(s):
PresentationsListView.tsx, PresentationAccessDialog.tsx
Como funciona
- Cree o seleccione una carpeta.
- Abra
Manage access. - Elija
OrganizationoPrivate, propietario y miembros. - Guarde los cambios.
Reglas y validaciones
- Una carpeta privada oculta las presentaciones que contiene a quien no tenga acceso.
- Solo los administradores del recurso pueden administrar miembros.
- Al agregar a una carpeta se puede incluir presentaciones existentes.
Backend
- Servicios:
presentation-collections,presentation-members,presentation-collection-members.
Relaciones
- Requiere: acceso al deck o carpeta.
- Afecta: visibilidad de presentaciones.
id: create-presentation modulo: presentations app: presentations nombre: Crear una presentación tipo: accion
Crear una presentación
Crea un deck con una diapositiva inicial y abre el builder.
Que se logra
- Resultado: un borrador de presentación con una diapositiva inicial, acceso del propietario y una base para diseñar o usar IA.
- Caso de uso: una consultora inicia una propuesta para un cliente y organiza el deck en la carpeta de su cuenta.
- Se combina con: tema, Presentation AI, versiones y publicación
Live.
Donde esta
- Ruta:
/[orgId]/presentations - Acceso en UI:
Presentations >New presentation`` - Componente(s):
CreatePresentationDialog.tsx
Como funciona
- Abra
Presentations. - Seleccione
New presentation. - Escriba el nombre y, opcionalmente, una carpeta.
- Confirme para abrir el builder.
Reglas y validaciones
- El nombre es obligatorio.
- Puede copiar tema, CSS compartido, skills y contexto; no copia diapositivas.
Backend
- Servicios:
presentations(create). - Efectos: crea una diapositiva inicial, token público y membresía de propietario.
Relaciones
- Requiere: acceso a Presentations.
- Afecta: builder, visibilidad y versiones.
id: duplicate-presentation modulo: presentations app: presentations nombre: Duplicar una presentación tipo: accion
Duplicar una presentación
Copia un deck completo, incluso diapositivas, recursos, tema, skills y contexto de IA.
Que se logra
- Resultado: una nueva presentación parte de una estructura y marca probadas, sin compartir su historial ni enlace público.
- Caso de uso: un equipo comercial duplica una propuesta ganadora para personalizarla para otra cuenta.
- Se combina con: carpetas y acceso, tema, Presentation AI y publicación
Live.
Donde esta
- Ruta:
/[orgId]/presentations - Acceso en UI:
Presentation card >Duplicate`` - Componente(s):
DuplicatePresentationDialog.tsx
Como funciona
- Abra el menú de la tarjeta.
- Seleccione
Duplicate. - Indique un nuevo nombre y, si está disponible, la organización destino.
- Confirme.
Reglas y validaciones
- El duplicado es un borrador nuevo: no conserva publicación pública, historial ni chat.
- La fuente debe ser visible para la persona que duplica.
Backend
- Servicios:
presentation-duplicate(create). - Efectos: crea nuevas relaciones y una nueva membresía de propietario.
Relaciones
- Requiere: acceso a la presentación fuente.
- Afecta: colecciones y recursos del destino.
id: presentation-ai-context-skills modulo: presentations app: presentations nombre: Configurar contexto y skills de Presentation AI tipo: configuracion
Configurar contexto y skills de Presentation AI
Define contexto o memoria por deck o diapositiva y habilita skills de organización o Apex para la IA.
Que se logra
- Resultado: la IA dispone de instrucciones y guías reutilizables para mantener coherencia en el deck y en diapositivas concretas.
- Caso de uso: un equipo de producto fija su audiencia y tono en el contexto, y activa
Slide Chartspara comunicar métricas en su presentación. - Se combina con: Presentation AI, tema y versiones.
Donde esta
- Ruta:
/[orgId]/presentations/[presentationId] - Acceso en UI:
Builder >AI Context`` - Componente(s):
PresentationAIContextPanel.tsx
Como funciona
- Abra
AI Context. - Cree entradas de
ContextoMemory, opcionalmente para la diapositiva activa. - Active o desactive skills desde
Skills.
Reglas y validaciones
- Las skills son de todo el deck, no por diapositiva.
Slide MotionySlide Chartsse activan por defecto en decks nuevos;Design Taste (Slides)inicia desactivada.
Backend
- Servicios:
presentation-ai-context,presentation-ai-skills,presentation-ai-skill-assignments,apex-presentation-ai-skills.
Relaciones
- Requiere: deck existente.
- Afecta: instrucciones y resultados de Presentation AI.
id: presentation-ai modulo: presentations app: presentations nombre: Crear con Presentation AI tipo: accion
Crear con Presentation AI
Usa chat de IA para diseñar y modificar diapositivas, ordenarlas, generar imágenes, capturar vistas y consultar web pública.
Que se logra
- Resultado: un deck evoluciona mediante instrucciones, desde el contenido y orden de las diapositivas hasta imágenes y gráficos renderizados.
- Caso de uso: una startup entrega a Presentation AI los puntos de su pitch y obtiene un borrador visual que luego revisa y publica.
- Se combina con: tema, contexto y skills, recursos, versiones y publicación
Live.
Donde esta
- Ruta:
/[orgId]/presentations/[presentationId] - Acceso en UI:
Builder toolbar >AI`` - Componente(s):
usePresentationBuilderAI.ts, PresentationsBuilderView.tsx
Como funciona
- Abra
AI. - Seleccione la diapositiva activa y el viewport.
- Escriba la solicitud o adjunte recursos.
- Revise el resultado y el estado sin publicar.
Reglas y validaciones
- Requiere saldo positivo en la wallet.
- La IA lee la diapositiva antes de editarla y controla hashes para evitar sobrescrituras.
- Las capturas de validación no aparecen como recursos reutilizables.
Backend
- Servicios:
presentation-builder-ai(create),presentation-builder-conversations,presentation-builder-messages,presentation-assets. - Efectos: cobra wallet y puede modificar deck, diapositivas o recursos.
Relaciones
- Requiere: presentación y diapositiva activa.
- Afecta: versiones y estado de publicación.
id: presentation-pdf modulo: presentations app: presentations nombre: Descargar presentación en PDF tipo: accion
Descargar presentación en PDF
Genera un PDF de servidor para el deck en formato Desktop o Mobile.
Que se logra
- Resultado: el deck se entrega como un archivo descargable adaptado a pantalla de escritorio o móvil.
- Caso de uso: un equipo comercial descarga la versión aprobada para adjuntarla a una propuesta enviada por correo.
- Se combina con: tema, edición de diapositivas, versiones
Livey presentación pública.
Donde esta
- Ruta:
/[orgId]/presentations/[presentationId] y /p/[token] - Acceso en UI:
Builder toolbar >Download PDF`` - Componente(s):
PresentationsBuilderView.tsx, PresentationPublicView.tsx
Como funciona
- Seleccione
Download PDF. - Elija
DesktopoMobile. - Abra el enlace de descarga generado.
Reglas y validaciones
- El builder exporta el borrador; el enlace público exporta Live.
- El PDF admite hasta 80 diapositivas.
- El enlace firmado expira después de 24 horas.
Backend
- Servicios:
pdf-generator(create),public-presentation-pdf(create). - Integraciones: Puppeteer y S3.
Relaciones
- Requiere: presentación o enlace público válido.
- Afecta: archivo descargable.
id: presentation-theme modulo: presentations app: presentations nombre: Configurar tema y marca tipo: configuracion
Configurar tema y marca
Personaliza colores, radio, fuentes Google o de marca; también puede analizar un sitio público para preparar una propuesta de tema.
Que se logra
- Resultado: todas las diapositivas usan una identidad visual preparada para vista previa, presentación pública y PDF.
- Caso de uso: una agencia analiza el sitio de su cliente, revisa la propuesta de tema y aplica su marca al deck de lanzamiento.
- Se combina con: recursos, Presentation AI, edición de diapositivas y PDF.
Donde esta
- Ruta:
/[orgId]/presentations/[presentationId] - Acceso en UI:
Builder >Theme`` - Componente(s):
PresentationThemePanel.tsx, GetThemeFromWebsiteDialog.tsx
Como funciona
- Abra
Theme. - Ajuste tokens o elija fuentes.
- Opcionalmente seleccione
Get theme from website, analice una URL y revise la propuesta. - Guarde el tema o
Save and apply theme.
Reglas y validaciones
- La propuesta web no cambia el deck hasta confirmarla.
- Las herramientas de chat no modifican las fuentes.
- Copiar tema no copia diapositivas ni skills.
Backend
- Servicios:
presentations(patch),presentation-assets,presentation-builder-ai. - Efectos: el guardado crea un checkpoint y actualiza preview, público y PDF.
Relaciones
- Requiere: deck existente.
- Afecta: todas las diapositivas.
id: public-presentation modulo: presentations app: presentations nombre: Compartir y presentar públicamente tipo: publico
Compartir y presentar públicamente
Comparte la última versión Live en un reproductor público con presentación a pantalla completa y ventana de notas sincronizada.
Que se logra
- Resultado: una audiencia externa accede a una presentación controlada por el equipo mediante un enlace público con token.
- Caso de uso: una agencia envía a su cliente un enlace de propuesta que conserva la diapositiva abierta y permite presentar a pantalla completa.
- Se combina con: publicación
Live, notas del orador y descarga de PDF.
Donde esta
- Ruta:
/p/[token] - Acceso en UI:
Builder >Share>Make public`` - Componente(s):
PresentationPublicView.tsx, PresentationSpeakerNotesView.tsx
Como funciona
- Active
Make publicenShare. - Copie
/p/[token]. - Publique el borrador desde
Versionscuando esté listo. - En la página pública use
PresentoNotes window.
Reglas y validaciones
- Si no hay versión Live, la primera activación pública publica el borrador.
- Desactivar el switch invalida el enlace inmediatamente.
- El hash de la URL conserva la diapositiva actual.
Backend
- Servicios:
presentation-public(create). - Efectos: expone solamente la instantánea publicada y notas/guion asociados.
Relaciones
- Requiere: token público activo y versión publicada.
- Afecta: espectadores externos.
id: slides-inline-editing modulo: presentations app: presentations nombre: Gestionar y editar diapositivas tipo: accion
Gestionar y editar diapositivas
Añade, ordena, elimina y corrige diapositivas desde el filmstrip y la vista previa.
Que se logra
- Resultado: el equipo ajusta la secuencia y el contenido visible del deck sin editar archivos externos.
- Caso de uso: una empresa reorganiza una presentación de producto y reemplaza una imagen antes de una demostración de ventas.
- Se combina con: tema, notas del orador, versiones y publicación
Live.
Donde esta
- Ruta:
/[orgId]/presentations/[presentationId] - Acceso en UI:
Filmstrip >+; preview > text or image - Componente(s):
PresentationsBuilderView.tsx, PresentationReplaceImageDialog.tsx
Como funciona
- Use
+para agregar una diapositiva. - Seleccione una fila para navegar.
- Haga clic en texto para editarlo o en una imagen para reemplazarla.
- Use el icono de basura para eliminar una diapositiva.
Reglas y validaciones
- Debe permanecer al menos una diapositiva.
- La edición en línea no permite arrastrar ni redimensionar el diseño.
- Los cambios afectan el borrador, no el enlace público hasta publicar.
Backend
- Servicios:
presentation-slides(find/create/patch/remove),presentation-render. - Efectos: guarda historial individual de HTML/CSS de la diapositiva.
Relaciones
- Requiere: deck existente.
- Afecta: versiones de diapositiva y estado sin publicar.
id: speaker-notes modulo: presentations app: presentations nombre: Añadir notas y guion del orador tipo: configuracion
Añadir notas y guion del orador
Mantiene recordatorios breves y un guion hablado para cada diapositiva.
Que se logra
- Resultado: la persona que presenta dispone de apoyo por diapositiva sin añadir ese contenido al material que ve la audiencia.
- Caso de uso: una empresa prepara el guion de una demo para que distintos representantes expliquen la oferta de forma consistente.
- Se combina con: presentación pública, versiones
Livey PDF.
Donde esta
- Ruta:
/[orgId]/presentations/[presentationId] - Acceso en UI:
Filmstrip row > notes icon; preview >Notes/Script`` - Componente(s):
PresentationSlideNotesDialog.tsx
Como funciona
- Seleccione una diapositiva.
- Abra el icono de notas o pulse
N/Sen la vista previa. - Edite
NotesoScript. - Guarde o salga de la superposición.
Reglas y validaciones
- Notas y guion se muestran como paneles alternativos.
- El builder permite editar; la presentación pública solo permite lectura.
Backend
- Servicios:
presentation-slides(patch),presentation-render.
Relaciones
- Requiere: diapositiva.
- Afecta: modo Present, ventana de notas y versión publicada.
id: versions-publish modulo: presentations app: presentations nombre: Gestionar versiones y publicar Live tipo: accion
Gestionar versiones y publicar Live
Guarda checkpoints del deck, restaura historial y fija la instantánea Live que usa el enlace público.
Que se logra
- Resultado: el equipo puede experimentar en el borrador y compartir una versión estable que no cambia hasta la próxima publicación.
- Caso de uso: una consultora guarda una versión de revisión y publica solo la propuesta aprobada para su cliente.
- Se combina con: edición de diapositivas, Presentation AI, presentación pública y PDF.
Donde esta
- Ruta:
/[orgId]/presentations/[presentationId] - Acceso en UI:
Builder >Versions`` - Componente(s):
PresentationVersionsMenu.tsx
Como funciona
- Abra
Versions. - Use
Save versionpara un checkpoint manual. - Elija un checkpoint, la versión Live o el historial de la diapositiva.
- Seleccione
Publishpara actualizar Live.
Reglas y validaciones
- El borrador y Live son separados.
- Restaurar crea un nuevo checkpoint para que sea reversible.
- Se conservan los checkpoints recientes y se protege la versión publicada.
Backend
- Servicios:
presentation-restore,presentation-slide-restore,presentations,presentation-slides.
Relaciones
- Requiere: deck existente.
- Afecta: enlace público, PDF público e historial.
APP: reservations
Reservations
Citas, servicios, recursos y booking publico.
- Etapa: Produccion
- Landing:
/{orgId}/reservations/calendar
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Calendar | calendar |
shipped | Calendario de citas. |
| Services | services |
shipped | Servicios reservables. |
| Resources | resources |
shipped | Recursos y disponibilidad. |
| Booking links | booking-links |
shipped | Links de reserva de staff. |
| Notifications | notifications |
shipped | Emails de confirmacion y reminder. |
| Booking publico | booking-publico |
public | Self-booking /b/{orgId}/{slug}. |
Funcionalidades internas
40 funcionalidades documentadas en 6 modulos. Ver la tabla de cada modulo.
id: booking-links app: reservations nombre: Booking links estado: shipped permiso: can_access_reservations
Booking links
Configura URLs públicas de reserva con servicios, formulario y presentación por enlace.
Para que sirve
- Una barbería comparte un enlace por cada profesional o servicio para captar citas sin intervención manual.
- Una clínica inserta su reserva en el sitio web con un formulario y políticas propias.
- Un coworking comparte una URL para reservar salas o todos los servicios disponibles.
Que lo hace diferente
- El enlace publica servicios y disponibilidad definidos dentro del calendario operativo de Apex.
- Cada reserva del enlace termina vinculada a un contacto CRM, no solo a una cuenta externa.
- Puede convivir con asistentes IA, automatizaciones y notificaciones de la organización.
- Permite seleccionar servicios, formulario y presentación por enlace.
Acceso
- Ruta principal:
/[orgId]/reservations/booking-links - Como se llega:
Header app switcher > Reservations > Booking Links - Permiso requerido:
can_access_reservations; gestión para propietarios y administradores.
Alcance tecnico
- Frontend:
BookingLinksManagement.tsx,BookingLinkEditorPage.tsxy secciones de editor. - Backend:
reservation-booking-linksypublic-reservation-booking. - Superficies publicas:
/b/[orgId]/[slug].
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear booking link | create-booking-link.md | Crea una URL pública. |
| Editar servicios incluidos | booking-link-services.md | Publica uno, varios o todos los servicios. |
| Configurar formulario | booking-link-form.md | Personaliza datos del cliente e identificación. |
| Personalizar contenido | booking-link-content.md | Edita hero, textos y políticas. |
| Personalizar tema | booking-link-theme.md | Define colores, medios y diseño. |
| Compartir e insertar | share-and-embed.md | Copia URL o iframe. |
| Activar, desactivar o eliminar | booking-link-lifecycle.md | Gestiona disponibilidad del enlace. |
Relaciones
- Depende de: Services.
- Usado por: Booking público.
Limitaciones y notas
- Solo servicios activos y públicos son visibles a visitantes.
id: booking-link-content modulo: booking-links app: reservations nombre: Contenido de booking link tipo: configuracion
Contenido de booking link
Define los textos que se muestran en la página pública y tras la confirmación.
Que se logra
- Resultado: Explica el servicio y las políticas que el visitante debe conocer antes de reservar.
- Caso de uso: Un coworking añade instrucciones de acceso y reglas de uso de salas.
- Se combina con: Booking público y Notifications.
Donde esta
- Ruta:
/[orgId]/reservations/booking-links/[bookingLinkId] - Acceso en UI: editor > pestañas de contenido.
- Componente(s):
BookingLinkEditorPage.tsx
Como funciona
- Edita título, subtítulo, descripción e instrucciones.
- Define el texto de agradecimiento y la política visible al final.
- Previsualiza antes de guardar.
Backend
- Servicios:
reservation-booking-links(patch).
Relaciones
- Afecta: contenido de
/b/[orgId]/[slug].
id: booking-link-form modulo: booking-links app: reservations nombre: Formulario de booking link tipo: configuracion
Formulario de booking link
Configura qué información solicita la página pública antes de confirmar una reserva.
Que se logra
- Resultado: Recoge los datos necesarios para identificar al visitante y crear una reserva completa.
- Caso de uso: Un spa solicita teléfono y preferencias antes de confirmar un tratamiento.
- Se combina con: Contacts, campos personalizados y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/booking-links/[bookingLinkId] - Acceso en UI: editor >
Form. - Componente(s):
BookingLinkCustomFieldsSection.tsx,BookingLinkEditorPage.tsx
Como funciona
- Activa o desactiva nombre, apellido, email, teléfono, asistentes y notas.
- Selecciona campos personalizados de contacto o reserva.
- Opcionalmente activa identificación previa por email o teléfono.
Reglas y validaciones
- Si se muestra algún dato de contacto, el visitante debe aportar al menos uno.
- Los campos personalizados obligatorios se validan antes de crear la reserva.
- La identificación devuelve datos solo si hay una coincidencia única.
Backend
- Servicios:
reservation-booking-links(patch),public-reservation-booking(create).
id: booking-link-lifecycle modulo: booking-links app: reservations nombre: Activar, desactivar o eliminar booking link tipo: accion
Activar, desactivar o eliminar booking link
Controla si un enlace acepta reservas y permite retirarlo del catálogo.
Que se logra
- Resultado: Controla cuándo un enlace deja de aceptar nuevas reservas.
- Caso de uso: Una clínica desactiva temporalmente un enlace durante un cambio de agenda.
- Se combina con: Booking público y Services.
Donde esta
- Ruta:
/[orgId]/reservations/booking-links - Acceso en UI: interruptor
Activeo icono de eliminación. - Componente(s):
BookingLinksManagement.tsx
Como funciona
- Activa o desactiva
Activepara controlar recepción de reservas. - Para retirarlo, selecciona eliminar y confirma.
Reglas y validaciones
- Un enlace inactivo responde como no disponible al visitante.
- La eliminación es lógica.
Backend
- Servicios:
reservation-booking-links(patch, remove),public-reservation-booking(get).
id: booking-link-services modulo: booking-links app: reservations nombre: Servicios incluidos en un booking link tipo: configuracion
Servicios incluidos en un booking link
Controla el catálogo que verá el visitante y su orden o agrupación.
Que se logra
- Resultado: Controla qué servicios verá y podrá seleccionar cada audiencia pública.
- Caso de uso: Una clínica comparte un enlace exclusivo para consultas iniciales.
- Se combina con: Services y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/booking-links/[bookingLinkId] - Acceso en UI: editor >
Basicsy secciones de servicios. - Componente(s):
BookingLinkEditorPage.tsx,BookingLinkServiceSectionsEditor.tsx
Como funciona
- Elige
all_services,selected_servicesosingle_service. - Para uno o varios, selecciona los servicios permitidos.
- Opcionalmente ordena o agrupa los servicios con títulos.
Reglas y validaciones
- El backend rechaza servicios fuera del alcance del enlace.
- Los visitantes solo ven servicios activos y públicos.
Backend
- Servicios:
reservation-booking-links(create, patch),public-reservation-booking(get, find).
id: booking-link-theme modulo: booking-links app: reservations nombre: Tema y marca de booking link tipo: configuracion
Tema y marca de booking link
Personaliza la apariencia del enlace público, incluidos logo, portada, colores y disposición.
Que se logra
- Resultado: Hace reconocible el enlace público con colores, imágenes y diseño de la organización.
- Caso de uso: Una clínica adapta el formulario de reserva a su identidad visual.
- Se combina con: Booking link content y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/booking-links/[bookingLinkId] - Acceso en UI: editor >
Hero & media,Logo layoutyTheme. - Componente(s):
BookingLinkEditorPage.tsx,BookingLinkColorField.tsx
Como funciona
- Añade logo y portada opcionales.
- Ajusta posición, forma, tamaño y estilo del logo.
- Configura tema, colores y presentación de la lista de servicios.
- Usa la vista previa para revisar el resultado.
Reglas y validaciones
- El enlace puede ocultar la atribución
Powered by AchieveApex.
Backend
- Servicios:
reservation-booking-links(patch).
id: create-booking-link modulo: booking-links app: reservations nombre: Crear booking link tipo: accion
Crear booking link
Crea una página pública para aceptar reservas.
Que se logra
- Resultado: Crea una dirección pública desde la que visitantes pueden iniciar una reserva.
- Caso de uso: Una barbería genera un enlace para que clientes reserven con el equipo.
- Se combina con: Services y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/booking-links/new - Acceso en UI:
Booking Links > New Booking Link. - Componente(s):
BookingLinkEditorPage.tsx
Como funciona
- Define nombre, slug, modo de servicios y estado.
- Completa las pestañas opcionales de formulario y diseño.
- Guarda con
Save.
Reglas y validaciones
- El slug se normaliza a minúsculas, números y guiones.
- Debe ser único dentro de la organización.
Backend
- Servicios:
reservation-booking-links(create).
id: share-and-embed modulo: booking-links app: reservations nombre: Compartir e insertar booking link tipo: accion
Compartir e insertar booking link
Entrega la URL pública o un iframe para mostrar el flujo de reserva en otro sitio.
Que se logra
- Resultado: Lleva el flujo de reserva a campañas, mensajes o sitios web mediante URL e iframe.
- Caso de uso: Una barbería inserta su agenda en su página de servicios.
- Se combina con: Booking público, Conversations y campañas.
Donde esta
- Ruta:
/[orgId]/reservations/booking-links - Acceso en UI: fila del enlace >
Share. - Componente(s):
BookingLinksManagement.tsx
Como funciona
- Abre
Shareen un enlace. - Selecciona
Direct linkoiframe. - Copia el contenido y pégalo donde se necesite.
Reglas y validaciones
- El iframe abre la página con el parámetro
embed=true.
Backend
- Servicios: no necesita una operación adicional; la URL usa Booking público.
id: booking-publico app: reservations nombre: Booking publico estado: public permiso: ninguno
Booking publico
Permite a visitantes reservar desde una URL sin iniciar sesión.
Para que sirve
- Una clínica permite que pacientes soliciten una consulta desde una URL sin crear una cuenta.
- Una barbería capta citas desde un enlace o iframe y muestra solo horarios disponibles.
- Un coworking recibe reservas de salas y las incorpora al calendario de su equipo.
Que lo hace diferente
- La reserva pública crea o identifica al contacto dentro del CRM de Apex.
- Los horarios se calculan con servicios, recursos, disponibilidad y excepciones reales.
- La confirmación puede activar los correos organizacionales y automatizaciones de reserva.
- El asistente IA puede operar sobre la misma disponibilidad y crear reservas cuando tiene las herramientas habilitadas.
Acceso
- Ruta principal:
/b/[orgId]/[slug] - Como se llega: URL compartida o iframe del booking link.
- Permiso requerido: ninguno.
Alcance tecnico
- Frontend: página pública de booking.
- Backend:
public-reservation-booking,reservation-available-slotsyreservations. - Superficies publicas: página, consulta de slots y creación de reserva.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Elegir servicio | select-service.md | Muestra los servicios permitidos. |
| Elegir fecha y horario | select-slot.md | Consulta disponibilidad mensual y slots. |
| Identificar contacto | identify-contact.md | Precarga por email o teléfono si está activado. |
| Confirmar reserva | confirm-public-booking.md | Crea contacto y reserva pública. |
| Confirmación y calendario | booking-confirmation.md | Muestra resumen y opciones de calendario. |
Relaciones
- Depende de: Booking links, Services y Resources.
- Dispara / afecta: Calendar, Contactos y Notifications.
Limitaciones y notas
- El enlace debe estar activo; los servicios deben ser activos y públicos.
- El flujo público no expone una pantalla para gestionar o cancelar una reserva después de confirmarla.
id: booking-confirmation modulo: booking-publico app: reservations nombre: Confirmación y calendario del visitante tipo: publico
Confirmación y calendario del visitante
Muestra el resultado de una reserva creada y permite añadirla al calendario personal.
Que se logra
- Resultado: Entrega un resumen final para que el visitante conozca los datos de su reserva.
- Caso de uso: Un paciente guarda la confirmación de su consulta después de reservar.
- Se combina con: Notifications y Calendar.
Donde esta
- Ruta:
/b/[orgId]/[slug] - Acceso en UI: pantalla posterior a
Confirm booking. - Componente(s): página pública de booking.
Como funciona
- Muestra el mensaje de agradecimiento y resumen del servicio, fecha y hora.
- El visitante puede abrir Google Calendar u Outlook.
- También puede descargar un archivo
ICS.
Reglas y validaciones
- La sección aparece solo cuando hay un horario confirmado.
Backend
- Servicios:
public-reservation-booking(create).
Relaciones
- Afecta: calendario externo del visitante.
id: confirm-public-booking modulo: booking-publico app: reservations nombre: Confirmar reserva pública tipo: publico
Confirmar reserva pública
Recoge los datos configurados y crea la reserva desde el enlace público.
Que se logra
- Resultado: Convierte la elección pública en una reserva vinculada al contacto correspondiente.
- Caso de uso: Un visitante confirma una cita de barbería desde un enlace compartido.
- Se combina con: Calendar, Contacts y Notifications.
Donde esta
- Ruta:
/b/[orgId]/[slug] - Acceso en UI: paso
Details>Confirm booking. - Componente(s): página pública de booking.
Como funciona
- Completa los datos de contacto, asistentes, notas y campos personalizados visibles.
- Confirma la reserva.
- El sistema vincula un contacto existente o crea uno nuevo y crea la cita.
Reglas y validaciones
- Debe aportarse al menos un detalle de contacto cuando alguno es visible.
- El tamaño de grupo se limita al máximo del servicio.
- Solo se aceptan campos personalizados configurados en el enlace.
Backend
- Servicios:
public-reservation-booking(create),contacts(find, create, patch),reservations(create). - Efectos: asignación de recursos, notificaciones y automatizaciones.
id: identify-contact modulo: booking-publico app: reservations nombre: Identificar contacto antes de reservar tipo: publico
Identificar contacto antes de reservar
Puede solicitar email o teléfono primero para recuperar datos de un contacto existente.
Que se logra
- Resultado: Reconoce un contacto existente y evita pedir de nuevo datos ya conocidos cuando la coincidencia es única.
- Caso de uso: Un cliente recurrente de un spa se identifica con su correo antes de reservar.
- Se combina con: Contacts y Booking público.
Donde esta
- Ruta:
/b/[orgId]/[slug] - Acceso en UI: paso
Identify, si está configurado en el enlace. - Componente(s): página pública de booking.
Como funciona
- El visitante aporta email o teléfono según la configuración.
- El sistema busca una coincidencia exacta.
- Si existe una sola coincidencia, completa datos y continúa.
Reglas y validaciones
- La identificación debe estar habilitada por el booking link.
- Se rechaza una búsqueda ambigua, datos inválidos o el tipo de dato no esperado.
Backend
- Servicios:
public-reservation-booking(create).
id: select-service modulo: booking-publico app: reservations nombre: Elegir servicio público tipo: publico
Elegir servicio público
Permite al visitante elegir una oferta autorizada por el booking link.
Que se logra
- Resultado: Guía al visitante para elegir una oferta habilitada en el enlace.
- Caso de uso: Un cliente de una barbería selecciona el corte que desea agendar.
- Se combina con: Services y Booking links.
Donde esta
- Ruta:
/b/[orgId]/[slug] - Acceso en UI: primer paso de la página pública.
- Componente(s): página pública de booking.
Como funciona
- Carga el enlace activo y sus servicios visibles.
- El visitante selecciona un servicio.
- Si hay un único servicio, se omite este paso.
Reglas y validaciones
- El modo del enlace puede publicar un servicio, servicios seleccionados o todos.
- Solo aparecen servicios activos y públicos.
Backend
- Servicios:
public-reservation-booking(get).
id: select-slot modulo: booking-publico app: reservations nombre: Elegir fecha y horario tipo: publico
Elegir fecha y horario
Muestra los días y horarios disponibles para el servicio elegido.
Que se logra
- Resultado: Muestra solo horarios calculados como disponibles para el servicio elegido.
- Caso de uso: Un paciente selecciona una consulta entre las franjas libres de la clínica.
- Se combina con: Resources, disponibilidad y Calendar.
Donde esta
- Ruta:
/b/[orgId]/[slug] - Acceso en UI: paso
Schedule. - Componente(s): página pública de booking.
Como funciona
- El visitante navega el calendario mensual.
- Selecciona un día disponible.
- Elige un horario libre y continúa.
Reglas y validaciones
- Las fechas pasadas y los días sin disponibilidad no pueden seleccionarse.
- Los slots aplican reglas de servicio, recursos, excepciones, capacidad y solapes.
Backend
- Servicios:
public-reservation-booking(find),reservation-available-slots(find).
id: calendar app: reservations nombre: Calendario de reservas estado: shipped permiso: can_access_reservations
Calendario de reservas
Consulta y administra las reservas de la organización desde CRM o desde la app Reservations.
Para que sirve
- Una clínica agenda y reprograma consultas vinculadas al paciente y al profesional disponible.
- Una barbería administra citas del equipo desde un calendario compartido y evita saturar recursos.
- Un coworking organiza reservas de salas con contactos, empresas y oportunidades del CRM.
- Un gimnasio programa clases o sesiones y controla cancelaciones, ausencias y completadas.
Que lo hace diferente
- Cada reserva se relaciona con un contacto, empresa u oportunidad del CRM de Apex.
- El asistente IA puede consultar disponibilidad y crear reservas mediante sus herramientas internas habilitadas.
- Las reservas y cambios de estado pueden disparar automatizaciones y correos de la organización.
- La disponibilidad considera servicios, recursos y sus excepciones, no solo un calendario personal.
Acceso
- Ruta principal:
/[orgId]/reservations/calendar - Como se llega:
Header app switcher > Reservations > Reservations - Permiso requerido:
can_access_reservations; las acciones dependen de los permisos granulares de Reservations.
Alcance tecnico
- Frontend:
ReservationsView.tsx,ReservationsCalendarView.tsxyReservationFormDialog.tsx. - Backend:
reservations,reservation-available-slotsyreservations-bulk-actions. - Superficies publicas: ninguna.
- Integraciones externas: Automatizaciones y emails de reservas.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Vistas del calendario | calendar-views.md | Vistas Month, Week y Day. |
| Buscar y filtrar reservas | reservation-filters.md | Filtra por texto y estado. |
| Crear reserva manual | create-manual-reservation.md | Registra una cita desde el calendario o un registro CRM. |
| Editar y reprogramar reserva | edit-reservation.md | Cambia datos, recurso o horario. |
| Cambiar estado de reserva | reservation-statuses.md | Gestiona el ciclo operativo de una cita. |
| Cancelar reserva | cancel-reservation.md | Cancela desde la ficha de la reserva. |
| Eliminar reserva | delete-reservation.md | Quita una reserva mediante borrado lógico. |
| Acciones masivas | bulk-actions.md | Aplica acciones a varias reservas. |
| Reserva vinculada al CRM | crm-linked-reservations.md | Vincula contacto, empresa y deal. |
| Asignación de recursos | reservation-resource-assignment.md | Valida y asigna recursos al crear. |
| Asistente de configuración | setup-wizard.md | Prepara el flujo de reservas públicas. |
| Guía de configuración | setup-guide.md | Ofrece ayuda integrada de Reservations. |
Relaciones
- Depende de: Services, Resources, Contactos y campos personalizados.
- Usado por: Booking público, Automatizaciones y notificaciones.
Limitaciones y notas
- La app abre en
Week; CRM conserva/[orgId]/reservations. - Las reservas canceladas, completadas y
no_showno ocupan capacidad.
id: bulk-actions modulo: calendar app: reservations nombre: Acciones masivas de reservas tipo: accion
Acciones masivas de reservas
Permite procesar un conjunto de reservas desde la operación de acciones masivas.
Que se logra
- Resultado: Asigna en conjunto reservas a un responsable mediante una sola operación.
- Caso de uso: Una clínica asigna las citas de una jornada a la recepcionista que las gestionará.
- Se combina con: Calendar y permisos de Reservations.
Donde esta
- Ruta:
/[orgId]/reservations - Acceso en UI: selección de reservas en la vista de lista.
- Componente(s):
ReservationsView.tsx
Como funciona
- Selecciona reservas o aplica un filtro.
- Elige una acción disponible y confirma.
Reglas y validaciones
- La operación valida que quien la ejecuta sea propietario o administrador.
Backend
- Servicios:
reservations-bulk-actions(create).
Notas
- La acción masiva disponible es
assign; puede aplicarse a reservas seleccionadas o al conjunto definido por el filtro.
id: calendar-views modulo: calendar app: reservations nombre: Vistas del calendario tipo: vista
Vistas del calendario
Muestra las reservas por mes, semana o día y permite navegar entre periodos.
Que se logra
- Resultado: Visualiza la agenda en la escala adecuada para coordinar operación y disponibilidad.
- Caso de uso: Una clínica cambia entre día, semana y mes para distribuir la agenda de sus profesionales.
- Se combina con: Services y Resources.
Donde esta
- Ruta:
/[orgId]/reservations/calendar - Acceso en UI:
Month,Week,Day, flechas yToday - Componente(s):
ReservationsCalendarView.tsx
Como funciona
- El calendario abre en
Week. - El usuario cambia la vista, navega el periodo o vuelve a hoy.
- Las reservas muestran hora, contacto, servicio y color de estado.
Reglas y validaciones
- En semana y día, la cuadrícula distingue
:00y:30; un clic en cada mitad crea una cita en esa hora. - En mes se muestran tres reservas por día y el resto como contador.
Backend
- Servicios:
reservations(find).
Relaciones
- Requiere: Calendar de Reservations.
- Dispara / afecta: creación y edición de reservas.
id: cancel-reservation modulo: calendar app: reservations nombre: Cancelar reserva tipo: accion
Cancelar reserva
Cancela una cita conservando su historial operativo.
Que se logra
- Resultado: Cancela una cita y libera el cupo que ocupaba en la agenda.
- Caso de uso: Una clínica cancela una consulta solicitada por el paciente.
- Se combina con: Calendar, Resources y Notifications.
Donde esta
- Ruta:
/[orgId]/reservations/calendar - Acceso en UI: reserva >
Actions>Cancel. - Componente(s):
ReservationFormDialog.tsx
Como funciona
- Abre la reserva.
- Selecciona
Cancel. - La cita pasa a estado cancelado.
Reglas y validaciones
- Las reservas canceladas dejan de participar en los cálculos de capacidad y solapes.
Backend
- Servicios:
reservations(patch). - Efectos: puede enviar notificaciones y activar automatizaciones de actualización.
id: create-manual-reservation modulo: calendar app: reservations nombre: Crear reserva manual tipo: accion
Crear reserva manual
Registra una cita para un contacto desde el calendario o desde un registro CRM.
Que se logra
- Resultado: Registra una cita válida con servicio, contacto, horario y recursos disponibles.
- Caso de uso: Una clínica agenda por teléfono una consulta para un paciente ya registrado.
- Se combina con: Contacts, Services y Resources.
Donde esta
- Ruta:
/[orgId]/reservations/calendar - Acceso en UI:
New Reservationo un espacio vacío del calendario. - Componente(s):
ReservationFormDialog.tsx
Como funciona
- Selecciona servicio, contacto y fecha.
- Elige un horario disponible y, si aplica, un recurso preferido.
- Añade tamaño de grupo, notas y campos personalizados.
- Confirma con
Create Reservation.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Servicio | selector | Sí | Determina duración y disponibilidad. |
| Contacto | selector | Sí | Puede acompañarse de empresa o deal. |
| Fecha y horario | fecha/selector | Sí | Solo se muestran horarios disponibles. |
| Recurso preferido | selector | No | Disponible si el servicio tiene recursos. |
| Notas y campos personalizados | texto | No | Incluye notas internas. |
Reglas y validaciones
- No permite fechas pasadas, exceder el tamaño máximo de grupo ni reservar fuera de los límites del servicio.
- Puede confirmar automáticamente según el servicio.
Backend
- Servicios:
reservation-available-slots(find),reservations(create). - Efectos: asigna recursos, puede enviar emails y dispara automatizaciones.
Relaciones
- Requiere: un servicio activo y un contacto.
id: crm-linked-reservations modulo: calendar app: reservations nombre: Reserva vinculada al CRM tipo: integracion
Reserva vinculada al CRM
Asocia una reserva con el contacto obligatorio y, opcionalmente, con una empresa o deal.
Que se logra
- Resultado: Conserva el contexto comercial y relacional de la persona al gestionar su cita.
- Caso de uso: Un coworking vincula la visita de un prospecto con su empresa y oportunidad.
- Se combina con: Contacts, Companies y Deals.
Donde esta
- Ruta:
/[orgId]/reservations - Acceso en UI:
New Reservationdesde el calendario o los paneles de contactos, empresas y deals. - Componente(s):
ReservationFormDialog.tsx,RelatedEntitySelector
Como funciona
- Selecciona el contacto.
- Opcionalmente relaciona empresa y deal.
- Al abrirse desde un registro CRM, la relación se precarga.
Reglas y validaciones
- No se puede guardar sin contacto.
Backend
- Servicios:
contacts,companies,deals,reservations(create, patch).
Relaciones
- Usado por: detalle de contactos, empresas, deals y conversaciones.
id: delete-reservation modulo: calendar app: reservations nombre: Eliminar reserva tipo: accion
Eliminar reserva
Retira una reserva desde el diálogo de edición tras solicitar confirmación.
Que se logra
- Resultado: Retira una reserva de forma lógica para que deje de aparecer en la operación.
- Caso de uso: Un equipo elimina un registro de prueba creado durante la configuración.
- Se combina con: Calendar y registros CRM.
Donde esta
- Ruta:
/[orgId]/reservations/calendar - Acceso en UI: reserva >
Actions>Delete. - Componente(s):
ReservationFormDialog.tsx
Como funciona
- Abre una reserva existente.
- Selecciona
Deletey confirma.
Reglas y validaciones
- La eliminación usa el borrado lógico global; no es una eliminación física.
Backend
- Servicios:
reservations(remove).
Relaciones
- Afecta: calendario y disponibilidad futura.
id: edit-reservation modulo: calendar app: reservations nombre: Editar y reprogramar reserva tipo: accion
Editar y reprogramar reserva
Permite ajustar los datos, horario y relaciones de una reserva existente.
Que se logra
- Resultado: Actualiza una cita sin perder su vínculo con el contacto y la operación.
- Caso de uso: Un spa reprograma el tratamiento de un cliente cuando cambia su disponibilidad.
- Se combina con: Calendar, Resources y Notifications.
Donde esta
- Ruta:
/[orgId]/reservations/calendar - Acceso en UI: clic sobre una reserva >
Update Reservation. - Componente(s):
ReservationFormDialog.tsx
Como funciona
- Abre una reserva en calendario o lista.
- Cambia servicio, contacto, fecha, horario, recurso o notas.
- Guarda con
Update Reservation.
Reglas y validaciones
- Al mover la fecha u hora se vuelve a calcular el final y se restablece el registro de recordatorios enviados.
- El selector deja conservar el horario original incluso si aparece ocupado al editar.
Backend
- Servicios:
reservations(get, patch),reservation-available-slots(find). - Efectos: puede reenviar notificaciones y dispara la automatización de actualización.
Relaciones
- Afecta: disponibilidad, recursos asignados y recordatorios.
id: reservation-filters modulo: calendar app: reservations nombre: Buscar y filtrar reservas tipo: vista
Buscar y filtrar reservas
Reduce la lista o calendario a reservas que coinciden con texto y estado.
Que se logra
- Resultado: Encuentra rápidamente reservas relevantes por su estado o información asociada.
- Caso de uso: Una barbería localiza las citas pendientes de confirmar antes de abrir.
- Se combina con: Calendar y contactos CRM.
Donde esta
- Ruta:
/[orgId]/reservations/calendar - Acceso en UI: controles de búsqueda y estado de Reservations.
- Componente(s):
ReservationsView.tsx,ReservationsCalendarView.tsx
Como funciona
- Escribe un término de búsqueda o selecciona un estado.
- La vista recarga las reservas del periodo actual ordenadas por hora.
Reglas y validaciones
- El filtro de estado admite
pending,confirmed,cancelled,completedyno_show. - La búsqueda se procesa en el servicio de reservas.
Backend
- Servicios:
reservations(find). - Hooks relevantes: búsqueda y rango de fechas.
Relaciones
- Requiere: reservas existentes.
id: reservation-resource-assignment modulo: calendar app: reservations nombre: Asignación de recursos en reservas tipo: automatizacion
Asignación de recursos en reservas
Comprueba recursos vinculados y los asigna después de crear una reserva.
Que se logra
- Resultado: Reserva los recursos necesarios y evita aceptar un horario incompatible.
- Caso de uso: Un spa asigna simultáneamente una cabina y una terapeuta al tratamiento.
- Se combina con: Services, Resources y disponibilidad.
Donde esta
- Ruta:
/[orgId]/reservations/calendar - Acceso en UI: selección de recurso preferido en
New Reservation. - Componente(s):
ReservationFormDialog.tsx
Como funciona
- El sistema revisa los recursos asociados al servicio.
- Evalúa horario semanal, fechas bloqueadas, capacidad y solapes.
- Para recursos de tipo disponible, encuentra uno activo del mismo tipo.
- Crea la reserva y registra los recursos elegidos.
Reglas y validaciones
- Un recurso requerido sin disponibilidad bloquea la reserva; uno opcional no.
- La reserva puede solicitar un recurso preferido.
Backend
- Servicios:
reservation-service-resources,reservation-resources,reservation-resource-availability,reservation-resource-exceptions,reservation-assigned-resources. - Hooks relevantes: validación de disponibilidad y asignación automática.
id: reservation-statuses modulo: calendar app: reservations nombre: Cambiar estado de reserva tipo: accion
Cambiar estado de reserva
Controla el estado operativo de una cita desde su menú de acciones.
Que se logra
- Resultado: Refleja si una cita se confirmó, completó, canceló o quedó como ausencia.
- Caso de uso: Un gimnasio marca una sesión a la que el cliente no asistió para liberar seguimiento.
- Se combina con: Automatizaciones y Notifications.
Donde esta
- Ruta:
/[orgId]/reservations/calendar - Acceso en UI: reserva >
Actions. - Componente(s):
ReservationFormDialog.tsx
Como funciona
- Abre la reserva.
- Selecciona
Confirm,Mark Completed,Mark No Show,CanceloPending. - El calendario se actualiza con el nuevo estado.
Reglas y validaciones
- Al cancelar se identifica la cancelación como realizada por la organización.
- Al volver a un estado no cancelado se limpia la información de cancelación.
Backend
- Servicios:
reservations(patch). - Efectos: puede enviar emails y dispara automatizaciones de actualización.
id: setup-guide modulo: calendar app: reservations nombre: Guía de configuración de reservas tipo: vista
Guía de configuración de reservas
Proporciona documentación integrada para configurar servicios, recursos y enlaces públicos.
Que se logra
- Resultado: Orienta al equipo para completar la configuración antes de compartir un enlace público.
- Caso de uso: Un coworking revisa los pasos necesarios para empezar a recibir reservas de salas.
- Se combina con: Setup wizard, Services y Resources.
Donde esta
- Ruta:
/[orgId]/reservations/documentation - Acceso en UI:
Reservations > Setup Guide. - Componente(s):
ReservationDocumentation.tsx
Como funciona
- Abre la guía desde la barra lateral o desde las páginas de catálogos.
- Consulta las explicaciones de servicio, capacidad, recursos y booking links.
Backend
- Servicios: no requiere un servicio específico.
Relaciones
- Requiere: app Reservations.
id: setup-wizard modulo: calendar app: reservations nombre: Asistente de configuración tipo: configuracion
Asistente de configuración
Guía a propietarios y administradores para dejar Reservations listo para aceptar reservas.
Que se logra
- Resultado: Deja lista una cadena mínima para aceptar reservas públicas.
- Caso de uso: Una barbería configura servicio, horarios, recursos y enlace de reserva por primera vez.
- Se combina con: Services, Resources y Booking links.
Donde esta
- Ruta:
/[orgId]/reservations/setup - Acceso en UI:
Reservations > Setup. - Componente(s):
ReservationSetupView.tsx
Como funciona
- Crea al menos un servicio activo.
- Añade y vincula recursos o reconoce el horario predeterminado de 8:00 AM–6:00 PM.
- Define horas semanales para cada recurso vinculado.
- Crea un booking link activo.
Reglas y validaciones
- El avance se calcula con los servicios existentes y no se guarda como estado independiente.
- La confirmación de horario predeterminado dura solo la sesión del navegador.
Backend
- Servicios:
reservation-services,reservation-resources,reservation-service-resources,reservation-resource-availability,reservation-booking-links.
Relaciones
- Requiere: Services, Resources y Booking links.
id: notifications app: reservations nombre: Notifications estado: shipped permiso: can_access_reservations
Notificaciones de reservas
Configura correos organizacionales de confirmación, aviso al personal y recordatorios de reservas.
Para que sirve
- Una clínica confirma citas y reduce ausencias con recordatorios previos.
- Un spa avisa a cada profesional cuando recibe una reserva asociada.
- Un gimnasio comunica cambios de reserva con plantillas organizacionales.
Que lo hace diferente
- Los correos usan los datos reales de la reserva, el servicio y el contacto CRM.
- Los recordatorios los ejecuta la organización desde Apex, junto con el calendario operativo.
- Para recorridos más complejos, los cambios de reserva se conectan con Automatizaciones y sus canales.
Acceso
- Ruta principal:
/[orgId]/reservations/settings - Como se llega:
Header app switcher > Reservations > Notifications - Permiso requerido:
can_access_reservations; configuración para propietarios y administradores.
Alcance tecnico
- Frontend:
ReservationNotificationsSettingsView.tsx. - Backend:
organization-reservations-settings,reservationsycron-reservation-reminders. - Integraciones externas: AWS SES y Email Builder.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Confirmación al cliente | confirmation-email.md | Activa y diseña el email posterior a la reserva. |
| Aviso al personal | staff-notification.md | Notifica recursos de persona vinculados a usuarios. |
| Recordatorios | reservation-reminders.md | Configura hasta tres avisos previos. |
| Plantillas y vista previa | email-templates-preview.md | Selecciona Email Builder y revisa el resultado. |
Relaciones
- Depende de: Email Builder y datos de contacto.
- Usado por: Calendar y Booking público.
Limitaciones y notas
- La configuración aplica a toda la organización, no a un booking link.
- WhatsApp y SMS personalizados se gestionan con Automatizaciones.
id: confirmation-email modulo: notifications app: reservations nombre: Email de confirmación al cliente tipo: configuracion
Email de confirmación al cliente
Activa o desactiva el email que se envía al contacto al crear o actualizar una reserva.
Que se logra
- Resultado: Envía al cliente una confirmación con la información útil de su cita.
- Caso de uso: Una clínica confirma la hora y servicio de una consulta recién reservada.
- Se combina con: Calendar y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/settings - Acceso en UI:
Notifications > Guest confirmation. - Componente(s):
ReservationNotificationsSettingsView.tsx
Como funciona
- Activa
Guest confirmation. - Selecciona diseño predeterminado o personalizado.
- Añade una nota y guarda con
Save.
Reglas y validaciones
- Un diseño personalizado exige una plantilla seleccionada.
Backend
- Servicios:
organization-reservations-settings(find, create),reservations(create, patch). - Efectos: envía correo después de crear o actualizar.
id: email-templates-preview modulo: notifications app: reservations nombre: Plantillas y vista previa de emails tipo: configuracion
Plantillas y vista previa de emails
Permite elegir el diseño estándar o uno de Email Builder y revisar el remitente, asunto y cuerpo.
Que se logra
- Resultado: Permite elegir y revisar el contenido que recibirá cada destinatario.
- Caso de uso: Un gimnasio verifica el diseño de sus avisos antes de activarlos.
- Se combina con: Email Builder y Notifications.
Donde esta
- Ruta:
/[orgId]/reservations/settings - Acceso en UI:
Guest confirmationoReminders>Default email/Custom design. - Componente(s):
ReservationNotificationsSettingsView.tsx
Como funciona
- Elige
Default emailoCustom design. - En diseño personalizado, selecciona o crea una plantilla.
- Añade una nota adicional y revisa el preview antes de guardar.
Reglas y validaciones
- La nota se inserta en el diseño predeterminado; en un diseño personalizado se usa la etiqueta
{{extra_note}}o se añade al inicio.
Backend
- Servicios:
email-builder-templates(find),email-builder-render(create),organization-reservations-settings(create). - Integraciones externas: AWS SES.
id: reservation-reminders modulo: notifications app: reservations nombre: Recordatorios de reserva tipo: automatizacion
Recordatorios de reserva
Programa hasta tres correos previos a una cita.
Que se logra
- Resultado: Reduce ausencias al programar avisos antes de la hora reservada.
- Caso de uso: Una clínica recuerda una consulta con antelación para disminuir inasistencias.
- Se combina con: Calendar y confirmation email.
Donde esta
- Ruta:
/[orgId]/reservations/settings - Acceso en UI:
Notifications > Reminders. - Componente(s):
ReservationNotificationsSettingsView.tsx
Como funciona
- Añade hasta tres recordatorios.
- Define cantidad y unidad: minutos, horas, días o semanas.
- Selecciona diseño y guarda.
Reglas y validaciones
- La configuración inicial contiene 24 horas y 1 hora.
- Solo se recuerdan reservas pendientes o confirmadas con contacto que tenga email.
- Reprogramar una reserva permite calcular recordatorios nuevamente.
Backend
- Servicios:
organization-reservations-settings(create),cron-reservation-reminders(create). - Efectos: el cron procesa el envío y evita duplicados.
id: staff-notification modulo: notifications app: reservations nombre: Aviso al personal asignado tipo: configuracion
Aviso al personal asignado
Envía el email predeterminado a recursos de tipo persona que tienen un usuario vinculado.
Que se logra
- Resultado: Avisa al integrante responsable cuando una reserva le afecta.
- Caso de uso: Un spa notifica a la terapeuta al recibir una nueva cita.
- Se combina con: Resources y Calendar.
Donde esta
- Ruta:
/[orgId]/reservations/settings - Acceso en UI:
Notifications > Staff notifications. - Componente(s):
ReservationNotificationsSettingsView.tsx
Como funciona
- Activa o desactiva
Staff notifications. - Revisa la vista previa del email del sistema.
- Guarda los cambios.
Backend
- Servicios:
organization-reservations-settings(create),reservations(create, patch). - Efectos: correo transaccional al personal asignado.
id: resources app: reservations nombre: Resources estado: shipped permiso: can_access_reservations
Recursos de reservas
Administra personas, espacios, equipos y otros recursos que entregan servicios reservables.
Para que sirve
- Una clínica asigna consultorios y profesionales con horarios y cierres específicos.
- Un spa administra cabinas, terapeutas y equipos para no prometer el mismo recurso dos veces.
- Un coworking bloquea festivos o define horarios especiales para salas y espacios compartidos.
Que lo hace diferente
- La disponibilidad combina recursos, horarios semanales y excepciones de fecha.
- Un recurso puede asociarse a varios servicios y participa en la validación de disponibilidad.
- Los recursos respaldan reservas CRM, booking público y las consultas del asistente IA.
Acceso
- Ruta principal:
/[orgId]/reservations/resources - Como se llega:
Header app switcher > Reservations > Resources - Permiso requerido:
can_access_reservations; catálogo para propietarios y administradores.
Alcance tecnico
- Frontend:
ReservationSettingsView.tsx,ImportResourcesDialog.tsxy diálogos de recursos. - Backend:
reservation-resources,reservation-resource-availability,reservation-resource-exceptions.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear recurso | create-resource.md | Añade un recurso al catálogo. |
| Editar recurso | edit-resource.md | Actualiza sus datos y estado. |
| Eliminar recurso | delete-resource.md | Lo retira mediante borrado lógico. |
| Disponibilidad semanal | weekly-availability.md | Configura franjas por día. |
| Excepciones de fecha | resource-exceptions.md | Bloquea fechas o define horarios especiales. |
| Importar recursos | import-resources.md | Importa Excel con horarios y excepciones. |
| Calendario por recurso | resource-calendar.md | Consulta las reservas de un recurso. |
Relaciones
- Depende de: Services para vincularlos.
- Usado por: Calendar y Booking público.
Limitaciones y notas
- Las excepciones pueden aplicarse a un recurso o a toda la organización.
id: create-resource modulo: resources app: reservations nombre: Crear recurso tipo: accion
Crear recurso
Añade una persona, sala, equipo, vehículo u otro elemento reservable.
Que se logra
- Resultado: Añade la capacidad real que debe validarse antes de confirmar una reserva.
- Caso de uso: Un coworking registra una sala para empezar a ofrecerla en su agenda.
- Se combina con: Services y Calendar.
Donde esta
- Ruta:
/[orgId]/reservations/resources - Acceso en UI:
Add Resource. - Componente(s):
ResourceFormDialog
Como funciona
- Abre
Add Resource. - Define nombre, tipo, capacidad y opciones visuales.
- Guarda el recurso.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre y tipo | texto/selector | Sí | Tipos: persona, sala, equipo, vehículo u otro. |
| Capacidad | número | No | Predeterminado: 1. |
| Descripción, color y estado | configuración | No | Aparecen en la gestión. |
Backend
- Servicios:
reservation-resources(create).
id: delete-resource modulo: resources app: reservations nombre: Eliminar recurso tipo: accion
Eliminar recurso
Quita un recurso del catálogo de Reservations.
Que se logra
- Resultado: Retira un recurso que dejó de operar sin borrar el historial de reservas.
- Caso de uso: Una clínica da de baja un consultorio que ya no utiliza.
- Se combina con: Services y Calendar.
Donde esta
- Ruta:
/[orgId]/reservations/resources - Acceso en UI: fila del recurso > icono de eliminación.
- Componente(s):
ReservationSettingsView.tsx
Como funciona
- Selecciona eliminar y confirma.
Reglas y validaciones
- La eliminación es lógica.
Backend
- Servicios:
reservation-resources(remove).
id: edit-resource modulo: resources app: reservations nombre: Editar recurso tipo: configuracion
Editar recurso
Actualiza el nombre, tipo, capacidad y disponibilidad comercial de un recurso.
Que se logra
- Resultado: Mantiene actualizados los datos y estado operativo de un recurso.
- Caso de uso: Un spa inactiva temporalmente una cabina en mantenimiento.
- Se combina con: Services, Calendar y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/resources - Acceso en UI: fila del recurso > icono de edición.
- Componente(s):
ResourceFormDialog
Como funciona
- Abre un recurso del catálogo.
- Ajusta sus opciones y guarda.
Reglas y validaciones
- Solo recursos activos participan al buscar una alternativa disponible.
Backend
- Servicios:
reservation-resources(patch).
id: import-resources modulo: resources app: reservations nombre: Importar recursos desde Excel tipo: accion
Importar recursos desde Excel
Importa recursos y, opcionalmente, sus horarios semanales y excepciones desde un libro Excel.
Que se logra
- Resultado: Carga en lote recursos, horarios y excepciones desde un archivo de Excel.
- Caso de uso: Una red de clínicas incorpora decenas de consultorios y agendas al iniciar operaciones.
- Se combina con: Resources, disponibilidad semanal y excepciones.
Donde esta
- Ruta:
/[orgId]/reservations/resources - Acceso en UI:
Import. - Componente(s):
ImportResourcesDialog.tsx
Como funciona
- Sube un archivo Excel o descarga
Template. - Mapea las columnas de recursos.
- Si existen, mapea hojas de disponibilidad y excepciones.
- Ejecuta la importación y revisa resultados.
Reglas y validaciones
- Se requiere la hoja Resources; Availability y Exceptions son opcionales.
- Se crean lotes de 10 con pausas entre lotes.
- Nombre y tipo de recurso son obligatorios.
Backend
- Servicios:
reservation-resources,reservation-resource-availability,reservation-resource-exceptions(create).
Notas
- El procesamiento ocurre en el navegador; no existe servicio de importación dedicado.
id: resource-calendar modulo: resources app: reservations nombre: Calendario por recurso tipo: vista
Calendario por recurso
Abre una vista de calendario para consultar la ocupación de un recurso.
Que se logra
- Resultado: Muestra cuándo un recurso está ocupado, disponible o afectado por excepciones.
- Caso de uso: Un coworking revisa el mes de una sala antes de asignarla a una reserva especial.
- Se combina con: Calendar, Services y Resources.
Donde esta
- Ruta:
/[orgId]/reservations/resources - Acceso en UI: clic sobre el nombre del recurso.
- Componente(s):
ResourceCalendarDialog
Como funciona
- Selecciona el nombre de un recurso en el listado.
- Revisa su calendario en un diálogo.
Backend
- Servicios:
reservations,reservation-assigned-resources.
Notas
- El diálogo muestra un mes por vez e incluye la disponibilidad, excepciones y reservas activas asociadas al recurso.
id: resource-exceptions modulo: resources app: reservations nombre: Excepciones de disponibilidad tipo: configuracion
Excepciones de disponibilidad
Registra fechas bloqueadas, horarios especiales o días festivos para un recurso o toda la organización.
Que se logra
- Resultado: Resuelve cierres, festivos y horarios especiales sin alterar la agenda habitual.
- Caso de uso: Un coworking bloquea una sala durante un festivo o mantenimiento.
- Se combina con: Weekly availability y Calendar.
Donde esta
- Ruta:
/[orgId]/reservations/resources - Acceso en UI: fila del recurso > icono de calendario.
- Componente(s):
ExceptionsDialog
Como funciona
- Abre las excepciones de un recurso.
- Crea o edita una excepción de fecha.
- Guarda o elimina la excepción.
Reglas y validaciones
- Las excepciones bloqueadas de alcance organizacional también bloquean el recurso.
Backend
- Servicios:
reservation-resource-exceptions(find, create, patch, remove). - Efectos: bloquea la disponibilidad del slot.
id: weekly-availability modulo: resources app: reservations nombre: Disponibilidad semanal de recursos tipo: configuracion
Disponibilidad semanal de recursos
Define las franjas recurrentes en que un recurso puede atender reservas.
Que se logra
- Resultado: Establece las franjas regulares en las que un recurso puede atender reservas.
- Caso de uso: Una barbería define el horario semanal de cada profesional.
- Se combina con: Resources, Services y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/resources - Acceso en UI: fila del recurso > icono de reloj.
- Componente(s):
AvailabilityDialog
Como funciona
- Abre la disponibilidad de un recurso.
- Añade, ajusta o desactiva franjas por día de semana.
- Guarda los cambios.
Reglas y validaciones
- Un horario solicitado debe estar enteramente dentro de una franja activa del recurso.
- Un recurso vinculado sin horas impide completar Setup hasta que se configure.
Backend
- Servicios:
reservation-resource-availability(find, create, patch, remove). - Efectos: determina slots y validación de reservas.
id: services app: reservations nombre: Services estado: shipped permiso: can_access_reservations
Servicios reservables
Define qué puede reservar un cliente y las reglas operativas de cada oferta.
Para que sirve
- Una clínica define consulta inicial, control y procedimiento con distinta duración y capacidad.
- Una barbería publica cortes, tratamientos y turnos grupales con sus reglas de reserva.
- Un coworking ofrece salas, escritorios o equipos como servicios reservables.
Que lo hace diferente
- Cada servicio puede requerir, aceptar o elegir entre recursos reales de la organización.
- Los servicios alimentan la disponibilidad que ve el booking público y puede consultar el asistente IA.
- Se conectan al calendario, booking links y contactos CRM en lugar de vivir en un catálogo aislado.
Acceso
- Ruta principal:
/[orgId]/reservations/services - Como se llega:
Header app switcher > Reservations > Services - Permiso requerido:
can_access_reservations; catálogo visible para propietarios y administradores.
Alcance tecnico
- Frontend:
ReservationSettingsView.tsxy diálogos desetup/dialogs.tsx. - Backend:
reservation-servicesyreservation-service-resources. - Superficies publicas: los servicios activos y públicos aparecen en Booking público.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear servicio | create-service.md | Define una oferta reservable. |
| Editar servicio | edit-service.md | Ajusta configuración y visibilidad. |
| Eliminar servicio | delete-service.md | Retira el servicio del catálogo. |
| Configurar capacidad y reservas | service-capacity.md | Controla grupo, cupos y límites de reserva. |
| Asociar recursos | service-resources.md | Define recursos requeridos, opcionales o alternativos. |
Relaciones
- Depende de: Resources y Currencies.
- Usado por: Calendar, Booking links y Booking público.
Limitaciones y notas
- Un servicio inactivo no puede reservarse.
id: create-service modulo: services app: reservations nombre: Crear servicio reservable tipo: accion
Crear servicio reservable
Crea una oferta que podrá usarse al reservar manualmente o públicamente.
Que se logra
- Resultado: Incorpora una oferta que clientes y equipo pueden agendar con sus propias reglas.
- Caso de uso: Una clínica añade una consulta inicial de 45 minutos al catálogo.
- Se combina con: Resources y Booking links.
Donde esta
- Ruta:
/[orgId]/reservations/services - Acceso en UI:
Add Service. - Componente(s):
ServiceFormDialog
Como funciona
- Abre
Add Service. - Define nombre, duración y opciones disponibles.
- Guarda el servicio.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre | texto | Sí | Identifica el servicio. |
| Duración | número | Sí | Determina el fin de la reserva. |
| Precio, color e imagen | configuración | No | Se usan en catálogos y página pública. |
Backend
- Servicios:
reservation-services(create).
id: delete-service modulo: services app: reservations nombre: Eliminar servicio tipo: accion
Eliminar servicio
Retira un servicio del catálogo tras confirmación del usuario.
Que se logra
- Resultado: Retira una oferta para que deje de estar disponible en nuevas reservas.
- Caso de uso: Una barbería elimina un servicio que ya no presta.
- Se combina con: Booking links y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/services - Acceso en UI: fila del servicio > icono de eliminación.
- Componente(s):
ReservationSettingsView.tsx
Como funciona
- Selecciona eliminar en la fila.
- Confirma la operación.
Reglas y validaciones
- La eliminación es lógica y el servicio deja de aparecer en las consultas estándar.
Backend
- Servicios:
reservation-services(remove).
id: edit-service modulo: services app: reservations nombre: Editar servicio reservable tipo: configuracion
Editar servicio reservable
Actualiza la definición y disponibilidad de un servicio existente.
Que se logra
- Resultado: Ajusta una oferta existente sin crear un catálogo paralelo.
- Caso de uso: Un spa cambia la duración de un masaje al modificar su protocolo.
- Se combina con: Resources, Calendar y Booking público.
Donde esta
- Ruta:
/[orgId]/reservations/services - Acceso en UI: fila del servicio > icono de edición.
- Componente(s):
ServiceFormDialog
Como funciona
- Abre el editor del servicio.
- Ajusta duración, precio, capacidad o estado.
- Guarda los cambios.
Reglas y validaciones
- La duración se usa para recalcular el final al crear o reprogramar una reserva.
Backend
- Servicios:
reservation-services(patch).
Relaciones
- Afecta: slots futuros y Booking público.
id: service-capacity modulo: services app: reservations nombre: Capacidad y límites del servicio tipo: configuracion
Capacidad y límites del servicio
Configura cuántas reservas o asistentes admite cada oferta y cuándo se puede reservar.
Que se logra
- Resultado: Define cuántas personas pueden reservar una misma sesión y bajo qué límites.
- Caso de uso: Un gimnasio configura una clase para que admita solo los cupos reales.
- Se combina con: Calendar y Resources.
Donde esta
- Ruta:
/[orgId]/reservations/services - Acceso en UI:
Add Serviceo editar servicio. - Componente(s):
ServiceFormDialog
Como funciona
- Establece capacidad del horario y máximo de asistentes.
- Configura anticipación mínima, máximo de días y límite diario cuando corresponda.
- Guarda la definición.
Reglas y validaciones
- El tamaño de grupo no puede superar el máximo del servicio.
- La capacidad por horario cuenta reservas pendientes y confirmadas con solapamiento.
- Se rechazan fechas pasadas, demasiado próximas o más allá del máximo definido.
Backend
- Servicios:
reservation-services,reservations. - Hooks relevantes: cálculo de fin y validación de disponibilidad.
id: service-resources modulo: services app: reservations nombre: Asociar recursos a un servicio tipo: configuracion
Asociar recursos a un servicio
Define qué recursos intervienen al reservar un servicio.
Que se logra
- Resultado: Indica qué personas, espacios o equipos hacen posible una reserva.
- Caso de uso: Una clínica relaciona un procedimiento con el consultorio y profesional requeridos.
- Se combina con: Resources y disponibilidad.
Donde esta
- Ruta:
/[orgId]/reservations/services - Acceso en UI: fila del servicio > icono de recursos.
- Componente(s):
ServiceResourcesDialog
Como funciona
- Abre la gestión de recursos del servicio.
- Vincula recursos del catálogo y define su modo de asignación.
- Guarda los vínculos.
Reglas y validaciones
- Los recursos pueden ser requeridos, opcionales o seleccionados entre disponibles del mismo tipo.
- Si no se vincula ningún recurso, el flujo usa la franja predeterminada de 8:00 AM–6:00 PM.
Backend
- Servicios:
reservation-service-resources(find, create, patch, remove). - Efectos: las reservas verifican recursos y capacidad antes de crearse.
APP: sites
id: sites app: sites nombre: Sites estado: shipped permiso: can_access_sites
Sites
Constructor de sitios web de una organización con IA, recursos, SEO y publicación. Esta app es un módulo único; sus capacidades viven directamente en esta carpeta.
Para que sirve
- Una clínica crea un sitio informativo con páginas de servicios, SEO y formulario para convertir consultas web en contactos.
- Una inmobiliaria publica un sitio de proyectos con navegación y recursos de marca sin depender de un desarrollo separado.
- Una agencia importa una base HTML y la adapta para entregar micrositios a sus clientes.
- Un comercio local lanza una página de campaña en un subdominio de Apex y después la conecta a su propio dominio.
Que lo hace diferente
- Sites AI puede crear páginas y modificar contenido, navegación, header, footer, estilos y recursos dentro del mismo builder.
- El contexto, la memoria y las skills se guardan por sitio para que la IA conserve reglas de marca y trabajo entre conversaciones.
- Puede incrustar formularios publicados de Apex: los envíos no son solo visuales, se registran en Forms para la organización.
- La publicación incluye un subdominio gratuito de Apex; el dominio propio se conecta con validación y una suscripción de $5 USD/mes.
Acceso
- Ruta principal:
/[orgId]/sites - Como se llega:
Header app switcher > Sites - Permiso requerido:
can_access_sites
Alcance tecnico
- Frontend: rutas de lista y builder de Sites, con componentes en
components/sites - Backend:
sites, páginas, layouts, recursos, IA, render y publicación - Superficies públicas: sitios publicados bajo
pages.achieveapex.com - Integraciones externas: S3, CloudFront, Stripe y OpenRouter
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear un sitio | create-site.md | Crea un proyecto de sitio con una página inicial y un diseño compartido listos para editar. |
| Importar HTML | import-html.md | Incorpora HTML existente al sitio nuevo o a una página del sitio abierto. |
| Gestionar páginas, rutas y SEO | pages-seo-navigation.md | Organiza la página de inicio, las rutas de las páginas y sus metadatos para el sitio completo. |
| Configurar header, footer y diseños | site-layout.md | Administra el chrome compartido del sitio: header, footer y estilos comunes que pueden reutilizar sus páginas. |
| Personalizar tema y tipografía | theme-typography.md | Define colores, radios y tipografías que el renderer aplica como tema reutilizable del sitio. |
| Gestionar recursos del sitio | site-assets.md | Carga y reutiliza imágenes del sitio, incluidas las que el usuario adjunta al chat o genera la IA. |
| Insertar formularios de AchieveApex | embed-forms.md | Permite a Sites AI preferir e insertar formularios publicados de la organización para captar envíos reales en un sitio estático. |
| Editar el sitio con Sites AI | sites-ai.md | Permite pedir cambios de contenido y diseño, crear páginas, modificar layouts y generar imágenes mediante una conversación con IA. |
| Mantener contexto y memoria de IA | ai-context-memory.md | Guarda instrucciones durables del usuario y aprendizajes de la IA que sobreviven a conversaciones distintas. |
| Administrar skills de Sites AI | ai-skills.md | Activa guías de IA para el sitio y permite mantener una biblioteca reutilizable de skills de la organización. |
| Restaurar versiones de páginas | site-versions.md | Consulta el historial de una página y permite volver a un borrador o a la copia publicada sin perder el estado actual. |
| Previsualizar páginas y dispositivos | site-preview.md | Muestra una composición del sitio en un iframe y permite revisar la página en Desktop, Tablet o Mobile. |
| Publicar y republicar un sitio | publish-site.md | Hace público el sitio completo en un subdominio gratuito de AchieveApex y permite actualizarlo con Republish. |
| Conectar dominio propio | custom-domain.md | Asocia un hostname del cliente a un sitio ya publicado y guía su validación mediante CNAME. |
| Despublicar un sitio | unpublish-site.md | Retira los archivos públicos del sitio sin borrar el proyecto ni sus borradores. |
| Eliminar un sitio | delete-site.md | Elimina un sitio desde su tarjeta para retirarlo del listado de la organización. |
Relaciones
- Depende de: Organizations, wallet, Forms y permisos.
- Usado por: visitantes públicos y formularios embebidos.
Limitaciones y notas
- La publicación es de todo el sitio.
- El subdominio de plataforma es gratuito; un dominio propio cuesta $5 USD/mes.
id: ai-context-memory modulo: sites app: sites nombre: Mantener contexto y memoria de IA tipo: configuracion
Mantener contexto y memoria de IA
Guarda instrucciones durables del usuario y aprendizajes de la IA que sobreviven a conversaciones distintas.
Que se logra
- Resultado: Sites AI conserva las reglas de marca y decisiones del sitio entre sesiones de trabajo.
- Caso de uso: una agencia registra el tono, público y restricciones de una marca para que distintos editores mantengan el mismo criterio al usar la IA.
- Se combina con: Sites AI y skills de Sites AI.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Site menu >AI Context & Memory>Context/Memory`` - Componente(s):
SiteAIContextPanel.tsx, ContextEntriesTab.tsx
Como funciona
- Abra
AI Context & Memory. - En
Context, agregue reglas que siempre deben respetarse. - En
Memory, revise, corrija o elimine recuerdos generados por la IA.
Reglas y validaciones
- Contexto y memoria son distintos de la memoria de la conversación actual.
- Si una regla debe aplicarse siempre, debe estar en
Context.
Backend
- Servicios:
site-ai-context(find/create/patch/remove),site-builder-ai. - Efectos: el contexto se incorpora al prompt del builder dentro de su presupuesto.
Relaciones
- Requiere: sitio creado.
- Afecta: comportamiento de Sites AI.
id: ai-skills modulo: sites app: sites nombre: Administrar skills de Sites AI tipo: configuracion
Administrar skills de Sites AI
Activa guías de IA para el sitio y permite mantener una biblioteca reutilizable de skills de la organización.
Que se logra
- Resultado: la IA aplica guías reutilizables de diseño o de la organización al trabajar sobre un sitio específico.
- Caso de uso: una agencia activa una guía de identidad visual para que la IA mantenga el estándar acordado en cada página de un cliente.
- Se combina con: Sites AI y contexto y memoria.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
AI Context & Memory >Skills`` - Componente(s):
SkillsTab.tsx
Como funciona
- Abra la pestaña
Skills. - Active o desactive una skill para este sitio.
- Use
Viewpara leer una skill de Apex. - Use
Duplicatepara crear una copia editable de una skill de Apex, oNew skillpara crear una propia.
Reglas y validaciones
- Las skills de Apex son de solo lectura.
- Una skill de organización empieza desactivada en otros sitios.
- Para dejar de usar una skill solo en un sitio, desactívela; eliminarla la quita de toda la organización.
Backend
- Servicios:
site-ai-skills,site-ai-skill-assignments,apex-site-ai-skills. - Efectos: la IA abre el contenido completo de una skill activa solo cuando la tarea coincide.
Relaciones
- Requiere: sitio creado.
- Afecta: Sites AI.
- Integra:
Design Tasteestá disponible como skill de Apex.
id: create-site modulo: sites app: sites nombre: Crear un sitio tipo: accion
Crear un sitio
Crea un proyecto de sitio con una página inicial y un diseño compartido listos para editar.
Que se logra
- Resultado: un sitio con página de inicio, navegación, tema y diseño compartido listo para personalizar.
- Caso de uso: una consultora crea la base de su sitio corporativo para completar después sus páginas de servicios con Sites AI.
- Se combina con: importación de HTML, Sites AI, tema, páginas y publicación.
Donde esta
- Ruta:
/[orgId]/sites - Acceso en UI:
Sites >New site`` - Componente(s):
SitesListView.tsx
Como funciona
- Abra
Sites. - Seleccione
New site. - Escriba el nombre y elija
BlankoImport HTML. - Confirme para abrir el builder.
Reglas y validaciones
- El nombre es obligatorio.
- La opción
Blankinicia con una página de inicio; no envía un prompt de IA al crear.
Backend
- Servicios:
sites(create). - Efectos: se crea el contenido inicial, incluyendo página de inicio, diseño predeterminado, navegación y tema.
Relaciones
- Requiere: acceso a Sites.
- Afecta: páginas, tema, navegación y publicación.
id: custom-domain modulo: sites app: sites nombre: Conectar dominio propio tipo: integracion
Conectar dominio propio
Asocia un hostname del cliente a un sitio ya publicado y guía su validación mediante CNAME.
Que se logra
- Resultado: los visitantes acceden al sitio de Apex mediante el dominio propio del negocio, una vez validado.
- Caso de uso: un despacho profesional mantiene su web creada en Apex en
www.sudespacho.comsin perder la publicación existente. - Se combina con: publicación de sitios y facturación por Stripe.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Publish >Custom domain`` - Componente(s):
SitePublishPanel.tsx
Como funciona
- Publique primero el sitio.
- Escriba el dominio y elija
Connect domain. - Confirme la suscripción de $5/mes.
- Cree el CNAME mostrado por la interfaz.
- Use
Check statushasta que esté activo.
Reglas y validaciones
- No admite dominios de AchieveApex ni el dominio base de la plataforma.
- El dominio debe ser globalmente único.
- Desconectar programa la cancelación al fin del período; reconectar antes reutiliza el período pagado.
Backend
- Servicios:
site-custom-domains(create),cron-verify-site-domains. - Integraciones: Stripe, CloudFront y DNS.
- Efectos: cobra $5 USD/mes por sitio y replica la publicación para el hostname.
Relaciones
- Requiere: sitio publicado.
- Afecta: URL canónica y facturación.
id: delete-site modulo: sites app: sites nombre: Eliminar un sitio tipo: accion
Eliminar un sitio
Elimina un sitio desde su tarjeta para retirarlo del listado de la organización.
Que se logra
- Resultado: el sitio deja de aparecer en el catálogo operativo de la organización.
- Caso de uso: una agencia retira un proyecto de prueba que ya no debe estar disponible para su equipo.
- Se combina con: publicación de sitios, que debe revisarse antes de eliminar un proyecto que estuviera público.
Donde esta
- Ruta:
/[orgId]/sites - Acceso en UI:
Sites list > site menu >Delete`` - Componente(s):
SitesListView.tsx
Como funciona
- Abra
Sites. - Abra el menú de la tarjeta.
- Seleccione
Deletey confirme.
Reglas y validaciones
- El backend usa borrado lógico para los registros compatibles.
Backend
- Servicios:
sites(remove).
Relaciones
- Requiere: acceso al sitio.
- Afecta: páginas, layouts y recursos asociados según las relaciones del servicio.
id: embed-forms modulo: sites app: sites nombre: Insertar formularios de AchieveApex tipo: integracion
Insertar formularios de AchieveApex
Permite a Sites AI preferir e insertar formularios publicados de la organización para captar envíos reales en un sitio estático.
Que se logra
- Resultado: una página publicada capta solicitudes mediante un formulario de Apex que guarda envíos reales para la organización.
- Caso de uso: una inmobiliaria incorpora su formulario de visita a una página de proyecto para recibir prospectos desde el sitio.
- Se combina con: Forms, contactos y Sites AI.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Builder toolbar > AI - Componente(s):
SitesBuilderView.tsx
Como funciona
- Abra Sites AI y pida agregar un formulario.
- La IA consulta los formularios publicados de la organización.
- Inserta el widget de un formulario disponible o, cuando corresponde, un iframe.
- Publique el sitio para probar envíos desde el dominio público.
Reglas y validaciones
- Se priorizan formularios publicados; los no publicados no aceptan envíos.
- Un formulario HTML escrito sin una integración real es solo una maqueta visual.
- En una misma página solo puede usarse un widget; para otro formulario se usa el embed aislado.
- La vista previa puede impedir enviar por las restricciones de su iframe, aunque el formulario se renderice.
Backend
- Servicios:
forms(find/get),form-submissions(create). - Hooks relevantes: la IA consulta formularios de la misma organización antes de generar un embed.
- Efectos: los envíos públicos se guardan como submissions del formulario.
Relaciones
- Requiere: Forms y un formulario publicado.
- Afecta: páginas generadas, captación de leads y envíos de formularios.
Notas
- Los sitios publicados en subdominios de AchieveApex están contemplados por la configuración CORS del embed.
id: import-html modulo: sites app: sites nombre: Importar HTML tipo: accion
Importar HTML
Incorpora HTML existente al sitio nuevo o a una página del sitio abierto.
Que se logra
- Resultado: una página o sitio existente queda incorporado al builder con contenido, estructura compartida y estilos detectables.
- Caso de uso: una agencia reutiliza la página HTML de un cliente y la convierte en una base editable antes de publicar una nueva campaña.
- Se combina con: páginas, layouts, tema, versiones y publicación.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Pages >Import HTML`` - Componente(s):
ImportSiteHtmlDialog.tsx, SiteHtmlImportFields.tsx
Como funciona
- Elija
Import HTMLal crear o desdePages. - Pegue o cargue el HTML.
- Para un sitio existente, seleccione reemplazar la página actual o crear una nueva.
- Confirme la importación.
Reglas y validaciones
- El HTML es obligatorio y tiene un límite de tamaño.
- Los estilos enlazados, imágenes relativas y scripts de analítica se omiten y se muestran como advertencias.
- Importar sobre una página conserva una versión anterior para poder restaurarla.
Backend
- Servicios:
site-html-import(create),sites,site-pages,site-layouts. - Efectos: detecta header, footer, estilos y fuentes cuando están dentro del HTML.
Relaciones
- Requiere: un sitio existente al importar una página.
- Afecta: diseños, páginas, tema y versiones.
id: pages-seo-navigation modulo: sites app: sites nombre: Gestionar páginas, rutas y SEO tipo: configuracion
Gestionar páginas, rutas y SEO
Organiza la página de inicio, las rutas de las páginas y sus metadatos para el sitio completo.
Que se logra
- Resultado: visitantes encuentran una estructura navegable y páginas preparadas para indexación o exclusión de buscadores.
- Caso de uso: una clínica organiza Inicio, Especialidades y Contacto, y evita indexar una página temporal de campaña.
- Se combina con: layouts, Sites AI, vista previa y publicación.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Site menu >PagesyDomain & SEO`` - Componente(s):
SitesBuilderView.tsx
Como funciona
- Abra
Pagespara cambiar de página o importar una nueva. - Abra
Domain & SEO. - Defina título, descripción, ruta y la página de inicio.
- Guarde y republique cuando el sitio ya esté en línea.
Reglas y validaciones
- Solo una página puede ser la página de inicio (
/). - La publicación es por sitio completo, no por página individual.
- Las páginas marcadas para no indexar no entran en el sitemap.
Backend
- Servicios:
site-pages(find/get/patch/create),site-render. - Efectos: el render público genera metadatos, sitemap, robots y página 404.
Relaciones
- Requiere: sitio creado.
- Afecta: navegación, vista previa y publicación.
id: publish-site modulo: sites app: sites nombre: Publicar y republicar un sitio tipo: accion
Publicar y republicar un sitio
Hace público el sitio completo en un subdominio gratuito de AchieveApex y permite actualizarlo con Republish.
Que se logra
- Resultado: el sitio completo queda disponible para visitantes en una URL pública, con navegación, SEO y páginas actualizadas.
- Caso de uso: un negocio de eventos publica la web de una conferencia en un subdominio gratuito y la actualiza al cerrar la agenda.
- Se combina con: páginas y SEO, vista previa, formularios embebidos y dominio propio.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Builder toolbar >Publish`` - Componente(s):
SitePublishPanel.tsx
Como funciona
- Abra
Publish. - Elija un subdominio disponible.
- Confirme
Publish site. - Tras cambios, use
Republish.
Reglas y validaciones
- Debe existir una página de inicio.
- Publicar, republicar y usar el subdominio de AchieveApex son gratuitos.
- Todas las páginas se publican juntas.
Backend
- Servicios:
site-publish(create). - Efectos: renderiza HTML estático, lo carga a S3 e invalida CloudFront.
Relaciones
- Requiere: sitio con página de inicio.
- Afecta: URL pública, sitemap, robots y versiones publicadas.
id: site-assets modulo: sites app: sites nombre: Gestionar recursos del sitio tipo: accion
Gestionar recursos del sitio
Carga y reutiliza imágenes del sitio, incluidas las que el usuario adjunta al chat o genera la IA.
Que se logra
- Resultado: las imágenes del negocio quedan disponibles para incorporarlas al contenido del sitio mediante el builder y la IA.
- Caso de uso: un hotel carga fotografías de sus habitaciones y las adjunta a Sites AI para renovar su página de reservas.
- Se combina con: Sites AI, tema y páginas.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Site menu >Assets`` - Componente(s):
SiteAssetsPanel.tsx
Como funciona
- Abra
Assets. - Cargue un archivo.
- Revise los recursos disponibles.
- Use
Use AIpara adjuntar una imagen a la siguiente conversación.
Reglas y validaciones
Use AIadjunta el recurso, pero no envía un prompt automáticamente.- Los recursos pueden provenir de carga, adjuntos del chat o generación de IA.
Backend
- Servicios:
site-assets(find/create),s3-url-signing. - Efectos: los archivos se almacenan en S3 y quedan disponibles para la IA.
Relaciones
- Requiere: sitio creado.
- Afecta: chat de Sites AI y contenido de páginas.
id: site-layout modulo: sites app: sites nombre: Configurar header, footer y diseños tipo: configuracion
Configurar header, footer y diseños
Administra el chrome compartido del sitio: header, footer y estilos comunes que pueden reutilizar sus páginas.
Que se logra
- Resultado: los cambios de identidad y navegación se aplican de forma coherente en todas las páginas que usan el mismo diseño.
- Caso de uso: una firma legal actualiza su menú y pie de página una vez para que sus páginas de práctica mantengan la misma navegación.
- Se combina con: páginas, Sites AI, tema y publicación.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Site menu >Site Layout`` - Componente(s):
SiteLayoutPanel.tsx
Como funciona
- Abra
Site Layout. - Revise los diseños y las páginas asignadas.
- Use Sites AI para solicitar cambios al header, footer o estilos del diseño.
- Publique de nuevo para llevar el cambio a visitantes.
Reglas y validaciones
- Una página puede usar un diseño propio o el predeterminado del sitio.
- No hay edición manual directa del HTML del diseño desde este panel.
Backend
- Servicios:
site-layouts(find/get/patch),site-render,site-builder-ai.
Relaciones
- Requiere: sitio creado.
- Afecta: todas las páginas que usan el mismo diseño.
id: site-preview modulo: sites app: sites nombre: Previsualizar páginas y dispositivos tipo: vista
Previsualizar páginas y dispositivos
Muestra una composición del sitio en un iframe y permite revisar la página en Desktop, Tablet o Mobile.
Que se logra
- Resultado: el equipo detecta problemas de navegación, contenido o adaptación visual antes de exponer el sitio a visitantes.
- Caso de uso: un restaurante revisa en
Mobileque su página de menú y el acceso a reservas sean legibles antes de republicar. - Se combina con: páginas, tema, layouts y publicación.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Builder toolbar > viewport selector /Open preview`` - Componente(s):
SitesBuilderView.tsx
Como funciona
- Abra una página del sitio.
- Seleccione el viewport deseado.
- Navegue por enlaces internos en la vista previa.
- Use
Open previewpara abrir el HTML renderizado.
Reglas y validaciones
- La vista previa incorpora un puente de navegación exclusivo del builder.
- Una vista previa no equivale a publicar el sitio.
Backend
- Servicios:
site-render(create). - Efectos: fusiona layout, contenido, tema, fuentes y navegación.
Relaciones
- Requiere: sitio y página.
- Afecta: revisión previa a publicación.
id: site-versions modulo: sites app: sites nombre: Restaurar versiones de páginas tipo: accion
Restaurar versiones de páginas
Consulta el historial de una página y permite volver a un borrador o a la copia publicada sin perder el estado actual.
Que se logra
- Resultado: el equipo recupera una versión anterior de una página sin destruir el borrador que tenía antes de restaurar.
- Caso de uso: un comercio revierte la página de una promoción después de comprobar que el cambio reciente redujo la claridad de la oferta.
- Se combina con: edición con Sites AI, importación de HTML y publicación.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Builder toolbar >Versions`` - Componente(s):
SiteVersionsMenu.tsx
Como funciona
- Abra
Versions. - Elija
Current,Publishedo una instantánea histórica. - Seleccione
Restore this version. - Confirme la restauración.
Reglas y validaciones
- Antes de restaurar, el borrador actual se guarda como una nueva versión.
- La copia publicada solo está disponible mientras el sitio está publicado.
- Las instantáneas iniciales vacías se distinguen para evitar una restauración accidental.
Backend
- Servicios:
site-page-restore(create),site-pages(patch). - Efectos: cada edición de contenido crea historial y aumenta la versión de la página.
Relaciones
- Requiere: página existente.
- Afecta: borrador de la página; requiere republicar para actualizar visitantes.
id: sites-ai modulo: sites app: sites nombre: Editar el sitio con Sites AI tipo: accion
Editar el sitio con Sites AI
Permite pedir cambios de contenido y diseño, crear páginas, modificar layouts y generar imágenes mediante una conversación con IA.
Que se logra
- Resultado: el equipo transforma contenido, diseño y estructura del sitio desde instrucciones, con los cambios reflejados en el borrador.
- Caso de uso: una academia pide crear una página de cursos, ajustar el menú y generar imágenes para su lanzamiento sin salir del builder.
- Se combina con: contexto y memoria, skills, recursos, formularios, versiones y publicación.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Builder toolbar >AI`` - Componente(s):
BuilderAiChatLayer.tsx, SitesBuilderView.tsx
Como funciona
- Abra
AIdesde la barra o el botón flotante. - Elija un modelo y escriba la solicitud.
- Adjunte imágenes o una captura si hace falta.
- Revise el resultado en la vista previa y republique cuando corresponda.
Reglas y validaciones
- Requiere saldo positivo en la wallet de la organización.
- Las ediciones usan comprobaciones de versión para evitar sobrescribir cambios recientes.
- Los usuarios normales no ven las llamadas internas de herramientas.
Backend
- Servicios:
site-builder-ai(create),site-builder-conversations,site-builder-messages,ai-models. - Efectos: consume wallet según uso del modelo y puede crear recursos o páginas.
Relaciones
- Requiere: sitio y página activa.
- Afecta: páginas, layouts, tema, navegación, recursos y versiones.
id: theme-typography modulo: sites app: sites nombre: Personalizar tema y tipografía tipo: configuracion
Personalizar tema y tipografía
Define colores, radios y tipografías que el renderer aplica como tema reutilizable del sitio.
Que se logra
- Resultado: el sitio adopta una identidad visual consistente en la vista previa y en su versión publicada.
- Caso de uso: una franquicia aplica sus colores, tipografías y fuente de marca a un sitio de sucursal sin editar cada página.
- Se combina con: layouts, recursos, Sites AI y publicación.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Site menu >Theme`` - Componente(s):
SiteThemePanel.tsx
Como funciona
- Abra
Theme. - Ajuste colores y radio.
- Busque fuentes para encabezados y cuerpo, o cargue una fuente de marca.
- Guarde el tema.
Reglas y validaciones
- El HTML o CSS que usa colores fijos puede no reflejar los cambios del tema.
- Sites AI conserva las fuentes elegidas en
Theme; no las cambia mediante el chat.
Backend
- Servicios:
sites(patch),site-assets,s3-url-signing. - Efectos: la vista previa y la publicación cargan las fuentes y variables del tema.
Relaciones
- Requiere: sitio creado.
- Afecta: diseño, vista previa y sitio publicado.
id: unpublish-site modulo: sites app: sites nombre: Despublicar un sitio tipo: accion
Despublicar un sitio
Retira los archivos públicos del sitio sin borrar el proyecto ni sus borradores.
Que se logra
- Resultado: el sitio deja de estar disponible públicamente, mientras el proyecto y su contenido siguen editables en Apex.
- Caso de uso: una empresa retira una campaña estacional al terminarla y conserva el sitio para actualizarlo y volver a publicar después.
- Se combina con: publicación de sitios, versiones y dominio propio.
Donde esta
- Ruta:
/[orgId]/sites/[siteId] - Acceso en UI:
Publish >Unpublish`` - Componente(s):
SitePublishPanel.tsx
Como funciona
- Abra
Publish. - Seleccione
Unpublish. - Confirme la acción.
- Para volver a publicarlo, use el mismo subdominio.
Reglas y validaciones
- Despublicar no cancela un dominio propio ni su suscripción.
- El subdominio y la configuración del dominio se conservan para una publicación posterior.
Backend
- Servicios:
site-publish(create). - Efectos: elimina archivos públicos de S3 e invalida CloudFront.
Relaciones
- Requiere: sitio publicado.
- Afecta: disponibilidad pública; no elimina el borrador.
APP: support-admin
id: support-admin app: support-admin nombre: Administración de soporte estado: admin permiso: admin o superadmin
Administración de soporte
Consola global para que el equipo de plataforma gestione y responda los casos de soporte de organizaciones.
Para que sirve
- Centralizar y priorizar las solicitudes de soporte de todas las organizaciones.
- Crear casos administrativos para incidencias recibidas fuera de la aplicación.
- Responder a clientes, adjuntar evidencia y conservar notas privadas del equipo.
- Asignar casos manualmente o distribuir los nuevos por routing ponderado.
- Resolver escalaciones creadas desde Nova Support o desde una mala calificación.
Que lo hace diferente
- Los casos de Nova y su feedback conservan el vínculo con la conversación que motivó la escalación.
- El routing ponderado considera agentes de plataforma y sus asignaciones recientes.
- Las notas internas están separadas de las respuestas que recibe el cliente.
- Las respuestas visibles activan notificaciones por correo y pueden resolver el caso en el mismo flujo.
- La consola es global para el equipo de AchieveApex, no una bandeja por organización.
Acceso
- Ruta principal:
/support-admin - Como se llega:
Header app switcher > Internal > Support - Permiso requerido: rol de plataforma
adminosuperadmin; el routing requieresuperadmin
Alcance tecnico
- Frontend:
src/app/(support-admin)/support-admin/ysrc/components/support-cases/ - Backend:
support-cases,support-case-messagesysupport-agent-routing - Superficies publicas: ninguna
- Integraciones externas: correo para notificaciones de casos
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Inbox de casos | support-inbox.md | Consulta, filtra y administra la cola global. |
| Creación de casos | support-case-creation.md | Crea un caso en nombre de un miembro. |
| Detalle de caso | support-case-detail.md | Consulta conversación, solicitante y responsabilidad. |
| Respuestas y notas | support-case-replies.md | Envía respuestas, adjuntos y notas internas. |
| Estados y asignación | support-case-status-assignment.md | Cambia el estado o responsable individual y masivamente. |
| Routing de agentes | support-agent-routing.md | Configura distribución ponderada de nuevos casos. |
| Escalaciones de Nova | nova-support-escalations.md | Gestiona casos creados desde Nova o su feedback. |
Relaciones
- Depende de: Support Cases, Nova Support y Organizations.
- Usado por: personal de plataforma y solicitantes de soporte.
Limitaciones y notas
- Los mensajes internos no se muestran a los usuarios de las organizaciones.
id: nova-support-escalations modulo: support-admin app: support-admin nombre: Escalaciones de Nova Support tipo: integracion
Escalaciones de Nova Support
Gestiona casos cuyo origen es una escalación de Nova o una calificación revisada por personal interno.
Que se logra
- Resultado: Las señales de insatisfacción de Nova se convierten en casos humanos con su evidencia vinculada.
- Caso de uso: El equipo detecta feedback negativo, crea el caso desde Nova y continúa la atención en la cola de soporte.
- Se combina con: Feedback y conversaciones de Nova; inbox de soporte.
Donde esta
- Ruta:
/support-adminy/internal/nova-support/feedback - Acceso en UI:
Internal > Nova Support > Feedback > Create support case - Componente(s):
NovaSupportFeedbackCreateCaseDialog.tsx,SupportAdminListView.tsx
Como funciona
- El administrador revisa una calificación de Nova.
Create support casecrea un caso para responder al usuario.- El caso queda vinculado al feedback y a la conversación de Nova.
- Se gestiona desde el inbox como cualquier otro caso.
Reglas y validaciones
- El vínculo se prepara antes de crear el caso y se guarda tras crearlo.
Backend
- Servicios:
support-chat-message-feedback(find),support-cases(create). - Hooks relevantes: hidrata el caso desde feedback y lo enlaza después de crearlo.
- Efectos: crea mensaje inicial, routing y notificaciones de caso.
Relaciones
- Requiere: Feedback de Nova Support.
- Dispara / afecta: Inbox y detalle de casos.
Notas
- El caso se registra como creación manual, aunque se origine desde feedback.
id: support-agent-routing modulo: support-admin app: support-admin nombre: Routing de agentes de soporte tipo: configuracion
Routing de agentes de soporte
Configura los agentes de plataforma que reciben casos nuevos y su peso de distribución.
Que se logra
- Resultado: Los casos nuevos sin responsable se distribuyen entre agentes elegibles con una carga ponderada.
- Caso de uso: Un superadministrador da más peso a un agente senior y la cola automática respeta esa distribución.
- Se combina con: Creación y asignación de casos.
Donde esta
- Ruta:
/support-admin/agents - Acceso en UI:
Support Admin sidebar > Routing - Componente(s):
SupportAgentRoutingView.tsx
Como funciona
- Un superadministrador abre
Routing. - Elige usuarios de plataforma y los agrega como agentes.
- Ajusta el porcentaje de cada agente.
Save routingguarda la distribución.
Reglas y validaciones
- Solo usuarios con rol
adminosuperadminpueden configurarse como agentes. - La suma de los porcentajes debe ser 100 %.
- La asignación automática usa balanceo ponderado basado en asignaciones recientes.
Backend
- Servicios:
support-agent-routing(find/create/patch/remove),support-cases(create). - Efectos: los casos nuevos sin agente asignado pasan por la distribución.
Relaciones
- Requiere: Creación administrativa de casos.
- Dispara / afecta: Estados y asignación de casos.
Notas
- La ruta está restringida a
superadmin.
id: support-case-creation modulo: support-admin app: support-admin nombre: Creación administrativa de casos tipo: accion
Creación administrativa de casos
Permite abrir un caso de soporte en nombre de un integrante de una organización.
Que se logra
- Resultado: El equipo puede iniciar atención humana para una organización aunque el cliente no haya abierto el caso.
- Caso de uso: Un administrador registra una incidencia reportada por teléfono y la asigna al agente adecuado.
- Se combina con: Inbox y routing de agentes.
Donde esta
- Ruta:
/support-admin - Acceso en UI:
Support Admin > Create case - Componente(s):
SupportAdminListView.tsx
Como funciona
- Se pulsa
Create support case. - Se seleccionan organización y miembro solicitante.
- Se indica agente, asunto y detalle en Markdown.
- Se guarda el caso para incorporarlo a la cola.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Organización | selector | Sí | Determina el contexto del caso. |
| Solicitante | selector | Sí | Miembro de la organización elegida. |
| Agente asignado | selector | No | Si se indica, omite el routing automático. |
| Asunto | texto | Sí | Resume la solicitud. |
| Detalle | Markdown | Sí | Contenido inicial del caso. |
| Teléfono | texto | No | Opcional desde Support Admin. |
Reglas y validaciones
- El agente asignado debe ser válido para soporte.
Backend
- Servicios:
support-cases(create). - Efectos: crea el mensaje inicial, puede distribuir el caso y envía emails de creación.
Relaciones
- Requiere: Inbox de casos y routing de agentes.
- Dispara / afecta: Detalle de caso.
Notas
- La creación desde feedback de Nova usa el flujo vinculado de escalación.
id: support-case-detail modulo: support-admin app: support-admin nombre: Detalle de caso de soporte tipo: vista
Detalle de caso de soporte
Permite revisar el hilo de un caso y gestionar solicitante, estado y responsable.
Que se logra
- Resultado: El agente dispone del contexto y del responsable correctos para resolver un caso sin perder el vínculo con su organización.
- Caso de uso: Al recibir un caso, soporte revisa el hilo, confirma el solicitante y reasigna la responsabilidad si hace falta.
- Se combina con: Respuestas, notas, estados y asignación.
Donde esta
- Ruta:
/support-admin/[ticketId] - Acceso en UI:
Support Admin > Queue > Open - Componente(s):
SupportCaseThreadView.tsx
Como funciona
- Se abre un caso desde el inbox.
- Se consulta el hilo Markdown de mensajes y notas internas.
- Se revisa el solicitante y su teléfono, que puede copiarse.
- Se puede escoger otro miembro de la misma organización y guardar el cambio.
Reglas y validaciones
- El nuevo solicitante debe pertenecer a la misma organización.
- Las notas internas solo son visibles para administradores de plataforma.
Backend
- Servicios:
support-cases(get/patch),support-case-messages(find). - Hooks relevantes: al cambiar solicitante se sincroniza el responsable del caso.
- Efectos: ninguno al consultar.
Relaciones
- Requiere: Inbox de casos.
- Dispara / afecta: Estados y asignación.
Notas
- Esta ruta usa
adminModeen el componente compartido de hilos.
id: support-case-replies modulo: support-admin app: support-admin nombre: Respuestas y notas internas tipo: accion
Respuestas y notas internas
Permite responder al solicitante o añadir contexto privado para el equipo de soporte.
Que se logra
- Resultado: Los clientes reciben respuestas con seguimiento por correo mientras el equipo mantiene notas privadas separadas.
- Caso de uso: Un agente responde con una solución y cierra el caso; deja una nota interna con el diagnóstico para futuras consultas.
- Se combina con: Detalle y estados de caso.
Donde esta
- Ruta:
/support-admin/[ticketId] - Acceso en UI:
Support Admin Case Detail > Send replyoAdd note - Componente(s):
SupportCaseThreadView.tsx
Como funciona
- Se redacta el mensaje en el editor Markdown.
- Se pueden adjuntar archivos y usar el asistente de respuesta con IA.
Send replyenvía una respuesta visible al solicitante.Send reply & closeresponde y resuelve el caso.Add notecrea una nota exclusiva para administradores.
Reglas y validaciones
- Una respuesta visible activa la notificación por correo.
- Una nota interna nunca se muestra al cliente.
Backend
- Servicios:
support-case-messages(create),support-cases(patch). - Efectos: email de notificación;
Send reply & closeactualiza también el estado.
Relaciones
- Requiere: Detalle de caso.
- Dispara / afecta: estados del caso.
Notas
- Los adjuntos se muestran en el panel de la conversación cuando el mensaje los incluye.
id: support-case-status-assignment modulo: support-admin app: support-admin nombre: Estados y asignación de casos tipo: accion
Estados y asignación de casos
Permite actualizar el estado y el agente responsable de casos individuales o seleccionados en masa.
Que se logra
- Resultado: La cola refleja en todo momento el avance y el responsable de cada caso, incluso en operaciones masivas.
- Caso de uso: Un líder selecciona los casos bloqueados y los pasa a espera del cliente, o los asigna a un especialista.
- Se combina con: Inbox, detalle y routing de agentes.
Donde esta
- Ruta:
/support-adminy/support-admin/[ticketId] - Acceso en UI:
Support Admin > status filter, selección de casos oAdmin controls - Componente(s):
SupportAdminListView.tsx,SupportCaseThreadView.tsx
Como funciona
- En el inbox se seleccionan uno o varios casos.
Change statusaplica un estado a la selección.Assign toaplica un agente a la selección.- En el detalle se cambia estado o agente y se guarda.
Reglas y validaciones
- El cliente solo puede resolver su propio caso; los demás cambios se gestionan en la administración.
Backend
- Servicios:
support-cases(patch),support-tickets-batch-actions(create). - Efectos: actualiza la cola y la responsabilidad visible del caso.
Relaciones
- Requiere: Inbox de casos y Routing de agentes.
- Dispara / afecta: Detalle de caso.
Notas
- Los estados permitidos son
open,in_progress,waiting_on_customer,resolvedyclosed.
id: support-inbox modulo: support-admin app: support-admin nombre: Inbox de casos de soporte tipo: vista
Inbox de casos de soporte
Muestra la cola global de solicitudes de soporte de las organizaciones.
Que se logra
- Resultado: El equipo ve y prioriza en una sola cola todos los casos de soporte de la plataforma.
- Caso de uso: Un agente filtra los casos activos y abre el que requiere respuesta antes de que se acumule.
- Se combina con: Detalle, estados y routing de casos; escalaciones de Nova.
Donde esta
- Ruta:
/support-admin - Acceso en UI:
Internal > Support - Componente(s):
SupportAdminListView.tsx
Como funciona
- Se revisa la cola con solicitante, organización, agente asignado, estado y última actividad.
- Se filtra por estado.
Openabre el detalle de un caso.- En móvil se usan las pestañas
FiltersyCases.
Reglas y validaciones
- El icono de soporte del encabezado muestra casos activos que no estén resueltos o cerrados.
Backend
- Servicios:
support-cases(find/get). - Efectos: ninguno al consultar.
Relaciones
- Requiere: casos de soporte.
- Dispara / afecta: Detalle de caso.
Notas
- Incluye casos creados desde organizaciones, escalaciones de Nova y feedback de Nova.
APP: whiteboards
id: whiteboards app: whiteboards nombre: Whiteboards estado: shipped permiso: can_access_whiteboards
Whiteboards
Canvas de colaboración visual para ideas, diagramas, nodos CRM/Operations y generación con IA. Esta app es un módulo único; sus capacidades viven directamente en esta carpeta.
Para que sirve
- Una agencia diseña el flujo de una campaña con notas, enlaces y entregables en un solo canvas.
- Un equipo comercial relaciona contactos, deals y productos con un mapa de cuenta para preparar una oportunidad.
- Una empresa de servicios visualiza tareas y roadmap de un proyecto junto con sus decisiones y recursos.
- Un equipo de producto convierte un brief en un diagrama inicial con IA y lo ajusta antes de compartirlo externamente.
Que lo hace diferente
- El canvas puede vincular tarjetas vivas de contactos, deals, productos, tareas y proyectos de Apex, en lugar de limitarse a contenido dibujado.
- Los módulos de Operations incorporan vistas de tareas y roadmap dentro del whiteboard para quien tiene acceso a esa app.
- Whiteboard AI crea y conecta nodos, organiza layouts y genera imágenes sobre el documento existente, con control de versiones.
- Puede compartirse con un enlace público de solo lectura; los nodos CRM muestran una instantánea y los módulos de Operations no exponen datos sin iniciar sesión.
Acceso
- Ruta principal:
/[orgId]/whiteboards - Como se llega:
Header app switcher > Whiteboards - Permiso requerido:
can_access_whiteboards
Alcance tecnico
- Frontend: lista, editor React Flow y vista pública de Whiteboards
- Backend: documentos, versiones, IA y links públicos
- Superficies públicas:
/wb/[token] - Integraciones externas: S3, OpenRouter, CRM y Operations
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear un whiteboard | create-whiteboard.md | CreateWhiteboardDialog.tsx |
| Administrar carpetas y acceso | whiteboard-access.md | WhiteboardAccessDialog.tsx |
| Editar canvas y nodos | canvas-nodes.md | WhiteboardEditorView.tsx, WhiteboardNodes.tsx |
| Conectar nodos y organizar layouts | connections-layout.md | WhiteboardEditorView.tsx, layoutEngine.ts |
| Añadir multimedia y enlaces | media-and-links.md | WhiteboardNodes.tsx |
| Vincular CRM y Operations en vivo | live-crm-operations.md | CrmLiveNodes.tsx, OperationsLiveCards.tsx |
| Crear con Whiteboard AI | whiteboard-ai.md | WhiteboardAIChat.tsx, useWhiteboardBuilderAI.ts |
| Deshacer y restaurar cambios | versions-undo.md | WhiteboardEditorView.tsx, WhiteboardAIChat.tsx |
| Compartir whiteboard públicamente | public-whiteboard.md | WhiteboardPublicView.tsx |
Relaciones
- Depende de: Organizations, wallet y permisos de CRM/Operations cuando se usan nodos vivos.
- Usado por: equipos internos y espectadores externos autorizados por enlace.
Limitaciones y notas
- Los cambios manuales se guardan automáticamente.
- La colaboración simultánea en tiempo real no quedó confirmada como capacidad documentable en las superficies revisadas.
id: canvas-nodes modulo: whiteboards app: whiteboards nombre: Editar canvas y nodos tipo: accion
Editar canvas y nodos
Compone mapas, diagramas y brainstorms con formas, notas, tarjetas, frames y grupos.
Que se logra
- Resultado: ideas, decisiones y elementos de trabajo quedan representados en un mapa visual que el equipo puede reorganizar.
- Caso de uso: una empresa de software convierte un taller de descubrimiento en un diagrama con agrupaciones, responsables y fechas.
- Se combina con: conexiones y layouts, multimedia, nodos CRM/Operations, versiones y Whiteboard AI.
Donde esta
- Ruta:
/[orgId]/whiteboards/[whiteboardId] - Acceso en UI:
Left toolbar - Componente(s):
WhiteboardEditorView.tsx, WhiteboardNodes.tsx
Como funciona
- Elija una herramienta en la barra izquierda.
- Haga clic en el canvas para colocar el nodo.
- Seleccione el nodo para editar, cambiar estilo o redimensionar.
- Seleccione varios para recolorear, cambiar tipo, agrupar o eliminar.
Reglas y validaciones
EscapeoVvuelve a selección.- Los frames y grupos pueden contener nodos; al eliminarlos los hijos permanecen.
- Los nodos bloqueados no se arrastran ni redimensionan.
Backend
- Servicios:
whiteboards(patch). - Efectos: el guardado automático persiste el documento.
Relaciones
- Requiere: whiteboard editable.
- Afecta: historial y layout.
id: connections-layout modulo: whiteboards app: whiteboards nombre: Conectar nodos y organizar layouts tipo: accion
Conectar nodos y organizar layouts
Crea conexiones y reorganiza la posición de los nodos en Free, Tree down, Tree right o Radial.
Que se logra
- Resultado: el canvas comunica relaciones y jerarquías con conexiones legibles y una distribución que reduce solapamientos.
- Caso de uso: un equipo de operaciones convierte una lista de dependencias en un árbol de ejecución para detectar bloqueos.
- Se combina con: edición de nodos, Whiteboard AI y versiones.
Donde esta
- Ruta:
/[orgId]/whiteboards/[whiteboardId] - Acceso en UI:
Node handle / toolbar layout - Componente(s):
WhiteboardEditorView.tsx, layoutEngine.ts
Como funciona
- Arrastre entre handles (arriba, abajo, izquierda o derecha) para conectar nodos.
- Pase sobre una conexión para definir ruta, guiones, flechas o color.
- Use
Liney dos clics para una anotación libre. - Elija un layout en la barra superior. Las líneas de árbol bajan o van a la derecha según el layout; en Free se elige el lado más cercano (arriba/abajo si las cajas están apiladas).
Reglas y validaciones
- El layout cambia posiciones, no nodos ni conexiones.
- En árboles, el origen es padre y el destino hijo.
- Las líneas libres no participan en el auto-layout.
Backend
- Servicios:
whiteboards(patch). - Efectos: ELK calcula posiciones y resuelve solapamientos.
Relaciones
- Requiere: whiteboard editable.
- Afecta: documento y versión.
id: create-whiteboard modulo: whiteboards app: whiteboards nombre: Crear un whiteboard tipo: accion
Crear un whiteboard
Crea un canvas con una idea central y permite elegir una carpeta y el layout inicial.
Que se logra
- Resultado: un espacio visual inicial queda listo para estructurar una idea, proceso o proyecto.
- Caso de uso: un equipo de consultoría crea un canvas radial para ordenar los temas de un diagnóstico de cliente.
- Se combina con: nodos, conexiones, layouts, Whiteboard AI y acceso.
Donde esta
- Ruta:
/[orgId]/whiteboards - Acceso en UI:
Whiteboards >New whiteboard`` - Componente(s):
CreateWhiteboardDialog.tsx
Como funciona
- Abra
Whiteboards. - Seleccione
New whiteboard. - Indique nombre, layout y carpeta opcional.
- Confirme para abrir el editor.
Reglas y validaciones
- El nombre es obligatorio.
- Puede cambiar layout o carpeta posteriormente.
Backend
- Servicios:
whiteboards(create). - Efectos: crea el documento inicial y la membresía de propietario.
Relaciones
- Requiere: acceso a Whiteboards.
- Afecta: editor y visibilidad.
id: live-crm-operations modulo: whiteboards app: whiteboards nombre: Vincular CRM y Operations en vivo tipo: integracion
Vincular CRM y Operations en vivo
Añade tarjetas vivas de CRM y Operations o módulos completos de tareas y roadmap vinculados a registros reales.
Que se logra
- Resultado: el equipo conecta su planificación visual con información de clientes, oportunidades, productos, tareas y proyectos de Apex.
- Caso de uso: una agencia prepara el plan de una cuenta con sus deals activos, responsables, tareas y roadmap en el mismo canvas.
- Se combina con: CRM, Operations, acceso de whiteboards y enlaces públicos.
Donde esta
- Ruta:
/[orgId]/whiteboards/[whiteboardId] - Acceso en UI:
Left toolbar >More>CRM/Operations`` - Componente(s):
CrmLiveNodes.tsx, OperationsLiveCards.tsx
Como funciona
- Seleccione un tipo de CRM u Operations.
- Colóquelo en el canvas.
- Busque y vincule el contacto, deal, producto, tarea o proyecto.
- Abra la tarjeta o interactúe con el módulo.
Reglas y validaciones
- Las opciones aparecen solo con acceso a la app correspondiente.
- La vista pública usa datos resumidos para tarjetas y muestra inicio de sesión para módulos completos de Operations.
Backend
- Servicios:
contacts,deals,products,ops-projects,ops-project-tasksa través de componentes;whiteboards(patch).
Relaciones
- Requiere: permisos CRM u Operations según el nodo.
- Afecta: vínculos y vista pública.
id: media-and-links modulo: whiteboards app: whiteboards nombre: Añadir multimedia y enlaces tipo: accion
Añadir multimedia y enlaces
Inserta imágenes, video, páginas web, archivos, enlaces y carruseles dentro del canvas.
Que se logra
- Resultado: referencias visuales y materiales de trabajo permanecen junto al mapa que explica cómo se usan.
- Caso de uso: una agencia reúne en el canvas el video, enlace, PDF e imágenes que sustentan una propuesta creativa.
- Se combina con: edición de nodos, conexiones y enlace público.
Donde esta
- Ruta:
/[orgId]/whiteboards/[whiteboardId] - Acceso en UI:
Left toolbar >More`` - Componente(s):
WhiteboardNodes.tsx
Como funciona
- Abra
More. - Elija el tipo de recurso y colóquelo en el canvas.
- Cargue el archivo o pegue la URL.
- Seleccione para editar o redimensionar.
Reglas y validaciones
- Algunos sitios impiden ser mostrados en un iframe.
- En el editor el primer clic selecciona nodos interactivos; en la vista pública interactúan al primer clic.
- Los enlaces internos bloquean hosts privados.
Backend
- Servicios:
s3-url-signing,whiteboards(patch); APIlink-preview. - Efectos: archivos se cargan a S3 y enlaces consultan Open Graph.
Relaciones
- Requiere: whiteboard editable.
- Afecta: contenido del canvas.
id: public-whiteboard modulo: whiteboards app: whiteboards nombre: Compartir whiteboard públicamente tipo: publico
Compartir whiteboard públicamente
Comparte un canvas de solo lectura con cualquier persona que tenga el token.
Que se logra
- Resultado: una persona externa consulta un canvas completo sin poder modificarlo ni acceder al resto de la organización.
- Caso de uso: una consultora comparte el mapa de implementación con su cliente para alinear decisiones sin conceder acceso interno.
- Se combina con: acceso de whiteboards, multimedia y nodos CRM/Operations.
Donde esta
- Ruta:
/wb/[token] - Acceso en UI:
Editor toolbar >Share`` - Componente(s):
WhiteboardPublicView.tsx
Como funciona
- Abra
Share. - Active
Public link. - Copie
/wb/[token]. - Desactive el switch para revocar el acceso.
Reglas y validaciones
- Al volver a activar el enlace se conserva el mismo token.
- La vista pública no permite editar ni acceder al resto de la organización.
Backend
- Servicios:
whiteboard-public(create),whiteboards(patch).
Relaciones
- Requiere: whiteboard existente.
- Afecta: espectadores externos.
id: versions-undo modulo: whiteboards app: whiteboards nombre: Deshacer y restaurar cambios tipo: accion
Deshacer y restaurar cambios
Combina undo/redo local para cambios manuales con restauración persistente para cambios de IA.
Que se logra
- Resultado: el equipo puede revertir cambios recientes o recuperar un estado guardado sin rearmar el canvas desde cero.
- Caso de uso: un equipo de producto deshace una reorganización automática de IA que no representaba su proceso.
- Se combina con: edición de nodos, conexiones y layouts, y Whiteboard AI.
Donde esta
- Ruta:
/[orgId]/whiteboards/[whiteboardId] - Acceso en UI:
Left toolbar > undo/redo; AI chat >Undo`` - Componente(s):
WhiteboardEditorView.tsx, WhiteboardAIChat.tsx
Como funciona
- Use los controles de undo/redo para cambios recientes de la sesión.
- Para deshacer el último cambio de IA, abra el chat y seleccione
Undo. - Revise el estado restaurado.
Reglas y validaciones
- Undo/redo local no es el mismo historial que las versiones persistidas.
- Restaurar guarda un nuevo estado, por lo que también puede deshacerse.
Backend
- Servicios:
whiteboard-restore(create),whiteboard-versions(find),whiteboards(patch).
Relaciones
- Requiere: whiteboard editable.
- Afecta: documento y versión.
id: whiteboard-access modulo: whiteboards app: whiteboards nombre: Administrar carpetas y acceso tipo: configuracion
Administrar carpetas y acceso
Controla propietario, visibilidad y miembros de whiteboards y sus carpetas.
Que se logra
- Resultado: el conocimiento visual se comparte con el equipo adecuado o se mantiene privado por board o carpeta.
- Caso de uso: una agencia permite que el equipo de una cuenta consulte su tablero de planificación sin exponer otros clientes.
- Se combina con: carpetas, nodos CRM/Operations y enlaces públicos.
Donde esta
- Ruta:
/[orgId]/whiteboards - Acceso en UI:
Card/folder menu >Manage access`` - Componente(s):
WhiteboardAccessDialog.tsx
Como funciona
- Abra el menú del canvas o carpeta.
- Seleccione
Manage access. - Elija visibilidad y miembros.
- Guarde.
Reglas y validaciones
Privatelimita el acceso a propietario y miembros.- Una carpeta privada oculta los boards dentro de ella.
- Las personas con rol
Admindel recurso pueden gestionar acceso.
Backend
- Servicios:
whiteboard-collections,whiteboard-members,whiteboard-collection-members.
Relaciones
- Requiere: acceso administrativo al recurso.
- Afecta: listado y acceso al editor.
id: whiteboard-ai modulo: whiteboards app: whiteboards nombre: Crear con Whiteboard AI tipo: accion
Crear con Whiteboard AI
Construye y modifica el documento mediante prompts, con posibilidad de generar imágenes y usar conversaciones separadas.
Que se logra
- Resultado: un brief se convierte en una estructura de nodos, conexiones, layout e imágenes que el equipo puede revisar y seguir editando.
- Caso de uso: una consultora pide un mapa de actores y riesgos para un proyecto y luego ajusta los nodos resultantes en el canvas.
- Se combina con: nodos, conexiones y layouts, recursos y versiones.
Donde esta
- Ruta:
/[orgId]/whiteboards/[whiteboardId] - Acceso en UI:
Editor toolbar >AI`` - Componente(s):
WhiteboardAIChat.tsx, useWhiteboardBuilderAI.ts
Como funciona
- Abra
AI. - Seleccione un nodo si desea enfocar el pedido.
- Escriba el prompt y envíelo.
- Revise el canvas o use
Undoen el chat.
Reglas y validaciones
- Requiere wallet positiva.
- Cada mutación verifica la versión actual del documento.
- Las imágenes generadas se cobran por separado.
Backend
- Servicios:
whiteboard-builder-ai(create),whiteboard-builder-conversations,whiteboard-builder-messages. - Efectos: cobra wallet, guarda herramientas y crea versiones de documento.
Relaciones
- Requiere: whiteboard.
- Afecta: nodos, conexiones, recursos e historial.