Daily operations
SMS, announcements and notifications
Choose which SMS your centre sends and who receives them, automate absence notices and nightly due reminders, price a message before sending it, and publish announcements and in-app notifications.
Last updated August 15, 2026
What you'll do
Decide which kinds of SMS your centre sends and whether they go to the student or the guardian, switch on the ones that send themselves, keep an eye on your credit balance, and publish announcements and notifications that reach students and teachers inside the app.
Before you start
- Know that every SMS costs one credit from your balance — one credit per message sent, whatever its length or language — and that credits are bought separately. See What a credit actually buys below.
- Students and teachers need correct mobile numbers on their records or nothing reaches them.
- The Settings permission for the SMS screen, Announcements for announcements, Notifications create permission for broadcasts.
Choose which SMS your centre sends
Go to Settings → SMS Notifications — Control which SMS your institute sends and track credit usage. Under Notification types you get six switches, with the reminder Each SMS sent consumes one credit from your balance.
| Switch | What it does | Default |
|---|---|---|
| Credential SMS | Send login URL, username and password by SMS when an admin creates a student, teacher or user account. | On |
| Enrollment confirmation | Send a confirmation SMS to the student when they are enrolled in a batch. | Off |
| Due reminders | Allow bulk payment-due reminder SMS from the Outstanding Dues report (manually triggered). | Off |
| Result SMS | Allow sending exam result SMS to students when results are published. | Off |
| Absence notice | One message per student marked absent for a session. Sent at most once per absence, however many times the run is triggered. | Off |
| Class cancellation notice | One message per student in the batch when a class session is cancelled. | Off |
Set them, then press Save Settings.
A switch that is off is a hard stop: the message is skipped and no credit is spent. That makes these switches the cheapest cost control you have. Two practical consequences:
- Turn Credential SMS off before a bulk data-entry session or a large import, then back on. Otherwise 300 imported students burn 300 credits on login details most of them will not read.
- Due reminders and Result SMS being on does not send anything by itself. They only permit a send that you trigger.
Result SMS has no trigger in the app today. The switch exists and the backend endpoint exists, but no screen calls it, so turning it on has no visible effect. Do not promise guardians automatic result SMS.
Sending to the guardian instead of the student
Three of the six categories can be pointed at the guardian's number rather than the student's. The choice is per category — there is no single switch that redirects everything, deliberately.
| Category | Guardian toggle |
|---|---|
| Due reminders | Send payment reminders to the guardian — The reminder goes to the guardian's phone number instead of the student's, and names the amount owed. Falls back to the student's number when no guardian number is on file. |
| Absence notice | Send absence notices to the guardian — same fallback behaviour. |
| Class cancellation notice | Send cancellation notices to the guardian — same fallback behaviour. |
| Credential SMS | None, and never will be: Never sent to a guardian: this message carries the student's own login password. |
A guardian toggle is disabled while its parent category is off, so you cannot arm something that is not sending.
Read the standing note above the switches before you turn any of them on, because it is a legal position, not a hint:
Guardian phone numbers are personal data about a third party. Sending to a guardian is only lawful under your centre's data-processing terms — switch it on per category, and only where the guardian expects to hear from you.
Two practical consequences. A fee reminder to a guardian is usually expected and uncontroversial; a message about a specific absence is more sensitive, and an older student may reasonably object. Decide per category, which is exactly why the setting is per category. And check that your enrolment paperwork actually covers contacting guardians before you switch anything on — this is the kind of thing an audit asks to see written down.
Automation — what sends without you
The Automation section is the one to be careful with: What the system sends on its own, with nobody pressing a button. Each message spends one SMS credit per segment.
That last sentence overstates the cost. Your balance is debited one credit per message, not one per segment — see What a credit actually buys below. The point of the warning still stands: these two automations spend credits without anyone pressing a button, so arm them deliberately.
Absence notices on save
Send absence notices when attendance is saved — The server sends the notices as soon as a register is saved. Leave this off to keep sending a deliberate act from the attendance screen.
Leaving it off is a defensible choice: a register saved with the wrong session selected then becomes a wrong text to thirty guardians. With it off, absence notices are still available — you just trigger them yourself.
If you arm the automation while the category is off you are told: The absence notice category above is switched off, so nothing will be sent.
Nightly due reminders
Send payment reminders nightly — A nightly job chases outstanding payments on the days-overdue you choose below.
Then Days overdue to remind on, defaulting to 3,7,14:
A comma-separated list, for example 3,7,14. A reminder goes out on exactly those days overdue — so a debt is chased on day 3, day 7 and day 14, and an old debt is not re-texted every night.
Read "exactly those days" literally. It is what stops a six-month-old debt from
costing you a credit every single night. Three or four thresholds is plenty; a list
like 1,2,3,4,5,6,7 is a way to annoy families and spend credits at the same time.
The field validates: Enter at least one number of days, for example 3,7,14. / Use whole numbers separated by commas, for example 3,7,14. / Each value must be between 1 and 365 days overdue. / The same number of days appears more than once.
The nightly job and the manual Send SMS Reminders button on Outstanding Dues share the same guard, so pressing the button after the nightly run has already chased a debt sends nothing and costs nothing.
The guard is once per debt per day, not once per student per day. Read that literally, because it is the one place a student can cost you two credits in one night. Each outstanding debt is chased separately: a frozen enrollment balance is one debt, and each monthly invoice is another. A student who owes both gets two messages and two credits on the same night, one naming each amount. That is deliberate — telling somebody about only one of the two amounts they owe would be worse than texting twice — but it is not free.
The population this actually hits is the one created by switching a batch from one-time to monthly billing part-way through: those students keep their frozen enrollment balance and start receiving monthly invoices. See Switching an existing batch to Monthly on Monthly fees and invoices. If you want one message per student, settle the frozen balances by hand rather than leaving both debts open.
When monthly invoices fall due
Monthly invoice due-day offset — Generated monthly invoices fall due on day of the month. This is the setting that decides when an invoice becomes overdue, and therefore when the thresholds above start counting. See Monthly fees and invoices.
Cancelling a class
There is no separate automation row for cancellations. Switching on Class cancellation notice is enough — the send is triggered by the act of cancelling a session, and it goes to every student in the batch (guardian-resolved if you have told it to) plus the teacher.
What a credit actually buys
One message costs one credit. CampusQ deducts a single credit each time it hands
a message to the SMS provider, and writes a single Consumption row of -1 into
Recent credit activity. Length does not change that, and neither does language:
a one-line English reminder and a long Bengali notice both cost you exactly one
credit per recipient.
So a three-segment Bengali blast to 400 students takes 400 credits off your
balance, not 1 200. You can check this yourself after any send — count the
Consumption rows in Recent credit activity and compare them with the number of
recipients; they match.
Segments are a real thing, but they are not what we bill you. A long message is split into several parts on the network, and the mobile operator charges the platform for each part. That cost is absorbed at the platform level today. Segments therefore tell you how a message will arrive and what it costs us — not what comes off your balance.
The app's own wording disagrees with this in three places and overstates the cost: the Automation hint says "Each message spends one SMS credit per segment", and the SMS composer's Credits per recipient, Max segments help text and multi-segment warning all price a message per segment. Treat those numbers as a provider segment count. The number that matters to your balance is the one in the ledger, and it is one per message. Trust Recent credit activity over any estimate on screen; the estimate is being corrected separately.
Two things that follow from this:
- Do not shorten a message purely to save credits. It will not save any. Shorten it because a two-part SMS can arrive out of order, or split mid-word, on an older handset.
- Message count is what to watch, so the real cost controls are the six category switches, the guardian toggles and the days-overdue list — not message length.
Pricing a message before you send it — the SMS composer
SMS Composer in the sidebar answers the question people ask after their first large send: what will this notice look like, and how many parts will it arrive in?
- Title: SMS composer — Draft a notice in English or Bangla and see exactly what it costs before anyone sends it.
- And immediately: Nothing is sent from this page. It drafts and prices messages only.
Describe what you want in What should the message say? — For example: Friday's class is cancelled, next class is Sunday at 16:00 — pick a Language (English and Bangla, English or Bangla), set Max segments and, optionally, Recipients so it can total the cost. Press Draft for an AI draft, or Write it by hand.
Either way you get four tiles: Characters, Segments, Credits per recipient and Free in last segment, plus Total for this audience: credits.
Read the two useful tiles and discount the other two. Characters and Segments are accurate and worth knowing: they tell you whether the notice arrives as one clean text or as several parts stitched together. Credits per recipient and Total for this audience are computed as one credit per segment, which is not how your balance is debited — those two tiles overstate the cost of any message longer than one segment. See What a credit actually buys above.
Bengali is where the segment count climbs, and the tool says so:
Bangla is sent as Unicode, which fits only characters per segment against 160 for English.
A Bengali message runs out of room in well under half the space an English one does, so the same notice can arrive in two or three parts. The composer states this as a price: This message is segments, so it costs credits per recipient. Shortening it below one segment would cost 1. And when you are close to a boundary: Only characters left before another segment — and another credit per recipient — is charged. Read both as segment warnings, not credit warnings.
For a 400-student send, your balance loses 400 credits whether the notice is one segment or three — though the composer will quote 1 200 for the three-segment version. Use the page to check how the message reads and how many parts it arrives in, then send it from the broadcast page.
Nothing student-identifying is sent to the model: No student names, phone numbers or guardian details are sent to the model. The Draft button is hidden entirely if your installation has no AI key — the character and segment count still works without it.
There is nothing to configure about the provider
There is no sender-ID field, no API key field, no provider selector and no test send on this screen, and there is no per-record "send credentials" or "resend" button anywhere in CampusQ. Delivery is arranged by us at the platform level.
Credits
The SMS credits card shows Your remaining SMS balance as SMS remaining,
with +N purchased — pending assignment while a top-up is being applied. To buy
more: Need more credits? Buy them with bKash from Subscription & Usage.
Recent credit activity below it is your ledger: Date, Type, Units,
Balance after, Description — so you can see exactly what consumed your
balance. The Type values are shown in English (Purchase, Consumption,
AdminGrant, AdminAdjustment, RefundReversal) even when the app is in
Bengali.
Every Consumption row is −1 unit. One row, one message. That ledger is the
authoritative record of what a send cost you — reconcile against it rather than
against any figure the composer quoted beforehand.
What the credential SMS says
When Credential SMS is on and you create a student, a teacher (via Create New User) or an admin user, CampusQ immediately sends that person one message of the form:
CampusQ account created. Login: https://demo-science-academy.campusqbd.com User: demostudent1 Pass: <the password you typed>
Things to be deliberate about:
- It contains a plaintext password. It is the password you typed on the form. Choose something you are willing to see in an SMS inbox, and tell the recipient to change it.
- It is silent. No confirmation dialog, no toast telling you whether it went out, no per-record retry. If somebody says they never got it, check the credit balance and the phone number.
- It fires on account creation only. Resetting a password does not send an SMS. You must pass the new password on yourself, by a channel you trust.
- Creating a teacher from an existing user sends nothing, because no new account is created.
- For your records: the message body is never stored in our logs — credential and OTP bodies are redacted — and a send is idempotent per user, so re-saving does not charge you twice.
Send due reminders in bulk
Nightly reminders (above) do this on a schedule. The manual run is still there for the times you want to chase a specific list now, on Reports → Outstanding Dues.
- Filter the report down to who you actually want to chase.
- Press Send SMS Reminders. The tooltip states the cost: Send a payment-due reminder SMS to every student in this filtered list (1 credit per SMS).
- The confirmation restates the count: Sends a due-reminder SMS to up to 42 student(s) matching the current filters. Each SMS costs 1 credit. Press Send.
- You get a breakdown: 42 sent, 3 already sent today, 1 skipped.
Both figures on the tooltip and the confirmation are right: a reminder is one credit, whatever it says and whichever language it is in.
The already sent today count is a same-day guard, and the nightly job shares it —
so pressing the button again does not re-send anything that has already gone out
today. The guard counts debts, not people. Pressing it twice will not chase the
same debt twice, but a student who owes two things — a frozen enrollment balance and
a monthly invoice — is chased once for each, so the 42 sent above can cover fewer
than 42 students. See Nightly due reminders above, and Switching an existing
batch to Monthly on
Monthly fees and invoices.
Some filters block the send, with the reason stated: Reminder SMS can only be filtered by course, batch and days overdue. Clear the class level, academic group, roll number and invoice filters first — otherwise the messages would reach more students than the list shows. That is a safety rule. The SMS job filters on fewer fields than the report does, so a narrower on-screen list would have produced a wider send. See Reports.
If the switch is off you are told what to do: Due reminders are disabled — Enable 'Due reminders' under Settings → SMS Notifications first. If your balance runs out mid-run: Out of SMS credits — N sent before the balance ran out. Top up your credits to continue. Note that some students were messaged; check the count before you re-run.
Publish an announcement
Announcements — Publish to everyone, a course, or a batch — students and teachers are notified in-app.
Press New Announcement and fill in:
| Field | Notes |
|---|---|
| Title | Short and specific. |
| Message | The body. |
| Scope | Everyone, One course or One batch. Picking a course or batch reveals a Course / Batch picker. |
| Audience | Students and teachers, Students only or Teachers only. |
| Pin to the top | Keeps it above the rest of the list. |
Press Publish. You get Announcement published. Recipients were notified.
Scope and Audience are two independent filters. Scope narrows by structure (everyone / a course / a batch); Audience narrows by persona (students / teachers). One batch plus Students only is how you reach exactly one class's students.
An announcement is not an SMS. It reaches people inside the app — and, for anyone who has turned on browser notifications, as a device notification. Nothing is sent to a phone as a text message. For something that must reach a guardian who never opens the app, use the due reminders run, or ring them.
Editing an existing announcement still shows a Publish button; that is the save button, not a second publish. Deleting is permanent: Permanently remove "Fee deadline moved"?
Send a broadcast notification
Broadcast (hidden on the essentials-only menu — see Getting started) is headed Send Notification: Compose a broadcast notification. Every recipient gets an in-app alert, and push subscribers also get a device notification.
| Field | Notes |
|---|---|
| Title | Up to 120 characters. |
| Message | Up to 400 characters. |
| Link (optional) | Must be a relative in-app path starting with / (e.g. /announcements). |
| Audience | Everyone, Students, Teachers, Admins or One batch. |
You are told the size of the send before you commit — 312 recipients will be notified. — and again in the confirmation: This will notify 312 recipients immediately and cannot be undone. Continue?
There is a limit of 10 broadcasts per hour for the whole centre. Past it you get You've reached the limit of 10 broadcasts per hour for this tenant. Try again later.
Use announcements for things worth keeping and re-reading; use a broadcast for a one-off nudge.
The notification bell
Everyone's notifications live behind the bell in the top bar, on every screen.
The unread count sits on the bell (9+ above nine). Inside: each notification's
title, body and relative time, a check button on each row to mark it read, and
Mark all as read at the top while anything is unread. Clicking a row opens what
it points at and marks it read. Empty state: No notifications yet.
This popover is the whole notification interface — there is no full-page notifications list.
Device notifications
At the bottom of the same popover — and again under Settings → Branding, in a section headed Notifications — is a per-device switch: Turn on browser push notifications for this device to get announcements and reminders as they happen. It reads Enable notifications or Turn off notifications, and Notifications are blocked in your browser settings. if the browser has refused.
This is per person and per device, and each of your staff and students turns it on for themselves. It costs no SMS credits.
Notes
- Six SMS categories. Credential, enrollment confirmation, due reminders, results, absence notice and class cancellation. There is still no exam-reminder SMS and no announcement SMS.
- One credit per message, not per segment. Length and language do not change what comes off your balance — one message, one credit. The composer and the automation hint price messages per segment; those figures are provider segment counts and overstate your cost.
- A switch that is off spends nothing — the message is skipped entirely.
- Two things send on their own once armed: absence notices on register save, and the nightly due-reminder job. Everything else waits for you.
- Due reminders are guarded per debt per day, not per student. A student who owes both a frozen enrollment balance and a monthly invoice gets one message about each, the same night.
- Guardian targeting is per category, never global, and it is third-party personal data. Confirm your data-processing terms cover it.
- Credential SMS is on by default. Check it before your first import.
- There is no sent-SMS log for you. We keep a log at the platform level for support and audit purposes, with credential and OTP bodies redacted; you see consumption through Recent credit activity, not individual messages.
/settingsis three separate screens, not tabs: Branding, System and SMS Notifications, each its own sidebar entry.- English-only strings: the credit-activity Type values, and the scope and
audience chips on each announcement card (
To: All,Everyone), and the Mark as read tooltip on the bell. - Personal data. Login credentials by SMS, and the guardian link described on the Students page, both put personal information onto a phone you do not control. Keep numbers accurate, and re-issue rather than re-share when somebody changes number.
Troubleshooting
Nobody is getting any SMS. Check the balance on Settings → SMS Notifications first, then the relevant switch, then the phone number on the person's record.
My credits are draining and I do not know on what.
Read Recent credit activity. The Description names the kind, e.g. SMS sent: Credential.
A student never received their login details. There is no resend. Set a new password on the student record and save — that does not send an SMS either, so pass the password on yourself. Prevent it next time by confirming the phone number before saving.
Send SMS Reminders is greyed out or complains it is disabled. Turn on Due reminders under Settings → SMS Notifications.
I turned on Result SMS and nothing happens when I publish results. Correct — there is no trigger for it in the app today. Do not rely on it.
Absence notices are not going out. Three things have to be true: the Absence notice category is on, you have credits, and — if you expect it to happen without you — Send absence notices when attendance is saved is on too.
The composer said a Bengali notice would cost three credits per student.
It will not. Bengali is sent as Unicode, so it needs more segments than English, and
the composer prices a segment as a credit — but your balance is debited once per
message. Check Recent credit activity after the send: you will find one -1 row
per recipient. See What a credit actually buys above.
One student was texted twice about fees on the same night. They have two open debts — almost always a frozen enrollment balance plus a monthly invoice, which is what switching a batch to Monthly mid-course leaves behind. The reminder guard is per debt, so each is chased once. Settle the frozen balance to stop it.
Guardians are getting messages I meant for students. Check the per-category guardian toggles. There is one per category rather than a global switch, so it is likely only one category is redirected.
The nightly reminder job is texting the same family every night.
It should not — reminders fire only on the exact days-overdue you listed. If you
entered something like 1,2,3,4,5,6,7, that is the list doing what you asked.
A guardian says they got no announcement. Announcements are in-app only, and guardians have no login. Guardians see attendance, dues and results through the guardian link instead — see Students.
Broadcast says the recipient count is zero. No recipients match this audience yet. Nobody holds that persona, or the batch you picked has no active enrollments.