Cómo evitar notificaciones push duplicadas: análisis en profundidad de la funcionalidad CID
En los sistemas de notificaciones push, las notificaciones push duplicadas son un problema habitual, especialmente en escenarios con redes inestables o reintentos del sistema. En este artículo se analiza en profundidad la funcionalidad de Client ID (CID), que permite aprovechar este mecanismo para evitar eficazmente las entregas duplicadas de mensajes.
Funcionalidad CID en notificaciones push inmediatas
Funciones principales
CID es un parámetro opcional que se utiliza para identificar una solicitud de push específica. Cuando una solicitud se repite con el mismo CID:
- El sistema devuelve el
msg_iddel push anterior que se haya realizado correctamente - Evita que los mensajes se envíen repetidamente a los usuarios
- Proporciona garantías de idempotencia (la misma operación tiene el mismo efecto cuando se ejecuta varias veces)
Características clave
| Funcionalidad | Descripción |
|---|---|
| Periodo de validez | 1 hora |
| Requisitos de formato | Caracteres alfanuméricos, guiones bajos, guiones; longitud ≤ 64 caracteres |
| Unicidad | Debe ser único para la misma appkey |
| Escenarios compatibles | Envíos individuales y envíos por lotes |
Casos de uso
- Reintentos de red: Reintentar los envíos con el mismo CID cuando la red sea inestable
- Garantía de idempotencia: Garantizar que el mismo mensaje no se envíe repetidamente
- Seguimiento de solicitudes: Realizar el seguimiento del estado de envíos específicos mediante el CID
Ejemplos de solicitud
Envío individual con CID
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/push \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"options": {
"cid": "order-notify-20230701-001",
"time_to_live": 60
}
}'
Envío por lotes con CID
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/push/batch/regid \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"requests": [
{
"options": {
"cid": "user-12345-notification",
"time_to_live": 60
}
}
]
}'
Gestión de respuestas
Primer envío correcto
{
"msg_id": "2460001"
}
Envío repetido con el mismo CID
{
"msg_id": "2460001" // Returns the msg_id from the first push
}
Formato de CID no válido
{
"error": {
"code": 23003,
"message": "CID format does not meet requirements"
}
}
Descripción del código de error
| Código de error | Descripción | Resolución | Código de estado HTTP |
|---|---|---|---|
| 21003 | Formato de CID no válido o excede el límite de longitud | Verificar el cumplimiento del formato de CID; asegurarse de que la longitud del CID no supere los 64 caracteres | 400 |
Mejores prácticas
- Usar CID en procesos críticos del negocio: Aplicar CID a mensajes como notificaciones de pago y alertas importantes
- Generar identificadores significativos: Usar formatos como
business-entity-timestamp(p. ej.,payment-12345-202307011030) - Mecanismo de reintento de red: Reintentar con el mismo CID cuando se encuentren errores de red
- Distinguir identificadores en envíos por lotes: Usar CIDs únicos para cada solicitud en los envíos por lotes para facilitar el seguimiento
- Registro de CID en el cliente: Registrar los CID en el lado del cliente para la deduplicación de mensajes y las consultas de estado
Funcionalidad CID en tareas programadas
Funciones principales
CID también se aplica a la creación de tareas programadas, evitando la creación duplicada de las mismas tareas programadas:
- Reutilizar el mismo CID devuelve el
schedule_idcreado previamente - Evita que el sistema cree tareas programadas duplicadas
Características clave
| Funcionalidad | Descripción |
|---|---|
| Periodo de validez | 1 hora |
| Requisitos de formato | Caracteres alfanuméricos, guiones bajos, guiones; longitud ≤ 64 caracteres |
| Unicidad | Debe ser único para la misma appkey |
Ejemplo de solicitud
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/schedules \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"cid": "daily-reminder-202307",
"trigger": {
"daily": {
"start": "2023-07-01",
"time": "09:00:00"
}
}
}'
Gestión de respuestas
Primera creación correcta
{
"schedule_id": "0123456789"
}
Creación repetida con el mismo CID
{
"schedule_id": "0123456789" // Returns the schedule_id from the first creation
}
Mejores prácticas
- Identificación de tareas periódicas: Incluir información del ciclo en el CID (p. ej.,
weekly-report-2023w27) - Resumen de parámetros de la tarea: Incluir un hash de parámetros críticos (p. ej.,
birthday-reminder-md5(params)) - Coordinación en sistemas distribuidos: Usar el mismo CID en múltiples instancias de servicio para evitar creaciones duplicadas
- Mecanismo de actualización de tareas: Usar un CID nuevo al modificar tareas
Flujo de procesamiento de EngageLab
graph TD
A[Receive Request] --> B{Contains CID?}
B -->|Yes| C[Query Redis]
B -->|No| D[Normal Processing]
C --> E{CID Exists?}
E -->|Yes| F[Return Stored msg_id/schedule_id]
E -->|No| G[Process Request]
G --> H[Store CID → ID Mapping]
H --> I[Return New ID]Preguntas frecuentes
P: ¿Por qué el periodo de validez del CID es de 1 hora?
R: Es suficiente para cubrir escenarios típicos de reintento y, al mismo tiempo, evita el crecimiento ilimitado del almacenamiento. En procesos críticos, se puede ampliar el periodo de deduplicación mediante registros propios.
P: ¿Se puede usar el mismo CID con diferentes appkeys?
R: Sí. Los CID solo deben ser únicos para la misma appkey.
P: ¿CID garantiza unicidad global?
R: No. Solo debe ser único para la misma appkey; el sistema no requiere unicidad global.
P: ¿Cómo validar el formato de CID?
R: Usar la expresión regular: /^[a-zA-Z0-9_-]{1,64}$/
Resumen
Mediante el uso adecuado del parámetro CID, se puede:
- ✅ Evitar mensajes duplicados causados por reintentos de red
- ✅ Garantizar idempotencia para mensajes críticos del negocio
- ✅ Simplificar el seguimiento de mensajes en sistemas distribuidos
- ✅ Mejorar la fiabilidad general del sistema
Recomendaciones clave de implementación:
- Añadir CID a mensajes críticos del negocio
- Adoptar la convención de nomenclatura
business-entity-time - Implementar lógica de deduplicación basada en CID en el lado del cliente
- Supervisar los códigos de error relacionados con CID
Con las directrices de este artículo, se puede aprovechar eficazmente la funcionalidad CID para crear un sistema de notificaciones push más robusto y resolver por completo el problema de las notificaciones push duplicadas.
