API de estadísticas
API de estadísticas
info Esta es la versión más reciente de la API de estadísticas (Stats API). Algunas mejoras en v4:
- Se utiliza autenticación HTTP Basic para la autorización de acceso. De este modo, toda la solicitud de la API se puede completar mediante herramientas HTTP habituales, como: curl, complementos del navegador.
- El contenido del push utiliza completamente el formato JSON.
Visión general
Stats API v4 proporciona diversas funciones de consulta de datos estadísticos.
Autenticación
Para más detalles, consulte la visión general de la API REST: Método de autenticación
Estadísticas de mensajes
- Consultar las estadísticas de cada estado en el ciclo de vida del mensaje.
- Los datos estadísticos de cada mensaje push pueden conservarse como máximo durante un mes.
URL de la API
GET v4/status/detail
Ejemplo de solicitud
curl -v https://pushapi-sgp.engagelab.com/v4/messages/details?message_ids=1613113584,1229760629 -u "7d431e42dfa6a6d693ac2d04:5e987ac6d2e04d95a9d8f0d1"
< GET /v4/messages/details?message_ids=1613113584,1229760629 HTTP/1.1
< Authorization: Basic N2Q0MzFlNDJkZmE2YTZkNjkzYWMyZDA0OjVlOTg3YWM2ZDJlMDRkOTVhOWQ4ZjBkMQ==
Parámetros de la solicitud
| Palabras clave | Tipo | Opción | Descripción |
|---|---|---|---|
| message_ids | String | required |
Ejemplo de respuesta
< HTTP/1.1 200 OK
< Content-Type: application/json
{
"1229760629": {
"targets": 11,
"sent": 11,
"delivered": 10,
"impressions": 8,
"clicks": 2,
"sub": {
"notification": {},
"message": {},
"live_activity": {},
"voip": {},
"inapp_message": {}
},
"plan_id": "",
"pushContent": {}
},
"1613113584": {
"targets": 11,
"sent": 11,
"delivered": 10,
"impressions": 8,
"clicks": 2,
"sub": {
"notification": {
"target": 1600,
"sent": 1440,
"delivered": 1280,
"impressions": 1120,
"click": 0,
"sub_android": {
"engageLab_android": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"huawei": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"xiaomi": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"oppo": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"vivo": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"meizu": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"fcm": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"honor": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
}
},
"sub_ios": {
"engageLab_ios": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"apns": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
}
},
"sub_hmos": {
"engageLab_hmos": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
},
"harmonyos": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0
}
}
},
"message": {
"targets": 100,
"sent": 90,
"delivered": 80,
"impressions": 70,
"clicks": 0,
"sub_android": {},
"sub_ios": {}
},
"live_activity": {
"targets": 1,
"sent": 1,
"delivered": 1,
"impressions": 0,
"clicks": 0,
"sub_ios": {
"engageLab_ios": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"apns": {
"targets": 1,
"sent": 1,
"delivered": 1,
"impressions": 0,
"clicks": 0
}
}
}
},
"plan_id": "engageLab_notification",
"pushContent": {
"android": {
"title": "push",
"content": "hello, Push!"
},
"ios": {
"title": "ios",
"content": "pushContent",
"subtitle": "engageLab_push"
}
}
},
"1613113554": {
"targets": 2,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0,
"sub": {
"notification": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"message": {
"targets": 2,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0,
"sub_android": {
"engageLab_android": {
"targets": 1,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"huawei": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"xiaomi": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"oppo": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"vivo": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"meizu": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"fcm": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"honor": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
}
},
"sub_ios": {
"engageLab_ios": {
"targets": 1,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"apns": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
}
}
},
"live_activity": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"voip": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
},
"inapp_message": {
"targets": 0,
"sent": 0,
"delivered": 0,
"impressions": 0,
"clicks": 0
}
},
"plan_id": "engageLab_msg",
"pushContent": {
"message": {
"title": "msg",
"content": "push"
}
}
}
}
Parámetros de la respuesta
La respuesta correcta es un objeto JSON, y la clave es message_id. Cada mensaje debe incluir estadísticas del ciclo de vida de cada fase:
| Palabra clave | Tipo | Opciones | Descripción |
|---|---|---|---|
| targets | Int64 | Required | Objetivos válidos. El número de dispositivos objetivo después de filtrar por validez la audiencia objetivo seleccionada para la tarea de push. |
| sent | Int64 | Required | Número de envíos. El número de dispositivos para los que el servidor de EngageLab creó correctamente una tarea de envío entre los dispositivos objetivo válidos. |
| delivered | Int64 | Required | Número de entregas. El número de dispositivos a los que realmente se entregó el mensaje de notificación. No se contabilizan las entregas después de 5 días. Para Huawei, Meizu e iOS, se requiere configurar callbacks para mayor precisión. |
| impressions | Int64 | Required | Número de impresiones. El número de dispositivos en los que el mensaje de notificación se mostró correctamente. No se contabilizan las impresiones después de 5 días. |
| clicks | Int64 | Required | Número de clics. El número de veces que los usuarios hicieron clic en el mensaje de notificación después de mostrarse correctamente. No se contabilizan los clics después de 5 días. |
| sub | Object | Required | Métricas detalladas de los datos estadísticos; consulte la tabla siguiente. |
| plan_id | String | Required | ID del plan de push, que identifica el tipo de plan de push al que pertenece el mensaje |
| pushContent | Object | Required | Detalles del contenido del push, incluidos los datos de contenido del push para diferentes plataformas: - android: contenido de push de la plataforma Android (incluye campos como title y content) - ios: contenido de push de la plataforma iOS (incluye campos como title, content y subtitle) - message: contenido de mensajes personalizados (incluye campos como title y content) |
Indicador
| Palabras clave | Tipo | Opción | Descripción |
|---|---|---|---|
| sub_android | Object | optional | Resumen de datos y estadísticas de los canales de push de Android |
| engageLab_android | Object | optional | Resumen de datos y estadísticas del canal EngageLab de Android |
| huawei | Object | optional | Resumen de datos y estadísticas de los canales de Huawei |
| honor | Object | optional | Resumen de datos y estadísticas de los canales de Honor |
| xiaomi | Object | optional | Resumen de datos y estadísticas del canal de Xiaomi |
| oppo | Object | optional | Resumen de datos y estadísticas del canal de OPPO |
| vivo | Object | optional | Resumen y estadísticas de datos del canal vivo |
| meizu | Object | optional | Resumen de datos y estadísticas del canal de Meizu |
| fcm | Object | optional | Resumen de datos y estadísticas del canal FCM |
| sub_ios | Object | optional | Resumen de datos y estadísticas de los canales de push de Apple |
| engageLab_ios | Object | optional | Resumen de datos y estadísticas del canal EngageLab de iOS |
| apns | Object | optional | Resumen de datos y estadísticas de los canales APNs de iOS |
| sub_hmos | Object | optional | Resumen de datos y estadísticas de los canales de push de Harmony |
| engageLab_hmos | Object | optional | Resumen de datos y estadísticas del canal EngageLab de Harmony |
| harmonyos | Object | optional | Resumen de datos y estadísticas del canal HarmonyOS |
Estadísticas del plan de push
- Esta interfaz se utiliza para obtener indicadores estadísticos detallados del plan de push. Admite la consulta por lotes de los datos del ciclo de vida completo de varios planes dentro del rango de tiempo especificado, incluidos indicadores de desagregación multidimensional (plataforma/proveedor/tipo de mensaje).
Dirección de llamada
GET v4/status/plan/detail
Ejemplo de solicitud
GET /v4/status/plan/detail?plan_ids=push_20231101,push_20231102&start_date=2023-11-01&end_date=2023-11-07
Parámetros de la solicitud
| Nombre del parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| plan_ids | string | Sí | Lista de ID de planes de push; para varios ID, se separan mediante comas en inglés. Se admiten hasta 100 ID. |
| start_date | string | Sí | Fecha de inicio de estadísticas (formato: yyyy-MM-dd). Debe cumplir: |
| end_date | string | Sí | Fecha de fin de estadísticas (formato: yyyy-MM-dd) |
Descripción de parámetros de retorno
Respuesta correcta
- El objeto devuelto tiene una estructura de pares clave-valor, y el nombre de la clave es el plan_id solicitado.
- El objeto correspondiente a cada plan_id contiene los siguientes campos:
| Nombre del parámetro | Tipo | Descripción |
|---|---|---|
| targets | int64 | Número de dispositivos objetivo válidos (número total de dispositivos tras la deduplicación y el filtrado de validez) |
| sent | int64 | Número de dispositivos para los que realmente se creó la tarea de envío |
| delivered | int64 | Número de dispositivos realmente entregados (solo se contabilizan los datos dentro de 5 días) |
| impressions | int64 | Número de impresiones del mensaje (solo se contabilizan los datos dentro de 5 días) |
| clicks | int64 | Número de clics de usuario (solo se contabilizan los datos dentro de 5 días) |
| sub | object | Estadísticas desglosadas por tipo de mensaje (la estructura se muestra en la subtabla siguiente) |
- Estructura del objeto sub
| Tipo de mensaje | Descripción | Subestructura |
|---|---|---|
| notification | Estadísticas de mensajes de la barra de notificaciones | Contiene sub_android (estadísticas por proveedor de Android)/sub_ios (estadísticas de iOS) |
| message | Estadísticas de mensajes personalizados | Contiene sub_android/sub_ios |
| live_activity | Estadísticas de mensajes de actividad en tiempo real | Solo contiene sub_ios |
| voip | Estadísticas de mensajes VOIP | Solo contiene sub_ios |
- Campos de estadísticas por proveedor de plataforma
| Nombre del parámetro | Tipo | Descripción |
|---|---|---|
| targets | int64 | Número de dispositivos objetivo válidos para el proveedor correspondiente |
| sent | int64 | Número real de envíos a través del canal del proveedor |
| delivered | int64 | Número real de entregas a través del canal del proveedor |
| impressions | int64 | Número de impresiones a través del canal del proveedor |
| clicks | int64 | Número de clics a través del canal del proveedor |
Ejemplo de respuesta
Respuesta correcta
{
"push_20231101": {
"targets": 1500,
"sent": 1450,
"delivered": 1400,
"impressions": 1350,
"clicks": 120,
"sub": {
"notification": {
"sub_android": {
"huawei": { "targets":200, "sent":190, "delivered":185, "impressions":180, "clicks":15 },
"xiaomi": { "targets":180, "sent":175, "delivered":170, "impressions":165, "clicks":10 }
},
"sub_ios": {
"apns": { "targets":300, "sent":295, "delivered":290, "impressions":285, "clicks":25 }
}
},
"live_activity": {
"sub_ios": {
"apns": { "targets":50, "sent":48, "delivered":45, "impressions":40, "clicks":5 }
}
}
}
}
}
Respuesta con error
{
"error": {
"code": 21003,
"message": "Parameter value is invalid"
}
}
Estadísticas de usuarios
- Proporciona datos estadísticos relacionados con usuarios de un determinado período dentro de los últimos dos meses: incluye usuarios nuevos, usuarios en línea y usuarios activos.
- Unidad de tiempo: HOUR, DAY, MONTH.
URL de API de solicitud
GET v4/status/users
Ejemplo de solicitud
curl -v https://pushapi-sgp.engagelab.com/v4/status/users?time_unit=DAY&start=2014-06-10&duration=3 -u "7d431e42dfa6a6d693ac2d04:5e987ac6d2e04d95a9d8f0d1"
< GET /v4/users?time_unit=DAY&start=2014-06-10&duration=3 HTTP/1.1
< Authorization: Basic N2Q0MzFlNDJkZmE2YTZkNjkzYWMyZDA0OjVlOTg3YWM2ZDJlMDRkOTVhOWQ4ZjBkMQ==
Parámetros de la solicitud
| Palabras clave | Tipo | Opción | Descripción |
|---|---|---|---|
| time_unit | String | required | Unidad de tiempo: |
| start | String | required | Hora de inicio |
| duration | String | required | Duración |
Ejemplo de respuesta
< HTTP/1.1 200 OK
< Content-Type: application/json
{
"time_unit": "DAY",
"start": "2014-06-10",
"duration": 3,
"items": [{
"time": "2014-06-12",
"android": {
"new": 1,
"active": 1,
"online": 2
},
"ios": {
"new": 1,
"active": 1,
"online": 2
},
"hmos": {
"new": 1,
"active": 1,
"online": 2
}
}]
}
Parámetros de la respuesta
La respuesta correcta es un objeto JSON:
| Palabras clave | Tipo | Opciones | Descripción |
|---|---|---|---|
| time_unit | String | required | Unidad de tiempo |
| start | String | required | Hora de inicio. |
| duration | String | required | Duración |
| items | JSON Array | required | Resultados estadísticos dentro del rango de consulta según duration |
- Descripción del campo items:
- android:Resumen de datos y estadísticas de la plataforma Android.
- ios:Resumen de datos y estadísticas de la plataforma Apple.
- hmos:Resumen de datos y estadísticas de la plataforma HarmonyOS.
| Palabras clave | Tipo | Opción | Descripción |
|---|---|---|---|
| new | Int64 | optional | Usuarios nuevos |
| active | Int64 | optional | Usuarios activos |
Consulta del estado del ciclo de vida del mensaje
- Consultar el estado del ciclo de vida del mensaje del dispositivo correspondiente al
message_id. - Las estadísticas de cada mensaje push se conservan hasta un mes.
Endpoint de la API
GET v4/status/message
Ejemplo de solicitud
curl -v https://pushapi-sgp.engagelab.com/v4/status/message?message_id=1613113584®istration_ids=1507bfd3a7c568d4761,1618cfd3a7c568d4761,17259fd3a7c568d4371 -u "7d431e42dfa6a6d693ac2d04:5e987ac6d2e04d95a9d8f0d1"
< GET /v4/status/message?message_id=1613113584®istration_ids=1507bfd3a7c568d4761,1618cfd3a7c568d4371 HTTP/1.1
< Authorization: Basic N2Q0MzFlNDJkZmE2YTZkNjkzYWMyZDA0OjVlOTg3YWM2ZDJlMDRkOTVhOWQ4ZjBkMQ==
Parámetros de la solicitud
| Palabra clave | Tipo | Opción | Descripción |
|---|---|---|---|
| message_id | String | Required | ID del mensaje |
| registration_ids | String | Required | registration_id, se separan con ",".registration_id. |
Descripción de parámetros de la respuesta
La respuesta correcta es un objeto JSON que contiene el estado actual del mensaje para cada registration_id. Si se produce un error, la información se incluirá en error_message.
| Palabra clave | Tipo | Opciones | Descripción |
|---|---|---|---|
| status | String | Optional | Rango de valores: |
| error_message | String | Optional | Mensaje de error, disponible solo para determinados estados. |
| error_code | Int64 | Optional | Código de estado de error, disponible solo para determinados estados. |
| itime | Int64 | Optional | Hora de actualización del estado, con precisión de segundos. |
| channel | String | Optional | Información sobre el canal a través del cual se realiza el push del mensaje. |
Ejemplo de respuesta
Respuesta correcta
< HTTP/1.1 200 OK
< Content-Type: application/json
{
"1507bfd3a7c568d4761": {
"itime": 1762331775,
"channel": "FCM",
"status": "delivered"
},
"17259fd3a7c568d4371": {
"error_code": 21003,
"error_message": "The `registration_id` does not belong to the appkey"
},
"17259fd3a7c568d4787":{
"itime": 1762331775,
"status": "sent_failed",
"error_code": 401,
"error_message": "token is invalid",
"channel": "FCM"
},
"17259fd3a7c568d4372": {
"error_code": 21061,
"error_message": "no effect status"
}
}
Respuesta con error
{
"error": {
"code": 21003,
"message": "Parameter value is invalid"
}
}
Consulta por lotes del estado del ciclo de vida del mensaje
- Consultar por lotes el estado del ciclo de vida del mensaje para un único
registration_idbajo cadamessage_id. Si existen variosregistration_idbajo el mismomessage_id, losmessage_idcorrespondientes se devolverán enmulti_regid_message_ids. - Las estadísticas de cada mensaje push se conservan hasta un mes.
Endpoint de la API
GET v4/status/batch/message
Ejemplo de solicitud
curl -v https://pushapi-sgp.engagelab.com/v4/status/batch/message?message_ids=1613113584,1613113585,1613113586 -u "7d431e42dfa6a6d693ac2d04:5e987ac6d2e04d95a9d8f0d1"
< GET /v4/status/batch/message?message_ids=1613113584,1613113585,1613113586 HTTP/1.1
< Authorization: Basic N2Q0MzFlNDJkZmE2YTZkNjkzYWMyZDA0OjVlOTg3YWM2ZDJlMDRkOTVhOWQ4ZjBkMQ==
Parámetros de la solicitud
| Palabra clave | Tipo | Opción | Descripción |
|---|---|---|---|
| message_ids | String | Required | message_id, se separan con ",".message_id. |
Descripción de parámetros de la respuesta
La respuesta correcta es un objeto Array; cada elemento representa el estado actual bajo un único message_id (y opcionalmente un único registration_id). Si hay una excepción, se incluirá en error_message.
| Palabra clave | Tipo | Opciones | Descripción |
|---|---|---|---|
| message_id | String | Required | El message_id del mensaje. |
| registration_id | String | Optional | El único registration_id que se consulta. |
| status | String | Optional | Rango de valores: |
| itime | Int64 | Optional | Hora de actualización del estado, con precisión de segundos. |
| channel | String | Optional | Información sobre el canal a través del cual se realiza el push del mensaje. |
| error_message | String | Optional | Mensaje de error, disponible solo para determinados estados. |
| error_code | Int64 | Optional | Código de estado de error, disponible solo para determinados estados. |
Ejemplo de respuesta
Respuesta correcta
< HTTP/1.1 200 OK
< Content-Type: application/json
[
{
"message_id": "261585110",
"error_message": "Multiple `registration_id` found under the same `message_id`.",
"error_code": 21003
},
{
"message_id": "261585111",
"registration_id": "170976fa8ab73279b2f",
"status": "sent",
"itime": 1766042841,
"channel": "XiaoMi"
},
{
"message_id": "261585123",
"registration_id": "170976fa8ab73279b2f",
"status": "click",
"itime": 1766047747,
"channel": "EngageLab"
},
{
"message_id": "1613113585",
"error_message": "The `message_id` is invalid or does not exist.",
"error_code": 21003
},
{
"message_id": "1613113585",
"error_message": "no effect status",
"error_code": 21061
}
]
Respuesta con error
{
"error": {
"code": 21003,
"message": "Parameter value is invalid"
}
}
Código de respuesta
Código de estado HTTP
Documentos de referencia: HTTP-Status-Code
Códigos de retorno
| Código | Descripción | Descripción detallada | Código de estado HTTP |
|---|---|---|---|
| 0 | Correcto | Solicitud correcta | 200 |
| 21001 | El método no se admite o hay un error de URL | Error del método de solicitud (GET/POST) o error de URL (la interfaz no existe) | 404 |
| 21003 | El valor del parámetro no es válido | Valor de parámetro no permitido | 400 |
| 23001 | Fallo en la autenticación básica | Fallo en la autorización HTTP Basic | 401 |
| 23002 | Falta un parámetro | Falta el parámetro necesario | 400 |
| 23004 | El valor de time_unit no coincide con start | Los valores de los parámetros time_unit y start no coinciden | 400 |
| 23007 | Solo se admite consultar message_id dentro de 30 días | Solo se pueden consultar mensajes dentro de 30 días | 400 |
| 23100 | Error del servidor | Error interno del sistema | 500 |
| 27000 | Tiempo de espera de respuesta del servidor; inténtelo de nuevo más tarde | Error interno del sistema | 500 |
| 27201 | msgid no existe o no pertenece a esta aplicación | El msgid no existe o no pertenece a esta aplicación | 400 |
