9. CRM

Sección deshabilitada en este despliegue. La variable de entorno CRM_ENABLED=false en el .env del servidor apaga todas las rutas /crm/*. Los controladores (CrmObjectTypeController, CrmRecordController, CrmViewController, WorkflowController) y las vistas existen en el código fuente, pero no son accesibles desde este panel. Esta sección documenta la funcionalidad a partir del código y debe validarse cuando la sección se reactive.

Introducción

El módulo CRM (Customer Relationship Management) del panel permite modelar tipos de objeto personalizados (clientes, leads, socios, contactos comerciales, candidatos, etc.), definir vistas para consultarlos (lista, kanban, calendario), añadir registros manualmente o de forma automática desde formularios, y configurar workflows que disparan acciones cuando se cumplen ciertas condiciones.

La idea es no atar el panel a un modelo de datos fijo: en lugar de tener una entidad "Lead" y otra "Cliente" hardcoded, el administrador define sus propios tipos de objeto con sus campos y relaciones, y el sistema genera automáticamente la UI para gestionarlos.

Acceso rápido

Pantalla principal

No hay captura disponible: la sección está deshabilitada en este despliegue. La descripción que sigue se basa en el código fuente de los controladores (CrmObjectTypeController, CrmRecordController, CrmViewController, WorkflowController) y debe validarse visualmente cuando la sección se reactive.

La pantalla principal del CRM, accesible en /crm cuando el módulo está activo, es un dashboard resumen con:

Tareas habituales

9.1 Crear un tipo de objeto con sus campos

El primer paso para usar el CRM es definir los tipos de objeto (lo que en otros CRMs sería "entidades" o "módulos"). Por ejemplo: Lead, Cliente, Socio, Contacto de prensa.

  1. Entra en /crm/object-types.
  2. Pulsa Nuevo tipo de objeto.
  3. Rellena:
    • Nombre singular / plural (etiquetas que verá el usuario, localizadas).
    • Slug (identificador URL, en minúsculas y sin espacios). Será parte de las rutas internas.
    • Descripción opcional.
    • Icono (sprite SVG del spritemap del sitio, ver sección 4).
  4. En la pestaña Campos, añade los campos del tipo. Por cada campo defines:
    • Nombre interno (slug) y etiqueta.
    • Tipo de campo (ver tipos disponibles).
    • Obligatorio: sí / no.
    • Único: sí / no (útil para emails, DNIs, códigos).
    • Valor por defecto.
    • Opciones en caso de select o multiselect.
    • Relación en caso de relation (qué tipo de objeto se relaciona, cardinalidad).
  5. Guarda. El sistema generará automáticamente la tabla correspondiente en la base de datos, las rutas CRUD, y la entrada en el menú lateral del CRM.
Importante: cambiar los campos de un tipo de objeto después de tener registros puede requerir migrar datos. Eliminar un campo borra su valor en todos los registros; renombrar un campo conserva los datos pero cambia el nombre visible.

9.2 Crear vistas (lista, kanban, calendario)

Una vez definido el tipo de objeto, se pueden crear vistas para consultar los registros. El sistema soporta tres tipos de vista:

Para crear una vista:

  1. Entra en /crm/views.
  2. Pulsa Nueva vista.
  3. Elige el tipo de objeto sobre el que aplica la vista.
  4. Elige el tipo de vista (lista, kanban, calendario).
  5. Configura las columnas / campos visibles, los filtros por defecto, el orden y la agrupación (en kanban).
  6. Guarda. La vista aparece en el submenú del tipo de objeto correspondiente.

9.3 Añadir registros manualmente

Los registros se pueden crear desde la UI del panel o de forma automática (a través de un formulario público, de una integración, o de un workflow). Para añadir uno a mano:

  1. Entra en el tipo de objeto correspondiente, p. ej. /crm/object-types/lead/records.
  2. Pulsa Nuevo registro.
  3. Rellena los campos. Los obligatorios aparecen marcados; el sistema valida también los tipos (email, número, etc.) y la unicidad.
  4. Añade archivos adjuntos si el tipo tiene campos de tipo file.
  5. Guarda. El registro aparece en las vistas asociadas al tipo.

Desde la ficha de un registro se puede:

9.4 Crear workflows (disparador → condiciones → acciones)

Los workflows automatizan tareas recurrentes. La estructura es siempre la misma: un disparador (cuándo se ejecuta), unas condiciones (filtros sobre el registro o el evento) y unas acciones (qué se hace).

  1. Entra en /crm/workflows.
  2. Pulsa Nuevo workflow.
  3. Asigna nombre y descripción.
  4. Elige el disparador. Tipos habituales:
    • record.created — al crear un registro.
    • record.updated — al modificar un registro.
    • record.field_changed — cuando un campo concreto cambia de valor (por ejemplo, status pasa de nuevo a cualificado).
    • schedule.daily / schedule.weekly — ejecución periódica (útil para recordatorios).
    • form.submitted — al recibir un envío de un formulario específico.
  5. Añade condiciones (todas deben cumplirse para que el workflow continúe). Ejemplos:
    • El campo source es web.
    • El campo country está en la lista ["ES","FR","PT"].
    • El campo amount es mayor que 1000.
  6. Añade una o varias acciones (ver acciones disponibles). Las acciones se ejecutan en orden. Si una falla, las siguientes no se ejecutan (a menos que se active "continuar aunque falle").
  7. Guarda. Activa el workflow (botón Activar). A partir de ese momento, cada vez que se cumpla el disparador y las condiciones, se ejecutarán las acciones.
Importante: los workflows se ejecutan en background (vía cola) para no bloquear la web. Esto significa que puede haber un retraso de segundos o minutos entre el evento y la ejecución. Cada ejecución deja un log accesible desde la ficha del workflow.

Referencia técnica (webmasters)

Tipos de campo disponibles

Al definir los campos de un tipo de objeto se puede elegir entre los siguientes tipos (los nombres exactos dependen de la versión del código):

Acciones de workflow disponibles

Las acciones que un workflow puede ejecutar son, entre otras:

Integraciones y extensibilidad

El CRM se integra con el resto del panel:

Rutas internas relevantes

Estas rutas existen en el código fuente, pero no son accesibles en este despliegue (todas responden vacío/404 mientras CRM_ENABLED=false):

Errores frecuentes