Start here
1. The 24-hour window
WhatsApp only lets you send a free-form message to someone within 24 hours of their last message to you. Outside that window, the only thing WhatsApp accepts is an approved template. This is Meta’s rule, not DMLY’s, and nothing in DMLY can widen it. So the first question is always: when did this contact last message you? Open the conversation in the Inbox and look at the timestamp on their last inbound message. If it is more than a day old, the window is closed, and:- A free-form message will not go.
- An approved template will.
This is why the same automation can look reliable for weeks and then appear broken. Nothing
changed — the contacts changed. A contact who just wrote to you gets the message; a contact who
went quiet three days ago doesn’t.
2. Template approval
If the window is closed, everything depends on whether Meta has approved the template DMLY wants to use. DMLY ships a set of its own system templates for things like booking confirmations and invoice notifications — their names all start withdmly_ — and submits them
to Meta when you connect a WhatsApp number.
DMLY will only use a template Meta has approved. Not one that is pending, not one that was
rejected. That leaves three outcomes for any automated WhatsApp notification:
That last row is the single biggest cause of “the notification never arrived.” It is a
deliberate choice: sending a free-form message outside the window would be silently rejected by
Meta and would show in DMLY as a phantom Sent. Skipping is honest; it’s just quiet.
Check and fix it
Open your WhatsApp Templates and look at every template whose name starts withdmly_. Any
that is not approved is a hole in your notifications.
1
Select Refresh templates
Refresh templates re-reads the real state from Meta and re-submits anything that never
made it there. This matters because a template can show as pending in DMLY while Meta has no
record of it at all — it looks like it’s waiting on Meta, but nothing is. Refresh
templates repairs that.
2
Give Meta time, then check again
A genuinely submitted template is waiting on Meta’s review. Refreshing again later is how you
find out it landed.
3
If templates can't be submitted yet
Templates can only be submitted once a live WhatsApp number is connected. If you connected
recently or the number isn’t fully live, fix that first — see
Connect WhatsApp.
Your own templates for Broadcasts follow exactly the same approval
rule. See message templates.
3. Is the contact reachable at all?
If it works for some contacts and not others, the contact is the variable. DMLY treats a contact as unreachable on a channel if any of these is true:- They opted out. An opt-out blocks messaging on every channel, permanently, until it’s reversed. See contacts and privacy.
- They’re blocked. A blocked contact is never messaged.
- They have no identity on that channel. A contact with a phone number is not automatically a WhatsApp contact — DMLY needs to have actually reached them on WhatsApp, or matched them to it, before it can send there.
- The messaging window is closed — check 1 again.
Automations won’t move a contact onto WhatsApp
DMLY is WhatsApp-first, but not at the cost of hijacking a conversation. An automated notification only uses WhatsApp if the contact is already a WhatsApp contact, or has no channel yet. A contact who came in through Telegram, Messenger or SMS keeps their own channel even if you have their phone number. The practical consequence: a contact with no channel at all and no phone number — an imported row with only an email, say — has nowhere for an automated message to go. It is skipped, silently. (A channel-less lead who does have a phone number is fine: if a WhatsApp number is connected, DMLY attaches that phone to WhatsApp and sends there.)4. Permanent or retryable
Once you have an actual failure to look at, the question is whether it will fix itself. Retryable — a rate limit. A rate-limited broadcast is put back in the queue and tried again a few seconds later, and writes nothing to Logs while it waits. A timeout or an outage at Meta is not retried — it is recorded as a permanent failure straight away. Permanent — the send will never succeed as-is, and DMLY records it. This is asend_failed
row on the Logs page, and it carries the raw reason from Meta, which is
what you act on.
Some failures are a missing setup rather than a bad recipient. The reason recorded on the
message tells you which:
All four are workspace setup, not the contact. None of them will resolve on their own.
5. What Logs shows
Open Configurations → Logs, select Filters, and set Status to Error — leave Event on All events (or set it to Errors; a failed send is logged as an Errors-type event, not a Messages one). Then read the Logs page guide for what the rows mean — but two traps matter here specifically. And silence in Logs is not proof. By this point on the page you know three separate ways a message can fail to arrive without writing a single row:- It was skipped for a pending template with the window closed.
- It was skipped because the contact wasn’t reachable — no record at all.
- It’s mid-retry — nothing is written until it fails permanently.
Next
Reading the Logs page
What a
send_failed row is, and the entries that never appear.WhatsApp limits
The 24-hour window and the messaging tiers, in full.
Message templates
How approval works, and what Meta rejects.
Automation not triggering
When the bot never got as far as sending anything.

