Skip to content

Estados de un mensaje

Cuando enviamos un mensaje de WhatsApp estamos guardando en Redis el mensaje con sus respectivos estados.

El hash de Redis es el teléfono del usuario, que siempre tiene el prefijo del país, 57 para Colombia. Ejemplo: 573203254415

Las keys dentro del hash se corresponden con los identificadores que entrega la API WhatsApp de Meta. Ejemplo: wamid.HBgMNTczMjAzMjU0NDE1FQIAERgSMDJFQUVEQTMxQUREQzQzMkNFAA==

Meta es la empresa dueña de la API WhatsApp.

Cuando el mensaje no puede ser enviado, la causa más común es "Re-engagement message", lo cual indica que han pasado más de 24 horas desde la última vez que el usuario nos escribió, esta es una restricción de la API en Meta.

Si queremos enviar mensajes después de las 24 horas o si nunca hemos hablado con el usuario y somos los primeros en escribir, debemos hacerlo a través de una plantilla que debe ser previamente aprobada por Meta.

Si el administrador/persona de Numera te otorgó acceso al panel de configuración de WhatsApp, puedes ver las plantillas aquí. Debes tener abierta tu sesión de Facebook.

Los statuses de un mensaje se almacenan en Redis con el hash del usuario (teléfono) y la key con el formato <whatsapp-id>, el valor incluye el campo statuses como un array de objetos con cada uno de los estados por los que transicionó el mensaje.

A continuación veremos cómo lucen cada uno de los elementos de ese array de statuses en logs de Loki que podemos ver en Grafana.

Statuses posibles

Cuando el envío del mensaje falla:

{
    "id": "wamid.HBgMNTczMjAzMjU0NDE1FQIAERgSQjg3MDk2MDUyMEFDQzMwRkFEAA==",
    "status": "failed",
    "timestamp": "1729866705",
    "recipient_id": "573203254415",
    "errors": [
        {
            "code": 131047,
            "title": "Re-engagement message",
            "message": "Re-engagement message",
            "error_data": {
                "details": "Message failed to send because more than 24 hours have passed since the customer last replied to this number."
            },
            "href": "https://developers.facebook.com/docs/whatsapp/cloud-api/support/error-codes/"
        }
    ]
}

Cuando el mensase se logra enviar a los servidores de Meta:

{
    "id": "wamid.HBgMNTczMjAzMjU0NDE1FQIAERgSQjg3MDk2MDUyMEFDQzMwRkFEAA==",
    "status": "sent",
    "timestamp": "1729869264",
    "recipient_id": "573203254415",
    "conversation": {
        "id": "9bbf737a432a51c8f0a966561ae7afe0",
        "expiration_timestamp": "1729955700",
        "origin": {"type": "service"}
    },
    "pricing": {"billable": true, "pricing_model": "CBP", "category": "service"}
}

Cuando el mensaje es entregado al usuario:

{
    "id": "wamid.HBgMNTczMjAzMjU0NDE1FQIAERgSQjg3MDk2MDUyMEFDQzMwRkFEAA==",
    "status": "delivered",
    "timestamp": "1729869265",
    "recipient_id": "573203254415",
    "conversation": {
        "id": "9bbf737a432a51c8f0a966561ae7afe0",
        "origin": {
            "type": "service"
        }
    },
    "pricing": {
        "billable": true,
        "pricing_model": "CBP",
        "category": "service"
    }
}

Cuando el mensaje fue leído, esto sólo aplica si el usuario tiene la opción activa en tu teléfono:

{
    "id": "wamid.HBgMNTczMjAzMjU0NDE1FQIAERgSQjg3MDk2MDUyMEFDQzMwRkFEAA==",
    "status": "read",
    "timestamp": "1729869272",
    "recipient_id": "573203254415"
}

Valor en Redis

Si todo sale bien, en Redis veremos el hash 573203254415 con la key wamid.HBgMNTczMjE5OTM1Njg0FQIAERgSM0UzODMxMEFEMEQ3RkYzQzgzAA== y el valor:

{
  "created_at": 1729899006,
  "message_id": "wamid.HBgMNTczMjAzMjU0NDE1FQIAERgSQjg3MDk2MDUyMEFDQzMwRkFEAA==",
  "message_content": "conciliacion_bancaria; person_name=Daniel Romero; transactions_count=2",
  "from": "Numera",
  "statuses": [
    {
      "timestamp": 1729899006,
      "status": "sent"
    },
    {
      "timestamp": 1729899007,
      "status": "delivered"
    },
    {
      "timestamp": 1729899063,
      "status": "read"
    }
  ]
}

Ese valor corresponde a un único mensaje, que fue correctamente enviado, entregado y leído.

Valores en los ejemplos

Para los ejemplos ilustrados de este documento hemos usado estos datos:

Dato Valor
Teléfono del usuario 573203254415
Hash de Redis 573203254415
Key de Redis para el mensaje wamid.HBgMNTczMjAzMjU0NDE1FQIAERgSQjg3MDk2MDUyMEFDQzMwRkFEAA==