A support ticket can remain open after WhatsApp stops accepting ordinary replies. Your application needs the customer's last activity time as well as the ticket's status.
When does the window open and close?
The customer's message or call starts a 24-hour window. Their next message or call resets that timer.
Meta's customer service window permits free-form replies while that timer runs. Your own replies do not extend it.
Suppose a customer writes at nine in the morning. With no further contact, the window closes at nine the next morning. A reply they send at noon moves that deadline to noon the following day.
A support agent picking up the ticket later does not restart the clock. Preserve the customer's activity time so the composer can choose an appropriate message type.
What can I send outside the window?
Send an approved template that fits the intended message and the customer's permission.
A template can invite the person to reply. Their reply opens a new window; merely sending the template does not.
Meta's messaging policy still applies to customer permission. Template approval does not establish permission to send marketing.
The open window changes what you can send. It can also change the Meta charge. It does not erase the category:
Meta groups messages into service, utility, authentication and marketing categories.
| Situation | Send decision | Billing check |
|---|---|---|
| Customer message and free-form reply | Free-form content can reply inside the window | Check Meta's published service-message treatment |
| Utility template reply | Use the approved utility language | Check its effective Meta category |
| Marketing or authentication template | Keep its category even while the window is open | Use the category and market on Meta's pricing page |
| Closed-window free-form request | Use an approved template instead | A rejected request has no created message charge |
Use Meta's published pricing for the category and market rule. Do not treat an open window as a universal exemption.
Within an open window, Bird supports free-form content from a number of your own. Bird-managed numbers carry managed templates, so they do not become free-form senders when a window opens.
How does Bird refuse a closed-window request?
Bird returns 422 with E15044 when its check identifies a closed window for a free-form send.
That request error occurs before a message is created or charged. Send an approved template instead of retrying the same free-form content.
If the refusal conflicts with recent customer activity, preserve the request details and contact support. A refused request has no created message identifier to supply.
An accepted request can fail later if the window closes before dispatch. The message then carries service_window_expired, which maps Meta's 131047 and legacy 470 codes to one outcome.
Handle that later failure through your message events. It can occur after charging, unlike the request refusal.
Why can Bird accept a request when the window is closed?
Bird allows the request when its window check cannot establish that the window is closed.
A failed lookup therefore does not automatically reject a legitimate customer reply. Acceptance says that Bird did not establish a closed window, not that Meta will deliver the message.
The window can also change between your request and dispatch. Track the later delivery outcome even when the request succeeds.
Inspect the message's returned cost when reconciling a failure. Do not infer that an unsuccessful delivery was free.
How should I design the reply flow?
Choose the content type from the customer's activity time before sending.
Monitor repeated window failures to find replies that reach dispatch too late. A ticket queue can need an earlier response target even when it still considers the conversation open.
- Keep the last customer activity time available to the reply composer.
- Send free-form content only while its service window is open.
- Keep an approved template ready to invite a reply after the window closes.
- Handle
E15044and laterservice_window_expiredoutcomes separately.
In short
Time the window from the customer's activity.
Their message or call starts the window. Another message or call from them resets it to 24 hours.
Use a template outside the window.
Sending the template does not reopen free-form sending. The customer's reply does.
Handle a closed-window refusal directly.
E15044means Bird refused the request before creating or charging a message. Use an approved template instead.Track failures after acceptance too.
An accepted request can still fail with
service_window_expired. Acceptance does not guarantee an open window at Meta.