API de callback

Visión general

Los datos de estado del mensaje se devuelven mediante callback al sistema de negocio de la empresa, y se puede realizar un análisis estadístico basado en la información.

Dirección de callback

La empresa debe configurar la dirección de callback para recibir los cambios del estado del mensaje. Actualmente no existe una interfaz web. Contactar con el personal técnico de Engagelab para configurar la dirección de callback.

Verificación de validez de la dirección de callback

Al configurar la dirección de callback en la gestión de backend de Push, en Configuración de la aplicación, se enviará una solicitud POST con una cadena aleatoria de 8 caracteres como parámetro echostr en el cuerpo de la solicitud. Se debe devolver el valor de echostr en el Response Body, siguiendo el formato indicado a continuación:

Request Body:

{ "echostr": "12345678" }
              
              {
    "echostr": "12345678"
}

            
Este bloque de código se muestra en una ventana flotante

Response Body:

12345678
              
              12345678

            
Este bloque de código se muestra en una ventana flotante

Mecanismo de seguridad

Se utiliza para la autenticación del cliente; opcional.

Para garantizar que el origen de los mensajes sea Engagelab, se puede optar por autenticar el origen de los datos POST. Alternativamente, se pueden analizar directamente los datos POST sin autenticación.

El método de autenticación es el siguiente:

  • Configurar un nombre de usuario de callback (username) y un secreto de callback (secret) en la consola de Engagelab para la dirección de callback.

Obtener X-CALLBACK-ID del encabezado de la solicitud, como se muestra en el siguiente ejemplo:

X-CALLBACK-ID: timestamp=1681991058;nonce=123123123123;username=test;signature=59682d71e2aa2747252e4e62c15f6f241ddecc8ff08999eda7e0c4451207a16b
              
              X-CALLBACK-ID: timestamp=1681991058;nonce=123123123123;username=test;signature=59682d71e2aa2747252e4e62c15f6f241ddecc8ff08999eda7e0c4451207a16b

            
Este bloque de código se muestra en una ventana flotante

Aquí:

  • timestamp es la marca de tiempo del mensaje de callback (en formato estándar),
  • nonce es un número aleatorio,
  • signature es la información de firma.

El método de firma es el siguiente:

signature=HMAC-SHA256(secret, timestamp+nonce+username)
              
              signature=HMAC-SHA256(secret, timestamp+nonce+username)

            
Este bloque de código se muestra en una ventana flotante

Mecanismo de respuesta

Después de que el servicio del desarrollador reciba el callback de Engagelab, debe responder en un plazo de 3 segundos conforme a los siguientes requisitos:

  • Recepción correcta: el código de estado de la respuesta HTTP debe devolver 200 o 204, y no se requiere ningún mensaje de respuesta.
  • Error de recepción: el código de estado de la respuesta HTTP debe devolver 5XX o 4XX y un mensaje de respuesta. El formato es el siguiente:
{ "code": 2002, "message": "error" }
              
              {
    "code": 2002,
    "message": "error"
}

            
Este bloque de código se muestra en una ventana flotante
Campo Tipo Obligatorio/Opcional Descripción
code int Opcional Códigos de error
message string Opcional Detalles del error

Explicación de campos del callback

Cuerpo del mensaje

Nombre del campo Tipo Obligatorio/Opcional Descripción
total int Obligatorio El número de mensajes incluidos en este callback
rows array Obligatorio Una lista de información detallada sobre el cambio de estado del mensaje, que contiene los campos siguientes:

Campos del array rows

Nombre del campo Tipo Obligatorio/Opcional Descripción
message_id string Obligatorio Identificador único del mensaje
from string Opcional Remitente; el valor predeterminado es appkey
to string Opcional Identificador del destinatario (p. ej., registrationID)
server string Obligatorio Nombre del servicio de mensajes; valores posibles: AppPush, WebPush
channel string Obligatorio Canal del mensaje; valores posibles: EngageLab, HuaWei, XiaoMi, MeiZu, OPPO, VIVO, HONOR, FCM, APNs
custom_args object Opcional Parámetros personalizados enviados durante la creación del mensaje; se devuelven tal cual
itime int Obligatorio La marca de tiempo real en la que se produjo el estado del mensaje; se puede usar con message_status para obtener la marca de tiempo de cada estado del mensaje
status object Obligatorio Información de estado del mensaje, que contiene los campos siguientes:

Campos del objeto status

