Entorno de pruebas

Prueba tu integración con una clave test_ sin enviar un solo mensaje. Destinatarios fijos, un código fijo y la misma API que producción.

Qué es el entorno de pruebas

Una clave test_ habla con la misma API que una clave live_, pero nada sale de la plataforma: no se envía ningún WhatsApp, SMS ni correo, y nada se factura. En lugar de un número real usas los destinatarios de abajo, y el código es siempre el mismo.

Todo lo demás funciona como en producción: las respuestas, la cascada de canales, los intentos, el vencimiento, los límites, la Idempotency-Key y los webhooks.

Destinatarios de prueba

Con una clave test_ solo se aceptan estos destinatarios. Cualquier otro responde 400 con 20002 (sandbox_recipient_not_allowed). El mismo código rechaza estos destinatarios cuando la clave es live_.

TeléfonoCorreoQué pasa con cada envío
+12025550101[email protected]Se acepta en todos los canales. Unos segundos después el sandbox lo reporta como entregado.
+12025550102[email protected]Se rechaza en WhatsApp y correo. Se acepta en SMS y luego se reporta como entregado.
+12025550103[email protected]Falla en todos los canales.
+12025550104[email protected]Se acepta en todos los canales. Nunca se reporta nada: el envío queda sin confirmar hasta que la verificación expira.
+12025550105—Se acepta y se reporta como entregado. Su SIM cambió hoy: sirve para probar la protección contra SIM swap.
+12025550106[email protected]Se acepta en todos los canales y luego se reporta como fallo definitivo: la cascada pasa al siguiente paso de inmediato.
+12025550107[email protected]Se acepta en todos los canales y luego se reporta como fallo transitorio: la cascada espera el tiempo del canal antes de avanzar.

Para la verificación, «aceptado» y «rechazado» significan lo mismo que en producción:

  • Un envío aceptado espera el tiempo del canal y luego pasa al siguiente paso. A menos que un reporte de entrega diga otra cosa (más abajo), la verificación sigue pending hasta que tu usuario comprueba el código o vence.
  • Un envío rechazado pasa al siguiente paso al instante. Cuando todos los pasos se rechazan, la verificación termina en failed y el webhook verification.failed trae reason: "cascade_exhausted".

Dos ejemplos con channels: ["whatsapp", "sms"]:

DestinatarioQué pasa
+12025550102WhatsApp se rechaza al instante y el paso de SMS se acepta. Al aprobar, channel_used es sms.
+12025550103Los dos pasos fallan y la verificación termina en failed enseguida.

El código

El entorno de pruebas no sortea un código: es siempre el comienzo de una secuencia fija, cortada a la longitud del código.

Tipo de códigoSecuenciaCon 6 caracteres
numeric2345678923234567
alphanumericABCDEFGHJKABCDEF

Un código numérico de 4 dígitos es 2345; uno de 8, 23456789. Compruébalo como cualquier otro: el correcto responde approved y uno incorrecto gasta un intento. Una verificación live_ nunca recibe este valor ni lo acepta, así que un código aprendido en pruebas no sirve en producción.

Canales

Con una clave test_ los tres canales están disponibles sin configurar nada: ni plantilla ni remitente de WhatsApp, ni plantilla de correo. La cascada, la espera por canal y los campos channel y channel_used se comportan como en producción.

Lo que el entorno de pruebas no simula:

  • El mensaje. Nadie recibe nada: no hay texto que leer.

Cómo llegar a cada estado

Todos los estados que tu integración debe manejar se pueden alcanzar con los destinatarios de arriba y la misma API. Ninguno necesita un número especial fuera de la tabla.

Quieres verHaz esto
approvedCrea con +12025550101 y comprueba el código fijo.
Un código incorrectoComprueba cualquier otro código: la verificación sigue pending y gasta un intento.
max_attempts_reachedSigue comprobando códigos incorrectos hasta agotar los intentos.
expiredCrea con "expires_in": 60 y espera un minuto sin comprobar.
Salto al siguiente canalCrea con +12025550102 y channels: ["whatsapp", "sms"].
failed (cascade_exhausted)Crea con +12025550103.
Aceptado pero nunca confirmadoCrea con +12025550104 y no compruebes: nunca llega un reporte y queda pending hasta que expira.
verification.channel.deliveredCrea con +12025550101: el webhook llega unos tres segundos después del envío.
Un fallo de entrega tras la aceptaciónCrea con +12025550106 (verification.channel.failed, la cascada avanza ya) o +12025550107 (el mismo evento, la cascada espera).
Rechazo por SIM swapCrea con +12025550105 con una aplicación que bloquea cambios recientes.
Destinatario no permitidoUsa cualquier otro destinatario: 400 con 20002.

Separado de producción

El entorno de pruebas y producción son dos mundos separados bajo la misma cuenta.

En el entorno de pruebas
VerificacionesUna creada con clave test_ solo se puede comprobar con una clave test_ de la misma aplicación. Con cualquier otra clave responde 404 con 30001, como si no existiera.
LímitesAplican los mismos límites por destinatario y por aplicación, con contadores propios: el tráfico de pruebas nunca consume tu cupo de producción.
Idempotency-KeyLas claves son por entorno: una clave usada en pruebas queda libre en producción.
WebhooksUn endpoint pertenece a un solo entorno. Los eventos de pruebas solo llegan a endpoints registrados para test, y cada evento dice cuál es en data.environment.
FacturaciónNada se factura. Una verificación approved de pruebas nunca produce un evento facturable.

Pruébalo desde la consola

La consola tiene una pantalla Sandbox que ejecuta estas llamadas contra la API real, para que explores cada parámetro sin escribir código.

  • Pega una clave. Pega una clave test_ cada vez: la consola nunca la guarda y solo muestra sus últimos cuatro caracteres. Una clave live_ también sirve, con un aviso de costo y una confirmación en cada envío.
  • Elige un escenario. Cada destinatario reservado de arriba es una tarjeta que rellena la petición; el formulario de parámetros y el JSON se mantienen sincronizados, y una lista de disparadores de error provoca a propósito los errores documentados.
  • Síguela. Tras una llamada, la pantalla sigue la verificación: intentos restantes, tiempo que queda, canal actual, las entregas de webhook (con reenvío para administradores) y si es facturable. Cada intercambio se ve como petición y respuesta crudas o como vista legible, con sus equivalentes en cURL y Node.js.

Pueden usarla administradores y desarrolladores. La pantalla lee a un ritmo limitado y se frena sola cuando llega al límite.

Una prueba completa

# 1. Crear: no se envía nada.
curl https://verify-api.inalambria.com/v1/verifications \
  -H "Authorization: Bearer $VERIFY_TEST_API_KEY" \
  -H "Idempotency-Key: sandbox-run-1" \
  --json '{ "to": "+12025550101", "channels": ["whatsapp", "sms"] }'

# 2. Comprobar el código fijo con el id de la respuesta.
curl https://verify-api.inalambria.com/v1/verifications/ver_01J9XQ4M7K2VBN3P/check \
  -H "Authorization: Bearer $VERIFY_TEST_API_KEY" \
  --json '{ "code": "234567" }'

La segunda llamada responde 200 con status: "approved". Repite la primera con +12025550103 para ver una verificación failed y su webhook.


Did this page help you?