Back to flin
flin

Autenticación OTP por WhatsApp para África

Cómo FLIN proporciona autenticación OTP por WhatsApp integrada -- el método de autenticación telefónica diseñado para mercados africanos donde WhatsApp es la plataforma principal de comunicación.

Thales & Claude | March 30, 2026 6 min flin
EN/ FR/ ES
flinrust

En Silicon Valley, el método de autenticación predeterminado es email y contraseña, opcionalmente mejorado con Google Sign-In. Esta suposición falla espectacularmente en África, donde más de 300 millones de personas usan WhatsApp diariamente pero muchas no tienen una dirección de email personal. Un estudiante en Abidjan, un comerciante en Lagos, un profesor en Nairobi -- se comunican a través de WhatsApp, pagan a través de dinero móvil y se identifican por número de teléfono.

Construir FLIN sin autenticación por WhatsApp sería como construir un framework web americano sin Google Sign-In. Técnicamente funcionaría, pero ignoraría cómo vive realmente la audiencia objetivo.

FLIN proporciona WhatsApp OTP como método de autenticación integrado. Tres funciones -- whatsapp_send_otp(), otp_generate() y el patrón de verificación estándar -- manejan todo el flujo. Sin SDK de Twilio. Sin servicio de autenticación de terceros. Sin sorpresas de facturación por mensaje.

El flujo de autenticación WhatsApp

WhatsApp OTP usa un flujo de 3 pasos para usuarios nuevos y un flujo de 2 pasos para usuarios que regresan:

Usuario nuevo:
1. Ingresar número de teléfono -> Enviar OTP por WhatsApp
2. Ingresar código OTP -> Verificar código
3. Completar perfil (nombre, email, avatar)
4. Crear cuenta -> Panel de control

Usuario que regresa:
1. Ingresar número de teléfono -> Enviar OTP por WhatsApp
2. Ingresar código OTP -> Verificar código -> Panel de control (saltar paso 3)

La idea clave es que el número de teléfono es la identidad. Si el teléfono ya está registrado, el usuario inicia sesión después de la verificación OTP. Si no, completa un formulario de perfil y se crea una cuenta.

Paso 1: Enviar OTP

flin// app/auth/send-whatsapp-otp.flin

layout = "auth"

waPhone = session.waPhone || ""
otpSent = false

fn processSendWhatsappOtp() {
    if waPhone != "" {
        code = otp_generate(6)
        result = whatsapp_send_otp(waPhone, code)

        if result.success {
            session.waOtpCode = code
            session.waOtpPhone = waPhone
            otpSent = true
        }
    }
}
processSendWhatsappOtp()

{if otpSent}
    <h2>Enter the code sent to your WhatsApp</h2>
    <p>We sent a 6-digit code to {waPhone}</p>

    <input class="otp-input" type="text" bind={codeInput}
        maxlength="6" autocomplete="one-time-code" inputmode="numeric">

    <button click={
        session.waOtpInput = codeInput;
        location.href = "/auth/verify-whatsapp-otp"
    }>
        Verify Code
    </button>
{else}
    <p>An error occurred. Please try again.</p>
    <a href="/login">Back to login</a>
{/if}

La función otp_generate(6) crea un código de 6 dígitos criptográficamente aleatorio. La función whatsapp_send_otp() lo envía a través de la API de WhatsApp Business.

Normalización de números de teléfono

Los números de teléfono africanos vienen en muchos formatos: +225 07 08 09 10, 00225 0708091010, 07 08 09 10, 225708091010. FLIN normaliza todos estos al formato E.164 (+2250708091010) antes de enviar:

rustfn normalize_phone(phone: &str) -> String {
    // Eliminar espacios, guiones, paréntesis
    let digits: String = phone.chars()
        .filter(|c| c.is_ascii_digit() || *c == '+')
        .collect();

    if digits.starts_with('+') {
        digits
    } else if digits.starts_with("00") {
        format!("+{}", &digits[2..])
    } else if digits.len() == 10 {
        // Asumir formato local -- necesita código de país de configuración
        let country_code = env::var("DEFAULT_PHONE_COUNTRY").unwrap_or("225".into());
        format!("+{}{}", country_code, digits)
    } else {
        format!("+{}", digits)
    }
}

Por qué WhatsApp OTP para África

La decisión de integrar WhatsApp OTP en FLIN fue impulsada por la realidad del mercado:

Penetración de WhatsApp. En Costa de Marfil, Nigeria, Kenia, Ghana, Sudáfrica y la mayor parte del África subsahariana, WhatsApp es la plataforma de mensajería predeterminada. La mayoría de las personas revisan WhatsApp antes de revisar su email.

Escasez de email. Muchos usuarios de Internet africanos, especialmente fuera de las grandes ciudades, no tienen una dirección de email personal. Requerir registro por email los excluye.

Identidad telefónica primero. El dinero móvil (MTN Mobile Money, Orange Money, Wave, M-Pesa) usa números de teléfono como identificadores. Los servicios gubernamentales aceptan cada vez más la verificación por teléfono. Un número de teléfono es la forma más universal de identidad digital en África.

Costos de SMS. Los OTP basados en SMS son caros en África (0.03-0.10 USD por mensaje) y poco confiables entre operadores. Los mensajes de WhatsApp cuestan una fracción de eso a través de la API de Business y se entregan confiablemente por conexiones de datos.

Confianza. Los usuarios confían en los mensajes de WhatsApp. Un código de verificación recibido en WhatsApp se siente legítimo. Un código recibido por SMS podría parecer spam.

Al hacer de WhatsApp OTP una función integrada, FLIN se posiciona como un framework que entiende su mercado principal. Un desarrollador en Abidjan construyendo una aplicación para usuarios de África occidental puede agregar autenticación por teléfono en minutos, no en días.

Consideraciones de seguridad

WhatsApp OTP tiene consideraciones de seguridad específicas:

Expiración del código. Los códigos OTP de FLIN son válidos por 10 minutos. Después de eso, los datos de sesión se invalidan y debe solicitarse un nuevo código.

Limitación de tasa. El endpoint de envío de OTP debe limitarse para prevenir abuso. El guard guard rate_limit(3, 300) (3 solicitudes por 5 minutos) se recomienda para endpoints OTP.

Longitud del código. El código de 6 dígitos proporciona 1 millón de combinaciones posibles. Combinado con limitación de tasa (5 intentos por sesión), la fuerza bruta es impracticable.

Higiene de sesión. Los datos OTP se eliminan de la sesión inmediatamente después del uso. El código, el número de teléfono y la entrada de verificación nunca se almacenan más tiempo del necesario.

El WhatsApp OTP de FLIN no es un wrapper alrededor de un servicio de autenticación de terceros. Es un método de autenticación de primera clase integrado en el lenguaje, con la misma gestión de sesiones, validación y garantías de seguridad que la autenticación por email/contraseña.

En el próximo artículo, cubrimos los validadores de cuerpo de solicitud -- cómo los bloques validate de FLIN aplican seguridad de tipos, restricciones y reglas de negocio sobre los datos entrantes antes de que se ejecute su código de handler.


Esta es la Parte 112 de la serie "Cómo construimos FLIN", que documenta cómo un CEO en Abidjan y un CTO de IA diseñaron y construyeron un lenguaje de programación desde cero.

Navegación de la serie: - [111] OAuth2 y autenticación social - [112] Autenticación OTP por WhatsApp para África (estás aquí) - [113] Validadores de cuerpo de solicitud - [114] 75 pruebas de seguridad: cómo verificamos todo

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles