1Overview #
Bulk Messages sends one message to many people, each filled in with their own figures. A message has a kind, and the kind knows who it is for and what it can say:
Payment reminders - each customer their bills due as of a day, as a table in the e-mail and a one-page PDF statement, with the customer portal's payment link when the portal lets that customer pay online. Supplier payment advice - each supplier a payment made to them, with the bills it settled. Salary credit notices - each employee their net pay for a payroll period from the salary register, with the make-up of it. Custom list - any parties, any wording.
You preview first: everybody the filters find, the exact message each will get, and - for anybody left out - the reason (no address, opted out, sent too recently, already sent for that payment). Untick whoever should not get it this time and Send: the run is queued and goes out in the background, a few every minute, and you follow it under Runs.
A schedule does the same by itself on its days at its time - reminders on the day a bill is 0, 7, 15 and 30 days past due, salary notices on the 2nd for last month - never sending the same kind to anybody twice within its least gap.
Every message sent is also written onto the person's conversation in Communications, related to the party (and for payment advice, the payment), and logged in the outbox under the kind's module.
2Who it is for #
- Chasing overdue bills without writing to each customer - and doing it every week by itself.
- Telling suppliers what a payment covered, the day it was made.
- Letting every employee know their salary has been credited, with its make-up.
- An announcement to a category, a few ledger groups or a hand-picked list of parties.
3What it is not for #
- One message to one person - use New message in Communications, or Messages on the ledger or the voucher.
- Marketing to leads and contacts - that is CRM > Broadcasts (with CRM and its bulk messaging add-on).
- Printing statements - Reports > Outstanding prints them; here they are only attached.
4Step by step #
- Open New run and click the kind - Payment reminders, say. - It starts from the kind's saved template, or from its own wording.
- Set Who: As of (today), the category (Customers), groups or parties, how overdue, the smallest amount. - Only the filters that kind uses are shown.
- Check The message: the channel, From, Subject and the wording. Click a placeholder to copy it, and paste it where it belongs. - {Table} places the bills; {PayLink} the payment link; Attach the PDF statement adds the PDF.
- Press Preview (F3). - Everybody the filters find, with their amount and lines; orange rows are left out, each with the reason. Click a row to read that person's message as it goes.
- Untick anybody who should not get it this time, then press Send (F5) and confirm. - The run is queued and the page moves to Runs; it refreshes itself while the run sends.
- Under Runs, click the run. - Every person with Sent, Failed (and why) or Left out; Conversation opens the message in Communications. Cancel the run stops what has not gone yet.
- To make it regular: save the wording under Templates, then Schedules > Add schedule - the kind, the template, the days, the time, Days from due (or the Period) and the least gap. - It runs by itself from its next time on; its card says when it last ran and what happened.
5The fields #
- New run - What to send
- Kind - Payment reminders, Supplier payment advice, Salary credit notices, Custom list - and any kind a later module adds. A kind is offered while one of its modules is licensed.
- New run - Who - Drawn from the kind - each kind shows only the filters it uses.
- As of - Payment reminders: the day the bills are due on - usually today.
- From / To - Supplier payment advice: the days the payments were made. Salary credit notices: the payroll period.
- Category - A ledger group's primary category - Customers, Suppliers... Blank = any. Changing it clears the groups.
- Ledger groups - Only parties under these groups. Blank = every group of the category.
- Only these parties - Find by name (two letters or more, Enter) and click to add; × removes. Blank = everybody the other filters find.
- Overdue at least / at most - Payment reminders: which bills count, by days past their due date. 1 = anything overdue.
- Also falling due within - Payment reminders: bills not yet due that fall due within this many days.
- Employee groups - Salary credit notices: only these groups.
- Payment voucher types - Supplier payment advice: only payments by these voucher types.
- Amount at least - Leave out anybody whose total is below this.
- Skip bills with a cheque - Payment reminders: a bill with a cheque already received against it is not asked for again. On to start with.
- New run - The message
- Start from - A saved template of the kind, or the kind's own wording. What you change is for this run only.
- Name of the run - How it is listed under Runs. Blank = the kind and today's date.
- Channel - E-mail (the table and the PDF), SMS or WhatsApp (a short form). A person without that kind of address is left out, with the reason.
- From - E-mail: a mail account or a hub mailbox. Blank = the default account.
- SMS profile - SMS: the gateway profile. Blank = the default.
- WhatsApp number / Approved template / Template values - WhatsApp: the number, a template Meta approved, and one value per {{n}}, separated by |.
- Subject / Message - With placeholders - {Name}, {TotalDue}, {Table}, {PayLink}... - filled in per person. E-mail is plain text: blank lines make paragraphs.
- Attach the PDF statement - The same table as a one-page PDF with the company's name. Not for SMS.
- Include the payment link - Payment reminders: {PayLink} becomes the customer portal's payment page - only for customers the portal lets pay online.
- Placeholders - Click one to copy it. Hover to see what it becomes. Every kind has {Name}, {ContactName}, {CompanyName}, {CompanyPhone}, {CompanyEmail}, {Today}.
- Preview
- Send (tick) - Untick to leave a person out of this run. A person left out for a reason cannot be ticked.
- Left out because - No e-mail address / No mobile number, Asked not to receive these (opt-out), Sent one ... - under the N-day gap, Already sent for this document.
- View statement - Downloads the selected person's PDF exactly as it will be attached.
- Runs
- Status - Queued (waiting its turn), Sending, Done, Cancelled.
- People / Sent / Waiting / Failed / Left out - The run's counts, from its people.
- Delivered / Read / Replied / Bounced - What happened after the messages went: Delivered and Read from the SMS gateway's and WhatsApp's reports (e-mail reports neither), Replied = people who answered afterwards, Bounced = e-mails a mail server refused.
- Then / Replied (a person) - Delivered, Read, Bounced or Failed later - and when they first answered. Conversation opens the exchange in Communications.
- Why not - On a person: why it failed (the mail server's or gateway's answer) or why they were left out.
- Cancel the run - Stops whatever has not gone yet. What has gone stays gone.
- Schedules
- Name / Active - Unique name; off = paused.
- Kind / Template - What it sends: a SAVED template of the kind, as it stands on the day it runs.
- Days / At - The days of the week and the time of day (the server's clock).
- Least gap, days - Nobody gets this kind again within this many days of the last one - whichever run sent it.
- Days from due - Payment reminders: e.g. -3, 0, 7, 15, 30 - a customer is reminded on the day one of its bills is exactly that many days past due (negative = before), with all its bills due.
- Period - The period kinds: which days each run covers, counted from the day it runs - Yesterday, Today, the last 7 days, this month so far, last month.
- Who - The same filters as a run, kept with the schedule.
- Templates
- Kind / Name - Which kind it words (fixed once saved); unique name within the kind.
- Inactive - Not offered for new runs; a schedule using it stops and says why.
- Use the kind's wording - Puts the kind's own subject and message back for the chosen channel.
- Opt-outs
- Party / Of which kind / Why - A party who receives no bulk messages - of every kind, or of one. Honoured by runs already queued too, for what has not gone yet.
- How - Entered on this page, or Replied STOP - the party answered STOP by SMS, WhatsApp or e-mail (its first line). Answering START takes a Replied STOP opt-out off again; an entered one stays until somebody removes it.
- Bounced addresses - Under the opt-outs.
- Address / Code / The mail server said / Times / Last - An e-mail address a mail server refused for good, with its words. Red = still bad; grey = cleared in the last 30 days.
- Clear - After correcting the address on the party's contact person: messages go to it again. If it bounces again it comes back.
6Rules and integrity #
- Send sends what you previewed - Send is offered only after Preview, and only while the filters and the message are what you previewed - change either and preview again.
- A run keeps its own copy - The wording is copied onto the run, and each person's figures are frozen when it is queued - editing a template later, or a bill being paid meanwhile, changes nothing already waiting. Preview again for fresh figures.
- Never the same thing twice - Supplier payment advice is never sent twice for the same payment and supplier. A schedule's least gap keeps any kind from reaching the same person again too soon.
- Your scope - A run finds only the parties your report option lets you see (all, your branch, your group). A schedule runs with the scope of whoever last saved it.
- Pace - Messages go out a few every minute (Settings: bulk messages sent per minute, shared with the CRM's broadcasts), oldest run first - a large run takes a while, by design.
- On the conversation - Each message sent is written onto the person's conversation in Communications - related to the party and, for payment advice, the payment - and logged in the outbox under the kind's module.
- STOP and START - A party who answers STOP (SMS, WhatsApp, or an e-mail whose first line is STOP) gets no bulk message of any kind from then on - and, with CRM, do-not-contact on that channel. START undoes only what STOP did here; the CRM's do-not-contact is cleared by somebody allowed to.
- Bounces - When a mail server refuses an e-mail the hub sent, its report comes back to the mailbox the hub reads: the message becomes Failed (Bounced) and the address is listed under Bounced addresses, and later messages leave it out. The report itself never becomes a conversation. This needs the sending address to be a mailbox the hub reads.
7Shortcut keys #
- F3 - Preview (New run).
- F5 - Send (New run) - or Save the template or schedule being edited. In the confirm window, OK.
- Esc - Cancel the edit; with nothing being edited, close the page.
8If something does not work #
"The Communication Hub is not licensed for this company - bulk messages are part of it."
- Why
- The licence does not hold the Communication Hub (COMMHUB).
- What to do
- Contact your software vendor. Set-up
No kind of bulk message is licensed here
- Why
- Each kind needs one of its own modules: Financial Accounting or Sales for reminders, Purchase (or Financial Accounting) for payment advice, Payroll for salary notices.
- What to do
- Contact your software vendor; the custom list needs only the hub. Set-up
"Payment reminders need Financial Accounting or Sales, which this company's licence does not hold." (or another kind and its modules)
- Why
- The page or a schedule asked for a kind whose modules are not licensed.
- What to do
- Pick a licensed kind. A schedule of that kind stops and says so on its card. Set-up
"Pick what kind of message it is."
- Why
- No kind was chosen.
- What to do
- Click a kind on New run. New run
"As of: the day the bills are due on - usually today." / "From / To: the period." / "From / To: From is after To."
- Why
- The dates the kind needs are missing or reversed.
- What to do
- Fill them in. New run
"Overdue: at least is more than at most." / "Amount at least: it cannot be negative."
- Why
- The filter cannot match anything.
- What to do
- Correct the numbers. New run
"Choose who it is for - a category, ledger groups or parties. A custom list never goes to every ledger at once." (also "Who: pick a category...")
- Why
- A custom list had no filter at all.
- What to do
- Pick a category, ledger groups or parties. New run
"Type at least two characters of the party's name." / "No active ledger is named like '...'."
- Why
- The party finder needs two letters, and found nothing active by that name.
- What to do
- Type more of the name; inactive ledgers are not offered. New run
"Subject: an e-mail needs one." / "Message: write the e-mail." / "Message: write the SMS."
- Why
- The message is empty.
- What to do
- Write it - or Start from the kind's own wording. The message
"Message: an SMS is 1000 characters at most (placeholders included)."
- Why
- The SMS is too long.
- What to do
- Shorten it; {Table} is already a short list on SMS. The message
"WhatsApp number: pick the number it is sent from." / "WhatsApp template: pick an APPROVED template - WhatsApp allows nothing else to start a conversation."
- Why
- WhatsApp needs a number and an approved template.
- What to do
- Pick both. Numbers and templates come from Communications > Channel Setup (Sync templates). The message
"Template values: the template has N {{n}} - give one placeholder or text for each, separated by |."
- Why
- The values do not match the template's {{1}}, {{2}}...
- What to do
- Give exactly one value per {{n}}, in order, separated by |. The message
"WhatsApp template: it is no longer there - sync the templates..." / "Meta has not approved it." / "it belongs to another WhatsApp number."
- Why
- The template was removed, is not approved, or is another number's.
- What to do
- Sync the templates on Communications > Channel Setup and pick again. The message
"Preview (F3) first - Send sends exactly what the preview shows."
- Why
- There is no preview, or the filters or the message changed after it.
- What to do
- Press Preview (F3) again, then Send. Send
"Fix the problems listed above the preview first." / "Nobody is ticked."
- Why
- The preview listed problems, or every person is unticked.
- What to do
- Fix them, or tick somebody. Send
"No customer matches these filters." (or employee, supplier, party)
- Why
- Nobody fits the filters.
- What to do
- Widen them - a later As of, a smaller amount, fewer groups. Preview
"Nobody is left to send to - every person is left out; see each one's reason."
- Why
- Everybody found was left out - no address, opted out, too soon, already sent, or unticked.
- What to do
- Read Left out because on the preview; add addresses to the parties' contact persons (or the employee master). Send
"x@y.com bounced on dd-MMM-yyyy - correct it, then clear it under Opt-outs > Bounced addresses."
- Why
- A mail server refused that address for good, so the person is left out.
- What to do
- Correct the e-mail on the party's contact person, then Clear it under Opt-outs > Bounced addresses, and preview again. Preview
"That address is already cleared (or no longer listed)."
- Why
- Somebody cleared it meanwhile.
- What to do
- Refresh. Opt-outs
A party opted out by itself (How: Replied STOP)
- Why
- They answered STOP to a message.
- What to do
- Nothing to fix - it is their wish. If they answer START it is taken off; you may also remove it if they ask you in person. Opt-outs
"No e-mail address - add one to the contact person." / "No mobile number - add one to the contact person."
- Why
- The party has no contact person with that kind of address (an employee: no e-mail or mobile on the employee master).
- What to do
- Add it on the ledger's contact persons, then preview again. Preview
"Asked not to receive these (opt-out)." / "Opted out after the run was queued."
- Why
- The party is on Opt-outs for this kind or every kind.
- What to do
- Remove the opt-out if they now want these. Preview
"Sent one dd-MMM-yyyy - under the N-day gap."
- Why
- A schedule's least gap: this kind reached them too recently.
- What to do
- Nothing - they get the next one after the gap. Lower the gap on the schedule if it is too long. Schedules
"Already sent for this document."
- Why
- This supplier was already told about this payment.
- What to do
- Nothing to do - advice is never sent twice for one payment. Preview
"That person is no longer in the list - preview again." / "... carry no statement."
- Why
- The figures changed since the preview, or the kind has no PDF.
- What to do
- Preview again. Preview
A person Failed under Runs
- Why
- The mail server or the gateway refused it - its answer is under Why not (a wrong address, a mail account's password, the SMS balance...).
- What to do
- Fix the cause (Settings > Mail Accounts, SMS/WhatsApp Profiles, the contact's address) and send them a new run. Runs
"The kind's module is no longer licensed - nothing more is sent." / "This kind of message is not known to this version."
- Why
- A queued run was stopped because its kind's module left the licence, or the software no longer has that kind.
- What to do
- Nothing to fix here; contact your vendor about the licence. Runs
"That run has already finished - nothing is waiting to be stopped." / "That run is no longer there."
- Why
- It finished (or was removed) meanwhile.
- What to do
- Refresh. Runs
"The run was cancelled before this was sent."
- Why
- Somebody cancelled the run.
- What to do
- Queue a new run for whoever still needs it. Runs
A run stays Queued
- Why
- The background sender runs on the server each minute; it waits while an earlier run is sending, and stops if the server's worker is not running.
- What to do
- Wait a few minutes; if nothing moves, an administrator checks the API server is running. Runs
"Name: give the schedule a name." / "There is already a schedule named '...'."
- Why
- The name is missing or taken.
- What to do
- Give a unique name. Schedules
"Template: pick a saved template - a schedule sends what a template says." / "Template: it is a ... template, not ..." / "Template: it is inactive."
- Why
- A schedule needs an active saved template of its own kind.
- What to do
- Save one under Templates first, then pick it. Schedules
"Days: tick at least one day of the week." / "At: the time of day it runs, e.g. 09:30." / "Least gap: 0 to 365 days."
- Why
- The timing is incomplete.
- What to do
- Fill it in. Schedules
"Days from due: e.g. -3, 0, 7, 15, 30 ..." / "Period: which days each run covers."
- Why
- Reminders need their days from due; the period kinds need a period.
- What to do
- Fill it in. Schedules
A schedule's card says "Its template was deleted." / "Its template is inactive." / "The kind's module is no longer licensed."
- Why
- It could not run - the reason is kept on the card, and it waits for its next time.
- What to do
- Pick another template (or make it active); for the licence, contact your vendor. Schedules
A schedule's card says "Nobody matched today." / "Nobody to send today - N left out (gap, opt-out or no address)."
- Why
- It ran, but nobody was due or everybody was left out.
- What to do
- Nothing to fix - it is a report. Check Days from due and the filters if it is always so. Schedules
"Waiting for its first time."
- Why
- A schedule found without a next time learns it first - it never fires the moment it is saved.
- What to do
- Nothing - it runs at its next time. Schedules
"Name: give the template a name." / "There is already a ... template named '...'."
- Why
- The name is missing or taken for that kind.
- What to do
- Give a unique name. Templates
"Schedule(s) ... use this template - change them first, or make the template inactive." / "That template is no longer there."
- Why
- A schedule still sends it, or it was deleted meanwhile.
- What to do
- Point the schedules at another template first, or tick Inactive instead of deleting. Templates
"Pick the party who asked not to receive these." / "Find and click the party first." / "That kind of message is not known." / "That opt-out is no longer there."
- Why
- The opt-out has no party, names an unknown kind, or was removed meanwhile.
- What to do
- Find and click the party; refresh. Opt-outs
"The browser would not copy - type the placeholder instead: ..."
- Why
- The browser blocked the clipboard.
- What to do
- Type the placeholder as shown. The message
{PayLink} is blank in the preview
- Why
- The customer portal's address is not set on the server, the portal or its payments are off, or Include the payment link is off.
- What to do
- An administrator sets CustomerPortal:PortalBaseUrl and switches on online payments in the portal's settings. The message
9For an administrator #
- The sender - The API server's Communication Hub worker sends and runs schedules each minute - one sender per database at a time. Pace: setting 255.
- The payment link - CustomerPortal:PortalBaseUrl on the API server, and the portal's own settings with online payments on.
- A new kind - A module adds a kind on the server (a class in BulkCommKinds.All) - no table, page or script change; the page draws its filters and placeholders from it.
10Settings it uses #
- 255 - Bulk messages sent per minute (General settings): the pace of every bulk send, the CRM's broadcasts included. Default 60.
This is the help InvoiceNET® ERP shows beside the Bulk Messages screen. Whether you have the screen depends on the modules of your licence and the rights your administrator has given you.
See this screen for yourself
The demo is the real product, with a company of your own.