"Not delivered" is four different problems wearing the same label, and each has a different fix.
Sent but not delivered is not a failure
Sent means Meta accepted the message. Delivered means it reached the handset. A message can sit at sent for hours if the phone is offline, and then deliver normally when it reconnects.
Persistent sent-never-delivered usually means the number is not on WhatsApp, or the recipient has blocked the business.
The four failures that matter
Only the last one is worth an immediate retry, and even then it needs to wait for the rolling window to clear.
- Invalid or unregistered number: the record is junk, clean it rather than retry
- Template paused: Meta suspended the template for quality, fix the audience not the send
- Blocked by recipient: nothing to fix, and a signal your targeting is off
- Messaging limit reached: pace the send or spread it across numbers
A sudden spike in failures
When failures jump from a handful to most of the campaign, the cause is almost always a paused template or a hit limit, not a platform problem. Both show clearly in the reason codes.
The instinct to resend immediately makes it worse. If the template was paused for quality, resending to the same audience deepens the quality problem.
A triage workflow that works
- Filter the campaign report to failed and group by reason.
- If it is dominated by one reason, fix that cause before anything else.
- Build a segment from the invalid numbers and remove them from the list.
- Check the number’s quality rating and current messaging limit.
- Resend only to the recoverable failures, never to the whole list again.
Preventing most of it
- Clean the list before importing, not after failing
- Segment so messages are relevant, which lowers blocks
- Honour opt-outs automatically
- Pace large sends against the messaging limit
- Watch quality rating weekly rather than after an incident