Skip to main content

Send an SMS Campaign

Get a short, time-sensitive message into every recipient's pocket — an OTP, an appointment reminder, a flash promo — through your own verified SMS provider (Twilio, MSG91, Exotel, or Kaleyra). SMS is the fastest, highest-reach channel when you need people to read something now. This page covers the SMS-specific choices: which provider you send from and which approved template (with its {{variables}}) goes out. Audience, Schedule & Review, and Stats work the same for every channel and are linked below.

Entry pointGrowth → Campaigns → New Campaign

Article summaryDetails
RequiresA connected and Verified SMS account (Twilio / MSG91 / Exotel / Kaleyra) and at least one approved SMS template.
Where to goGrowth → Campaigns → New Campaign → Setup → SMS.
Time to set up2-4 minutes for the SMS-specific steps, before audience selection.

Who Can Do This

  • Growth operators and marketing managers create SMS campaigns.
  • Account admins are usually needed once — to connect and verify the SMS provider account and to approve the templates the team uses.
  • Sales managers review the audience, the post-send delivery history, and any replies that come back.

What You Need

  • A Verified SMS account under Automation → Integrations → SMS. Without at least one Verified provider account, the SMS sender panel on Setup stays empty and you can't continue. See:
  • At least one approved SMS template in the template library — Brixi does not let you compose an ad-hoc SMS body in the campaign creator. Every SMS campaign sends a pre-approved, versioned template (OTP, Transactional, or Promotional).
  • A clean recipient list with first name, last name, and a valid PhoneNumber column including the country ISD code (+919876543210, not 9876543210). See Campaign Audience for the full CSV format.
  • A schedule decision — send now, or pick a date / time / timezone.
  • For India sends: a DLT-registered Sender ID and DLT Template ID must already be configured on the SMS account (MSG91 connect covers this end-to-end).

Pick the Display Name on the SMS account so it signals the use case, not the provider — e.g., India transactional rather than Twilio 1. The campaign sender picker shows the Display Name, not the SID, so whoever picks it later doesn't have to know which provider is underneath.


SMS Campaign Flow At A Glance

Brixi uses the same 4-step creator for every campaign channel:

  1. Setup — name the campaign and pick the channel + sender. SMS sender is SMS-specific, the rest is shared.
  2. Content — pick the message. SMS templates are SMS-specific — short body, {{variables}}, and (for India) DLT-registered IDs.
  3. Audience — choose Contact List, Dynamic Segment, or CSV / XLSX upload. Shared across all channels — see Campaign Audience.
  4. Schedule & Review — review the Launch Summary and send now or schedule. Shared across all channels — see Schedule & Review.

Only Setup and Content are SMS-specific. The rest of this page goes deep on those two, then links to the shared docs for the other two steps so the same instructions don't get repeated for every channel.


Step 1 · Setup — Name the Campaign and Pick the SMS Sender

Open Growth → Campaign → + New Campaign. The Setup step (titled Create the campaign shell) opens with three things to fill in:

  1. Campaign Name — used in the campaign list and the stats view. Keep it descriptive — e.g., 2026-06 OTP fallback or bengaluru_may_23 reminder.
  2. Delivery channel — pick SMS (the Fast text messaging card). The instant you tick SMS, the right-hand Sender account panel turns into SMS sender and lists every Verified SMS account in the workspace.
  3. SMS sender — search or scroll the list, click the SMS account you want to send from. An SMS sender selected badge appears, the sender row highlights, and a Setup ready badge replaces Setup incomplete in the top-right.

When the badge says Setup ready, Continue lights up. Click it.

Setup step on an SMS campaign: name the campaign (e.g., sms-campaigns), tick the SMS channel card (Fast text messaging), the right-hand SMS sender panel populates with every verified SMS account, pick one, the Setup ready badge appears, Continue lights up.

No senders in the list?

The SMS channel is selected but the right-hand panel stays empty — that means no SMS account is Verified for this workspace. Connect one first (see Connect Twilio or Connect MSG91), make sure it shows Verified under SMS Accounts, then reload the creator. Draft / Failed accounts are not listed.

Why the sender choice matters

ChoiceWhat it affects
The Sender ID subscribers seeThe provider's registered Sender ID is the literal sender on every send (a phone number for Twilio, an alphanumeric or short code for MSG91 / Exotel / Kaleyra).
Whose delivery / billing is usedSends are billed to the underlying provider account — Brixi is a passthrough.
Which DLT entity / template IDs applyIndia sends route through whichever DLT Entity ID is configured on the chosen account. Templates and Entity IDs must match.
Where replies landInbound SMS reply handling depends on the provider — see the provider's connect page for reply / webhook setup.

