Códigos OTP por SMS en CI y automatización de QA con iPhone
Por Fwrd · · Actualizado
Para llevar los códigos de un solo uso que llegan por SMS a CI o a la automatización de QA, pon la SIM que recibe los códigos en un iPhone del equipo y deja que una automatización Mensaje de Atajos le pase cada SMS con código a Fwrd, que lo publica en tu propio webhook HTTPS como JSON. Después, tu job de CI lee el código más reciente de ese endpoint y lo escribe en la pantalla de inicio de sesión.
Lo que necesitas: un iPhone con iOS 26 o posterior y la SIM del número que recibe los códigos, la app Atajos (ya viene en el teléfono), Fwrd y una dirección HTTPS pública que tu CI pueda leer, como una ruta de staging o un flujo de n8n. Fwrd rechaza las direcciones IP y los nombres .local o .internal, y no envía ningún encabezado de inicio de sesión, así que pon un secreto largo en la dirección.
¿Por qué cuesta automatizar los códigos SMS?
Los códigos SMS frenan la CI porque llegan a un teléfono, no a tu runner, hasta que algo lleva cada SMS a un lugar que tu pipeline pueda leer.
La mayoría de los equipos que escriben estas verificaciones automáticas solo tienen su propio teléfono para recibir el código. Un iPhone del equipo con Fwrd convierte ese teléfono en algo que tu pipeline puede leer.
¿Cuándo encaja un iPhone del equipo?
Encaja cuando el código tiene que llegar a un número de operador concreto: un servicio de terceros en el que inicias sesión, una cuenta de staging que ya está vinculada al teléfono de la empresa o un flujo que trata los números de forma distinta según su tipo. La documentación de Lookup de Twilio (consultada el 17 de octubre de 2026) muestra que las apps pueden distinguir un número celular de un número VoIP no fijo, que describe como un número virtual obtenido en línea. Una SIM en un iPhone del equipo es un número de operador real, así que el código llega como le llegaría a un cliente.
La contrapartida es que un teléfono equivale a un número, y debe seguir encendido y con internet. Las secciones de abajo cubren las dos cosas.
Cómo enviar los códigos SMS de un iPhone a tu CI
Agrega en Fwrd un destino Webhook que se quede solo con los códigos y, después, una automatización Mensaje que le pase cada SMS con código a Fwrd. La guía del webhook explica a fondo el lado del endpoint.
Agrega un webhook en Fwrd. Abre Fwrd, toca + y elige Webhook. Pega la dirección HTTPS completa de tu endpoint en el campo Configuration (Configuración), toca Send Test Message (Enviar mensaje de prueba) para que tu endpoint vea los campos y guarda con la marca de selección.
Quédate solo con los códigos. En el mismo destino, elige Only Some Texts (Solo algunos SMS) en Which Texts (Qué SMS) y activa Looks Like a Code (Parece un código), que conserva los SMS con un código de 4 a 8 dígitos. Es una sola condición, así que funciona con el plan gratis.
Crea una automatización Mensaje. En iOS 27, abre Atajos, toca Biblioteca, luego Automatización y después +. Si ves Describir un atajo, toca Editar. Toca Automatización y luego Mensaje, cambia Remitente por Mensaje y escribe código, o la palabra que usen los SMS de tu servicio. En iOS 26, abre la pestaña Automatización, toca +, elige Mensaje y escríbela en El mensaje contiene.
Haz que se ejecute sin preguntar. En iOS 27, toca la flecha junto al activador y revisa que Confirmar antes de ejecutar esté desactivado. En ⓘ, luego Privacidad, revisa que Permitir ejecución en dispositivo bloqueado esté activado. En iOS 26, elige Ejecutar de inmediato y luego toca Siguiente y Crear nuevo atajo.
Agrega la acción de Fwrd. Busca Forward y agrega Forward Message to All Destinations (Reenviar mensaje a todos los destinos). Pon su Message (Mensaje) en Entrada de atajo (en iOS 26, Entrada de atajo y luego Mensaje). Toca atrás para guardar (Listo en iOS 26).
Lee el código en CI. Haz que tu endpoint guarde cada cuerpo con la hora en que llegó. Cuando tu ejecución pida un código, consulta el SMS más reciente recibido desde entonces y extrae los dígitos con una expresión regular.
Eso es todo. Los SMS nuevos con código ya llegan solos a tu endpoint, con el iPhone desbloqueado o bloqueado.
¿Qué recibe el endpoint?
Un POST con un cuerpo JSON que lleva el SMS tal como llegó, en content y en text. No incluye la hora, así que regístrala de tu lado.
{
"content": "Tu código de verificación es 482913",
"text": "Tu código de verificación es 482913"
}
Todos los intentos de un mismo SMS llevan el mismo encabezado Idempotency-Key, así que puedes descartar los repetidos. Si un envío agota el tiempo de espera, recibe un 429 o un 5xx, o pierde la conexión, Fwrd vuelve a intentarlo hasta 2 veces. Cualquier respuesta 2xx en un máximo de 15 segundos cuenta como entregada, y las redirecciones se rechazan. Si activas Include Who Sent It (Incluir quién lo envió) en la Configuración de Fwrd y eliges Sender (Remitente) en la acción de Fwrd, el cuerpo también incluye un campo sender, útil cuando varios servicios envían SMS al mismo número.
Lo que esta configuración no puede hacer
- Un número atiende una ejecución a la vez. Los jobs en paralelo que piden códigos al mismo número pueden leer el código de otro, así que pon en cola el paso de inicio de sesión o relaciona cada código con la ejecución que lo pidió.
- El plan gratis cubre 15 códigos al mes. Después, los códigos se detienen hasta el mes siguiente, y los pipelines con mucho movimiento llegan rápido a ese límite; Fwrd Pro lo quita por $4.99 al mes o $29.99 al año en Estados Unidos (precios en dólares estadounidenses, USD). La App Store muestra el precio en tu propia moneda.
- Solo recibe. Fwrd no puede enviar un SMS desde el iPhone por tu CI.
- El teléfono sigue encendido y con conexión. Después de un reinicio, el reenvío espera hasta que alguien lo desbloquee una vez, y un iPhone que no se desbloquea durante 3 días se reinicia solo. Mantenlo cargado donde alguien pueda alcanzarlo.
- La acción de Fwrd llega a todos los destinos activos. Si el mismo teléfono también reenvía a otros lugares, usa Forward Message to Destination (Reenviar mensaje a un destino) y elige el webhook.
- Solo los SMS nuevos. Los códigos que llegaron antes de crear la automatización no se envían.
Para las personas que necesitan los códigos, no los pipelines, compartir los códigos 2FA con tu equipo en Slack cubre esa configuración.
Preguntas sobre los códigos SMS en la automatización
¿Selenium o Playwright pueden leer un código SMS directamente?
No. La automatización del navegador no ve los mensajes de un teléfono. Algo tiene que sacar primero el SMS del teléfono, como una automatización de Atajos con Fwrd que lo publica en un webhook que tu script consulta.
¿Los códigos pasan por los servidores de Fwrd?
No. Fwrd no necesita cuenta ni tiene servidor propio; cada SMS va del iPhone directo a tu endpoint HTTPS, y la dirección se queda en el Llavero del iPhone.
¿Funciona con remitentes de números cortos?
Sí. La automatización se fija en lo que dice el SMS, no en quién lo envió, así que los códigos de números cortos que no están en tus Contactos coinciden igual con una palabra como código.
¿Puedo usar un flujo de n8n como endpoint?
Sí. Agrega un nodo Webhook configurado en POST, usa su Production URL y publica el flujo; si no, no responde. Envía los SMS del iPhone a Zapier, Make o n8n tiene los pasos.
¿Quieres los códigos SMS donde tu CI pueda leerlos?
Fwrd publica cada SMS que coincide desde un iPhone del equipo en tu propio webhook HTTPS como JSON, sin cuenta y sin ningún servidor de Fwrd de por medio. Empieza con 15 reenvíos gratis al mes.
Gratis hasta 15 reenvíos al mes. Pro elimina los límites de reenvíos y filtros y agrega una lista Never Forward (Nunca reenviar), por $4.99 USD al mes o $29.99 USD al año en Estados Unidos, con una prueba gratuita de 7 días en el plan anual para clientes elegibles. La App Store muestra el precio en tu propia moneda.
iPhone · iOS 26 o posterior