Cómo implementar un sistema de gestión de tickets y soporte técnico con Drupal
Zendesk cobra entre 19 y 115 euros por agente al mes. Freshdesk, Jira Service Management, Zoho Desk... todos repiten el mismo modelo de suscripción que escala con cada agente y cada bandeja de entrada. Para una empresa con 10 agentes de soporte, la factura anual puede superar los 13.000 euros sin contar complementos. Y los datos del cliente --conversaciones, tiempos de respuesta, históricos-- quedan en servidores de un tercero, sujetos a términos de servicio que cambian cuando les apetece.
Drupal plantea una alternativa más sensata: un sistema de tickets propio, alojado en infraestructura que controlas tú, adaptable a tus flujos de trabajo y sin coste por agente. No es lo más rápido de desplegar --requiere configuración-- pero a medio plazo compensa en flexibilidad, propiedad de datos y ahorro acumulado.
Qué necesita un sistema de tickets funcional
Antes de hablar de módulos, definamos los requisitos mínimos de un helpdesk operativo:
- Formulario de apertura de ticket. El cliente describe el problema, adjunta capturas y selecciona categoría y prioridad.
- Asignación automática o manual. El ticket llega al agente correcto según la categoría, la carga de trabajo o las reglas de turno.
- Estados y transiciones. Abierto, en progreso, esperando respuesta del cliente, resuelto, cerrado. Cada transición puede disparar notificaciones.
- Comunicación bidireccional. El agente responde desde el backoffice; el cliente recibe la respuesta por email y puede contestar sin entrar en el portal.
- SLA (Service Level Agreement). Tiempos máximos de primera respuesta y de resolución según prioridad. Alertas cuando un ticket está a punto de incumplir el SLA.
- Base de conocimiento. Artículos de ayuda que reducen el volumen de tickets que necesitan intervención humana.
- Métricas. Tiempo medio de respuesta, tiempo de resolución, volumen por categoría, satisfacción del cliente (CSAT).
Arquitectura en Drupal: tipos de contenido y campos
Tipo de contenido: Ticket
| Campo | Tipo | Notas |
|---|---|---|
| Asunto | Text (plain) | Título del ticket |
| Descripción | Text (formatted, long) | Detalle del problema con editor WYSIWYG |
| Categoría | Entity Reference (Taxonomy) | Facturación, Incidencia técnica, Consulta general, Solicitud de cambio |
| Prioridad | List (text) | Baja, Media, Alta, Crítica |
| Estado | List (text) | Controlado por el módulo Workflows |
| Agente asignado | Entity Reference (User) | Filtrado por rol "Agente de soporte" |
| Adjuntos | File | Múltiple, con restricción de extensiones (png, jpg, pdf, zip) |
| Cliente | Entity Reference (User) | Autocompletado, rellenado automáticamente si el usuario está autenticado |
| Canal de origen | List (text) | Web, Email, Teléfono, API |
| SLA - Primera respuesta | Datetime | Calculado automáticamente al crear el ticket |
| SLA - Resolución | Datetime | Calculado según prioridad |
| Referencia externa | Text (plain) | Para vincular con IDs de otros sistemas |
Tipo de contenido: Respuesta de ticket
En lugar de usar los comentarios nativos de Drupal --que tienen limitaciones serias de formato y permisos--, es mejor crear un tipo de contenido "Respuesta" vinculado al ticket mediante Entity Reference. Cada respuesta tiene:
- Cuerpo del mensaje (texto formateado).
- Autor (agente o cliente).
- Visibilidad: pública (el cliente la ve) o interna (solo agentes).
- Adjuntos.
- Timestamp.
El módulo Inline Entity Form permite a los agentes añadir respuestas directamente desde la página de edición del ticket, sin cambiar de pantalla.
Flujo de estados con Workflows
Drupal 10 incluye en el core los módulos Workflows y Content Moderation. Aunque fueron diseñados para flujos editoriales, se adaptan bien a un sistema de tickets:
- Nuevo. Estado inicial al crear el ticket.
- Asignado. Un agente toma el ticket o el sistema lo asigna automáticamente.
- En progreso. El agente está trabajando en la resolución.
- Esperando cliente. Se ha solicitado información adicional. El SLA de resolución se pausa.
- Resuelto. El agente marca el ticket como solucionado.
- Cerrado. El cliente confirma la resolución o pasan 72 horas sin respuesta.
- Reabierto. El cliente responde tras el cierre. Vuelve a "En progreso".
Las transiciones se definen en Configuration > Workflow > Transitions. Cada transición puede restringirse por rol: un cliente solo puede mover de "Resuelto" a "Reabierto"; un agente no puede cerrar directamente sin pasar por "Resuelto".
Automatización con ECA y Rules
El módulo ECA (Event-Condition-Action), sucesor espiritual de Rules para Drupal 10, permite automatizar sin escribir código. Las automatizaciones no cuestan extra ni vienen bloqueadas en un plan premium.
Asignación automática por round-robin
- Evento: Creación de nodo tipo Ticket.
- Condición: El campo "Agente asignado" está vacío.
- Acción: Ejecutar una vista que devuelve el agente con menos tickets abiertos y asignarlo al campo. Enviar notificación al agente.
Escalado por SLA
- Evento: Cron (cada 5 minutos).
- Condición: Tickets donde el campo "SLA - Primera respuesta" es anterior a la hora actual Y el estado sigue en "Nuevo" o "Asignado".
- Acción: Cambiar prioridad a "Crítica". Enviar email al supervisor del equipo. Crear entrada en el log de escalados.
Cierre automático
- Evento: Cron (diario).
- Condición: Tickets en estado "Resuelto" con última actividad hace más de 72 horas.
- Acción: Cambiar estado a "Cerrado". Enviar encuesta de satisfacción al cliente.
Notificación al cliente
- Evento: Creación de nodo tipo "Respuesta de ticket" con visibilidad "Pública".
- Condición: Ninguna adicional.
- Acción: Enviar email al cliente con el contenido de la respuesta y un enlace al ticket.
Recepción de tickets por email
Muchos clientes prefieren enviar un email a soporte@empresa.es antes que rellenar un formulario web. El módulo Mailhandler cubre ese canal:
- Configurar una conexión IMAP al buzón de soporte.
- Parsear los emails entrantes y crear tickets automáticamente.
- Detectar respuestas a hilos existentes (por el campo In-Reply-To del header) y añadirlas como nuevas respuestas al ticket correspondiente.
- Extraer adjuntos y vincularlos al ticket.
Con Mailhandler y ECA combinados, el cliente gestiona todo su soporte por email sin acceder al portal, mientras que el agente trabaja desde una interfaz estructurada con estados, prioridades y métricas.
Panel del agente con Views
El módulo Views del core permite construir cuadros de mando operativos. Estos son los tres que monto siempre:
Vista: "Mis tickets abiertos"
- Filtro: Agente asignado = usuario actual, Estado != Cerrado.
- Ordenación: SLA - Primera respuesta (ascendente), para que los más urgentes aparezcan arriba.
- Columnas: ID, Asunto, Cliente, Prioridad, Estado, Tiempo restante SLA.
- Formato: tabla con filtros expuestos por prioridad y categoría.
Vista: "Tickets sin asignar"
- Filtro: Agente asignado = vacío, Estado = Nuevo.
- Acción masiva (módulo Views Bulk Operations): seleccionar varios tickets y asignarlos a un agente con un clic.
Vista: "Dashboard del supervisor"
- Sin filtro de agente. Agrupación por agente asignado.
- Campos calculados: número de tickets abiertos por agente, tiempo medio de respuesta (requiere un campo computado o una vista con agregación).
- Gráfico de volumen diario con el módulo Charts (soporta Chart.js y Google Charts).
Base de conocimiento integrada
Reducir el volumen de tickets es tan importante como resolverlos rápido. Una base de conocimiento bien mantenida puede desviar entre un 20 y un 40 % de las consultas, según datos de HDI (Help Desk Institute).
En Drupal:
- Crear un tipo de contenido "Artículo de ayuda" con campos: título, cuerpo, categoría (misma taxonomía que los tickets), módulo/producto afectado, etiquetas.
- Usar Search API con Solr o Database Search para un buscador con relevancia, autocompletado y facetas.
- Configurar un bloque "Artículos relacionados" en la página de creación de tickets: antes de enviar, el cliente ve sugerencias basadas en las palabras clave del asunto. El módulo Search API Autocomplete facilita esta funcionalidad.
- Registrar qué artículos resuelven la consulta sin necesidad de abrir ticket (campo "¿Te ha resultado útil?" con Voting API o Fivestar).
Métricas y reporting
Un sistema de tickets sin métricas es una bandeja de entrada glorificada. Las métricas esenciales:
| Métrica | Cómo obtenerla |
|---|---|
| MTTR (Mean Time to Resolve) | Vista con agregación: promedio de diferencia entre fecha de creación y fecha de cambio a "Resuelto". |
| MTFR (Mean Time to First Response) | Promedio de diferencia entre fecha de creación del ticket y fecha de la primera respuesta pública. |
| Volumen por categoría | Vista con agrupación por taxonomía de categoría y conteo. |
| Cumplimiento de SLA | Porcentaje de tickets resueltos antes del deadline de SLA. Campo calculado o vista con filtro condicional. |
| CSAT | Encuesta post-cierre con Webform. Escala 1-5. Promedio mensual. |
| Tickets reabiertos | Porcentaje de tickets que pasan de "Resuelto" a "Reabierto". Indicador de calidad de resolución. |
Para reportes avanzados, Views Data Export permite exportar cualquier vista a CSV para analizar en Metabase o Google Looker Studio.
Seguridad y control de acceso
Un sistema de tickets contiene información sensible. Medidas imprescindibles:
- Permisos por rol. Los clientes solo ven sus propios tickets; los agentes, los de su equipo; los supervisores, todos. Configurable con Content Access o Group.
- Notas internas. Las respuestas marcadas como "internas" no se muestran al cliente ni se envían por email.
- Registro de actividad. El módulo Audit Log registra cambios de estado, reasignaciones y ediciones.
- Autenticación reforzada. TFA con TOTP para los agentes.
Integración con herramientas externas
Un sistema de tickets rara vez funciona aislado. Drupal conecta con:
- Slack / Microsoft Teams vía webhooks para notificar tickets nuevos o escalados al canal del equipo.
- CRM (HubSpot, Salesforce, SuiteCRM) mediante API REST, vinculando cada ticket al contacto comercial.
- Monitorización (Nagios, Zabbix, Uptime Robot) que puede abrir tickets automáticamente al detectar caídas, usando JSON:API de Drupal.
Para el rendimiento, activar Varnish como reverse proxy, usar Search API con Solr en lugar de búsquedas SQL directas y archivar tickets cerrados con más de 12 meses mantiene el sistema ágil con 100.000 registros.
Coste de implementación vs. SaaS
Una comparativa realista para una empresa con 15 agentes:
| Concepto | SaaS (Zendesk Professional) | Drupal propio |
|---|---|---|
| Licencia / suscripción anual | ~20.700 EUR | 0 EUR (open source) |
| Hosting (VPS/cloud) | Incluido | ~1.800 EUR/año |
| Desarrollo inicial | 0 (configuración guiada) | 8.000-15.000 EUR |
| Mantenimiento anual | Incluido | 2.000-4.000 EUR |
| Coste a 3 años | ~62.100 EUR | ~19.400-28.600 EUR |
El ahorro acumulado a tres años puede superar los 30.000 euros, y la empresa retiene la propiedad total del sistema y los datos.
Si tu empresa necesita un sistema de soporte que se adapte a vuestros flujos y no al revés, consultadnos para diseñar la arquitectura sobre Drupal.
Preguntas frecuentes sobre
Como mejorar mi negocio con la metodología Anticompetencia
En Tangram no queremos que la información pase por una cadena interminable de intermediarios donde se pierden los detalles importantes.
Contarás con un interlocutor que coordinará la comunicación y trasladará las decisiones al equipo responsable de tu proyecto.
Cuando sea necesario profundizar en cuestiones de estrategia, diseño o tecnología, podremos involucrar a los especialistas correspondientes.
Así tendrás una comunicación organizada, sin necesidad de gestionar personalmente a todos los profesionales que intervienen.
Queremos que tengas acceso al conocimiento de un equipo especializado, sin sufrir la complejidad de coordinarlo.
No tendrás que averiguar a quién escribir cada vez que tengas una duda.
En Tangram contemplamos la figura del Account Manager como interlocutor principal, encargado de acompañarte durante el proyecto, coordinar la comunicación y facilitar el seguimiento de las decisiones.
Nuestra metodología incluye reuniones de revisión, canales de comunicación y herramientas para que puedas participar en el trabajo.
La organización concreta, la frecuencia de las reuniones y los canales disponibles se establecerán según el proyecto contratado.
Lo importante es que sepas con quién hablar, en qué punto está tu proyecto y qué decisiones necesitan tu participación.
Sí, podemos valorar una colaboración con los profesionales que ya trabajan en tu empresa.
No siempre tiene sentido sustituir un equipo que conoce bien tu negocio. En muchas situaciones, lo más útil es complementar sus conocimientos con especialistas en determinadas áreas.
Podemos estudiar qué responsabilidades asumiría Tangram, cuáles mantendría tu equipo y cómo coordinar las decisiones para evitar duplicidades.
La forma concreta de colaboración dependerá de la organización, las herramientas y las necesidades del proyecto.
No se trata de reemplazar lo que ya funciona, sino de aportar el conocimiento que necesitas para llegar más lejos.
No tienes por qué cambiar de proveedor para explorar una colaboración con Tangram.
Durante nuestra trayectoria hemos trabajado con agencias y consultoras, participando en proyectos en los que cada empresa asumía una parte diferente del trabajo.
Esa experiencia nos permite comprender la importancia de definir responsabilidades y coordinar a los profesionales implicados.
Podemos valorar una colaboración para cubrir necesidades concretas que tu proveedor actual no ofrece o para reforzar determinadas áreas.
Si tienes una relación profesional que funciona, no queremos que la rompas sin motivo. Queremos encontrar dónde podemos aportar valor.
La confidencialidad es especialmente importante cuando hablamos de nuevas ideas de negocio, información económica, estrategias comerciales o desarrollos tecnológicos.
En Tangram tenemos experiencia trabajando en proyectos sujetos a acuerdos de confidencialidad, motivo por el que no podemos mostrar públicamente muchos de los trabajos en los que hemos participado.
Si tu proyecto requiere un acuerdo de confidencialidad (NDA) antes de compartir información sensible, podemos revisar sus condiciones y acordar cómo proteger esa información antes de entrar en los detalles.
Entendemos que la confianza empieza por respetar lo que todavía no quieres hacer público.