Nigerian online shops should send order confirmations, payment confirmations, dispatch notices, rider-arriving messages and delivery codes as transactional SMS on an approved transactional sender ID, and keep flash sales, abandoned-cart nudges and new-arrival blasts on a separate promotional sender ID with consent. Promotions for consumer goods fall under NCC partial DND category 5, so subscribers on DND who have not allowed that category should not receive them, while order updates the customer is waiting for typically go through.

Last reviewed: 27 October 2026

This guide is for e-commerce operators, marketplace sellers, and the logistics teams that deliver for them across Lagos, Abuja, Port Harcourt and beyond. It maps the order journey to messages, gives templates that fit one SMS, and shows how to wire the messages to your order system.

Two kinds of message, two sender IDs

The NCC's Do-Not-Disturb service on short code 2442 lets subscribers block unsolicited messages entirely (STOP) or choose categories to keep (HELP). Category 5 covers consumer goods and automobiles, which is where most retail promotions sit, and category 10 covers new products or services. Networks apply DND to promotional traffic. Order updates are a different thing: the customer has just bought something and expects to hear about it, and networks typically carry these messages on transactional routes, which reach DND numbers. That split is operator practice, and our DND explainer covers it in more detail.

  • Transactional sender ID (for example "ShopNaija"): order, payment, dispatch, delivery, returns and refund messages. No offers inside them.
  • Promotional sender ID (for example "ShopNaijaDl"): sales, coupons, back-in-stock and abandoned-cart reminders, sent only to customers who agreed to marketing.

Keeping them apart protects the order messages. If a promotion draws complaints, the promotional sender ID takes the hit, not the one that carries delivery codes.

The order journey, message by message

EventTypeSample message
Order placed, pay on deliveryTransactionalShopNaija: Order SN48210 confirmed. Total NGN46,500, pay on delivery by transfer or card. Delivery Thu-Fri. Track: shpn.ng/t/48210
Bank transfer receivedTransactionalShopNaija: We received NGN46,500 for order SN48210. Thank you! We will text you when it leaves our Ikeja warehouse.
Out for deliveryTransactionalShopNaija: Order SN48210 is out for delivery today. Rider Musa 0803 000 0000. Give him code 7341 only when you have the parcel.
Rider nearbyTransactionalShopNaija: Musa is about 15 mins away with order SN48210. Please keep your phone on. Can't receive today? Call 0700 000 0000.
Failed attemptTransactionalShopNaija: We could not reach you for order SN48210 today. Pick a new delivery day: shpn.ng/r/48210 or call 0700 000 0000.
DeliveredTransactionalShopNaija: Order SN48210 delivered. Problem with an item? Request a return within 7 days at shpn.ng/ret
Refund paidTransactionalShopNaija: Your refund of NGN12,000 for order SN48210 has been sent to your bank account. Allow up to 24 hours. Ref RF2291
Weekend salePromotional, consentShopNaija Deals: 20% off kitchen appliances this weekend only. Shop: shpn.ng/sale Opt out: SMS STOP to 6xxx

Write "NGN" rather than the naira sign. The sign is not in the GSM-7 character set, so one naira sign turns a 150-character message into a Unicode message billed as three segments.

Pay on delivery and the delivery code

Pay on delivery and bank transfer at the door remain common in Nigerian e-commerce, alongside cards, USSD and wallets such as OPay, Moniepoint and PalmPay. Each brings its own failure mode, and SMS handles several of them:

  • Customers who forget they ordered. A confirmation that names the total and the delivery window, and a reminder on the delivery day, reduce wasted trips.
  • "I never received it" disputes. A four-digit delivery code, sent to the buyer's phone and entered by the rider in the app at handover, gives you a record that the parcel reached the person who ordered it. Tell the customer to give the code only when they hold the parcel.
  • Fake transfer screenshots. Send the "We received NGN..." message only after your bank or payment provider confirms the credit, and train riders to wait for it before releasing goods. Customers learn that the SMS from your sender ID is the confirmation that counts.

Abandoned carts and win-back are marketing

