Cash on delivery isn't a legacy payment method in Morocco — it's the default. Depending on which study you read, somewhere between 70–85% of Moroccan e-commerce transactions are COD. This isn't going away anytime soon. Low credit card penetration, distrust of online payments, and the practical habit of wanting to inspect goods before paying make COD the rational choice for most customers.
This creates a specific set of operational problems that don't exist in card-first markets:
- Confirmation friction — customers don't always answer the phone to confirm orders
- High return rates — unconfirmed orders get delivered and refused
- Rescheduling complexity — delivery windows get missed, requiring retry coordination
- Failed delivery cost — returning an undelivered COD package typically costs the merchant
WhatsApp is the most effective tool for solving these problems in Morocco. Here's how to build a proper COD order flow.
The Core COD Problem: Confirmation
The biggest lever in COD fulfillment is confirming orders before they ship. An unconfirmed order has a much higher refusal rate. The traditional approach — a phone call from your team — doesn't scale and has poor pickup rates (many people ignore calls from unknown numbers).
WhatsApp confirmation messages work significantly better because:
- The message is asynchronous — customers respond when it's convenient
- It's less intrusive than a phone call
- It creates a text record the customer can refer back to
- Most Moroccans check WhatsApp far more often than they answer unknown calls
A good confirmation message is short and action-oriented:
Salam [Name] 👋 Lqdina commande dyalk: 📦 [Product Name] 💰 [Amount] DH — paiement à la livraison Confirmez votre commande: ✅ Oui, confirmer ❌ Annuler 📅 Changer la date
The customer taps one button. Your system records the response. If no response in 4 hours, send a follow-up. If still no response in 12 hours, flag for manual review or automatic cancellation.
The Order State Machine
A COD order on WhatsApp should move through clear states, each with an automated message:
1. Order created → Confirmation request sent Immediately after order placement (website, Insta DM, phone — wherever it originated), send the confirmation message above.
2. Confirmed → Processing notification Once the customer taps confirm, send: "Kaytayyab l commande dyalk, ghadi yosal [date]."
3. Handed to courier → Shipping notification with tracking When your logistics partner picks up: "Commande dyalk fl route! Livreur ghadi ywsl [date/window]. Rqm l tracking: [X]"
4. Out for delivery → Day-of reminder Morning of delivery day: "Commande dyalk ghadi tosal lyom [window]. 3afak kun mwjod bach tokhod l colis."
5. Delivery attempted, failed → Reschedule flow If the courier marks a failed delivery: "Ma qdrna nbiwlek lyom. Wqtash mzyan nrja3w?"
Options: Tomorrow morning / Tomorrow afternoon / Another day
6. Delivered → Feedback request (optional) 24 hours after delivery: "Wslatk l commande? Kif kan?" with emoji rating buttons.
Handling Failed Deliveries
Failed deliveries are expensive. Each retry costs you courier fees and delays. The WhatsApp reschedule flow above reduces this, but there's more you can do:
Before dispatch: If a customer hasn't confirmed after 24 hours, call them once. If unreachable, consider holding the order rather than shipping to an unconfirmed customer.
Day-of contact: Send the out-for-delivery message with a simple "Reply STOP if today doesn't work" option. This catches schedule conflicts before the courier drives there.
After failure: The reschedule message should give concrete time options, not open-ended questions. "Wqtash bghit?" gets vague answers. A button menu with 3 options gets decisions.
Two-strike rule: After two failed delivery attempts, send a message explaining you'll hold the order for 48 hours and then cancel. This prompts action from customers who actually want the order.
What You Need to Build This
You need three components:
- WhatsApp Business API access — to send template messages and receive button responses
- Order management connection — to trigger messages when order status changes
- Logic to handle responses — when a customer taps "reschedule," someone (or something) needs to process that and update the delivery schedule
A full-stack implementation requires either engineering resources or a platform that handles this out of the box. AidGens is built specifically for this use case — COD-aware WhatsApp order flows for Moroccan businesses, with Darija/FR/EN support.
If you're currently managing COD confirmation over phone or manual WhatsApp, and your failed delivery rate is above 15%, an automated flow like this will pay for itself quickly.
Reach out on WhatsApp or email to discuss what your current order volume looks like and what a setup would cost.
