Notificaciones de precios y estado

El cliente de la API de WhatsApp Business envía notificaciones sobre el status del mensaje entre tú y tus usuarios. Estas notificaciones se envían mediante el objeto statuses.

Actualizaciones de estado

Recibirás una notificación sobre el estado de cada mensaje que envíe tu empresa. En la siguiente tabla, haz clic en la flecha de la columna izquierda a fin de conocer el equivalente de cada estado en la app de WhatsApp, si es que lo hay.

NombreDescripción

deleted

El usuario eliminó un mensaje que envió. Cuando recibas esta notificación, deberás eliminar el mensaje del sistema si se descargó previamente desde el servidor.

Equivalente en la app de WhatsApp

El mensaje se reemplaza en WhatsApp para celulares por una nota que indica "Se eliminó este mensaje".

delivered

El dispositivo del usuario recibió el mensaje enviado por tu empresa.

Equivalente en la app de WhatsApp

Dos marcas de verificación

failed

No se pudo enviar el mensaje de tu empresa. Se incluirá el motivo del error en la devolución de llamada. Consulta la documentación sobre mensajes de error para obtener ayuda con la depuración:

Equivalente en la app de WhatsApp

Triángulo de error rojo

read

El usuario leyó un mensaje que envió tu empresa. Las notificaciones read solo están disponibles para los usuarios que tengan activadas las confirmaciones de lectura. Los usuarios que no las tengan activadas solo recibirán la notificación delivered .

Equivalente en la app de WhatsApp

Dos marcas de verificación azules

sent

Un mensaje enviado por tu empresa se encuentra en tránsito dentro de nuestros sistemas.


Usuarios de la API de instalaciones locales: para recibir notificaciones de mensajes sent , es necesario definir sent_status como true en la configuración de la app. La notificación de estado sent está desactivada de manera predeterminada.

Equivalente en la app de WhatsApp

Una marca de verificación

warning

Un mensaje enviado por tu empresa contiene un artículo de un catálogo que no está disponible o no existe.

El orden de estas notificaciones en tu aplicación puede no reflejar el tiempo real del estado del mensaje. En caso de ser necesario, consulta la marca de tiempo a fin de determinar la hora.

Para que el estado sea read, se debe haber entregado el mensaje (delivered). En algunas situaciones, como cuando un usuario está en la pantalla de chat y llega un mensaje, el mensaje se entrega (delivered) y se lee (read) casi simultáneamente. En esta u otras situaciones similares, la notificación delivered no se devuelve, ya que se entiende que un mensaje se entregó si se leyó. La razón de este comportamiento es la optimización interna.

Actualizaciones de precios

A partir del 1 de febrero de 2022, el objeto statuses de las notificaciones salientes incluye dos nuevos objetos anidados: conversation y pricing. Los componentes de los objetos "conversation" y "pricing" varían según dónde se inició la conversación. Las conversaciones pueden iniciarse por solicitud del usuario o de la empresa o desde un punto de entrada gratuito. Obtén más información a continuación:

Ejemplos

En los siguientes ejemplos, el recipient_id en su lugar puede ser un campo group_id. Esto depende de si el mensaje se envía a un individuo o a un grupo.

Estado: mensaje enviado

Se recibe el siguiente webhook cuando una empresa envía un mensaje como parte de una conversación iniciada por el usuario (siempre que esa conversación no se haya originado desde un punto de acceso gratuito):

{
   "statuses": [{
     "id": "ID",
     "recipient_id": "WHATSAPP_ID",
     "status": "sent",
     "timestamp": "TIMESTAMP",
     "type": "message",
     "message": {         
        "recipient_id":"WHATSAPP_ID"   
     },
     "conversation": {
       "id": "CONVERSATION_ID",
       "expiration_timestamp": TIMESTAMP,
       "origin": {
         "type": "user_initiated"
       }
      },
    "pricing": {
      "pricing_model": "CBP",
      "billable": true,
      "category": "user_initiated"
    }
   }]
}

Se recibe el siguiente webhook cuando una empresa envía un mensaje como parte de una conversación iniciada por el usuario en un mensaje multimedia (siempre que esa conversación no se haya originado en un punto de acceso gratuito):

{
   "statuses": [{
     "id": "ID",
     "recipient_id": "WHATSAPP_ID",
     "status": "sent",
     "timestamp": "TIMESTAMP",
     "type": "message",
     "message": {   
       "media_id": "98d14c8e-0310-4061-8f99-2d148274c286",
       "recipient_id":"WHATSAPP_ID"  
     },
     "conversation": {
       "id": "CONVERSATION_ID",
       "expiration_timestamp": TIMESTAMP,
       "origin": {
         "type": "user_initiated"
       }
      },
    "pricing": {
      "pricing_model": "CBP",
      "billable": true,
      "category": "user_initiated"
    }
   }]
}

Se recibe el siguiente webhook cuando una empresa envía un mensaje como parte de una conversación iniciada por la empresa:

{
  "statuses": [{
    "id": "ID",
    "recipient_id": "WHATSAPP_ID",
    "status": "sent",
    "timestamp": "TIMESTAMP",
    "type": "message",         
    "message": {
        "recipient_id":"WHATSAPP_ID" 
    },
    "conversation": {
      "id": "CONVERSATION_ID",
      "expiration_timestamp": TIMESTAMP,
      "origin": {
         "type": "business_initiated"
      }
    },
    "pricing": {
      "pricing_model": "CBP",
      "billable": true,
      "category": "business_initiated"
    }
   }]
}

