Skip to content

Send SMS campaigns

How-to guide
For:
Publishers and marketers, Workspace admins
Needs permission:
providers:managesensitive, campaigns:sendsensitive, sms:sendsensitive
In the app:
Sending providers, then SMS, then Providers

ReputeCast lets you run SMS marketing self-hosted, through your own account at Twilio, Vonage, Plivo, Telnyx or AWS End User Messaging. Texts are routed by country to a registered sender, go only to people who agreed to texts on that list, wait for quiet hours to end and stop on their own when failures, carrier filtering, opt-outs or your budget pass a limit.

  • Connecting providers, adding senders and changing routes and rules needs providers:manage (Owner and Admin). Everyone with providers:view can see them and use the route tester.
  • Sending or scheduling an SMS campaign needs campaigns:send and sms:send. Publishing an automation with an SMS step needs automations:publish and sms:send. Both send keys are sensitive permissions; without them the composer offers Review & request approval.
  • Have an account at the SMS provider and at least one sender that is registered for the countries you text (see Senders and registration).
  • Contacts need a phone number and SMS consent on the list you send to. Consent for texts is separate from email.
ProviderKindEvent webhooksSuppression syncNotes
TwilioProgrammable Messaging APISigned with a webhook shared key ReputeCast creates (X-Twilio-Signature)From replies and refused textsConnect with an API key SID and secret, never the auth token. Toll-free, 10DLC and sender IDs outside the US and Canada.
VonageSMS APISigned webhooks, HMAC-SHA256 with the account signature secretFrom replies and refused textsVonage reports no registration status through its API, so sender registrations are set by hand.
PlivoMessage APIPlivo V3 signature (HMAC-SHA256 with the auth token and a nonce)None (keywords arrive as inbound texts)Connect with the auth ID and auth token.
TelnyxAPI v2Ed25519 signature checked with the account public key, with a timestampRead onlyConnect with an API key and the account public key. Prices are entered by hand and corrected from each text's cost.
AWS End User MessagingAWS APIAmazon SNS topic, signatures checked against Amazon's certificatesTwo-way (opt-out list)Texts from your own AWS account with a CloudFormation role or IAM keys. Prices are entered by hand.
  1. Open Sending providers. Until a second channel is set up, choose Add a channel and pick SMS; after that, switch to Sending providers, then SMS, then Providers and choose Add SMS provider.

  2. Connection. Enter the provider’s credentials:

    • Twilio: Account SID, an API key SID and its secret (never the auth token), and live or test.
    • Vonage: API key, API secret and the signature secret (Settings › API settings › Signed webhooks, with HMAC SHA-256).
    • Plivo: auth ID and auth token.
    • Telnyx: API key, the account’s public key and, optionally, a messaging profile ID (empty creates one).
    • AWS End User Messaging: the region, a role ARN with external ID or access keys, and the opt-out list.

    ReputeCast registers its webhook at the provider. If that fails, it shows a webhook address and a signing secret once, to paste in the provider’s console.

  3. Senders. Import the provider’s numbers and add sender IDs. Twilio numbers are sorted into toll-free, 10DLC and local for you.

  4. Test text. Send “This is a test from ReputeCast.” to your own number, with the brand prefix and opt-out text.

  5. Countries. Choose which countries this provider texts, then Finish.

The SMS Providers tab: Twilio and Vonage connected and healthy, their senders with registration statuses such as toll-free verified and sender ID allowed, and routing by country.

A provider is Degraded when texts went out but no delivery receipt came back for 2 hours, and Down after 3 failed calls in a row; rejected credentials show as Credentials rejected. Registrations are read every hour, prices every day and provider opt-out lists every 15 minutes.

Carriers only deliver from registered senders. ReputeCast tracks each sender’s registration per country and never texts a country where it isn’t Verified, Approved or Allowed without registration: those texts are held.

Sender Where it works Registration
Toll-free number The countries listed on the sender (US and Canada) Toll-free verification
10DLC number US only An approved brand and campaign
Local or mobile number Its own country Allowed without registration
Sender ID (up to 11 letters and digits) Country by country; not in the US or Canada Allowed in many European countries, registered elsewhere

Registration statuses are Not registered, Pending, Verified, Approved, Rejected, Allowed without registration and Not supported. Vonage reports no registration status through its API, so you set those by hand (with the date, and a reason when rejected). Approving a sender releases the texts held for it.

On Sending providers, then SMS, then Routing & rules, each country belongs to one route with a sender and an optional fallback. The country comes from the phone number, not the contact’s address.

  • Every other country is Don’t send by default, so a number in a country you didn’t plan for is skipped. You can send them through a chosen route instead.
  • A fallback takes over when the primary provider is down or its credentials are rejected. It must be registered for the same countries; it doesn’t cover a sender that isn’t registered.
  • The Route tester shows, for a phone number, the provider, sender, registration, price per segment, local time and whether quiet hours would hold the text.
Routing & rules: routes for the US and Canada through a Twilio toll-free number and for Europe through a Vonage sender ID, every other country set to Don't send, quiet hours 09:00–20:00, and the route tester.

SMS consent is kept per list, apart from email: STOP never unsubscribes someone from email, and an email unsubscribe never stops texts. Each change keeps its evidence: the phone number, where it was given (a form, the preference center, an import, the API or your team), the exact consent text and version, the keyword, IP address and time. Read Lists, consent and double opt-in.

  • Recording consent by hand (Audience › a contact › Record SMS consent, with subscribers:edit) needs where they gave it, the text they agreed to and when.
  • Imports bring SMS consent only with date, source and consent-text columns; otherwise the number is imported without consent.
  • Opt-in confirmation is on: the first text on a list confirms the signup. Ask them to reply YES first turns it into a double opt-in.
  • Text message terms: ReputeCast publishes a terms page carriers ask for; edit it under Forms & pages › Text message terms.

