A Service conversation opens when the customer sends you a message (customer‑initiated). That message starts a rolling 24‑hour customer service window during which you can send non‑template (free‑form) messages. This is separate from business‑initiated conversations (Marketing, Utility, Authentication), which open when an approved template is sent and delivered, and no same‑category window is already open.
A Service conversation (customer‑initiated) opens when:
Result: A 24‑hour customer service window starts (or resets). During this window you may send non‑template messages, plus templates if needed.
If the customer’s message fails delivery to your business (e.g., connectivity/number issues), a Service conversation does not open.
Conversation Type | Initiated By | Message Format | What opens it | Window length | Billed? |
Service | Customer | Non‑template allowed when open | Customer inbound message delivered | 24h (rolling) | ❌ No (session) |
Marketing | Business | Template (promo) | Template sent & delivered; no open Marketing window | 24h | ✅ Yes |
Utility | Business | Template (update) | Template sent & delivered; no open Utility window | 24h | ✅ Yes |
Authentication | Business | Template (OTP/login) | Template sent & delivered; no open Auth window | 24h | ✅ Yes |
Sending another template in the same business‑initiated category within 24h reuses the existing window (no new charge).
UI cue: You’ll see Customer Service Window: Active/Closed near the composer/ticket header.
Field names vary by provider. Use the shapes below to build alerts and dashboards.
1) Inbound that opens a Service conversation{ "event": "message_received", "customer": { "wa_id": "+15551234567" }, "message": { "type": "text", "id": "wamid.HBg..." }, "service_window": { "open": true, "expires_at": "2025-12-01T10:00:00Z" }, "conversation": { "category": "SERVICE", "opened": true }, "pricing": { "billable": false }}
2) Template opens a Marketing conversation (no Marketing window open){ "event": "template_delivered", "template": { "name": "promo_launch", "category": "MARKETING" }, "conversation": { "category": "MARKETING", "opened": true, "expires_at": "2025-12-01T14:00:00Z" }, "pricing": { "billable": true }}
3) Template reuses the existing Utility window (within 24h){ "event": "template_delivered", "template": { "name": "order_update", "category": "UTILITY" }, "conversation": { "category": "UTILITY", "window": "REUSED", "new_charge": false, "expires_at": "2025-12-01T12:00:00Z" }}
4) Guardrail: non‑template blocked when Service is closed{ "event": "message_send_attempt", "type": "non_template", "service_window": { "open": false }, "error": { "code": "NON_TEMPLATE_NOT_ALLOWED", "message": "Customer service window closed. Wait for customer reply or use a template." }}
5) Cloud API — send a template (copy/paste){ "messaging_product": "whatsapp", "to": "+15551234567", "type": "template", "template": { "name": "follow_up_request", "language": { "code": "en" }, "components": [ { "type": "body", "parameters": [ { "type": "text", "text": "Alex" } ] } ] }}
A) Same category within 24h
Time | Action | Result |
00:00 | Send Marketing template | Marketing window opens → ✅ Charged |
06:00 | Send another Marketing template | Same Marketing window → ❌ No new charge |
B) Cross‑category in parallel
Time | Action | Open conversations | Billed? |
00:00 | Customer sends a message | Service | ❌ No |
02:00 | Send Utility template | Service + Utility | ✅ Utility |
04:00 | Send Marketing template | Service + Utility + Marketing | ✅ Marketing |
Diagram — Category windows & Service window
Caption: Service opens on customer inbound; business‑initiated categories open on template delivery and can overlap with Service.
If behavior differs from this FAQ or billing looks incorrect, open a Support ticket from your admin portal (include message IDs, timestamps, pricing logs, and screenshots), or contact your Customer Success Manager. Typical response time: 1 business day.