Cómo Configurar la Encuesta de Satisfacción en GLPI

Cómo GLPI realmente dispara, almacena y mide la encuesta de satisfacción: de qué columna de glpi_entities sale cada ajuste, por qué a veces no se envía (cerrado vs resuelto, el cron createinquest) y qué hacemos al dar soporte a entornos de clientes para elevar la tasa de respuesta.

En este artículo5 secciones

Una encuesta de satisfacción que nadie responde no genera ninguna decisión. Esta guía muestra cómo GLPI realmente dispara, almacena y mide la encuesta de satisfacción - de qué columna sale cada ajuste, por qué a veces simplemente no se envía, y qué hacemos al dar soporte a entornos de clientes para levantar la tasa de respuesta del suelo.

Dónde se configura la encuesta (y por qué es por entidad)

Al contrario de lo que muchos buscan, la encuesta de satisfacción en GLPI no es un botón global: se configura por entidad, en Administración > Entidades > (seleccione la entidad) > pestaña Asistencia. Cada campo de la pantalla escribe en una columna de la tabla glpi_entities, y el valor puede heredarse de la entidad padre. Conocer la columna detrás de cada campo es lo que permite diagnosticar por SQL cuando la interfaz "dice" que todo está bien.

Campo en pantallaColumna en glpi_entitiesQué hace
Configuracióninquest_config-2 hereda, 0 ninguna, 1 interna (estrellas), 2 externa (URL)
Crear encuesta después deinquest_delaydías tras el cierre hasta generar la encuesta
Tasainquest_rate% de tickets sorteados (100 = todos)
Duracióninquest_durationdías que el usuario tiene para responder (0 = ilimitado)
URL (solo externa)inquest_URLendpoint de la encuesta externa, con marcadores
(interno)max_closedatemarca de agua: hasta dónde ya procesó el cron

El campo Configuración con valor -2 (heredar) es la trampa silenciosa: una subentidad puede parecer activa cuando en realidad hereda "ninguna encuesta" de la raíz. Las versiones recientes trajeron la misma mecánica a los Cambios, en columnas equivalentes con el sufijo _change.

El disparador real: el cierre + el cron, no la solución

Aquí está la causa número 1 de "la encuesta no sale". La encuesta no nace cuando el ticket se resuelve (estado 5, Resuelto); nace cuando el ticket se cierra (estado 6, Cerrado) y, aun así, solo cuando la tarea de cron createinquest se ejecuta y sortea ese ticket dentro de la inquest_rate. Son dos requisitos independientes:

  1. El ticket debe cerrarse. Si el cierre automático está apagado y los técnicos solo "resuelven", los tickets quedan en Resuelto para siempre y no se genera ninguna encuesta. El cierre automático es el campo autoclose_delay de la propia entidad.
  2. El cron debe ejecutarse en modo externo. La tarea createinquest genera las encuestas de los tickets cerrados. En modo interno solo se ejecuta cuando alguien carga una página - en entidades de bajo tráfico puede pasar días sin ejecutarse.

Ese fue exactamente el caso en un entorno que asumimos: la encuesta llevaba meses "activada" y la base de datos no tenía una sola respuesta. No era la plantilla ni la tasa. createinquest estaba en modo interno (mode = 1) en un GLPI de bajo tráfico, así que el cron prácticamente nunca se disparaba; y, para colmo, el cierre automático estaba apagado, así que casi nada llegaba al estado Cerrado. Activamos el cron externo del sistema operativo y ajustamos autoclose_delay: las encuestas empezaron a generarse el mismo día. Desde entonces, revisar estos dos puntos se volvió un elemento fijo de nuestro runbook al asumir cualquier GLPI.

El cron externo es una línea en el crontab del sistema, ejecutada con el usuario de PHP:

# /etc/cron.d/glpi - cron externo de GLPI (usuario de PHP-FPM)
# 1 ejecución por minuto; procesa TODAS las tareas en modo externo,
# incluida "createinquest" (generación de las encuestas de satisfacción).
* * * * *  apache  /usr/bin/php /var/www/glpi/front/cron.php >/dev/null 2>&1

Y el diagnóstico directo en la base de datos confirma si la tarea está activa y cuándo se ejecutó por última vez:

-- Estado de la tarea que genera las encuestas (usar usuario de solo lectura)
-- state: 0=deshabilitada 1=en espera 2=en ejecución
-- mode:  1=interno (se ejecuta en page load)  2=externo (cron del SO)
-- frequency: intervalo en segundos (por defecto 86400 = 1 día)
SELECT name, state, mode, frequency,
       lastrun,
       DATE_ADD(lastrun, INTERVAL frequency SECOND) AS proxima_prevista
FROM glpi_crontasks
WHERE name = 'createinquest';

La plantilla de la notificación