An abandoned-cart reminder feels like a service message, but it is an attempt to sell. Treat it as promotional: send it only to customers who opted into marketing, on the promotional sender ID, with an opt-out. The Nigeria Data Protection Act 2023 gives customers the right to object to direct marketing (section 36), and Templars notes that this right cannot be overridden. The Future of Privacy Forum's summary of the Act notes that consent must be freely given, specific, informed and unambiguous, so the marketing checkbox at checkout should be separate from the terms and not pre-ticked.

A one-way alphanumeric sender ID cannot receive "STOP" replies. Give customers a working opt-out: a two-way number (short codes can be ordered online in Nigeria, and STOP replies are recorded as opt-outs automatically), a link to your preferences page, or your customer care line. Numbers on the eSMS opt-out list are blocked from future sends.

Wiring messages to your order system

Trigger each transactional message from an order status change, not from a person in the warehouse remembering to send it. Most platforms can call a webhook on status change; your handler picks the template and sends one SMS:

// Node.js 18+: send order updates from your order-status webhook
const ESMS = "https://sms.esmsafrica.io/api/messages/send";
const TEMPLATES = {
  confirmed:  o => `${o.shop}: Order ${o.id} confirmed. Total NGN${o.total}. Pay on delivery or track: ${o.link}`,
  dispatched: o => `${o.shop}: Order ${o.id} is out for delivery today. Rider ${o.rider}, ${o.riderPhone}. Code: ${o.code}`,
  delivered:  o => `${o.shop}: Order ${o.id} delivered. Problem with it? Call ${o.care} within 7 days.`
};

async function notify(order, status) {
  const make = TEMPLATES[status];
  if (!make) return;                                   // not every status needs an SMS
  const res = await fetch(ESMS, {
    method: "POST",
    headers: {
      "Authorization": "Bearer " + process.env.ESMS_API_KEY,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({ to: order.phone, sender_id: "ShopNaija", text: make(order) })
  });
  if (!res.ok) console.error("SMS failed", order.id, status, res.status);
}

For promotions, upload a CSV or Excel list of consenting customers to the dashboard, or call POST https://sms.esmsafrica.io/api/messages/send-bulk with a recipients array and {{name}} placeholders, and schedule the send for daytime. Use a test key (esms_test_...) while you build: sends are simulated without charge.

Watch delivery reports

Delivery reports come back by webhook. Store the status against the order, so customer care can see whether the dispatch SMS reached the customer before a rider is sent again. Numbers can be ported between networks, so judge delivery problems by the reports, not by the number prefix. The delivery reports guide shows the webhook format.

Checklist

  1. Separate transactional and promotional sender IDs, both approved on MTN, Airtel, Glo and T2.
  2. Every order status that needs an SMS triggers one automatically.
  3. No offers or coupons inside order messages.
  4. Delivery code sent to the buyer, entered by the rider at handover.
  5. Payment confirmation SMS sent only after the credit is confirmed.
  6. Marketing checkbox separate and not pre-ticked; consent date stored.
  7. Working opt-out on every promotion; opted-out numbers blocked.
  8. All templates in GSM-7 and under 160 characters.

What it costs

A typical pay-on-delivery order sends four or five messages from confirmation to delivery. At the Nigeria rate of NGN 9.1 per message on the basic tier, or NGN 7.5 on the business tier, multiply by your monthly orders to budget, and compare against the cost of one failed delivery trip. See the pricing page.

Frequently asked questions

Do order updates reach customers on DND?

Order, payment and delivery messages sent on an approved transactional sender ID typically reach DND numbers, because networks apply DND to promotional traffic. Keep offers out of these messages so they stay transactional.

Which DND category covers e-commerce promotions?

Most retail promotions fall under category 5, consumer goods and automobiles. Customers on full DND, or on partial DND without that category, should not receive them.

Is an abandoned-cart SMS transactional?

No. It is a marketing message. Send it only to customers who agreed to marketing, on your promotional sender ID, with an opt-out.

Can the rider send the delivery code?

The code should go from your system to the buyer's phone, and the rider enters what the buyer reads out. If riders can see or send codes, the code proves nothing.

Sources

See more retail templates on the retail and e-commerce SMS page for Nigeria, and read our guides to OTP fraud controls and fitting alerts into one segment. Register your sender IDs on the Nigeria sender ID page, then create an account and connect your first order webhook.