Entrega, reintentos y estados
Esta página describe el comportamiento común a las dos modalidades: cómo se entregan las notificaciones, qué debe responder tu endpoint receptor y cómo interpretar los objetos status y error.
Cómo se entregan las notificaciones
| Comportamiento | Detalle |
|---|---|
| Una petición por mensaje | El array results contiene siempre un único elemento. Si envías a 100 destinatarios, tu endpoint recibirá 100 peticiones independientes. |
| Un solo aviso por mensaje | Aunque un texto largo se divida en varios segmentos, solo se notifica una vez. El campo smsCount indica en cuántos segmentos se dividió. |
| Momento del aviso | Se emite una vez que el operador nos recibe o nos rechaza la solicitud de envío. |
| Método | POST, salvo que se haya configurado otro en la modalidad de webhook de cuenta. |
| Tipo de contenido | application/json, salvo que se indique otro. |
Qué debe responder tu endpoint receptor
Tu endpoint debe responder con un código HTTP de la familia 2xx. El cuerpo de la respuesta no se interpreta, pero sí se registra.
| Respuesta de tu endpoint | Qué hace Inalambria |
|---|---|
2xx | La notificación se da por entregada. |
503 Service Unavailable | Reintenta hasta 5 veces, esperando 10, 20, 30, 40 y 50 segundos entre intentos. |
Cualquier otro código (4xx, resto de 5xx) | Se registra como fallo. No se reintenta. |
| Sin respuesta (URL inexistente, tiempo agotado, error de red) | Se registra con código 0. No se reintenta. |
503es el único código que provoca un reintento. Si tu servicio está saturado o en mantenimiento, responde503para que la notificación se vuelva a intentar. Si respondes500, la notificación se pierde.
Recomendaciones para tu endpoint
- Responde rápido. Acusa recibo con
2xxy procesa después; no bloquees la respuesta esperando a tu propia lógica de negocio. - Sé idempotente. Usa la combinación de
transactionNumberytopara descartar duplicados. - No asumas orden. Las notificaciones de una misma transacción pueden llegar desordenadas.
El objeto status
statusIndica el resultado del mensaje. Solo tiene dos formas posibles.
Mensaje exitoso:
"status": {
"groupId": 3,
"groupName": "DELIVERED",
"id": 1,
"name": "DELIVERED_TO_HANDSET",
"description": "Message delivered to handset"
}Mensaje no exitoso:
"status": {
"groupId": 0,
"groupName": "Ok",
"id": 0,
"name": "NO_SUCCESS",
"description": "No success"
}| Campo | Mensaje exitoso | Mensaje no exitoso |
|---|---|---|
groupId | 3 | 0 |
groupName | DELIVERED | Ok |
id | 1 | 0 |
name | DELIVERED_TO_HANDSET | NO_SUCCESS |
description | Message delivered to handset | No success |
El objeto error
errorAcompaña siempre a status. Cuando el mensaje fue exitoso, viene relleno con valores neutros.
Mensaje exitoso:
"error": {
"groupId": 0,
"groupName": "Ok",
"id": 0,
"name": "NO_ERROR",
"description": "No Error",
"permanent": false
}Mensaje no exitoso:
"error": {
"groupId": 3,
"groupName": "ERROR",
"id": 1993,
"name": "NumberDestinationOff",
"description": "NumberDestinationOff",
"permanent": false
}| Campo | Tipo | Descripción |
|---|---|---|
groupId | Número | 0 si el mensaje fue exitoso, 3 si hubo error. |
groupName | Texto | Ok si el mensaje fue exitoso, ERROR si hubo error. |
id | Número | Código del estado que causó el fallo. Consulta la tabla siguiente. 0 si el mensaje fue exitoso. |
name | Texto | Nombre del estado. NO_ERROR si el mensaje fue exitoso. |
description | Texto | Coincide con name. |
permanent | Booleano | Reservado. Actualmente llega siempre como false. |
Catálogo de estados
Los campos error.id y error.name corresponden a este catálogo. Es el catálogo general de la plataforma, por lo que no todos los valores pueden aparecer en una notificación de SMS saliente; los más frecuentes están marcados con ★.
| Código | Nombre | Significado |
|---|---|---|
| 1 | Valid | Mensaje válido, aún sin resultado final |
| 3 | Success | Mensaje entregado. No aparece en error.id |
| 4 | Canceled | Envío cancelado |
| 5 ★ | BlackListed | Número en lista negra |
| 6 | CancelScheduled | Envío programado cancelado |
| 7 | PossibleFraud | Bloqueado por sospecha de fraude |
| 12 ★ | NumberExcluded_Rne | Número excluido por el Registro Nacional de Exclusión |
| 14 | UnsubscribedUser | Usuario dado de baja |
| 15 | UserUnsubscribeRequest | El usuario solicitó darse de baja |
| 16 | UserSubscriptionRequest | El usuario solicitó suscribirse |
| 59 | ValidationInfoAccountNotFound | No se encontró la información de validación de la cuenta |
| 60 | EloquaRequestError | Error en la petición hacia Eloqua |
| 70 | FailedAttempt | Intento de envío fallido |
| 71 | AccountHasDisableMoMessages | La cuenta tiene deshabilitados los mensajes entrantes |
| 72 | MoConfigurationNotFound | No existe configuración de mensajes entrantes |
| 73 | InactiveMoCode | Código de entrada inactivo |
| 74 | ExpiredMoConfiguration | Configuración de mensajes entrantes vencida |
| 75 | MoConfigurationAnswerNotFound | No se encontró la respuesta configurada |
| 76 | MoKeywordAnswerNotFound | No se encontró respuesta para la palabra clave |
| 77 | PortabilityManagerFailed | Falló la consulta de portabilidad |
| 78 | PortabilityRetriesFailed | Se agotaron los reintentos de portabilidad |
| 82 | AccountWithoutSMS | La cuenta no tiene servicio de SMS |
| 83 | InactiveResponsible | Responsable inactivo |
| 84 | InactiveAccount | Cuenta inactiva |
| 85 | InactiveClient | Cliente inactivo |
| 86 | InactiveSuscription | Suscripción inactiva |
| 87 | WithoutSendMethod | La cuenta no tiene método de envío configurado |
| 89 | ExpiredAccount | Cuenta vencida |
| 90 | URLSendingDisabled | Envío de URL no permitido para la cuenta |
| 91 ★ | UndefinedOperator | No se pudo determinar el operador del destinatario |
| 92 ★ | DispatchError | Error al despachar el mensaje al operador |
| 93 | RepeatedMessage | Mensaje repetido |
| 94 | InvalidMessage | Mensaje inválido |
| 95 | ErrorURLShortener | Error al acortar la URL |
| 96 | InvalidIp | Dirección IP no autorizada |
| 97 | Overflowed | Se superó el límite permitido |
| 98 | WhatsappOverflowMessage | Se superó el límite de mensajes de WhatsApp |
| 99 ★ | GeneralError | Error general |
| 1400 | ErrorInTheSentData | Error en los datos enviados |
| 1401 | Unauthorized | No autorizado |
| 1404 | ResourceNotFound | Recurso no encontrado |
| 1405 | AccessDenied | Acceso denegado |
| 1415 | ShippingStructureIsNotSupported | Estructura de envío no soportada |
| 1500 | ServerError | Error del servidor |
| 1502 | InvalidGateway | Pasarela inválida |
| 1503 | ServiceNotAvailable | Servicio no disponible |
| 1504 | ServerTimedOut | Tiempo de espera agotado |
| 1989 | WhiteList | Bloqueado por lista blanca |
| 1990 | BlackListHttp | Bloqueado por lista negra |
| 1991 | AccountDisabledForHTTP | Cuenta deshabilitada para envíos HTTP |
| 1992 | InvalidParams | Parámetros inválidos |
| 1993 ★ | NumberDestinationOff | Número de destino inválido o fuera de servicio |
| 1994 | MissingParameters | Faltan parámetros obligatorios |
| 1995 ★ | AcccountInsuficientCredits | Créditos insuficientes en la cuenta |
| 1996 ★ | TpsError | Se superó el límite de mensajes por segundo |
| 1997 | ConfigurationConnectionError | Error de configuración de la conexión |
| 1998 | NoResponseFromServer | Sin respuesta del servidor |
| 1999 | UnclassifiedAnswer | Respuesta del operador sin clasificar |