Con la encuesta generada, quien invita al usuario es la notificación. Personalícela en Configuración > Notificaciones > Plantillas de notificación, en la plantilla ligada al evento de satisfacción del Ticket. Las etiquetas útiles:

  • ##ticket.urlsatisfaction## - enlace directo y autenticado a la encuesta (el más importante).
  • ##ticket.id## y ##ticket.title## - referencia para que el usuario recuerde la atención.
  • ##satisfaction.text## / ##satisfaction.type## - texto y tipo de la encuesta.

El error común aquí es esmerarse en un correo largo: cuanto más texto antes del enlace, menor la conversión. Una línea de contexto, el enlace y listo.

Midiendo la tasa de respuesta de verdad

La media honesta de respuesta de encuestas por correo está en el rango del 10% al 20%; tratar el 30% como "malo" es irreal. Todas las respuestas viven en glpi_ticketsatisfactions, una fila por encuesta generada. Cuando no se respondió, date_answered queda nulo - así se separa "enviada" de "respondida":

-- Tasa de respuesta y media (últimos 90 días), usuario de solo lectura
-- type: 1=interna (estrellas)  2=externa (URL)
-- satisfaction: 0 a 5; date_answered nulo = aún no respondida
SELECT
    COUNT(*)                                                   AS generadas,
    SUM(date_answered IS NOT NULL)                            AS respondidas,
    ROUND(100 * SUM(date_answered IS NOT NULL) / COUNT(*), 1) AS tasa_respuesta_pct,
    ROUND(AVG(CASE WHEN date_answered IS NOT NULL
                   THEN satisfaction END), 2)                 AS media_0a5
FROM glpi_ticketsatisfactions
WHERE date_begin >= DATE_SUB(CURDATE(), INTERVAL 90 DAY);

Observe que la media solo considera a quien respondió. Calcular la media sobre todas las filas (incluidos los nulos) ensucia el número y fue otra distorsión que ya corregimos en un informe de cliente.

Levantando la tasa de respuesta del suelo

La configuración correcta es un requisito previo; el volumen de respuestas es otra batalla. Lo que funciona en la práctica:

  • Bloquear nuevos tickets hasta responder con el módulo Pending Survey: el usuario reencuentra la encuesta pendiente al intentar abrir el próximo ticket. Es lo que más mueve la aguja.
  • Reducir el inquest_delay para generar la encuesta cerca del cierre, mientras la atención sigue fresca en la memoria.
  • Notificar por otro canal además del correo, por ejemplo vía WhatsApp.
  • Mantenerla simple: 1 nota y 1 comentario opcional. Una encuesta larga hunde la conversión.

Una trampa de la inquest_rate: el sorteo ocurre en el momento del cron y no es retroactivo. Bajar del 100% al 30% no "cancela" encuestas ya generadas, y volver a subir no recupera los tickets que ya pasaron - la marca de agua max_closedate solo avanza.

¿Necesita una satisfacción que mida de verdad, con un cron fiable y una tasa de respuesta sana? El soporte de GLPI de NexTool asume la configuración, el monitoreo del cron y los informes mensuales para su operación. Conozca el servicio de soporte y mantenimiento.


Revisado por el equipo de NexTool Solutions.

Preguntas Frecuentes

Dominan dos motivos. El ticket puede estar solo Resuelto (estado 5) y nunca Cerrado (estado 6) - la encuesta solo nace en el cierre; revise el cierre automático (autoclose_delay) de la entidad. Y la tarea de cron createinquest puede estar en modo interno, que solo se ejecuta en la carga de página; en entornos de bajo tráfico, cambie al cron externo del sistema operativo.

En glpi_ticketsatisfactions, una fila por encuesta generada: tickets_id, type (1 interna, 2 externa), date_begin (generación), date_answered (nulo mientras no se responde), satisfaction (0 a 5) y comment. La configuración por entidad está en glpi_entities (inquest_config, inquest_rate, inquest_delay, inquest_duration, inquest_URL).

Por cron. El cierre solo hace elegible al ticket; quien crea el registro de encuesta es la tarea createinquest, respetando el inquest_delay (retraso) y la inquest_rate (sorteo). Sin cron en ejecución, los tickets cerrados quedan elegibles pero sin encuesta.

La encuesta nativa es un CSAT de 0 a 5 (estrellas) con comentario; no es NPS. Para NPS o preguntas múltiples, use el modo externo (inquest_config = 2) apuntando inquest_URL a una herramienta de encuestas y pasando el identificador del ticket como parámetro.

No. El sorteo ocurre cuando el cron procesa cada ticket y no es retroactivo. Bajar la tasa no borra las encuestas ya generadas, y subirla no recupera los tickets anteriores - la marca de agua max_closedate solo avanza.

En Configuración > Notificaciones > Plantillas de notificación, edite la plantilla del evento de satisfacción del Ticket. Use ##ticket.urlsatisfaction## para el enlace de la encuesta y ##ticket.id##/##ticket.title## como referencia. Manténgalo corto: cuanto menos texto antes del enlace, mayor la conversión.

?Necesitas ayuda?