Se recibe el siguiente webhook cuando una empresa envía un mensaje como respuesta a una conversación iniciada por el usuario que, a su vez, se haya originado desde puntos de entrada gratuitos:

{
  "statuses": [{
    "id": "ID",
    "recipient_id": "WHATSAPP_ID",
    "status": "sent",
    "timestamp": "TIMESTAMP",
    "type": "message",
    "message": {
        "recipient_id":"WHATSAPP_ID"   
    },
    "conversation": {
      "id": "CONVERSATION_ID",
      "expiration_timestamp": TIMESTAMP,
      "origin": {
         "type": "referral_conversion",
      }
    },
    "pricing": {
      "pricing_model": "CBP",
      "billable": false,
      "category": "referral_conversion"
    }
   }]
}

Estado: mensaje entregado

Se recibe el siguiente webhook cuando se entrega el mensaje de una empresa y dicho mensaje es parte de una conversación iniciada por el usuario (siempre que esa conversación no se haya originado desde un punto de entrada gratuito):

{
  "statuses": [{
    "id": "ID",
    "recipient_id": "WHATSAPP_ID",
    "status": "delivered",
    "timestamp": "TIMESTAMP",
    "type": "message",
    "message": {
        "recipient_id":"WHATSAPP_ID" 
      },
    "conversation": {
      "id": "CONVERSATION_ID",
      "origin": {
         "type": "user_initiated"
      }
    },
    "pricing": {
      "pricing_model": "CBP",
      "billable": true,
      "category": "user_initiated"
    }
  }]
}

Se recibe el siguiente webhook cuando se entrega el mensaje de una empresa y dicho mensaje es parte de una conversación iniciada por la empresa:

{
  "statuses": [{
    "id": "ID",
    "recipient_id": "WHATSAPP_ID",
    "status": "delivered",
    "timestamp": "TIMESTAMP",
    "type": "message",
    "message": {
        "recipient_id": "WHATSAPP_ID" 
    },
    "conversation": {
      "id": "CONVERSATION_ID",
      "origin": {
         "type": "business_initiated"
      }
    },
    "pricing": {
      "pricing_model": "CBP",
      "billable": true,
      "category": "business_initiated"
    }
  }]
}

Se recibe el siguiente webhook cuando se entrega el mensaje de una empresa y dicho mensaje es parte de una conversación iniciada por el usuario, que se haya originado desde un punto de entrada gratuito:

{
  "statuses": [{
    "id": "ID",
    "recipient_id": "WHATSAPP_ID",
    "status": "delivered",
    "timestamp": "TIMESTAMP",
    "type": "message",  
    "message": {
        "recipient_id": "WHATSAPP_ID" 
    },
    "conversation": {
      "id": "CONVERSATION_ID",
      "origin": {
         "type": "referral_conversion",
      }
    },
    "pricing": {
      "pricing_model": "CBP",
      "billable": false,
      "category": "referral_conversion"
    }
  }]
}

Estado: mensaje leído

Devolución de llamada estándar para un mensaje leído:

{
  "statuses":[{
    "id": "ID",
    "recipient_id": "WHATSAPP_ID",
    "status": "read",
    "timestamp": "TIMESTAMP",
    "type": "message",  
    "message": {
        "recipient_id": "WHATSAPP_ID" 
    }
  }]
}

Estado: mensaje con errores

Código de error 470

{
  "statuses": [{
    "errors": [{
      "code": 470,
      "title": "Failed to send message because you are outside the support window for freeform messages to this user. Please use a valid HSM notification or reconsider." 
    }],
    "id": "ID",
    "recipient_id": "WHATSAPP_ID",
    "status": "failed",
    "timestamp": "TIMESTAMP"
  }]
}

Código de error 480

{
  "statuses": [{
      "errors": [{
          "code": 480,
          "title": "Failed to send message since we detect an identity change of the contact"
      }],
      "id": "ID",
      "recipient_id": "WHATSAPP_ID",
      "status": "failed",
      "timestamp": "TIMESTAMP"
   }]
}

No se incluye la subsección de la conversación en la devolución de llamada si no se envió un mensaje. No se ven afectadas ni la activación de la conversación ni de la facturación en este caso.

Estado: mensaje eliminado

Devolución de llamada estándar para un mensaje eliminado:

{
  "statuses": [{
        "id": "ID",
        "recipient_id": "WHATSAPP_ID",
        "status": "deleted",
        "timestamp": "TIMESTAMP",
        "type": "message",
        "message": {
           "recipient_id": "WHATSAPP_ID" 
      }
    }]
}

No se incluye la subsección de la conversación en la devolución de llamada si se eliminó un mensaje. No se ve afectada la activación de la conversación ni de la facturación en este caso.

Todos los estados posibles de un mensaje

Consulta Información general, Mensajes para obtener esta información.

Preguntas frecuentes

Yes, there is a specific scenario where you can get pricing information on your webhook alert for read messages. For each sent message, there can be 3 scenarios:

ScenarioWhen it Happens
You get a webhook alert when the message is delivered (including pricing information) and another webhook alert when the message is read (not including pricing information).This is the most common scenario.
You get a webhook alert when the message is delivered (including pricing information). You do not get a webhook alert that the message has been read. Common when a customer has turned off the feature that lets people know they have read a message.
You get a webhook alert when the message is read (including pricing information). You do not get a webhook alert that the message has been delivered. Only triggered when the user is already reading the thread with the business when the message comes in.