Installation et configuration
Installez le package avec composer require envoisms/laravel-otp, puis ajoutez votre clé API et votre expéditeur par défaut dans .env. La configuration peut aussi vivre dans config/services.php, sous la clé envoisms.
- ENVOISMS_API_KEY=votre_cle_api
- ENVOISMS_FROM=MonBusiness (votre Sender ID validé)
- config/services.php : 'envoisms' => ['api_key' => env('ENVOISMS_API_KEY'), 'from' => env('ENVOISMS_FROM', 'EnvoiSMS')]
Un canal de notification Laravel
Votre notification déclare EnvoiSMSChannel::class dans via() et construit un EnvoiSMSMessage dans toEnvoiSMS(). Pour un code à usage unique : ->asOtp(brand: 'MonApp', codeLength: 6, expiry: 600). Le destinataire est tout modèle qui a un attribut phone ou une méthode routeNotificationForEnvoiSMS() ; l'envoi reste un simple $user->notify(new SendOtpNotification()).
- use EnvoiSMS\Laravel\EnvoiSMSChannel;
- use EnvoiSMS\Laravel\Messages\EnvoiSMSMessage;
- Chaque envoi porte un Idempotency-Key (du SDK PHP) : une notification en file d'attente rejouée ne facture jamais deux fois
Notifications texte : commandes, rappels, alertes
Pour un statut de commande ou un rappel, ->content("Bonjour …, votre commande #… est expédiée.")->from('MonBusiness'). Le canal par défaut est le SMS, et c'est le bon choix pour tout texte ordinaire, même à un client qui utilise WhatsApp. ->channel('whatsapp') envoie depuis votre propre numéro WhatsApp Business connecté : sans numéro, l'API répond 403 WHATSAPP_NOT_CONNECTED ; un texte libre hors de la fenêtre de 24 heures répond 400 OUT_OF_24H_WINDOW. Rien n'est facturé dans les deux cas.
- ->from() accepte un Sender ID validé ; omettez-le pour l'expéditeur par défaut du compte
- Un code OTP sur WhatsApp : ->asOtp(...)->channel('whatsapp'), via l'expéditeur partagé d'EnvoiSMS, sans connexion
La façade : envoyer puis vérifier un OTP
Sans passer par une notification, la façade EnvoiSMS envoie le code et le vérifie. EnvoiSMS::sendOtp(['to' => '+212600000000', 'brand' => 'MonApp']) renvoie un session_id ; EnvoiSMS::checkOtp(sessionId: $response['session_id'], code: '123456') renvoie verified à true quand le code est bon. Le code est généré, envoyé et expiré côté EnvoiSMS : votre application ne le stocke jamais.
- use EnvoiSMS\Laravel\Facades\EnvoiSMS;
- Endpoints sous-jacents : POST /v1/verify/send et POST /v1/verify/check
- Licence MIT, code source sur github.com/envoisms/laravel-otp