Step 2 · Content — Pick an Approved SMS Template

The Content step (titled Message Design — Select a template) shows every SMS template the workspace owns. Each card has:

  • Template name and version — e.g., MFA_PHONE_NUMBER_LOGIN_WEB_OTP_V1, ONBOARDING_MOBILE_NUMBER_VERIFICATION_V1, test_promotion.
  • Preview snippet of the body — e.g., {{otp}} is your OTP for signing in to Brixi. – Brixi.
  • Type badge — typically OTP, TRANSACTIONAL, or PROMO.

Click the Search templates by name box to filter, then click a card to load it on the right. The right pane switches from "Choose a template to preview — The selected content preview will appear here" to the rendered template body with the variables left as literal {{name}} so you can see exactly what will be substituted at send time.

Approved templates only — Brixi does not let you compose or paste an ad-hoc SMS in the campaign creator. Every SMS campaign uses a versioned, pre-approved template.

Open the preview before continuing. SMS templates render the variables as literal {{otp}} / {{code}} in preview — the live send substitutes them per-recipient from the audience CSV (or the workflow that triggered the send). If a variable is missing in the audience CSV, the live send falls back to whatever the template's default expression specifies — often a blank.

SMS templates vs Email templates

SMS templatesEmail templates
Body lengthTight — typically one or two SMS segmentsFull HTML body
AttachmentsNone (SMS doesn't support files)Global attachments on the Content step
VariablesInline {{variable}} onlyInline + template-side defaults
ApprovalWorkspace approval + (India) DLT Template IDWorkspace approval only
Per-recipient costPer-segmentPer-send

When a template card is highlighted, click Continue → moves to Audience.


Step 3 · Audience — Pick Your Recipients

The Audience step is shared across all four channels — the same three options (Contact List / Dynamic Segment / File Upload) appear regardless of channel. SMS-specific details:

  • Sample CSV header is FirstName, LastName, PhoneNumber.
  • A row without a valid phone is skipped — phones are the join key.
  • Phone numbers must include the country ISD code (+919876543210, not 9876543210). Rows without +<country> prefixes are dropped.
  • The sample-contacts preview shows a Variables detected badge if the CSV includes columns beyond the required three (e.g., otp, code, name) — those values become template variables on the matching template.
  • The mandatory compliance checkbox — "I confirm that I have acquired these contact details through explicit opt-in and have legal permission to send them marketing communications" — must be ticked before Continue lights up.

SMS campaign Audience step: Contact List option chosen, Saved Contact List dropdown opens, pick a previously saved list (e.g., bengaluru_may_23), the Estimated audience tile refreshes to show the live contact count.

The full audience picker, dynamic segments, CSV format, and common upload errors are documented once for every channel on the shared audience page:

Campaign Audience


Step 4 · Schedule & Review — Schedule or Send Now

The Schedule & Review step is shared across all four channels. SMS's Launch Summary shows Connector = the SMS account (Display Name) and the Template preview block with the body and its variables.

Schedule &amp; Review for an SMS campaign: Send Now / Schedule Later modal, date / time / timezone picker, the Launch Summary card showing Channel = SMS, Connector = Campaign Sender, Audience = the chosen list, Timeline = Send immediately, Template = the chosen SMS template — then Send Campaign.

The full schedule + launch behaviour — Send Now vs Schedule Later, timezone picker, Launch Summary, Preview / Test, Publish / Update / Reschedule — is documented once on:

Schedule & Review


After the Campaign Is Created

Once the campaign is created, the Campaigns list (Growth → Campaign) shows it with the SMS channel tag, status, audience count, schedule, and an Actions menu (...) on the right of the row. The menu changes slightly based on the current status:

StatusAvailable actions
DraftView · Edit · Go to Publish · Schedule · Clone · Delete
ScheduledView · Edit · Schedule · Pause · View Stats · Clone · Delete
PausedView · Edit · Resume · View Stats · Clone · Delete
Sending / SentView · View Stats · Clone · Delete

SMS campaign list-row actions: the Publish + Schedule inline buttons send / schedule directly. Open the … menu to View, Edit, Go to Publish, Schedule, View Stats, Clone, or Delete. Clone makes a second row (sms-campaigns (Copy)) as a fresh Draft — schedule the copy via the Schedule modal, then Pause it to flip the status to Paused.

  • View opens a read-only copy of the 4-step creator. Every field — sender, template, audience, schedule — is visible but the badge in the top-right reads Read only.
  • Edit opens the creator with Update Campaign instead of Send / Schedule — change any step, then Update Campaign.
  • Go to Publish opens the campaign at the Schedule & Review step with Publish ready (useful when you saved a Draft halfway through).
  • Schedule (inline button or menu) opens the Schedule Campaign modal with Send Now / Schedule Later. On an already-Scheduled campaign, this is the same modal — it re-schedules.
  • Pause stops a scheduled campaign before its send time. A Campaign paused toast appears and the status flips to Paused; the action becomes Resume in the menu.
  • Clone copies the campaign into a new Draft with sender, template, and audience pre-filled. The clone has (Copy) appended to the name and a Campaign cloned as draft toast appears. Useful for recurring sends — clone the last campaign, swap the audience or template, reschedule.
  • Delete removes the campaign. Sent campaigns keep their stats — but the campaign row disappears from the list.

Review Campaign Stats

When an SMS campaign starts sending, View Stats opens the campaign's delivery history with the same 8 status tiles every channel uses. SMS-specific interpretation:

TileWhat it means for SMS
ScheduledRecipient is queued — campaign hasn't reached this row yet.
PausedRecipient held mid-send by a Pause action.
SendingRecipient handed to the SMS provider — awaiting accept.
SentAccepted by the provider (Twilio / MSG91 / etc.). Not yet confirmed delivered.
DeliveredProvider returned a DLR (Delivery Receipt) confirming the carrier accepted the message.
EngagedInbound reply received on the SMS account (only providers that support inbound).
FailedProvider rejected, DLT mismatch (India), bad phone number, or carrier reject.
CancelledSkipped — audience pruned before send, Pause window expired, or a manual cancel.

Below the tiles, Total audience records confirms how many rows came in from the audience step, and the per-recipient table breaks down each row's outcome. Use Export Result (top-right) to download the full delivery history as a CSV — the export includes the provider's message SID / DLR reason so you can correlate with Twilio / MSG91 logs.

The shared stats reference covers tile-by-tile definitions, the audience delivery history table, and Export Result in detail:

Campaign Stats


Common Issues

IssueWhat to check
SMS channel card greys out as soon as I select itPage hasn't finished loading — wait for the sender panel to render, then click again.
SMS sender panel stays empty after picking SMSNo SMS account is Verified. Connect Twilio / MSG91 / Exotel / Kaleyra and verify the account first (see SMS integration), then reload the creator.
Continue stays disabled on SetupBoth Campaign Name and a selected SMS sender are required — confirm the Setup ready badge shows in the top-right.
Template list is emptyNo approved SMS templates exist in this workspace. An admin needs to publish at least one in the template library.
Template preview shows raw {variable} placeholdersExpected — preview keeps the variable expressions visible. The live send substitutes them per-recipient from the audience CSV.
Recipients get the SMS but variables are blankThe audience CSV is missing the variable column the template expects (e.g., otp, code). Re-upload with the column included, or pick a template that doesn't require it.
Sends rejected with DLT mismatch (India)The template's DLT Template ID and the SMS account's DLT Entity ID don't match. Re-register the template against the same Entity ID, or pick a template registered against the right Entity.
Sends rejected with Invalid From number (Twilio)The Sender ID isn't a number on the same Twilio account, or the number is in Twilio Trial mode and the recipient is unverified.
Recipients get the SMS from a wrong / unfamiliar numberAn admin changed the Sender ID on the SMS account between scheduling and send. Re-verify the sender on the campaign before launch.
Campaign moves straight to FailedThe SMS account is no longer Verified (credentials rotated, account suspended) — re-verify under Automation → Integrations → SMS then Resume the campaign.
Sent count is lower than audience countRows without a valid phone (or rows missing the +<country> prefix) were skipped at send time. Open View Stats → Failed to see which rows.
Delivered count stays lower than SentCarrier never confirmed delivery — common for international sends. The provider console (Twilio / MSG91) usually has more granular DLR codes.
Engaged stays at 0Inbound SMS isn't enabled on the chosen account — the provider needs a reply webhook configured (Twilio Messaging Service inbound URL, MSG91 inbound number).

An empty SMS sender panel, a missing template, or a DLT mismatch on India sends are all admin-side fixes — ask your admin to verify the provider account under Automation → Integrations → SMS and to confirm the template's DLT IDs match the account's Entity ID.

Contact Brixi support if the account shows Verified, the template is approved, and sends still fail without a provider-side reason in the Export Result CSV. Include the campaign name, the SMS account's Display Name, and a couple of failed rows from the export.

Related articlesCampaigns overviewCreate a campaign (any channel)Email campaignWhatsApp campaignVoice Call campaignCampaign AudienceSchedule & ReviewCampaign StatsSMS integration overviewConnect TwilioConnect MSG91
Was this article helpful?If something is unclear or out of date, email support@brixi.ai with the article title — or see Getting Help for what to check first.