Surfaces
SMS Blasts
Attendee SMS campaigns, phone readiness, country-code policy, device/SIM selection, and delivery logs.
First created Last updated
Overview
SMS Blasts is the channel-specific Communications page for sending plain SMS messages to attendee phone numbers. It uses the same audience and exact-attendee targeting model as Email Blasts, then adds SMS-only safety checks: phone normalization, attendee SMS preference, country-code grouping, selected-SIM home-country policy, Android device readiness, retry handling, and privacy-safe logs.
SMS Blasts does not create attendee notification inbox entries. Use Email Blasts or the Email + inbox tab in row-level Notify modals when the attendee also needs a rego-site inbox copy.
SMS is the default transport. Consumer RCS must stay disabled unless a future certified regular-user RCS capability is explicitly available for the selected Android path. RCS Business is not the cost-saving path for this feature.
[!IMPORTANT] SMS Blasts does not authorize Event Planning System staff reminders. An attendee campaign uses event audiences and the attendee’s announcement preference. An EPS reminder uses one authenticated planning user, a separately verified E.164 destination, explicit EPS operational-message consent, a planning outbox identity, and terminal-work cancellation. The two products may share the online Android transport, but never share recipient records, consent, campaigns, jobs, audit history, or retry decisions.
Dashboard route
/ems/manage/communications/sms-blasts?id=:eventId
The page belongs to the online dashboard and can use the EMS LAN Android wrapper only when the wrapper is in online mode. Local LAN server mode cannot register as an SMS blast device, lease campaign jobs, send attendee SMS, or expose SMS campaign payloads.
Link an Android wrapper device
Device linking is not a separate pairing-code flow. The online dashboard links the Android wrapper when the partner opens SMS Blasts inside the trusted EMS LAN Android app while signed in to the partner account.
| Step | Action | Verification proof | Stop if |
|---|---|---|---|
| 1 | Install or open the EMS LAN Android wrapper on the phone that has the sending SIM. | The app opens the online dashboard host, not the local LAN server. | The wrapper is pointed at a local LAN URL or offline server mode. |
| 2 | Switch the wrapper to online dashboard mode and sign in with the partner account that can manage the event. | The event dashboard opens under the same partner scope as the event. | The account cannot open the event or the page shows Not authenticated. |
| 3 | Open /ems/manage/communications/sms-blasts?id=:eventId from inside the wrapper. | The SMS Blasts device panel reports the wrapper capability state. | Opening the same page in a normal desktop browser will not provide Android SMS capability. |
| 4 | Select Enable SMS on this device, then grant Android SMS and phone-state permissions. | The device panel refreshes and the enable action disappears after both permissions are granted. | Android denies SMS permission, phone-state permission, or SIM access; use the opened app-settings screen to correct it. |
| 5 | Wait for SIM inventory to sync. | The Sending device and SIM dropdown lists the wrapper device, SIM slot, carrier when available, and masked line number when Android reports one. | No SIM appears, the SIM is inactive, or the device is roaming. |
| 6 | Select the sending SIM and verify the SIM country and calling code. | The SIM can be selected and the verification action succeeds. | The operator cannot confirm the SIM home country or calling code. |
Keep the Android wrapper open on SMS Blasts while sending. The page starts the online SMS gateway foreground service and drains receiver events while it is open; the Platform API remains the source of truth for campaign state, retries, failures, and logs.
EPS scheduled reminders use their own background-capable gateway drain and do not depend on this campaign page remaining open. That path still requires online mode, a current native device credential, Android permissions, an eligible verified non-roaming SIM, partner/country/segment/cost policy, and a pre-send cancellation recheck. LAN/offline mode cannot lease attendee campaigns or EPS reminder jobs.
Recipient controls
| Control or element | Type | What it does | Operational impact | Check before using |
|---|---|---|---|---|
| Audience groups | Checkbox mode | Shows generated event recipient groups such as everyone, attendees, staff, volunteers, dealers, applicants, and waitlisted attendees. | Selects broad sets of attendee accounts before SMS readiness is applied. Overlapping groups are deduplicated by the API. | Confirm the group is not broader than the SMS announcement scope. |
| Specific attendees | Checkbox mode | Shows the exact-attendee picker with SMS readiness fields. | Lets staff target named attendees without sending to a full group. | Use when the message is a support follow-up, correction, or narrow operational update. |
| Audience group cards | Checkbox list | Selects one or more generated audience groups and shows ready/total counts. | Drives audienceIds in the SMS preview and campaign create request. | Re-check ready and blocked counts after every selection change. |
| Search attendees | Search input | Filters by attendee, username, masked phone, source, country, status, or eligibility. | Narrows the picker view only; it does not change attendee records. | Clear the search before deciding an attendee is unavailable. |
| Filter | Status filter dropdown | Narrows the attendee picker by SMS readiness or attendee state. | Helps isolate ready, invalid, opted-out, or missing-phone recipients. | Confirm the filter is not hiding intended recipients. |
| Select visible | Checkbox | Selects or clears the attendee rows visible under the current search and filter. | Can add many exact attendees at once. | Check the current search and filter first so hidden rows are not accidentally skipped. |
| Recipient preview | Generated summary | Recalculates selected recipients, ready counts, blocked counts, segment count, and country groups. | Shows whether the current recipient set is safe to queue. | Stop if a country group, blocked reason, or ready count is unexpected. |
Readiness fields
| Field or requirement | What it shows | Operational impact | Stop if |
|---|---|---|---|
| E.164 phone readiness | Whether the attendee contact number can be normalized to a known SMS destination. | Only ready recipients can become sendable SMS records. | The number is missing, invalid, ambiguous, premium/satellite, or otherwise unsupported. |
| Attendee SMS announcement preference | Whether the attendee allowed optional event SMS announcements. | Optional SMS blasts must respect this preference separately from email preferences. | The attendee disabled event SMS announcements. |
| Country calling code | The destination calling code derived from the normalized phone number. | Used for grouping and selected-SIM policy. | The code is unknown or does not map to an allowed country policy. |
| ISO country | The normalized destination country. | Helps operators review cost and policy risk by country group. | The profile country and phone country need review before sending. |
| Country group summary | Ready and total counts by country calling code. | Prevents accidental mixed-country or international sends. | The selected SIM home country does not match the selected recipient country group. |
Device and SIM controls
| Control or element | Type | What it does | Operational impact | Check before using |
|---|---|---|---|---|
| Online Android device state | Generated readiness panel | Shows linked online wrapper devices, permissions, foreground service state, local outbox evidence, and API requirements. | SMS sending is unavailable without a trusted online wrapper session. | Stop if the wrapper is offline, in LAN mode, missing permissions, or unlinked. |
| Enable SMS on this device | App-only button | Requests Android SMS, phone-state, and notification permissions, then refreshes device and SIM readiness. | Makes first-run setup actionable inside SMS Blasts; denied permissions open Android app settings. | This control is intentionally absent in a normal website browser, which queues through an already linked online app. |
| Sending device and SIM | Select dropdown | Chooses the linked Android device and SIM slot used for the campaign. | The selected SIM controls which destination country group can be sent by default. | Confirm the device, SIM slot, masked line, carrier, and active/non-roaming state. |
| SIM country | Text input | Stores the partner-verified ISO country for the sending line. | Prevents trusting Android-detected line numbers without partner review. | Stop if the operator cannot verify the SIM home country. |
| Calling code | Numeric input | Stores the partner-verified country calling code for the sending line. | Used to block recipients outside the selected SIM home-country policy. | Stop if the calling code does not match the verified SIM country. |
| Verify SIM | Button | Saves the selected SIM verification before queueing. | Allows the selected line to lease matching SMS jobs. | Verify only a line the partner controls and expects to pay for. |
Composer and campaign controls
| Control or element | Type | What it does | Operational impact | Check before using |
|---|---|---|---|---|
| SMS message | Plain text textarea | Sets the SMS body for every selected ready recipient. | Long messages may become multipart SMS segments. | Keep copy short and include enough event context without relying on formatting. |
| Queue SMS blast | Button | Creates an SMS campaign and per-recipient records using the selected audiences, attendees, device, SIM, and message. | Ready matching-country recipients can be queued; blocked recipients are saved for audit without sending. | Confirm recipient preview, selected SIM, message text, and SMS-only transport before queueing. |
| Notify modal SMS tab | Tabbed modal surface | Lets row-level Notify actions queue a narrow SMS blast to the selected attendee account instead of sending Email + inbox. | Uses the same SMS readiness, device/SIM, country-code, and campaign queue API as SMS Blasts. | Confirm the operator understands that this sends SMS only and does not create a rego inbox notification. |
| Campaign monitor | Generated panel | Lists recent SMS campaigns with status, ready count, failures, and retry count. | Gives staff a dashboard view of queue health and unresolved failures. | Review failures before sending a duplicate campaign. |
| Review entries | Button | Opens the selected campaign’s per-recipient SMS queue entries. | Shows which entries are failed, pending, sent, delivered, blocked, or retry-ready. | Use this before retrying so only failed entries are selected. |
| Retry selected failed | Button | Requeues only the checked failed entries in the open campaign. | Lets staff recover a partial campaign without creating a duplicate blast for successful recipients. | Select only entries that are truly failed; do not retry sent_unconfirmed entries as failures. |
| Retry all failed | Button | Requeues every currently failed entry in the selected campaign. | Useful after fixing an Android wrapper, SIM, permission, or transient carrier issue. | Confirm the cause is fixed and the wrapper is online before retrying. |
| Mark sent | Button | Manually marks a campaign entry as sent and writes an audit event. | Corrects the API record when staff has reliable device or carrier evidence that the SMS was accepted. | Use only when there is clear proof; this does not send another SMS. |
| Mark error | Button | Manually marks a campaign entry as failed/error and writes an audit event with a note. | Lets support close stuck or externally verified failed entries without waiting for another receiver event. | Record a concise reason so later operators can understand the override. |
| Feedback alert | Generated status | Shows queue, verification, readiness, or dispatch errors. | Gives immediate operator feedback after API or native bridge actions. | Read the error before retrying; repeated clicks can create duplicate campaigns if the first request actually succeeded. |
Delivery states
| State | Meaning | Operator response |
|---|---|---|
blocked_device_required | The campaign or message is recorded but cannot be sent because no verified online Android wrapper device and non-roaming SIM were selected. | Link and verify the device/SIM before queueing another campaign. |
blocked_recipient | A recipient did not pass phone readiness, country-code policy, attendee preference, or profile-country review. | Correct the attendee profile or remove that recipient before sending. |
queued | API accepted the message job but no device has leased it yet. | Confirm the online wrapper is open and connected. |
leased | A verified device/SIM has temporary ownership of the attempt. | Wait for sent, delivered, failure, or lease expiry. |
sent | Android reported SMSC acceptance. | Do not treat this as handset delivery unless a delivery report arrives. |
delivered | Android received a delivery report. | No action needed. |
sent_unconfirmed | The message was submitted, but no delivery report arrived before timeout. | Review carrier/device behavior before resending. |
retry_scheduled | A retryable failure occurred and the API scheduled another attempt. | Keep the wrapper online and review the next attempt time. |
lease_expired | The wrapper leased a job but did not acknowledge it before the API timeout. | Keep the wrapper online and review local outbox or device logs if retries are exhausted. |
failed_terminal | The route, number, permission, SIM, or policy cannot be retried safely. | Fix the cause or notify the attendee through another channel. |
Android wrapper behavior
When SMS Blasts is open inside the trusted online Android wrapper, the page can register the wrapper, sync SIM inventory, start the online SMS gateway foreground service, lease queued jobs, submit each leased SMS through the native bridge, drain Android sent/delivered/failed receiver events, and report those receiver-backed results back to the SMS status API. The page keeps a bounded queue drain loop running while open so retry-ready jobs can continue moving without another campaign creation click.
The website uses the same campaign composer and monitor without exposing native Android controls. It can queue to any verified wrapper device reported online; the matching Android app must remain open on SMS Blasts to lease and dispatch those website-created jobs.
The Android wrapper keeps a capped local outbox for leased attempts it has been asked to submit. Operators should still treat the Platform API campaign log as the source of truth, but support can compare local outbox counts and drained receiver events against API attempts when a device, WebView, or network interruption occurs.
API records
| Record or route | What it represents | Verification proof |
|---|---|---|
/api/events/:id/communications/sms-blasts/audiences | Audience counts, SMS eligibility, blocked reasons, and country groups. | Selected audienceIds match the intended groups and the ready/blocked counts are reviewed. |
/api/events/:id/communications/sms-blasts/attendees | Exact-attendee SMS readiness records for the picker. | Selected attendeeAccountIds belong to the current event and show expected readiness. |
/api/events/:id/communications/sms-blasts/preview | Current recipient selection, segment count, exclusions, and country groups. | Preview output matches the selected audience groups, exact attendees, and message body. |
/api/events/:id/communications/sms-blasts/devices/* | Online wrapper device, SIM inventory, SIM verification, lease, and status contracts. | Device ID, SIM ID, slot, masked line, permission state, and status events agree with the campaign log. |
/api/events/:id/communications/sms-blasts/campaigns* | Campaign records, per-recipient status, retries, failures, and masked logs. | Campaign counts and delivery events explain what was sent, blocked, retried, or failed. |
/api/events/:id/communications/sms-blasts/campaigns/:campaignId/retry-failed | Smart-retry endpoint for all failed entries or a selected list of failed message IDs. | Only failed, sendable entries are moved back to retry-ready state and logged as manual_smart_retry. |
/api/events/:id/communications/sms-blasts/campaigns/:campaignId/messages/:messageId/manual-status | Manual sent/error override endpoint for a campaign entry. | Updates the entry state and writes a manual_partner_override audit payload in SMS delivery events. |
Consumer RCS
Consumer RCS is not assumed available. It depends on Android version, default messaging app behavior, device/OEM support, carrier, region, recipient settings, and whether the wrapper can legally and reliably act as the default SMS app or supported alternate transport.
Do not use UI automation or another app’s Send button as an RCS implementation. If consumer RCS is unavailable or uncertified, SMS remains the only send path.
Flowchart context
Active Event Workflow links to SMS Blasts when a short phone-number announcement is needed and the event has verified online Android sending capability. Use Email Blasts for branded email and inbox copy, and use Notification Config for private staff webhook alerts.
Common mistakes
- Do not queue before selecting and verifying a non-roaming online Android SIM.
- Do not assume a local-looking country code proves the attendee is physically local or not roaming.
- Do not send to mixed-country recipients from a SIM whose home-country policy allows only one destination group.
- Do not trust Android-detected line numbers until the partner verifies the SIM country and calling code.
- Do not retry
sent_unconfirmedmessages as if they definitely failed.