Actualizado el 25/10/2026
Las métricas esenciales de atención en WhatsApp son el tiempo de primera respuesta, el tiempo medio de respuesta, el tiempo medio operativo (TMO, la duración de la atención) y el CSAT (satisfacción del cliente). Con la API oficial de WhatsApp, todas se calculan a partir de los timestamps que llegan en los webhooks: la hora de cada mensaje del cliente y la hora de envío de cada respuesta. La app WhatsApp Business no ofrece este nivel de detalle por agente; con la API, los datos quedan en tu base y mides como tu operación lo necesita.
En Brasil estas métricas suelen aparecer con siglas en portugués: TMR (tempo médio de resposta) y TMA (tempo médio de atendimento), equivalentes al tiempo medio de respuesta y al TMO.
Las métricas que importan
Los nombres cambian de una empresa a otra. Lo importante es fijar una definición y usarla siempre:
| Métrica | Qué pregunta responde | Cálculo |
|---|---|---|
| Tiempo de primera respuesta | ¿Cuánto espera el cliente la primera respuesta? | Primera respuesta de la empresa − primer mensaje del cliente en la conversación |
| Tiempo medio de respuesta | ¿Cuánto espera el cliente en cada mensaje? | Promedio de los intervalos entre un mensaje del cliente y la respuesta siguiente |
| Tiempo medio de espera | ¿Cuánto tiempo pasa la conversación en la cola? | Asignación a un agente − entrada en la cola |
| TMO (tiempo medio operativo) | ¿Cuánto dura una atención? | Cierre − inicio de la conversación |
| CSAT | ¿El cliente quedó satisfecho? | Calificaciones positivas ÷ total de calificaciones |
| Resolución en el primer contacto | ¿Resolvimos sin que el cliente volviera? | Conversaciones cerradas sin reapertura en X días ÷ conversaciones cerradas |
| Conversaciones sin respuesta en 24 h | ¿Perdimos la ventana? | Conversaciones en que el cliente esperó 24 h sin respuesta ÷ total |
La última es propia de WhatsApp. Por la regla de la ventana de atención de 24 horas, si la empresa no responde dentro de ese plazo, solo puede retomar con una plantilla aprobada. Una conversación que supera la ventana es un cliente insatisfecho y, además, un costo extra.
De dónde vienen los timestamps
En la API oficial, dos tipos de evento alimentan las métricas:
Mensaje recibido. El webhook trae messages[].timestamp, en segundos Unix (UTC), con la hora en que el cliente envió el mensaje:
{
"from": "5511999999999",
"id": "wamid.HBgLNTUx...",
"timestamp": "1792929600",
"type": "text",
"text": { "body": "Mi pedido no llegó" }
}
Estado del mensaje enviado. La respuesta de la API al envío devuelve solo el wamid, sin hora. La hora del envío llega después, en el webhook de estado sent, con el mismo id:
{
"id": "wamid.HBgLNTUx...",
"status": "sent",
"timestamp": "1792929735",
"recipient_id": "5511999999999"
}
Los estados siguientes (delivered, read, failed) llegan con sus propios timestamps. El artículo sobre estados de mensaje en el webhook detalla cada uno.
Tres cuidados para no distorsionar los números:
- Usa el timestamp del evento, no la hora de llegada del webhook. Meta reintenta los eventos no confirmados durante hasta 7 días, y pueden llegar tarde o duplicados.
- Separa bot de humano. Guarda en cada mensaje enviado quién lo originó (
bot,agente,automatizacion). Una bienvenida automática en 2 segundos no debe entrar en el tiempo de primera respuesta del equipo. - Considera el horario de atención. Un mensaje a las 23 h respondido a las 8 h suma 9 horas de reloj y cero de horario laboral. Calcula las dos versiones y deja claro cuál muestra el panel.
¿Quieres probar mientras lees? Crea tu cuenta en Vectalk y envía el primer mensaje por la API oficial. Crear cuenta gratis →
Modelo de datos mínimo
Para calcular todo lo anterior, cada mensaje necesita estos campos:
| Campo | Origen |
|---|---|
wamid | messages[].id o la respuesta del envío |
conversacion_id | Tu sistema |
direccion | entrada o salida |
autor | cliente, bot, agente, automatizacion |
agente_id | Tu sistema |
enviado_en | messages[].timestamp (entrada) o estado sent (salida) |
entregado_en, leido_en | Estados delivered y read |
Y cada conversación: abierta_en, en_cola_en, asignada_en, cerrada_en y la nota de CSAT, si existe.
Cálculo del tiempo de respuesta en SQL
Con los mensajes en PostgreSQL, la función LAG encuentra, para cada respuesta, el mensaje anterior del cliente. La consulta siguiente calcula, por agente, la mediana y el percentil 90 del tiempo de respuesta de los últimos 30 días:
WITH turnos AS (
SELECT
conversacion_id,
autor,
agente_id,
enviado_en,
LAG(autor) OVER w AS autor_anterior,
LAG(enviado_en) OVER w AS anterior_en
FROM mensajes
WHERE enviado_en >= now() - interval '30 days'
WINDOW w AS (PARTITION BY conversacion_id ORDER BY enviado_en)
)
SELECT
agente_id,
COUNT(*) AS respuestas,
percentile_cont(0.5) WITHIN GROUP (ORDER BY enviado_en - anterior_en) AS respuesta_mediana,
percentile_cont(0.9) WITHIN GROUP (ORDER BY enviado_en - anterior_en) AS respuesta_p90
FROM turnos
WHERE autor = 'agente' AND autor_anterior = 'cliente'
GROUP BY agente_id
ORDER BY respuesta_mediana;
Para el tiempo de primera respuesta, toma el primer mensaje del cliente y el primero del agente en cada conversación:
SELECT
c.id,
MIN(m.enviado_en) FILTER (WHERE m.autor = 'agente')
- MIN(m.enviado_en) FILTER (WHERE m.autor = 'cliente') AS primera_respuesta
FROM conversaciones c
JOIN mensajes m ON m.conversacion_id = c.id
WHERE c.abierta_en >= now() - interval '30 days'
GROUP BY c.id;
¿Por qué mediana y percentil 90 y no solo el promedio? Porque un puñado de conversaciones olvidadas el fin de semana sube el promedio y oculta el comportamiento normal, y el promedio solo también oculta a los clientes que esperaron demasiado. La mediana muestra lo típico; el p90 muestra a quién se está atendiendo mal.
Cómo medir el CSAT dentro de WhatsApp
El CSAT es la pregunta «del 1 al 5, ¿cómo fue la atención?» enviada al cerrar la conversación. En WhatsApp, el mejor formato es un mensaje interactivo: el cliente toca en lugar de escribir y la respuesta llega estructurada. Los botones de respuesta admiten hasta tres opciones; para una escala del 1 al 5, usa una lista. La documentación de listas permite hasta 10 filas, títulos de hasta 24 caracteres y texto del botón de hasta 20.
{
"messaging_product": "whatsapp",
"to": "5511999999999",
"type": "interactive",
"interactive": {
"type": "list",
"body": { "text": "Tu atención finalizó. ¿Cómo calificas la ayuda que recibiste?" },
"action": {
"button": "Calificar",
"sections": [{
"title": "Tu nota",
"rows": [
{ "id": "csat_5", "title": "5 - Excelente" },
{ "id": "csat_4", "title": "4 - Buena" },
{ "id": "csat_3", "title": "3 - Regular" },
{ "id": "csat_2", "title": "2 - Mala" },
{ "id": "csat_1", "title": "1 - Muy mala" }
]
}]
}
}
}
La respuesta llega como type: "interactive" con interactive.list_reply.id igual al id de la fila elegida. Guarda la nota en la conversación.
Detalles que marcan la diferencia:
- Envíala justo después del cierre. La ventana de 24 horas sigue abierta, así que no necesitas plantilla.
- Una sola pregunta. Si la nota es 1 o 2, pregunta el motivo enseguida y deriva a un supervisor.
- Calcula el CSAT como porcentaje de notas 4 y 5. Y sigue la tasa de respuesta: un CSAT alto con pocas respuestas dice poco.
- Costo. Desde el 1 de octubre de 2026, los mensajes de servicio se cobran a partir del número 1.001 entregado en el mes, por número, según la página de precios de Meta. Inclúyelo en la cuenta.
Para NPS y encuestas después de la entrega del producto, cuando la ventana ya se cerró, consulta posventa y NPS por WhatsApp.
Cómo definir metas
Este artículo no trae «benchmarks del mercado» a propósito: los números genéricos dicen poco sobre tu operación. Un camino más útil:
- Mide de dos a cuatro semanas sin cambiar nada. Ese es tu punto de partida.
- Define la meta por percentil, no por promedio. Por ejemplo: «90 % de las primeras respuestas en hasta X minutos dentro del horario».
- Trata la ventana de 24 horas como techo absoluto. La meta de «conversaciones sin respuesta en 24 h» debe estar cerca de cero.
- Separa por cola y por franja horaria. Ventas y soporte tienen ritmos distintos; el lunes por la mañana no es igual al jueves por la tarde.
- Revisa cada mes. Una meta cumplida con holgura se convierte en la nueva línea base.
Indicadores del lado de Meta
Además de las métricas de atención, sigue dos indicadores que calcula Meta:
- Calidad del número. Verde, amarillo o rojo, según bloqueos y denuncias recientes. Una atención lenta y los mensajes fuera de contexto la empeoran. Consulta calidad del número en la API.
- Entrega y lectura. Porcentaje de mensajes
deliveredyreadsobre los enviados. Una caída brusca suele indicar un problema con el número, una plantilla o una lista.
Cómo hacerlo con Vectalk
Con Vectalk, los webhooks de mensaje y de estado son los de Meta, con los mismos timestamp usados arriba; registra tu URL con POST /api/webhooks y guarda los eventos en tu base. Para revisar o reconstruir datos, GET /api/messages lista el historial con filtros de fecha, estado, dirección y messageId. Para los indicadores agregados (enviados, entregados, leídos, fallidos, tasas y calidad del número), usa GET /api/analytics/instances/{instanceId}/stats, agrupado por día, semana o mes. Las métricas de atención por agente (tiempo de respuesta, TMO, CSAT) dependen de los datos de tu sistema, como en el ejemplo. Detalles en docs.vectalk.com.br; registro en apps.vectalk.com.br/register.
Para armar la operación que genera estos números, consulta atención con varios agentes con la API y mensajes de bienvenida y ausencia.
Preguntas frecuentes
¿Cuál es la diferencia entre tiempo medio de respuesta y TMO?
El tiempo medio de respuesta mide cuánto espera el cliente en cada mensaje hasta recibir respuesta. El TMO mide la duración total de la atención, del inicio al cierre. Una operación puede tener un tiempo de respuesta bajo y un TMO alto, por ejemplo cuando el problema exige muchos intercambios.
¿La respuesta del bot cuenta en el tiempo de respuesta?
Depende de lo que quieras medir. Para la experiencia del cliente, sí. Para evaluar al equipo, no. Por eso conviene guardar el autor de cada mensaje y calcular ambas versiones.
¿Puedo usar la hora de la respuesta de la API en lugar del webhook de estado?
La respuesta del envío no trae hora, solo el wamid. Puedes usar la hora de tu servidor al enviar como aproximación, pero el estado sent es el registro de Meta y es más consistente.
¿Cómo mido el CSAT si el cliente no responde la encuesta?
Cuenta la tasa de respuesta por separado y no completes notas faltantes. Si responden pocas personas, prueba cambiar el momento del envío o el texto de la pregunta.
¿Puedo sacar estas métricas de la app WhatsApp Business?
No con este nivel de detalle. La app no registra quién respondió ni cuánto tardó cada agente. Las métricas por agente requieren la API y un sistema que guarde los eventos.
Fuentes oficiales consultadas el 25/10/2026: Webhook de mensajes, Descripción general de webhooks, Mensajes interactivos de lista, Precios de la plataforma, Docs de Vectalk: estadísticas de la instancia, Docs de Vectalk: listar mensajes.
Pon a funcionar el WhatsApp oficial de tu empresa
Crea tu cuenta, conecta tu número a la API oficial (puedes mantener la app con coexistencia) y empieza a atender y enviar mensajes.