Nombre del campo Tipo Obligatorio/Opcional Descripción
message_status string Obligatorio Estado del mensaje; valores posibles: target_valid, sent, delivered, click, target_invalid, sent_failed, delivered_failed, no_click
status_data object Opcional Datos de estado personalizados, que contienen los campos siguientes:
channel_message_id string Opcional ID del mensaje de canales de terceros
ntf_msg int Obligatorio Tipo de mensaje; valores posibles: 1: Notification, 2: Custom Message, 5: iOS Real-Time Activity, 6: iOS VOIP Message, 7: In-App Message
platform string Obligatorio Plataforma de push; valores posibles: a: Android, i: iOS, b: Web
uid int Obligatorio UID del destinatario del mensaje push
app_version string Obligatorio Versión de la app integrada con el SDK, obtenida a través de los datos reportados por el SDK
channel string Obligatorio Canal de la app integrada con el SDK, obtenido a través de los datos reportados por el SDK
msg_time int Obligatorio Hora de entrega del mensaje; la hora en la que la solicitud de API para enviar el mensaje se realiza correctamente
time_zone string Obligatorio Zona horaria de la organización
loss_valid_type int Opcional Este campo no tiene un significado real y no necesita procesarse
plan_user_total int Opcional Este campo no tiene un significado real y no necesita procesarse
callback_type int Opcional Este campo no tiene un significado real y no necesita procesarse
error_code int Opcional Código de error; solo se proporciona en caso de error
error_detail object Opcional Información detallada del error; solo se proporciona en caso de error e incluye los campos siguientes:
message string Opcional Describe el motivo detallado del error; solo aplica al canal FCM
loss object Opcional Información de pérdida, que contiene los campos siguientes:
loss_source string Opcional Origen de la pérdida; valores posibles: EngageLab, HuaWei, XiaoMi, MeiZu, OPPO, VIVO, HONOR, FCM, APNs
loss_step int Opcional Etapa de pérdida; valores posibles: 1: Plan Target → Valid Target, 2: Valid Target → Sent Quantity, 3: Sent Quantity → Delivered Quantity, 4: Delivered Quantity → Click Quantity

Valores de estado del mensaje

Valor de estado Significado Descripción
target_valid Destino válido Se considera válido si ha estado activo en los últimos 365 días
sent Enviado correctamente Enviado correctamente al servidor
delivered Entregado correctamente Para EngageLab, XiaoMi, OPPO, VIVO — se considera entregado según callback real;
Para FCM y APNs — se considera entregado cuando se envía correctamente al servidor del proveedor;
Para HuaWei, MeiZu, HONOR, si el callback del proveedor no está configurado, se considera entregado al enviarse al servidor del proveedor; si está configurado, se considera entregado según el callback real del proveedor
click Clic del usuario Clic del usuario reportado por el SDK
target_invalid Destino no válido Se considera no válido según la etapa de pérdida 1 definida en la tabla de pérdidas
sent_failed Error de envío Se considera error según la etapa de pérdida 2 definida en la tabla de pérdidas
delivered_failed Error de entrega Se considera error según la etapa de pérdida 3 definida en la tabla de pérdidas
no_click Error de clic Se considera error según la etapa de pérdida 4 definida en la tabla de pérdidas; solo aplica a mensajes in-app

Contenido del callback

Método de callback: POST
Content-Type: application/json

Ejemplo

Request Header
POST /developer_define_url HTTP/1.1 Content-Type: application/json
              
              POST /developer_define_url HTTP/1.1
Content-Type: application/json

            
Este bloque de código se muestra en una ventana flotante
Request Body
{ "total": 1, "rows": [ { "message_id": "1666165485030094861", "from": "", "to": "", "server": "AppPush", "channel": "FCM", "custom_args": {}, "itime": 1640707579, "status": { "message_status": "delivered", "status_data": { "channel_message_id": "wamid.123321abcdefed==", "ntf_msg": 1, "platform": "a", "uid": 100, "app_version": "", "channel": "", "msg_time": 1640707579, "time_zone": "+8", "loss_valid_type": 0, "plan_user_total": 0, "callback_type": 0 }, "error_code": 0, "error_detail": { "message": "" }, "loss": { "loss_source": "vivo", "loss_step": 1 } } } ] }
              
              {
    "total": 1,
    "rows": [
        {
            "message_id": "1666165485030094861",
            "from": "",
            "to": "",
            "server": "AppPush",
            "channel": "FCM",
            "custom_args": {},
            "itime": 1640707579,
            "status": {
                "message_status": "delivered",
                "status_data": {
                    "channel_message_id": "wamid.123321abcdefed==",
                    "ntf_msg": 1,
                    "platform": "a",
                    "uid": 100,
                    "app_version": "",
                    "channel": "",
                    "msg_time": 1640707579,
                    "time_zone": "+8",
                    "loss_valid_type": 0,
                    "plan_user_total": 0,
                    "callback_type": 0
                },
                "error_code": 0,
                "error_detail": {
                    "message": ""
                },
                "loss": {
                    "loss_source": "vivo",
                    "loss_step": 1
                }
            }
        }
    ]
}

            
Este bloque de código se muestra en una ventana flotante

Descripción de parámetros

Valor Significado
target_valid Destino válido
sent Enviado correctamente
delivered Entregado correctamente
click Clic del usuario
target_invalid Destino no válido
sent_failed Error de envío
delivered_failed Error de entrega

Fase de pérdida

  1. Destinos planificados → Destinos válidos
  2. Destinos válidos → Enviados
  3. Enviados → Entregados
  4. Entregados → Clics

Nota:

  1. Los clics y las entregas en algunos canales pueden estar duplicados; la deduplicación se puede realizar internamente.
  2. Las cantidades de entregas y visualizaciones no se ajustarán retroactivamente 5 días después de que la entrega sea correcta.
Icon Solid Transparent White Qiyu
Contacto