API de push
Envío de notificaciones o mensajes a un dispositivo único o a una lista de dispositivos.
El contenido enviado solo puede ser un objeto de solicitud en formato JSON.
Esta es la versión más reciente de la API de push. Las mejoras de la versión v4 son:
- Uso de autenticación básica HTTP (HTTP Basic Authentication) para la autorización de acceso. De este modo, toda la solicitud de la API se puede completar utilizando herramientas HTTP comunes, como curl, extensiones del navegador, etc.
- El contenido del push está completamente en JSON.
Límites de frecuencia de las solicitudes
Nuestra API impone límites a la frecuencia de llamadas para garantizar la estabilidad y la equidad del servicio. Los límites de QPS (consultas por segundo) para cada AppKey son los siguientes:
- Límite estándar: máximo de 500 solicitudes por segundo.
- Límite avanzado: si está suscrito a nuestro plan de pago y su AppKey de pago requiere un límite de QPS más alto, se recomienda ponerse en contacto con nuestro equipo comercial: sales@engagelab.com.
Método de solicitud
POST
Dirección de llamada
La dirección del servicio de la interfaz corresponde uno a uno con el punto de acceso del centro de datos seleccionado. Se debe seleccionar la dirección de llamada correspondiente al punto de acceso del servicio de la aplicación.
En la actualidad, EngageLab ha desplegado y admite dos puntos de acceso de centros de datos, y los datos entre diferentes puntos de acceso de servicio están completamente aislados. Se puede seleccionar la dirección de invocación según el punto de acceso del centro de datos elegido al crear el producto.
POST /v4/push
Validación de la llamada
Para obtener más información, se recomienda consultar la descripción de la visión general de la API REST de Método de autenticación (Authentication Method)。
Ejemplo de solicitud
Encabezado de la solicitud
> POST /v4/push HTTP/1.1
> Authorization: Basic Yzk2ZjQyZTBkMmU2NjJlNDVkMDM1YWIxOmRmNGQ1OWU4NGVhYzJmOWQ1M2IzNmYxMg==
Cuerpo de la solicitud
{
"from": "push",
"to": "all",
"body": {
"platform": "all",
"notification": {
"alert": "Hello, Push!",
"android": {
"alert": "Hi, Push!",
"title": "Send to Android",
"builder_id": 1,
"extras": {
"newsid": 321
}
},
"ios": {
"alert": "Hi, MTPush!",
"sound": "default",
"badge": "+1",
"extras": {
"newsid": 321
}
}
},
"options": {
"time_to_live": 60,
"apns_production": false
}
},
"request_id": "12345678",
"custom_args": {
"EngageLab": "push to you"
}
}
Parámetros de solicitud
La estructura de parámetros del push se detalla en la siguiente tabla:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| from | String | Opcional | Remitente del servicio actual |
| to | String u objeto JSON | Obligatorio | Destino de envío |
| body | Objeto JSON | Obligatorio | Cuerpo de la solicitud de envío |
| platform | String u arreglo JSON | Obligatorio | Plataforma de push |
| notification | Objeto JSON | Opcional |
|
| message | Objeto JSON | Opcional |
|
| options | Objeto JSON | Opcional | Parámetros de push |
| request_id | String | Opcional | Campo opcional definido por el cliente, que se utiliza para identificar qué solicitud se devuelve en la respuesta. |
| custom_args | Objeto JSON | Opcional | Campos opcionales definidos por el cliente que se devuelven al cliente en el callback. El valor admite un máximo de 128 caracteres. |
from
Remitente del servicio actual, tipo String, campo opcional.
Ejemplo de solicitud
{
"from": "push"
}
to
Objeto de dispositivo push (Push Device Object), que indica la lista de dispositivos a los que se puede realizar un push. Para confirmar el objeto de dispositivo push, AppPush proporciona diversos métodos, como: alias, tag, registration_id, subgrupo, difusión (broadcast), etc.
Destino de push
Existen varias formas de seleccionar dispositivos además de la difusión, como se indica a continuación:
| Campo | Tipo | Significado | Descripción | Nota |
|---|---|---|---|---|
| all | String | Difusión (broadcast) | Push a todos los dispositivos | El push se dirige a dispositivos que han estado activos en los últimos 365 días. |
| tag | Arreglo JSON | Etiqueta (tag) | Lista. La relación entre múltiples etiquetas es OR (o); es decir, se toma la unión. |
|
| tag_and | Arreglo JSON | Etiqueta AND | Lista. Múltiples etiquetas están en relación AND (y); es decir, se toma la intersección. | Tener en cuenta la distinción con tag, hasta 20 por envío. |
| tag_not | Arreglo JSON | Etiqueta NOT | Lista. Entre múltiples etiquetas, primero se toma la unión y luego se toma el complemento del resultado. | Hasta 20 por envío. |
| alias | Arreglo JSON | Alias | Lista. Múltiples alias tienen relación OR (o); es decir, se toma la unión. |
|
| registration_id | Arreglo JSON | ID de registro | Lista. Varios registration_id están en relación OR (o); es decir, se toma la unión. | Identificación del dispositivo. Hasta 1000 por envío. |
| live_activity_id | String | Identificador de actividad en tiempo real | Corresponde al valor de liveActivityId en el SDK de iOS. | Se debe proporcionar al actualizar la actividad en tiempo real. |
| seg | JSON | ID de grupo de usuarios | El ID del grupo de usuarios creado en la página. Se define como un arreglo, pero actualmente solo se admite enviar uno por vez. | Actualmente, la limitación es que solo se puede enviar uno por vez. |
La relación implícita entre múltiples valores en un arreglo es OR (o); es decir, se toma la unión. Sin embargo, tag_and es diferente: la relación implícita entre múltiples valores en un arreglo es AND (y); es decir, se toma la intersección.
Si se usa tag_not por sí solo, se realizará el procesamiento tag_not entre los usuarios de difusión.
Estos tipos pueden coexistir. La relación implícita entre múltiples elementos cuando coexisten es AND (y); es decir, se toma la intersección. Por ejemplo:
"to" : {"tag" : [ "tag1", "tag2"], "tag_and" : ["tag3", "tag4"], "tag_not" : ["tag5", "tag6"] }
Calcular primero el resultado del campo "tag" tag1 or tag2 = A;
Luego calcular el resultado del campo "tag_and" tag3 and tag4 = B;
Luego calcular el resultado del campo "tag_not" not (tag5 or tag6) = C;
El resultado final de "to" es A and B and C.
Ejemplo
- Push a todos (difusión):
{
"to": "all"
}
- Push a múltiples etiquetas (siempre que se cumpla cualquiera de las etiquetas): en Shenzhen, Guangzhou o Beijing
{
"to": {
"tag": [
"Shenzhen",
"Guangzhou",
"Beijing"
]
}
}
- Push a múltiples etiquetas (debe estar dentro del alcance de varias etiquetas al mismo tiempo): en Shenzhen y "female"
{
"to": {
"tag_and": [
"Shenzhen",
"female"
]
}
}
- Push a múltiples alias:
{
"to": {
"alias": [
"4314",
"892",
"4531"
]
}
}
- Push a múltiples registration_id:
{
"to": {
"registration_id": [
"4312kjklfds2",
"8914afd2",
"45fdsa31"
]
}
}
- Se puede enviar simultáneamente a varios tipos de destinos de push específicos: en Shenzhen o Guangzhou y son "female" "members"
{
"to": {
"tag": [
"Shenzhen",
"Guangzhou"
],
"tag_and": [
"female",
"members"
]
}
}
- Enviar un mensaje de actividad en tiempo real
{
"to": {
"live_activity_id": "LiveActivity-1"
}
}
Enviar al ID de segmentación de usuario:
{
"to": {
"seg": {
"id": "segid"
}
}
}
Body
Cuerpo de la solicitud de envío. Los campos admitidos son los siguientes:
| Palabra clave | Tipo | Opciones | Significado |
|---|---|---|---|
| platform | String o arreglo JSON | Obligatorio | Plataforma de push |
| notification | Objeto JSON | Opcional |
|
| message | Objeto JSON | Opcional |
|
| live_activity | Objeto JSON | Opcional |
|
| options | Objeto JSON | Opcional | Parámetros de push |
Platform
AppPush actualmente admite push para las plataformas Android, iOS y HarmonyOS. Las palabras clave son: "android", "ios", "hmos".
Si la plataforma de destino es iOS, se debe configurar el entorno de push mediante el campo apns_production en options. true: entorno de producción; false: entorno de desarrollo.
Push a todas las plataformas:
{ "platform" : "all" }
Designación de plataformas de push específicas:
{
"platform": [
"android",
"ios",
"hmos"
]
}
Notification
El objeto "Notification" es uno de los objetos de contenido de entidad de un push (el otro es "Message") y se envía al cliente como "Notification".
| Palabra clave | Tipo | Opción | Significado | Descripción |
|---|---|---|---|---|
| alert | String u objeto JSON | Obligatorio | Contenido | El contenido del propio mensaje. Si no se especifica alert en android o ios, se utilizará este valor. |
| android | Objeto JSON | Opcional | Propiedades de la plataforma android | Parámetros de push de la plataforma Android; consultar descripción de android |
| ios | Objeto JSON | Opcional | Propiedades de la plataforma ios | Parámetros de push de la plataforma iOS; consultar descripción de ios |
| hmos | Objeto JSON | Opcional | Propiedades de la plataforma hmos | Parámetros de push de la plataforma HarmonyOS; consultar descripción de hmos |
Alert
La propiedad "alert" en esta ubicación (directamente bajo el objeto notification) es una definición abreviada; si el mensaje de alert es el mismo en todas las plataformas, puede no definirse bajo cada plataforma y prevalecerá este valor. Si existe una definición para cada plataforma, esta sobrescribirá la definición de aquí.
{
"notification" : {
"alert" : "Hello, Push!"
}
}
El objeto notification definido anteriormente se enviará a varias plataformas especificadas por "platform" y todas tendrán el mismo mensaje de alert de notificación.
Android
Las notificaciones en la plataforma Android se muestran mediante el SDK de AppPush conforme a estilos específicos de la barra de notificaciones. Los campos admitidos son los siguientes:
| Palabra clave | Tipo de datos | Opcional | Significado | Descripción |
|---|---|---|---|---|
| alert | String u objeto JSON | Obligatorio | Contenido de la notificación | |
| title | String | Opcional | Título de la notificación | |
| builder_id | Int | Opcional | ID de estilo de la barra de notificaciones | El SDK de Android puede configurar diseños de notificación personalizados, y este campo especifica qué estilo usar. |
| channel_id | String | Opcional | ID del canal de notificaciones de Android | Hasta 1000 bytes. A partir de Android 8.0, se pueden configurar canales de notificación. Este campo especifica el efecto de visualización de la barra de notificaciones según el ID del canal. |
| priority | Int | Opcional | Prioridad de visualización de la barra de notificaciones | El valor predeterminado es 0, con un rango de -2 a 2. |
| category | String | Opcional | Filtrado o clasificación de entradas de la barra de notificaciones | Depende por completo de la estrategia de tratamiento del fabricante para la categoría. |
| style | Int | Opcional | Tipo de estilo de la barra de notificaciones | Se utiliza para especificar el tipo de estilo de la barra de notificaciones; el valor predeterminado es 0. 1=bigText,2=Inbox,3=bigPicture |
| big_text | String | Opcional | Estilo de barra de notificaciones de texto grande | |
| inbox | JSONObject | Opcional | Estilo de barra de notificaciones de elementos de texto | {"box0":"content1"}. |
| big_pic_path | String | Opcional | Estilo de barra de notificaciones de imagen grande | |
| extras | Objeto JSON | Opcional | Campos adicionales | Definir información clave/valor personalizada en formato JSON para uso de negocio. |
| intent | Objeto JSON | Opcional | Especificar la página de destino para navegación (recomendado) | Usar el campo intent para especificar la página de destino a la que se debe navegar cuando se hace clic en la barra de notificaciones. Se recomienda completar el campo intent; de lo contrario, al hacer clic en la notificación puede no haber ninguna acción de navegación. Este campo admite tres tipos:intent:#Intent;action=action path;component= package name /full activity name;endintent:#Intent;action=android.intent.action.MAIN;end (dirección fija)scheme://test?key1=val1&key2=val2 |
| large_icon | String | Opcional | Icono grande de notificación | |
| small_icon | String | Opcional | Icono pequeño de notificación | |
| sound | String | Opcional | Sonido | |
| badge_add_num | Int | Opcional | Establecer el valor incremental para el número de insignia (badge) que se sumará al número de insignia original | |
| badge_set_num | Int | Opcional | Establecer un valor fijo para el número de insignia | |
| badge_class | String | Opcional | Clase de Activity de entrada de la aplicación correspondiente al icono del escritorio, por ejemplo, "com.test.badge.MainActivity" | |
| display_foreground | String | Opcional | Si la app está en primer plano, si se deben mostrar notificaciones | |
| group_id | String | Opcional | ID de grupo de mensajes | Identificador único para la agrupación de mensajes, utilizado para controlar el efecto de colapso de mensajes. Esto se admite desde AppPush Android SDK versión 5.0.1. |
{
"notification": {
"android": {
"alert": "hello, MTPush!",
"title": "Push test",
"builder_id": 3,
"style": 1,
"big_text": "big text content",
"inbox":JSONObject,
"big_pic_path": "picture url",
"priority": 0,
"category": "category str",
"large_icon": "http://pushapi-sgp.engagelab.comlargeIcon.jpg",
"small_icon": "http://www.small.com/small_icon.jpg",
"intent": {
"url": "intent:#Intent;component=push.pushapi-sgp.engagelab.com/com.example.mtpushdemo.SettingActivity;end"
},
"extras": {
"news_id": 134,
"my_key": "a value"
}
}
}
}
iOS
Notificaciones de APNs en la plataforma iOS.
El contenido de la notificación se envía mediante el agente de AppPush al servidor APNs de Apple y se presenta en el dispositivo iOS como una notificación del sistema.
El contenido de la notificación cumple con la especificación de APNs y admite los siguientes campos:
| Palabra clave | Tipo | Opción | Significado | Descripción |
|---|---|---|---|---|
| alert | String u objeto JSON | Obligatorio | Contenido de la alerta |
|
| sound | String u objeto JSON | Opcional | Sonido de la notificación |
|
| badge | Int o String | Opcional | Insignia de la aplicación |
|
| content-available | Boolean | Opcional | Push de activación | Para más detalles, consultar: al enviar "content-available":true significa que es una Background Remote Notification; si no se incluye, es una Remote Notification normal: Background Remote Notification |
| mutable-content | Boolean | Opcional | Extensión de notificación | Funcionalidad Notification Service Extension agregada en iOS 10 para informar el estado de entrega de cada mensaje de APNs. Para usarla, el cliente debe implementar la interfaz Service Extension y usar el campo mutable-content del lado del servidor para completar la configuración. |
| category | String | Opcional | Solo compatible con iOS 8. Establecer el valor del campo "category" en el payload de APNs. | |
| extras | Objeto JSON | Opcional | Campos ampliados | Aquí se personaliza la información clave/valor para uso empresarial. |
| thread-id | String | Opcional | Grupo de notificaciones | Las notificaciones remotas de iOS se agrupan por esta propiedad, de modo que las notificaciones con el mismo thread-id se agrupan juntas. |
| interruption-level | String | Opcional | Nivel de interrupción de la notificación para prioridad y tiempos de entrega | Para iOS 15, el nivel de notificación solo puede ser uno de: active,critical,passive,timeSensitive. Consultar: UNNotificationInterruptionLevel。 |
Notificaciones iOS para que AppPush se reenvíe a los servidores de APNs. La longitud de las notificaciones en AppPush está limitada a 4000 bytes. AppPush utiliza codificación utf-8 al enviar; por lo tanto, un carácter chino ocupa 3 bytes.
Ejemplo de envío del lado del servidor:
{
"notification": {
"ios": {
"alert": "hello, Push!",
"sound": "sound.caf",
"badge": 1,
"extras": {
"news_id": 134,
"my_key": "a value"
}
}
}
}
Mensaje recibido por el cliente:
{
"_j_msgid" = 813843507;
aps = {
alert = "hello,Push!";
badge = 1;
sound = "sound.caf";
};
"my_key" = "a value";
"news_id" = 134;
}
hmos
Las notificaciones en la plataforma HarmonyOS se muestran mediante el SDK de AppPush conforme a estilos de la barra de notificaciones. Los campos admitidos son:
| Palabra clave | Tipo | Opción | Significado | Descripción |
|---|---|---|---|---|
| alert | String | Obligatorio | Contenido de la notificación | Sobrescribe el alert del nivel superior si se establece. Una cadena vacía oculta la notificación en la barra. Consultar Limitaciones de push para conocer los límites. |
| title | String | Opcional | Título de la notificación | Reemplaza el nombre de la app si se establece. Consultar Limitaciones de push. |
| category | String | Obligatorio | Categoría del mensaje | Requerido por el proveedor. Seguir los estándares de categorías de mensajes de Harmony. Corresponde a notification.hmos.category. |
| large_icon | String | Opcional | Icono grande | Solo URL HTTPS, p. ej., https://example.com/image.png. ≤30 KB, ancho*alto < 12800 píxeles. |
| intent | JSONObject | Obligatorio | Destino de navegación | Se admiten tres tipos: 1) Inicio de la app: action.system.home 2) Deeplink: scheme://host?key=val 3) Acción: com.test.action. Ejemplo: {"url":"action.system.home"}. |
| badge_add_num | Int | Opcional | Incremento de insignia | Si se omite, no cambia la insignia. Rango 1-99. Se suma a la insignia actual. |
| badge_set_num | Int | Opcional | Establecer valor de insignia | Si se omite, no cambia la insignia. Rango 0-99. Establece la insignia a un valor fijo. |
| test_message | Boolean | Opcional | Indicador de mensaje de prueba | false: normal (predeterminado); true: mensaje de prueba. |
| receipt_id | String | Opcional | ID de recibo de Huawei | ID único para especificar la configuración de recibo de bajada de Harmony. |
| extras | JSON | Opcional | Campos adicionales | K/V JSON personalizado para uso empresarial. |
| style | Int | Opcional | Estilo de notificación | Predeterminado 0. 0: normal; 3: texto multilínea. |
| inbox_content | [String] | Opcional | Contenido de texto multilínea | Obligatorio cuando style=3. Hasta 3 elementos. Cada uno ≤1024 caracteres; se truncará con “…”. |
| push_type | Int | Opcional | Tipo de push | Predeterminado 0. Se admiten: 0-notificación, 2-notificación extendida, 10-llamada VoIP. Otros no son válidos. |
| extra_data | String | Opcional | Datos ampliados | Se asigna a extraData de Huawei. Obligatorio cuando push_type=2 o 10; se ignora cuando push_type=0. |
| display_foreground | String | Opcional | Mostrar notificación cuando la app está en primer plano | "1": mostrar; "0": no mostrar. |
Ejemplo:
{
"notification": {
"hmos": {
"alert": "Hi, MTPush!",
"title": "",
"category": "",
"intent": {"url": ""},
"badge_add_num": 1,
"test_message": true,
"receipt_id": "",
"extras": {},
"style": 0,
"inbox_content": [],
"push_type": 0,
"extra_data": "",
"display_foreground": "1"
}
}
}
Message
Mensajes dentro de la aplicación. También denominados: mensajes personalizados, mensajes de paso directo.
- Esta parte no se muestra en la barra de notificaciones; el SDK de AppPush recibe el contenido del mensaje y lo transmite a la aplicación.
- iOS obtiene esta parte en un canal de mensajes in-app de push (no APNs) con la aplicación en primer plano.
Los campos admitidos son los siguientes:
| Palabra clave | Tipo | Opción | Significado |
|---|---|---|---|
| msg_content | String u objeto JSON | Obligatorio | Contenido del mensaje |
| title | String | Opcional | Título del mensaje |
| content_type | String | Opcional | Tipo de contenido del mensaje |
| extras | Objeto JSON | Opcional | Parámetros opcionales en formato JSON |
| test_message | Boolean | Opcional | Indicador de mensaje de prueba, para uso de HarmonyOS |
| receipt_id | String | Opcional | ID de recibo de Huawei, para uso de HarmonyOS |
Ejemplo:
{
"message": {
"msg_content": "Hi,Push",
"content_type": "text",
"title": "msg",
"extras": {
"key": "value"
}
}
}
Live_activity
Nota: Los mensajes de actividad en tiempo real requieren el uso de un certificado iOS P8, que corresponde a seleccionar "Token Authentication Configuration" en la configuración del método de autenticación iOS de WebPortal.
El cuerpo de contenido del mensaje de actividad en tiempo real incluye la siguiente información de campos:
| Palabra clave | Tipo | Opciones | Descripción |
|---|---|---|---|
| ios | Objeto JSON | Obligatorio | Para los campos detallados, consultar la sección objeto JSON de iOS. |
Objeto JSON de iOS
| Palabra clave | Tipo | Opciones | Descripción |
|---|---|---|---|
| event | string | Obligatorio | Creación: "start", Actualización: "update", Finalización: "end"; obligatorio cuando event=start |
| attributes-type | string | Opcional | Tipo de actividad en tiempo real; un valor definido por el desarrollador; obligatorio cuando event=start |
| content-state | Objeto JSON | Obligatorio | Contenido dinámico de la actividad en tiempo real; debe coincidir con el valor del SDK del cliente (corresponde al campo content-state de Apple). |
| alert | Objeto JSON | Opcional | Para más detalles, consultar objeto JSON alert de iOS. |
| dismissal-date | int | Opcional | Tiempo de visualización para el fin de la actividad en tiempo real. |
| attributes | Objeto JSON | Opcional | Contenido estático de la actividad en tiempo real; debe coincidir con el valor del SDK del cliente (corresponde al campo attributes de Apple). |
| stale-date | int | Opcional | Tiempo de caducidad para mostrar la actividad en tiempo real; si es menor que la hora actual, la actividad no se actualizará. |
| relevance-score | int | Opcional | Prioridad de visualización de la actividad en tiempo real en la Isla Dinámica; valores de 1 a 100, correlacionados positivamente con la importancia de la actividad; el valor predeterminado es el máximo si no se especifica. |
| apns-priority | int | Opcional | 5 o 10; el valor predeterminado es 10. Las notificaciones con apns-priority=5 no consumen el límite de velocidad de Apple; superar el límite restringirá las notificaciones. |
Objeto JSON alert de iOS
| Palabra clave | Tipo | Opciones | Descripción |
|---|---|---|---|
| title | string | Opcional | Título mostrado en los mensajes de Apple Watch. |
| body | string | Opcional | Contenido mostrado en los mensajes de Apple Watch. |
| sound | string | Opcional | Sonido de la notificación. |
- Los mensajes de actividad en tiempo real de iOS para EngageLab Push se reenvían a los servidores de Apple. Apple exige que los datos de actualización dinámica de los mensajes de actividad en tiempo real (ActivityKit) no superen los 4096 bytes.
- EngageLab Push, debido a los requisitos de reempaquetado y considerando la redundancia de seguridad, estipula que la longitud total dentro de los parámetros "live_activity" para
"iOS": { }y el contenido dentro de las llaves no debe exceder 3584 bytes. JPush utiliza codificación UTF-8, lo que significa que un carácter chino ocupa 3 bytes.
Ejemplo de push de actividad en tiempo real
El attributes-type y el live_activity_id utilizados para las actividades en tiempo real se reportan desde el SDK del desarrollador. Antes de usar actividades en tiempo real, se deben reportar el token de inicio por push del dispositivo y el update-token. Para obtener procedimientos detallados, consultar las instrucciones de actividad en tiempo real del fabricante Apple.
Creación
{ "from": "push", "to": { "registration_id": [ "161a3797c816b134042" ] }, "body": { "platform": "ios", "live_activity": { "ios": { "event": "start", "content-state": { "eventStr": "hello", "eventTime":1685952000 }, "attributes": { "name": "1", "number": 2, "tag": "mytag" }, "alert": { "title": "hello", "body": "welcome" }, "attributes-type": "my_la_type", "relevance-score": 100, "apns-priority": 10 } } }, "request_id": "12345678", "custom_args": "12345678" }{ "from": "push", "to": { "registration_id": [ "161a3797c816b134042" ] }, "body": { "platform": "ios", "live_activity": { "ios": { "event": "start", "content-state": { "eventStr": "hello", "eventTime":1685952000 }, "attributes": { "name": "1", "number": 2, "tag": "mytag" }, "alert": { "title": "hello", "body": "welcome" }, "attributes-type": "my_la_type", "relevance-score": 100, "apns-priority": 10 } } }, "request_id": "12345678", "custom_args": "12345678" }Este bloque de código se muestra en una ventana flotanteActualización
{ "from": "push", "to": { "live_activity_id": "my_la_id" }, "body": { "platform": "ios", "live_activity": { "ios": { "event": "update", "content-state": { "eventStr": "test_live", "eventTime": 198 }, "alert": { "title": "123411", "body": "123411" } } } }, "request_id": "12345678", "custom_args": "12345678" }{ "from": "push", "to": { "live_activity_id": "my_la_id" }, "body": { "platform": "ios", "live_activity": { "ios": { "event": "update", "content-state": { "eventStr": "test_live", "eventTime": 198 }, "alert": { "title": "123411", "body": "123411" } } } }, "request_id": "12345678", "custom_args": "12345678" }Este bloque de código se muestra en una ventana flotante
VoIP
Funcionalidad VoIP de iOS. Este tipo no admite coexistencia con otros tipos de mensajes iOS. Se puede consultar la estructura de parámetros de la solicitud:
{
"from": "push",
"to": {
"registration_id": [ "1a0018970a91da03de5" ]
},
"request_id": "12345",
"custom_args": "12345",
"body": {
"platform": "ios",
"voip": {
"key": "value // Any custom key/value pair that will be passed to the APP"
}
}
}
Options
Las opciones actuales de notificación push incluyen lo siguiente:
| Palabra clave | Tipo | Opción | Significado | Descripción |
|---|---|---|---|---|
| time_to_live | Int o String | Opcional | Tiempo de retención de mensajes sin conexión (segundos) | Si el usuario está sin conexión en el momento del push, el mensaje puede conservarse durante una duración especificada para volver a enviarse cuando se conecte. El valor predeterminado es 86400 (1 día) y el máximo es 15 días. Si el máximo admitido por el operador es menor que el valor configurado, se utilizará el máximo del operador. Establecerlo en 0 significa que los mensajes sin conexión no se conservan; solo los usuarios que estén con conexión en el momento del push recibirán el mensaje. |
| override_msg_id | Long | Opcional | ID del mensaje que se va a sobrescribir | Si el push actual pretende sobrescribir uno anterior, al introducir el msg_id del push anterior se obtendrá el efecto de sobrescritura. En este caso, el msg_id recibirá el contenido actualizado sin conexión, incluso si el usuario Android ya recibió el mensaje; si la notificación no se ha eliminado de la barra de notificaciones, el nuevo contenido sobrescribirá la notificación anterior. La función de sobrescritura es efectiva durante: 1 día. Si el msg_id no existe dentro del límite de tiempo especificado para sobrescritura, se devuelve un error 7006 indicando una operación de sobrescritura de mensaje no válida y el mensaje actual no se enviará. Este campo solo es efectivo para Android y solo admite el canal EngageLab, el canal Xiaomi, el canal Meizu, el canal OPPO, el canal FCM y el canal Huawei (dispositivos EMUI10 y superiores). |
| apns_production | Boolean | Opcional | Entorno de producción de APNs | Este campo solo es válido para notificaciones iOS. |
| apns_collapse_id | String | Opcional | Identificador para actualizar notificaciones iOS | Si una nueva notificación APNs coincide con una notificación existente en el Centro de notificaciones con el mismo apns-collapse-id, el contenido de la nueva notificación la actualizará y la colocará en la parte superior del Centro de notificaciones. El collapse id no debe exceder 64 bytes de longitud. |
| big_push_duration | Int | Opcional | Duración del envío escalonado (minutos) | También denominado envío lento; reduce la velocidad de envío rápido original, distribuyendo el push de forma uniforme entre los usuarios objetivo durante los n minutos especificados; el máximo es 1440. |
| multi_language | Objeto JSON | Opcional | Configuración de push multilingüe | Configuración de adaptación para contenido de push multilingüe; consultar multi_language para más detalles. |
| third_party_channel | Objeto JSON | Opcional | Información de configuración del canal de proveedor Android | Parámetros válidos solo para usuarios configurados con canales de proveedor; consultar third_party_channel para más detalles. |
| classification | Int | Opcional | Configuración de clasificación de mensajes push | EngageLab no evalúa ni calibra el tipo de mensaje especificado. Si no se especifica, el valor predeterminado es 0. 0: representa mensajes operativos. 1: representa mensajes del sistema. |
| voice_value | String | Opcional | Valor del archivo de voz | Varios parámetros se separan por comas; '#' indica que se requiere análisis; de lo contrario, coincide directamente con el archivo de idioma de forma predeterminada. Tenga en cuenta que, si el número tiene un punto decimal, el nombre del archivo cargado debe ser point.mp3. Los idiomas admitidos actualmente incluyen "en" (inglés), "zh-Hans" (chino simplificado) y "zh-Hant" (chino tradicional). Si el idioma especificado del contenido de push no coincide con las reglas de idioma correspondientes, el contenido del push no se convertirá en difusión por voz. |
| enhanc_message | Boolean | Opcional | Habilitar la visualización de mensajes in-app | true: habilitar mejora; false: deshabilitar mejora. Si los permisos de notificación están deshabilitados, al habilitar esta función se mostrará el contenido del mensaje de la barra de notificaciones como un mensaje in-app cuando el usuario esté ejecutando la app en primer plano. El valor predeterminado de esta función es false y solo estará activa cuando se habilite explícitamente. |
| plan_id | String | Opcional | Identificador del plan de push | Es necesario crear primero la identificación del plan. Se puede crear en la consola o a través de la API. |
| cid | String | Opcional | Identificador de solicitud de push, utilizado para evitar envíos duplicados | Solo se permiten letras, números, guiones bajos y guiones, y la longitud no excede 64 caracteres. Téngase en cuenta que este campo debe ser único bajo el mismo AppKey. Cómo evitar push duplicados |
| auto_truncation | Boolean | Opcional | Si se deben truncar automáticamente los mensajes demasiado largos para el canal del proveedor | El valor predeterminado es true. Si el cuerpo del mensaje enviado al canal del proveedor se considera demasiado largo, se truncará automáticamente. Si no se desea el truncamiento, se puede pasar false para deshabilitarlo. |
Multi_language
Este campo corresponde a la función de push multilingüe del servicio EngageLab Push. Permite enviar contenido de notificación personalizado a usuarios en diferentes idiomas. Al especificar varios idiomas junto con su contenido de mensaje, títulos y subtítulos de iOS correspondientes en la solicitud de push, se pueden enviar notificaciones push adecuadas según la configuración de idioma del usuario.
Parámetros de solicitud
| Palabra clave | Tipo | Opciones | Significado | Descripción |
|---|---|---|---|---|
| en | string | Opcional | Clave de idioma | Corresponde al idioma del usuario; consultar el apéndice para los códigos de clave. |
| content | string | Opcional | Contenido del mensaje | Sustituye los datos en notification.android.alert, notification.ios.alert, notification.web.alert y message.msg_content según el idioma del usuario. |
| title | string | Opcional | Título del mensaje | Sustituye los datos en notification.android.title, notification.ios.alert, notification.web.title y message.title según el idioma del usuario. |
| ios_subtitle | string | Opcional | Subtítulo de iOS | Sustituye los datos en notification.ios.alert según el idioma del usuario. |
- Nota sobre HarmonyOS: al usar HarmonyOS, utilizar
third_party_channel.hmos.distribution_new. No se ve afectado por la configuración global.
Ejemplo de solicitud
HTTP Request Method: POST
Request URL: /v4/grouppush or /v4/push
Request Data Format: JSON
Request Example:
{
"options": {
"multi_language": {
"en": {
"content": "",
"title": "",
"ios_subtitle": ""
}
}
}
}
Ejemplo de solicitud
Successful Response:
{
}
Failed Response:
{
"code": 400,
"data": "",
"message": "Error Message"
}
Third_party_channel
Este campo se utiliza para rellenar la información personalizada del canal de proveedor Android. La clave admite los siguientes canales de proveedor: xiaomi, huawei, meizu, oppo, vivo, fcm, honor, hmos. Pueden existir uno o varios al mismo tiempo. La clave (KEY) de cada tipo de proveedor puede contener actualmente las siguientes opciones:
Parámetros de solicitud
| Palabra clave | Tipo | Opción | Significado | Descripción |
|---|---|---|---|---|
| distribution_new | String | Obligatorio | _ | Cuando EngageLab y los canales del proveedor coexisten, se establece la prioridad de distribución. |
| channel_id | String | Opcional | Categorías de mensajes de la barra de notificaciones | channel_id también está disponible en Android. Si se rellena este campo, tendrá prioridad; de lo contrario, se aplicará la definición de android.channel_id.category y notify_level que se indican a continuación. |
| classification | Int | Opcional | Categorías de mensajes de la barra de notificaciones | Categoría de mensajes de la barra de notificaciones del fabricante vivo; si no se rellena, el valor predeterminado es 0. |
| pushMode | Int | Opcional | Modo de push de vivo | El valor predeterminado es 0. Para más detalles, consultar pushMode de vivo. Para usar push de prueba, se debe configurar manualmente el ID del dispositivo de prueba en el backend de vivo. |
| importance | String | Opcional | Clasificación inteligente de mensajes de la barra de notificaciones de Huawei/Honor | Para adaptarse a la clasificación inteligente de mensajes de la barra de notificaciones del fabricante Huawei, corresponde al campo importance de Huawei. Si no se rellena, el valor predeterminado es "NORMAL". Referencia: clasificación inteligente de mensajes de notificación de Huawei。 |
| urgency | String | Opcional | Prioridad del mensaje definida por el proveedor Huawei | Para adaptar la prioridad de los mensajes personalizados del proveedor Huawei. |
| category | String | Opcional | Identificador de escenario de mensaje personalizado del proveedor Huawei | Para adaptarse a los requisitos de notificación de dispositivos Huawei, vivo y OPPO, este campo se utiliza para identificar el tipo de mensaje de "notificación en la nube", determinar los métodos de alerta de notificación y acelerar la entrega de tipos específicos de mensajes. |
| notify_level | Int | Opcional | Niveles de alerta de mensajes de la barra de notificaciones de OPPO | 1 para barra de notificaciones, 2 para barra de notificaciones + pantalla de bloqueo, 16 para barra de notificaciones + pantalla de bloqueo + banner + vibración + tono. notify_level solo aplica a mensajes de "Servicio y comunicación". notify_level, se debe incluir el parámetro category. |
| small_icon_uri | String | Opcional | Estilo de icono pequeño para mensajes del proveedor | |
| small_icon_color | String | Opcional | Color del estilo de icono pequeño del fabricante Xiaomi | Para adaptarse al color del estilo de icono pequeño del mensaje del fabricante Xiaomi; si no se rellena, el valor predeterminado es gris (oficialmente, Xiaomi ya no admite iconos pequeños personalizados; se recomienda a los desarrolladores no seguir utilizando las funciones relacionadas con el small icon de Xiaomi). |
| big_text | String | Opcional | Estilo de texto grande para mensajes del proveedor | |
| only_use_vendor_style | Boolean | Opcional | Si se debe utilizar el estilo de configuración de su propio canal | Si se debe usar únicamente el estilo configurado en su propio canal y no el estilo configurado en android; el valor predeterminado es false. |
| big_picture_id | String | Opcional | ID de imagen grande de OPPO | |
| small_picture_id | String | Opcional | ID de icono pequeño de OPPO |
Para unificar las estrategias de canales de múltiples proveedores y simplificar la lógica de configuración, el método de configuración del campo
distribution_newse ajusta de la siguiente manera. Sus configuraciones heredadas a nivel de proveedor seguirán siendo válidas, pero se recomienda migrar gradualmente a configuraciones globales para evitar riesgos de compatibilidad en el futuro. (Las nuevas reglas entrarán en vigor a partir del 2025.04.03):
- Prioridad de configuración (nuevas reglas)
- Primera prioridad: configuración global
third_party_channel.distribution_new(nuevo método recomendado)
Ejemplo:"distribution_new": "pns_mtpush" - Segunda prioridad: configuración a nivel de proveedor
third_party_channel.{vendor_key}.distribution_new(método heredado compatible)
Solo tiene efecto cuando no se establece la configuración global - Sin configuración: estrategia predeterminada: pns_mtpush
- Primera prioridad: configuración global
Notas de compatibilidad
- Garantía de compatibilidad: las configuraciones heredadas a nivel de proveedor seguirán funcionando si no se establece el campo global, garantizando que no haya impacto en los servicios existentes.
- Resolución de conflictos: si se configuran tanto el campo global como el campo a nivel de proveedor, solo se leerá el valor global y se ignorarán las configuraciones a nivel de proveedor.
- Plan a largo plazo:
distribution_newa nivel de proveedor puede quedar obsoleto en versiones futuras. Se recomienda adaptarse con antelación si es posible.
Ejemplo de solicitud
{
"third_party_channel": {
"distribution_new": "pns_mtpush",
"xiaomi": {
"channel_id": "*******",
"small_icon_uri": "http://f6.market.xiaomi.com/download/MiPass/x/x.png",
"small_icon_color": "#ABCDEF"
},
"huawei": {
"importance": "NORMAL",
"small_icon_uri": "https://xx.com/xx.jpg",
"only_use_vendor_style": true
},
"oppo": {
"channel_id": "*******",
"big_picture_id": "",
"small_picture_id": ""
},
"vivo": {
"pushMode": 0
},
"hmos": {
"distribution_new": "pns_mtpush"
}
}
}
request_id
ID de solicitud (request id), campo opcional definido por el cliente. Se utiliza para que el cliente identifique qué solicitud se está realizando y se devuelve en la respuesta.
Ejemplo de solicitud
{
"request_id":"12345678"
}
Ejemplo de retorno
{
"msg_id": "1225764",
"request_id": "12345678"
}
Custom_args
Campo opcional definido por el cliente, que no se devuelve en la respuesta y se devuelve en el callback.
Ejemplo de solicitud
{
"custom_args":{
"args1": "args1"
}
}
Parámetros de retorno
Respuesta correcta
| Campo | Tipo | Opción | Descripción |
|---|---|---|---|
| request_id | String | Opcional | El ID personalizado enviado en la solicitud se devuelve tal cual en la respuesta. |
| message_id | String | Obligatorio | ID de mensaje, que identifica de forma única un mensaje. |
< HTTP/1.1 200 OK
< Content-Type: application/json
{"request_id":"18","msg_id":"1828256757"}
Respuesta fallida
El código de estado HTTP es 4xx o 5xx y el cuerpo de la respuesta contiene los siguientes campos:
| Campo | Tipo | Opción | Descripción |
|---|---|---|---|
| code | int | Obligatorio | Código de error; consultar la descripción de Códigos de error |
| message | String | Obligatorio | Detalles del error |
{
"error":{
"code": 3002,
"message": "Push.template field must be set correctly when type is template"
}
}
Respuestas de la llamada
Código de estado HTTP
Documento de referencia: HTTP-Status-Code
Código de error
| Código | Descripción | Explicación detallada | Código de estado HTTP |
|---|---|---|---|
| 20101 | Parámetros de push no válidos | El registration_id no es válido o no pertenece al appkey actual | 400 |
| 21001 | Solo se admite el método HTTP Post | No se admite el método Get | 405 |
| 21002 | Falta un parámetro obligatorio | Se debe corregir | 400 |
| 21003 | Valor de parámetro no válido | Se debe corregir | 400 |
| 21004 | Error de verificación | Se debe corregir; consultar: llamada para verificación | 401 |
| 21005 | Cuerpo del mensaje demasiado grande | Se debe corregir; el límite de longitud de Notification/Message es 4000 bytes | 400 |
| 21008 | Parámetro app_key no válido | Se debe corregir; comparar cuidadosamente el appkey transmitido con la información de la aplicación y comprobar si hay espacios adicionales | 400 |
| 21009 | Error interno del sistema | Póngase en contacto con el equipo de soporte | 400 |
| 21011 | No se encontró un destino de push adecuado | Comprobar el campo 'to' | 400 |
| 21015 | Error de validación de parámetros de solicitud | Existen parámetros inesperados | 400 |
| 21016 | Error de validación de parámetros de solicitud | Error de tipo de parámetro o la longitud del parámetro excede el límite | 400 |
| 21030 | Tiempo de espera interno del servicio | Reintentar más tarde | 503 |
| 21050 | Parámetro event de live_activity incorrecto | El parámetro event debe ser "start", "update" o "end" | 400 |
| 21051 | Parámetro de audiencia de live_activity incorrecto | Durante la creación de live activity, el destino de push solo puede ser difusión o basado en registro | 400 |
| 21052 | Parámetro attributes-type de live_activity incorrecto | Cuando event=start, attributes-type no puede estar vacío | 400 |
| 21053 | Parámetro content-state de live_activity incorrecto | content-state no puede estar vacío | 400 |
| 21054 | Error de parámetro live_activity: no se permiten notificación y mensaje personalizado simultáneamente | voip, message, notification, live_activity no pueden coexistir | 400 |
| 21055 | live_activity iOS sin certificado p8 | Live activity solo admite certificado p8 | 400 |
| 21056 | live_activity solo admite la plataforma iOS | el parámetro platform debe ser ios | 400 |
| 21057 | No se permite que el mensaje voip coexista con otros tipos de mensajes | voip, message, notification, live_activity no pueden coexistir | 400 |
| 21058 | voip solo admite la plataforma iOS | el parámetro platform debe ser ios | 400 |
| 23006 | Error de parámetro | El big_push_duration del push a tasa fija excede el valor máximo de 1440 | 400 |
| 23008 | Interfaz con limitación de tasa | La QPS de la interfaz de push de una sola aplicación alcanza el límite (500 qps) | 400 |
| 23009 | Error de permisos de push | La dirección IP actual de push no está en la lista blanca de IP de la aplicación | 400 |
| 27000 | Error interno de memoria | Reintentar | 500 |
| 27001 | Error de parámetro | La información de verificación está vacía | 401 |
| 27008 | Error de parámetro | Distribution dentro de third_party_channel no está vacío, pero el contenido alert de notification está vacío | 401 |
| 27009 | Error de parámetro | Formato no válido o vacío para distribution en third_party_channel | 401 |
| 21038 | Error de permisos de push | VIP caducado o no activado | 401 |
| 21306 | Error de parámetro | Los mensajes de notificación y los mensajes personalizados no pueden enviarse simultáneamente | 401 |
| 21059 | Error de parámetro | Este tipo de mensaje no admite big_push_duration | 401 |
Limitaciones de push
| Canal del proveedor | Longitud del título | Longitud del contenido | Palabras sensibles | Otras notas |
|---|---|---|---|---|
| Canal EngageLab | Sin límite, pero el tamaño total del mensaje está limitado | Sin límite, pero el tamaño total del mensaje está limitado | Palabras configuradas según la función de palabras sensibles | La longitud de Notification/Message en AppPush está limitada a 4000 bytes. |
| Canal Huawei | Sin límite, pero tamaño total del mensaje < 4096 bytes; se recomienda título ≤ 40 caracteres | Sin límite, pero tamaño total del mensaje < 4096 bytes; se recomienda contenido ≤ 1024 caracteres | Está prohibido incluir contenido relacionado con el gobierno, nombres de líderes, independencia de Taiwán, etc. | El permiso predeterminado para [Marketing Notification] es una notificación silenciosa, sin alertas de sonido ni vibración. |
| Canal Honor | Sin límite, pero tamaño total del mensaje < 4096 bytes | Sin límite, pero tamaño total del mensaje < 4096 bytes | Está prohibido incluir contenido relacionado con el gobierno, nombres de líderes, independencia de Taiwán, etc. | - |
| Canal Meizu | ≤ 32 caracteres | ≤ 100 caracteres | Se prohíben caracteres especiales como # | |
| Canal Xiaomi | ≤ 50 caracteres | ≤ 128 caracteres | Se prohíben caracteres especiales como #, >> | |
| Canal OPPO | ≤ 50 caracteres | La longitud del contenido está limitada por el estilo de notificación: 1) Estilo estándar (style=1): longitud de cadena de contenido ≤ 50; 2) Estilo de texto largo (style=2): longitud de cadena de contenido ≤ 128; 3) Estilo de imagen grande (style=3): longitud de cadena de contenido ≤ 50. | Palabras configuradas según la función de palabras sensibles | Cálculo de longitud de cadena: caracteres chinos, ingleses y símbolos especiales (p. ej., emojis) se contabilizan como 1 carácter. |
| Canal de vivo | ≤ 40 caracteres | ≤ 100 caracteres | ||
| Canal APNs | ≤ 20 caracteres (40 caracteres en inglés); las partes excedidas mostrarán puntos suspensivos. | Palabras configuradas según la función de palabras sensibles | El tamaño del cuerpo del mensaje está limitado a 4 KB (4096 bytes). El tamaño máximo para notificaciones VoIP es 5 KB (5120 bytes). | |
| Canal FCM | Sin límite, pero el tamaño total del mensaje está limitado | Sin límite, pero el tamaño total del mensaje está limitado | Palabras configuradas según la función de palabras sensibles | La longitud de Notification/Message en AppPush está limitada a 4000 bytes. |
| Canal Harmony | Sin límite, pero el tamaño total del mensaje está limitado | Sin límite, pero el tamaño total del mensaje está limitado | Palabras configuradas según la función de palabras sensibles | El tamaño del cuerpo del mensaje no puede superar 4096 bytes (excluyendo el Push Token). |
Código de varios idiomas
| Idioma | Código |
|---|---|
| Inglés | en |
| Árabe | ar |
| Chino (simplificado) | zh-Hans |
| Chino (tradicional) | zh-Hant |
| Checo | cs |
| Danés | da |
| Neerlandés | nl |
| Francés | fr |
| Alemán | de |
| Hindi | hi |
| Italiano | it |
| Japonés | ja |
| Coreano | ko |
| Malayo | ms |
| Ruso | ru |
| Español | es |
| Tailandés | th |
| Vietnamita | vi |
| Indonesio | id |
| Noruego | no |
| Sueco | sv |
| Polaco | pl |
| Turco | tr |
| Hebreo | he |
| Portugués | pt |
| Rumano | ro |
| Húngaro | hu |
| Finés | fi |
| Griego | el |
| Ucraniano | uk |
| Lao | lo |
| Portugués (Portugal) | pt_PT |
| Portugués (Brasil) | pt_BR |
| Español (Argentina) | es_AR |
| Español (España) | es_ES |
| Español (América Latina) | es_419 |
