Entrega, reintentos y estados

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

ComportamientoDetalle
Una petición por mensajeEl array results contiene siempre un único elemento. Si envías a 100 destinatarios, tu endpoint recibirá 100 peticiones independientes.
Un solo aviso por mensajeAunque 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 avisoSe emite una vez que el operador nos recibe o nos rechaza la solicitud de envío.
MétodoPOST, salvo que se haya configurado otro en la modalidad de webhook de cuenta.
Tipo de contenidoapplication/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 endpointQué hace Inalambria
2xxLa notificación se da por entregada.
503 Service UnavailableReintenta 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.
⚠️

503 es el único código que provoca un reintento. Si tu servicio está saturado o en mantenimiento, responde 503 para que la notificación se vuelva a intentar. Si respondes 500, la notificación se pierde.

Recomendaciones para tu endpoint

  • Responde rápido. Acusa recibo con 2xx y procesa después; no bloquees la respuesta esperando a tu propia lógica de negocio.
  • Sé idempotente. Usa la combinación de transactionNumber y to para descartar duplicados.
  • No asumas orden. Las notificaciones de una misma transacción pueden llegar desordenadas.

El objeto status

Indica 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"
}
CampoMensaje exitosoMensaje no exitoso
groupId30
groupNameDELIVEREDOk
id10
nameDELIVERED_TO_HANDSETNO_SUCCESS
descriptionMessage delivered to handsetNo success
💡

La forma más simple y fiable de saber si un mensaje fue exitoso es comprobar status.id == 1.

El objeto error

Acompañ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
}
CampoTipoDescripción
groupIdNúmero0 si el mensaje fue exitoso, 3 si hubo error.
groupNameTextoOk si el mensaje fue exitoso, ERROR si hubo error.
idNúmeroCódigo del estado que causó el fallo. Consulta la tabla siguiente. 0 si el mensaje fue exitoso.
nameTextoNombre del estado. NO_ERROR si el mensaje fue exitoso.
descriptionTextoCoincide con name.
permanentBooleanoReservado. 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ódigoNombreSignificado
1ValidMensaje válido, aún sin resultado final
3SuccessMensaje entregado. No aparece en error.id
4CanceledEnvío cancelado
5 ★BlackListedNúmero en lista negra
6CancelScheduledEnvío programado cancelado
7PossibleFraudBloqueado por sospecha de fraude
12 ★NumberExcluded_RneNúmero excluido por el Registro Nacional de Exclusión
14UnsubscribedUserUsuario dado de baja
15UserUnsubscribeRequestEl usuario solicitó darse de baja
16UserSubscriptionRequestEl usuario solicitó suscribirse
59ValidationInfoAccountNotFoundNo se encontró la información de validación de la cuenta
60EloquaRequestErrorError en la petición hacia Eloqua
70FailedAttemptIntento de envío fallido
71AccountHasDisableMoMessagesLa cuenta tiene deshabilitados los mensajes entrantes
72MoConfigurationNotFoundNo existe configuración de mensajes entrantes
73InactiveMoCodeCódigo de entrada inactivo
74ExpiredMoConfigurationConfiguración de mensajes entrantes vencida
75MoConfigurationAnswerNotFoundNo se encontró la respuesta configurada
76MoKeywordAnswerNotFoundNo se encontró respuesta para la palabra clave
77PortabilityManagerFailedFalló la consulta de portabilidad
78PortabilityRetriesFailedSe agotaron los reintentos de portabilidad
82AccountWithoutSMSLa cuenta no tiene servicio de SMS
83InactiveResponsibleResponsable inactivo
84InactiveAccountCuenta inactiva
85InactiveClientCliente inactivo
86InactiveSuscriptionSuscripción inactiva
87WithoutSendMethodLa cuenta no tiene método de envío configurado
89ExpiredAccountCuenta vencida
90URLSendingDisabledEnvío de URL no permitido para la cuenta
91 ★UndefinedOperatorNo se pudo determinar el operador del destinatario
92 ★DispatchErrorError al despachar el mensaje al operador
93RepeatedMessageMensaje repetido
94InvalidMessageMensaje inválido
95ErrorURLShortenerError al acortar la URL
96InvalidIpDirección IP no autorizada
97OverflowedSe superó el límite permitido
98WhatsappOverflowMessageSe superó el límite de mensajes de WhatsApp
99 ★GeneralErrorError general
1400ErrorInTheSentDataError en los datos enviados
1401UnauthorizedNo autorizado
1404ResourceNotFoundRecurso no encontrado
1405AccessDeniedAcceso denegado
1415ShippingStructureIsNotSupportedEstructura de envío no soportada
1500ServerErrorError del servidor
1502InvalidGatewayPasarela inválida
1503ServiceNotAvailableServicio no disponible
1504ServerTimedOutTiempo de espera agotado
1989WhiteListBloqueado por lista blanca
1990BlackListHttpBloqueado por lista negra
1991AccountDisabledForHTTPCuenta deshabilitada para envíos HTTP
1992InvalidParamsParámetros inválidos
1993 ★NumberDestinationOffNúmero de destino inválido o fuera de servicio
1994MissingParametersFaltan parámetros obligatorios
1995 ★AcccountInsuficientCreditsCréditos insuficientes en la cuenta
1996 ★TpsErrorSe superó el límite de mensajes por segundo
1997ConfigurationConnectionErrorError de configuración de la conexión
1998NoResponseFromServerSin respuesta del servidor
1999UnclassifiedAnswerRespuesta del operador sin clasificar
📌

El nombre AcccountInsuficientCredits está escrito así en la plataforma, con tres letras c. Se documenta tal cual para que puedas compararlo literalmente en tu código.