Home / Help Center / pos-app / Sell / Billing / Communication
💬 Sell / Billing

Communication

Communication is a bulk-messaging hub with three tabs — Campaigns for one-off marketing blasts to a customer segment, Payment Reminders for chasing outstanding dues one customer at a time, and History for a full log of every message ever sent.

📍 Menu path: Sell / Billing → Communication
👤 Who uses it: All roles with Customers access, Advanced plan tier or above
🏷️ Plan tier: advanced+

Overview

The page header explains it plainly: "Send SMS, WhatsApp, and email to customers — receipts, reminders, and campaigns."

There is no template editor or scheduler — Campaigns offers five ready-made starting templates (Festive Offer, New Arrivals, Payment Reminder, Thank You, Order Ready) that you can edit before sending, and every send happens immediately.

WhatsApp and SMS are "client-side" channels: the app opens a wa.me or sms: link for each recipient in turn and you tap send yourself in WhatsApp/your phone's messaging app. Email is the only channel actually dispatched by the server, and it reports back how many sent versus failed.

Before You Start

Step-by-Step Guide

1 Send a bulk campaign

  1. On the Campaigns tab, choose an audience segment: All Customers, With Email, With Phone, or Outstanding Dues — the button shows a live count of how many customers match.
  2. Choose a channel: WhatsApp, SMS, or Email. Picking Email reveals an additional Email subject field.
  3. Click a starter template (Festive Offer, New Arrivals, Payment Reminder, Thank You or Order Ready) to pre-fill the message box, then edit freely — the helper text reminds you {name} and {shop} are available as merge variables.
  4. Click Send to N Customers. For Email, the server sends immediately and reports "Sent X emails, Y failed". For WhatsApp/SMS, a dispatch modal walks through each recipient one at a time with an "Open WhatsApp →" / "Open SMS →" button, until it shows "All done!".
💡 Sending is blocked with a toast if the message box is empty, or if no customers match the chosen segment.

2 Chase payment reminders

  1. Open the Payment Reminders tab — it lists every customer with a negative balance (money owed to you), sorted by outstanding amount, largest first.
  2. Search by name, phone or email if the list is long.
  3. Click the WA, SMS or Email button on a row to send that customer a reminder for their exact outstanding amount; rows with neither phone nor email show "No contact" instead of send buttons.
💡 This tab shows "No outstanding dues — all customers are settled!" when every customer's balance is clear.

3 Review communication history

  1. Open the History tab to see every message ever sent: Date, Channel, Type (Receipt, Reminder, Campaign, Order Update), Recipient, Subject/Message preview, and Status.
  2. Check the Status column — Sent (green), Failed (red), Opened (blue, meaning the WhatsApp/SMS link was actually clicked open on the device), or Pending (amber).
  3. Search by channel, recipient or message text, and export the log if you need it outside the app.

Every Field & Button, Explained

Field / ButtonWhat it does
Audience segmentAll Customers, With Email, With Phone, or Outstanding Dues — filters who the campaign will reach.
ChannelWhatsApp, SMS, or Email — Email additionally reveals a Subject field.
TemplatesFestive Offer, New Arrivals, Payment Reminder, Thank You, Order Ready — one click fills the message box, which you can then edit.
Message boxFree-text body supporting {name} (customer name) and {shop} (your shop name) as merge variables.
Send to N CustomersDispatches the campaign — direct server send for Email, or a step-through "open the app" flow for WhatsApp/SMS.
Reminders — WA / SMS / Email buttonsPer-customer one-click reminder for that customer's exact outstanding balance.
History — Type columnCategorises each log entry as Receipt, Reminder, Campaign, or Order Update.
History — Status columnSent, Failed, Opened (client-side link was clicked), or Pending.

Tips & Best Practices

Troubleshooting & FAQ

Nothing happens when I click Send to N Customers.
Sending is blocked if the message box is empty or if the chosen audience segment currently has zero matching customers.
Does WhatsApp/SMS actually send automatically?
No — those two channels open a wa.me or sms: link per recipient and you must tap Send yourself in the app that opens. Only Email is dispatched directly by the server.
A message shows "Opened" instead of "Sent" in History.
"Opened" (internally CLIENT_SEND) means the WhatsApp/SMS link was clicked open on your device — it confirms you took the action, not that the customer received or read it.
The Communication menu item is missing entirely.
This page requires the Advanced plan tier and the Customers feature; below Advanced it does not appear in the sidebar at all.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/CommunicationPage.jsx

Backend endpoints used:

  • GET /customers?limit=2000
  • POST /communication/bulk
  • POST /communication/reminder
  • GET /communication/history

Related tables (db-core repositories):

  • Customer
  • CommunicationLog

Feature flag key: customers (requires advanced plan tier or above)

WhatsApp and SMS channels are entirely client-driven — the component opens native wa.me/sms: URIs per recipient in sequence rather than calling a messaging gateway; only the Email channel is actually transmitted server-side via POST /communication/bulk. There is no template CRUD or message scheduling in this file — the five templates are hardcoded strings, and all sends are immediate.