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"
}
Response Body:
12345678
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
Aquí:
timestampes la marca de tiempo del mensaje de callback (en formato estándar),noncees un número aleatorio,signaturees la información de firma.
El método de firma es el siguiente:
signature=HMAC-SHA256(secret, timestamp+nonce+username)
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
200o204, y no se requiere ningún mensaje de respuesta. - Error de recepción: el código de estado de la respuesta HTTP debe devolver
5XXo4XXy un mensaje de respuesta. El formato es el siguiente:
{
"code": 2002,
"message": "error"
}
| 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
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
}
}
}
]
}
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
- Destinos planificados → Destinos válidos
- Destinos válidos → Enviados
- Enviados → Entregados
- Entregados → Clics
Nota:
- Los clics y las entregas en algunos canales pueden estar duplicados; la deduplicación se puede realizar internamente.
- Las cantidades de entregas y visualizaciones no se ajustarán retroactivamente 5 días después de que la entrega sea correcta.
