Prerequisites
SMS in the United States and Canada is regulated by the CTIA (industry body) and major carriers (AT&T, T-Mobile, Verizon). They require explicit, verifiable consent from every recipient before you send them a message. Acceptable ways to collect consent:Web Form
In-Person (Verbal)
Reply-In (Text-to-Join)
JOIN) to your number first. This is the only flow that doesn’t require collection elsewhere, but is also the lowest-volume.Create an SMS Channel

Open Channels
Name the channel and pick SMS
{brand}value rendered into consent templates (e.g. “Acme Restore” → recipients see “Reply STOP to unsubscribe from Acme Restore”). Pick your trading name, not your legal entity name.Fill in the SMS-specific fields
Timezone
America/New_York). Used for time-of-day greetings. If left blank the agent will assume UTC is the timezone.Enable MMS
Country
Number Type
Choose Local or Toll-Free
- Toll-Free
- Local 10DLC
Filter and pick a number
- Area code — a specific US area code (e.g.
415). Skip → results span the whole country. - Vanity pattern — a digit sequence the number should contain (e.g.
43556spellsHELLO), with placement Anywhere, Start, or End. Letters convert to digits automatically.
Reserve and save the number
Configure consent templates
Submit verification (toll-free) or register A2P (local)
Conversation Sessions
SMS conversations automatically start fresh after meaningful inactivity boundaries. This keeps unrelated requests from the same phone number out of the agent’s current context and records them as separate conversations in reports. Open Conversation sessions on the SMS channel details page to use the default timing or configure custom thresholds and completion guidance. See Conversation Sessions for the timing rules, examples, and configuration steps.Consent Middleware
Every SMS channel ships with an automated consent layer, which is the CTIA-mandated response templates VIVI’s middleware sends on your behalf. Open the channel’s Consent tab; each sub-tab has a live phone preview on the right. The{brand} placeholder renders to the channel name at send time.
- Opt-out
- Resubscribe
- Help
STOP, UNSUBSCRIBE, END, CANCEL, or QUIT.Must confirm the unsubscribe and state that no further messages will be sent.How Opt-in & Opt-out Work
Every (channel × phone number) pair has a consent state in the database:UNKNOWN → WAITING_OPT_IN → OPTED_IN ⇄ OPTED_OUT.
- Opt-in Flow
- Opt-out Flow
Agent tries to send to a new number
UNKNOWN to WAITING_OPT_IN. VIVI sends the auto-generated opt-in template and queues the intended message in sms_message_queue with status PENDING_OPT_IN.Recipient confirms
YES, START, UNSTOP, or JOIN.Queue drained
OPTED_IN. Queue status → DRAINING, then queued messages dispatch and status → SENT.Compliance Summary
Twilio TFV Form
A2P Brand & Campaign
Consent Templates
STOP Keyword
Double Opt-In
Identifiable Brand
Troubleshooting
My agent says the message was sent but the recipient didn't get it
My agent says the message was sent but the recipient didn't get it
sms_message_queue table for rows with phoneNumber = <recipient> and status = PENDING_OPT_IN. The recipient receives an opt-in prompt instead; when they reply YES, your message drains out automatically.Twilio rejected my toll-free verification with 'Invalid use case summary'
Twilio rejected my toll-free verification with 'Invalid use case summary'
maxLength and a live counter. If a pre-existing row already exceeds the cap, shorten the text before saving. See Twilio errors and use cases for canonical text patterns that pass review.Twilio rejected my toll-free verification with 'Verification already exists for this phone number'
Twilio rejected my toll-free verification with 'Verification already exists for this phone number'
IN_REVIEW or TWILIO_APPROVED, and Twilio doesn’t allow duplicates. VIVI handles this automatically by dispatching a PATCH to the existing verification instead of POSTing a new one, or returns a “fields locked — review in progress” message. Older alerts for this error self-heal next time the user saves.I created a local number but the agent can't send
I created a local number but the agent can't send
Under review, SUBMIT_FAILED, or Action required, that’s your blocker.