Keywords work when they are the whole reply, in any case:

Keyword Words What happens
Opt-out STOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT, OPTOUT, REVOKE Consent is withdrawn on every list for that number, the number is suppressed, and one reply is sent
Opt-in START, UNSTOP The suppression is lifted and exactly the consents STOP removed come back
Help HELP, INFO The help reply is sent

You can add up to 30 words per list and edit the replies (up to 640 characters each); STOP and HELP can’t be removed. Keyword replies go at once, even in quiet hours. Any other reply appears on the contact’s timeline and in the campaign report; there is no two-way inbox.

A number that opted out by text stays suppressed until the person texts START; your team can’t remove it. Numbers are also suppressed automatically when a text fails as a landline, invalid or not-in-service number, when the provider’s opt-out list has them, or after 3 carrier-filtered texts in 30 days. Read The suppression list.

Texts go only between 09:00 and 20:00 in each recipient’s local time. You can narrow the window under Quiet hours, but never beyond 08:00–21:00. The time zone is the contact’s time zone field, or it comes from the phone number (the area code, else the country’s main zone).

Texts outside the window wait for it to open; they aren’t dropped. Push notifications and WhatsApp messages use the same window.

  1. In Campaigns, start a new campaign and choose Text message (SMS). The card appears once an SMS provider is connected.

  2. Write the text. The composer counts characters and segments, including the brand prefix and the opt-out text (“Reply STOP to opt out” by default), which are added to every campaign text. Personalize inserts tokens such as {{ first_name | default: "there" }}; read Personalize emails with Liquid.

    The SMS composer: the text with the brand prefix and opt-out text locked in, the character and segment count, a per-country cost estimate, and a phone preview.
  3. Mind the segments. A text in plain GSM-7 characters fits 160 characters in one segment (153 per part when longer); a single character outside GSM-7, such as a curly quote or an emoji, switches the whole text to Unicode: 70 characters, 67 per part. Replace them all swaps curly quotes, dashes and ellipses for plain ones. Review warns above 3 segments.

  4. Links are shortened on your own short-link domain, set under Message rules (a CNAME to your instance, for example go.acme.io). Each recipient gets their own 6-character code, and clicks get utm_source=sms, utm_medium=sms and utm_campaign tags. Public shorteners such as bit.ly or tinyurl.com block the send, and a link without a verified short-link domain blocks it too.

  5. Send test texts your test numbers. Then choose Review & send. Review checks the audience, senders, registration and routes, consent, suppressions, quiet hours, time zones, the opt-out text, the brand prefix, links, length and budget.

  6. Pick the schedule: Now, At one time for everyone or At a time in each recipient’s time zone. The cost estimate uses each provider’s pricing per country and each person’s own text length. For more than 1,000 recipients or an estimated cost above $100, you type the recipient count to confirm.

Under Budget and guards you can set a monthly budget in US dollars. Members with providers:manage are alerted at the alert level (80% by default) and at 100%. At 100%, Review blocks new sends, a running campaign pauses and automation texts are held until you raise the budget.

A running campaign also pauses itself when, after its first 50 texts, more than 5% fail, more than 2% are filtered by carriers or more than 3% of recipients opt out. You can change the thresholds for the workspace or per campaign in Review & send. Nothing already sent is recalled; resuming needs campaigns:send and sms:send.

SettingDefaultHow to change
Quiet hours (recipient's local time)Sends only 09:00–20:00Sending providers › SMS › Routing & rules; can't go beyond 08:00–21:00
Characters per segmentGSM-7: 160, or 153 per part of a longer text. Unicode (UCS-2): 70, or 67 per partFixed
Alphanumeric sender IDUp to 11 characters; not supported in the US and CanadaFixed
Short links in texts work for12 monthsFixed
Monthly budgetNone; when set, an alert at 80% and sending holds at 100%Sending providers › SMS › Routing & rules › Budget and guards (alert 1–100%)
Auto-pause thresholds (counted after 50 texts)Failed above 5%, filtered by carriers above 2%, opt-outs above 3%Sending providers › SMS › Routing & rules, 0.1–100%; per campaign in Review & send
Sends that need the recipient count typed to confirmMore than 1,000 recipients or a cost above $100Fixed
Text content kept30 daysSending providers › SMS › Routing & rules › Retention; don't keep, 7, 30, 60 or 90 days
Brand prefix and opt-out textPrefix up to 20 characters; opt-out text up to 60, "Reply STOP to opt out" by defaultSending providers › SMS › Routing & rules › Message rules

The SMS report shows texts sent, delivered and failed (with reasons), clicks (link previews counted as machines, never people), opt-outs and the cost, by sender and by country, plus delivery over time and replies. Export CSV gives the same per country and sender.

An SMS report: 854 sent, 840 delivered, 14 failed, 232 clicks, 6 opt-outs and $19.54 cost, delivery over time as each time zone reached 10:00, and results by sender and by country.

Text content is kept for 30 days by default (none, 7, 30, 60 or 90 days under Retention); delivery events and clicks are kept for 90 days.

  • Texts to a country are held: the sender isn’t registered there (status Not registered, Pending, Rejected or Not supported). Register it, or route the country through a sender that may text it.
  • Numbers in a country are skipped: no route covers it and every other country is set to Don’t send.
  • Review blocks on links: set and verify the short-link domain, or replace a public shortener with the full URL.
  • The campaign paused itself: open the report to see which threshold it passed, fix the cause, then resume or resume with changes.
  • A provider shows Degraded: receipts aren’t arriving. Check the webhook on the provider’s side and the Sending providers, then SMS, then Events tab.