Instalación y configuración
Instale el paquete con composer require envoisms/laravel-otp y añada su clave API y su remitente por defecto en .env. La configuración también puede vivir en config/services.php, bajo la clave envoisms.
- ENVOISMS_API_KEY=su_clave_api
- ENVOISMS_FROM=MiNegocio (su Sender ID validado)
- config/services.php: 'envoisms' => ['api_key' => env('ENVOISMS_API_KEY'), 'from' => env('ENVOISMS_FROM', 'EnvoiSMS')]
Un canal de notificación de Laravel
Su notificación devuelve EnvoiSMSChannel::class en via() y construye un EnvoiSMSMessage en toEnvoiSMS(). Para un código de un solo uso: ->asOtp(brand: 'MiApp', codeLength: 6, expiry: 600). El destinatario es cualquier modelo con un atributo phone o un método routeNotificationForEnvoiSMS(); el envío sigue siendo un simple $user->notify(new SendOtpNotification()).
- use EnvoiSMS\Laravel\EnvoiSMSChannel;
- use EnvoiSMS\Laravel\Messages\EnvoiSMSMessage;
- Cada envío lleva un Idempotency-Key (del SDK de PHP): una notificación en cola que se reintenta nunca factura dos veces
Notificaciones de texto: pedidos, recordatorios, alertas
Para un estado de pedido o un recordatorio: ->content("Hola …, su pedido #… ha sido enviado.")->from('MiNegocio'). El canal por defecto es SMS, la opción correcta para cualquier texto ordinario, incluso a un cliente que usa WhatsApp. ->channel('whatsapp') envía desde su propio número de WhatsApp Business conectado: sin él la API responde 403 WHATSAPP_NOT_CONNECTED, y un texto libre fuera de la ventana de 24 horas responde 400 OUT_OF_24H_WINDOW. No se cobra nada en ninguno de los dos casos.
- ->from() acepta un Sender ID validado; omítalo para el remitente por defecto de la cuenta
- Un código OTP por WhatsApp: ->asOtp(...)->channel('whatsapp'), por el remitente compartido de EnvoiSMS, sin conexión
La fachada: enviar y verificar un OTP
Sin pasar por una notificación, la fachada EnvoiSMS envía el código y lo verifica. EnvoiSMS::sendOtp(['to' => '+212600000000', 'brand' => 'MiApp']) devuelve un session_id; EnvoiSMS::checkOtp(sessionId: $response['session_id'], code: '123456') devuelve verified en true cuando el código es correcto. El código se genera, se envía y caduca del lado de EnvoiSMS: su aplicación nunca lo almacena.
- use EnvoiSMS\Laravel\Facades\EnvoiSMS;
- Endpoints subyacentes: POST /v1/verify/send y POST /v1/verify/check
- Licencia MIT, código fuente en github.com/envoisms/laravel-otp