WhatsApp error 131047: Re-engagement message
More than 24 hours have passed since this person last messaged you, so WhatsApp blocked your free-form message. Send an approved template instead.
Why it happens
WhatsApp only lets businesses send free-form messages (text, media, interactive messages) inside a 24-hour customer service window. The window opens when the person messages you and closes 24 hours after their last message. Once it closes, any non-template message fails with 131047.
Approved templates are the only way to start a conversation again. See Meta’s error code reference.
Failing on a slow human reply?
A common cause is an agent answering a support chat the next day, or an automation that waits too long before a follow-up. Check the time of the person’s last message before you send free-form text.
What to do
- Don’t resend the same message. Free-form retries will fail with 131047 until the person writes to you again.
- Send an approved template. Use a template that fits the content, for example a utility template to follow up on an open support case.
- Invite a reply. Add a quick-reply button or a question to the template. When the person replies, the 24-hour window opens again.
- Continue the conversation normally. After they reply, send your original message as free-form text.
Handle it in your app
The send request can succeed and the message fail later. Kapso webhooks send a whatsapp.message.failed event with Meta’s error code.
{
"message": {
"id": "wamid.EXAMPLE",
"kapso": {
"status": "failed",
"statuses": [{
"status": "failed",
"errors": [{
"code": 131047,
"title": "Re-engagement message",
"message": "More than 24 hours have passed since the recipient last replied to the sender number."
}]
}]
}
},
"conversation": {
"id": "conv_EXAMPLE",
"phone_number": "+15551234567"
}
}
// X-Webhook-Event: whatsapp.message.failed
function isError131047(message) {
if (message.delivery_error?.code === 131047) return true;
return message.kapso?.statuses?.some((status) =>
status.errors?.some((error) => error.code === 131047)
) ?? false;
}
if (isError131047(body.message)) {
// Window closed: queue a template once per failed message
await queueTemplate(body.conversation, "follow_up", {
idempotencyKey: body.message.id,
});
}
See all fields in the message event docs. Before sending anything from a webhook, verify the signature and handle retried deliveries as shown in webhook security.
Frequently asked questions
Is my WhatsApp account blocked?
No. 131047 only means the customer service window with this person is closed. You can still message them with an approved template.
When does the 24-hour window open again?
When the person sends you a message. Each new message from them restarts the 24-hour window. Your own messages do not reopen it.
Am I charged for these messages?
No. Meta does not charge for messages that fail with 131047.
Which template category should I use?
Use the category that matches the content. Order and account updates can be utility templates. Promotions must be marketing templates, and Meta can recategorize templates that do not match.