Replying & the 24-Hour Window
Messaging platforms cap how freely you can message a customer who hasn't recently contacted you. The Chat Inbox enforces these rules automatically — you don't have to memorise them, you just see the right composer.
The two reply modes
Free-form (inside the open window)
When the customer has messaged you within the customer-care window, the composer is a regular textarea. Type anything, hit Send.
- WhatsApp Business — 24-hour window from the last inbound message.
- Messenger / Instagram — 24 hours; +1 message inside the "human agent tag" period.
- WeChat OA — 48 hours.
- Telegram / Viber — no window restriction; free-form is always available.
The window state is computed server-side from the timestamp of the latest inbound message, so you can't accidentally bypass it via stale UI state.
Template (window closed)
When the window has passed, the composer flips to a template picker:
- For WhatsApp / WeChat, you pick from your approved template list (mirrored from Meta Business Manager or the WeChat OA platform via the Sync templates button on the Integrations page).
- For Messenger / Instagram, "Message Tags" replace templates (we expose them as the same picker).
Templates carry variables (e.g. {{1}} on WhatsApp, {{name.DATA}} on WeChat). Fill them in before sending — the picker validates that no {{…}} placeholder is left behind.
What "window closed" looks like
The composer area shows:
Window closed — choose a template
[ Select template ▾ ]A small info icon explains why (last inbound at X, window expired at Y). You can still send — but only via the template route.
What happens on send
- Kinderpedia records the outbound message as pending in the conversation.
- The matching channel client calls the platform's send endpoint.
- Platform responds with a message id — we store it on the message for status tracking.
- The platform's later status callbacks (sent → delivered → read) update the message in place.
- If the send fails (window expired between UI render and server send, recipient blocked us, rate limit, etc.), the message is marked failed and surfaces the error in the bubble's tooltip.
Failed messages persist — even after a refresh — so you can retry without losing context. WhatsApp sometimes returns an EXPIRED phone-verification state; that error explicitly points you at Integrations → WhatsApp → Re-register with PIN.
Cross-channel send is intentional
The composer always sends through the channel that the conversation is on — even if the parent has multiple linked channels. To switch channels, switch threads. The inbox doesn't try to be clever and "broadcast" the same message to all linked channels.
Read receipts
Marking a conversation as read flips every unread inbound message in the thread to "read by staff". This doesn't send a read-receipt to the platform — those are inbound-only mechanics outside our control.