For Support
What users will ask
"Why does this conversation say Paid when it used to be free?" Explain the two windows: replying within 24 hours of a patient's last message is still allowed, but from 1 October it isn't automatically free unless the conversation is also inside the special 72-hour window that opens by answering a click-to-WhatsApp ad lead quickly. Point them at the tag on the chat header — Free (ad) / Free / Paid — and the countdown next to it. See Conversation Windows for the exact rule.
"I set a daily paid message limit and now I can't reply to a patient." That's expected once the daily cap for their role (bot vs. staff) is reached — the countdown resets roughly 24 hours after the first paid message of that window, not at midnight (see Daily Spending Limits). If they need to reply right now regardless of cost, they should raise or clear the limit in WhatsApp → Settings → General, or wait for the reset. Sending will fail with Daily Paid Messages Limit Reached[Client Error] — the wording is literal, not a bug.
"The bot stopped auto-replying to some patients." Same cause, on the bot side. Check maxBotPaidMessages in settings — if it's set and the day's count is hit, the bot silently stops sending (there's no error message shown anywhere, by design, since there's no user to show it to). Confirm with the clinic whether that's the setting they intended.
"Why does this old message show 'Unknown' instead of Free or Paid?" Any message sent before this feature existed has no free/category data — it genuinely wasn't recorded, and nothing will retroactively classify it. That's expected, not a data-loss bug. New messages, sent after this shipped, always get tagged.
"A contact came from our Facebook/Instagram ad but the chat still says Paid." Two possibilities: (1) the reply happened more than 24 hours after the contact's first message from the ad — the free-window offer only applies if the clinic answers within a day; or (2) the inbound message didn't actually carry an ad click ID (ctwa_clid) — not every "referral"-looking message is a true click-to-WhatsApp ad click. Check adReferralAt on the conversation (via the database, if needed) to confirm whether it was ever set.
Where to look when troubleshooting
- Chat header tag/countdown wrong → check
freeUntilandadReferralAton
the OnlineConversation row directly; the UI just reflects those two columns.
- A message's cost looks wrong → check
free/categoryon the specific
ConversationMessage row. Both are set once, at send time, and never recalculated.
- Report showing nothing → the report only counts outgoing messages
(incoming: false); a chat full of only inbound patient messages will show nothing in the cost report, which is correct.
- "Daily limit" complaints → check
maxBotPaidMessages/
maxUserPaidMessages on the company's WAConfig, and if you have Redis access, the whatsapp:phoneId:paid:{bot|user}:{companyId} key's current value and TTL.
What support can't fix
Support cannot manually mark an old message as free/paid, or backdate a freeUntil/adReferralAt value to "restore" a free window that's already expired — there's no admin tool for this in the current PR. Escalate to engineering if a clinic needs a one-off correction.