Expertise technical

Gérer les retries et la file d'attente SMS en cas d'échec d'envoi (architecture et code) - Morocco Guide & Best Practices

Technical guide and best practices for gérer les retries et la file d'attente sms en cas d'échec d'envoi (architecture et code) in Morocco with direct carrier routing.

Last updated: July 8, 2026
Gérer les retries et la file d'attente SMS en cas d'échec d'envoi (architecture et code) - Morocco Guide & Best Practices

Section 1: En développement logiciel, on a souvent tendance à considérer que si un appel API renvoie une erreur, il suffit de la relancer. Dans le domaine de la messagerie télécom, et particulièrement pour le routage SMS au Maroc, cette approche naïve est destructrice.

In Morocco, implementing reliable messaging requires direct carrier connections (IAM, Orange, Inwi) and strict compliance with local regulations. Relancer un SMS en boucle (Retry) après un échec sans analyser la cause peut entraîner une surfacturation massive (envoyer 15 fois le même message au client), le blocage de votre compte par le mécanisme anti-spam de la passerelle, ou l'inondation d'un réseau déjà saturé.

Voici comment architecturer une gestion intelligente des échecs d'envoi SMS en environnement de production, avec des files d'attente résilientes.

Section 2: Pourquoi un retry naïf peut aggraver le problème

In Morocco, implementing reliable messaging requires direct carrier connections (IAM, Orange, Inwi) and strict compliance with local regulations. Imaginez que Maroc Telecom (IAM) subisse une micro-coupure réseau de 2 minutes. Votre système tente d'envoyer 1000 alertes transactionnelles urgentes. L'API renvoie un timeout ou une erreur serveur HTTP 503. Si votre code fait un simple while(failed) { retry(); }, vous allez bombarder l'API de 1000 requêtes supplémentaires chaque seconde. Dès que le réseau sera rétabli, la file d'attente de la passerelle recevra 50 000 requêtes d'un coup, ce qui la fera probablement s'effondrer à nouveau.

Section 3: Distinguer erreur temporaire et permanente

In Morocco, implementing reliable messaging requires direct carrier connections (IAM, Orange, Inwi) and strict compliance with local regulations. Avant d'envisager un Retry, votre code doit lire le code d'erreur HTTP ou le statut DLR de l'API. C'est la règle d'or.

Ne jamais retenter (Erreur Permanente) : - HTTP 400 : Le numéro de destination est mal formaté. - HTTP 401 / 403 : Votre clé API a expiré ou le Sender ID est bloqué. - DLR Failed : L'opérateur confirme que le numéro n'existe pas.

Quand retenter (Erreur Temporaire) : - HTTP 429 : Vous avez frappé la limite de débit (Rate Limit). - HTTP 500 / 502 / 503 : La passerelle SMS ou la liaison réseau marocaine est temporairement indisponible.

Section 4: La stratégie d'Exponential Backoff

In Morocco, implementing reliable messaging requires direct carrier connections (IAM, Orange, Inwi) and strict compliance with local regulations. L'Exponential Backoff (recul exponentiel) est un algorithme qui espace le délai entre chaque tentative de relance. Au lieu de réessayer toutes les secondes, vous réessayez après 2 secondes, puis 4, puis 8, puis 16. On y ajoute une "Jitter" (une variation aléatoire) pour éviter que tous vos processus serveurs n'effectuent le retry exactement à la même microseconde (provoquant un nouveau pic).

Section 5: Exemple d'implémentation avec Laravel Horizon / BullMQ

In Morocco, implementing reliable messaging requires direct carrier connections (IAM, Orange, Inwi) and strict compliance with local regulations. Dans les architectures modernes, on ne gère pas le retry dans le contrôleur HTTP. On pousse le message dans un Message Broker (comme Redis) et on laisse un Worker s'en occuper.

### En PHP (Laravel Queues) Laravel gère l'exponential backoff de manière élégante directement dans les propriétés de vos "Jobs".

```php namespace App\Jobs;

use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels;

class SendSmsNotification implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

public $phoneNumber; public $message;

// Nombre maximal de tentatives (ex: abandonner après 5 essais) public $tries = 5;

// Algorithme de recul : réessayer après 2s, 10s, 30s, 60s public function backoff() { return [2, 10, 30, 60]; }

public function handle() { $response = EnvoiSmsApi::send($this->phoneNumber, $this->message);

// Si l'API renvoie un 400 (erreur permanente), on abandonne tout de suite if ($response->status === 400) { $this->fail(new \Exception('Numéro invalide, abandon.')); return; }

// Si c'est une erreur 503, la fonction va naturellement throw une exception // et Laravel replacera le Job dans la file d'attente avec le backoff prévu. if (!$response->successful()) { throw new \Exception('Erreur temporaire API.'); } } } ```

### La règle de péremption de l'OTP Si vous gérez l'envoi de codes OTP pour l'authentification 2FA, un retry peut être dangereux. Si le SMS finit par arriver 15 minutes plus tard après 4 retries réseau, le code généré dans votre base de données aura déjà expiré, générant de la frustration chez le client. Pour les OTP critiques, limitez les tries à 2 maximum, et si cela échoue, implémentez plutôt un Fallback métier (proposer un appel vocal ou un envoi WhatsApp) directement sur l'interface de l'utilisateur, plutôt que de retenter l'envoi SMS en silence.

💡 Why choose EnvoiSMS for your business?

Critical Delivery

Under 4 seconds for OTP codes via direct routes.

💰

Cost Optimization

WhatsApp Business API at 0.45 MAD per message.

🛡️

Sovereign Data (CNDP)

Hosting compliant with Moroccan data protection regulations.

Suggested Articles

Formatage SMS au Maroc : Sauts de ligne, Encodage GSM-7 vs UCS-2 et Optimisation des Coûts - Morocco Guide & Best Practices
technical

Formatage SMS au Maroc : Sauts de ligne, Encodage GSM-7 vs UCS-2 et Optimisation des Coûts - Morocco Guide & Best Practices

Formatage WhatsApp Business au Maroc : Texte Enrichi, Emojis et Boutons Interactifs - Morocco Guide & Best Practices
technical

Formatage WhatsApp Business au Maroc : Texte Enrichi, Emojis et Boutons Interactifs - Morocco Guide & Best Practices

One-Tap Autofill & 1-Click WhatsApp OTP Authentication in Morocco
technical

One-Tap Autofill & 1-Click WhatsApp OTP Authentication in Morocco