Documentation
Getting Started
Documentation Index Installation Details Quickstart
Architecture
Alert Geometry Coverage Data Flow Sequences Design Standards Display System Architecture Eas Decoding Summary Eas Monitor V3 Architecture Sdr Service Architecture System Architecture Theory Of Operation
Development
Agents Certification Reliability Plan Component Library Contributing Fcc Part11 Compliance Matrix Javascript Api Large File Refactor Plan Navigation Releasing Sdr Frequency Validation User Interface Guide
Hardware
Alpha Led Guide Argon40 Zigbee Setup Capacity And Sizing Gpio Guide Gps Hat Setup Hwsetup Helper Neopixel Led Control Sdr Setup Serial To Ethernet Adapters Vfd Display Setup Waveshare Rs232 Wifi Setup
Guides
Alert Signals Analytics And Reporting Api Key Management Application Settings Audio Monitoring Audit Log Review Database Backups Database Browser Disk Space Cleanup Eas Config Tool Eas Test Signal Pipeline Gated Alerts Hardware Quickstart Health Monitoring Help Https Setup Icecast Streaming Setup Ipaws Feed Integration Local Authorities Local Mail Server Manual Eas Events Mfa Totp Setup Notifications One Button Upgrade Setup Instructions Smart Setup Sms Opt In Ssl Web Ui Guide Tailscale Setup Tts Normalization
Troubleshooting
Audio Sdr Fix Tool Firewall Requirements Polling Not Working Sdr Master Troubleshooting Guide Troubleshooting 504 Timeout Tts Troubleshooting
Security
Audit Log Integrity Public Routes Security
Reference
About Alpha M Protocol Changelog Dependency Attribution Diagrams Ecig Cap To Eas Implementation Guide V1 0 Fcc 26 38 Eas Cybersecurity Fips Data Sources Mdc1200 Nrsc4B Same Standard Nws Alert Parameters Nws Zone Catalog Ohio Eas Documentation Overview Protocols Overview Rbds Standard Repository Statistics Sage Endec Same Site Reorganization Vtec Event Linking
Policies
Privacy Policy Sms Messaging Terms Of Use Trademark Policy

SMS Opt-In (Double Opt-In)

/sms-opt-in is a public, unauthenticated page where a person can sign themselves up for SMS emergency alerts, without an administrator having to add their number by hand.


Why this exists

Carriers and Twilio review A2P 10DLC campaigns for exactly one thing above all else: can you show a verifiable way the recipient actually agreed to receive texts from this number? An administrator manually adding a phone number and attesting that consent was obtained some other way (verbally, on paper, over email) gives a reviewer nothing they can click through and confirm themselves.

/sms-opt-in fixes that: the person enters their own number, agrees to explicit consent language, and proves they control that number by entering a one-time code texted to it — a standard double opt-in pattern. Only then is the number added to the live recipient list. If you're registering (or re-registering) a Twilio campaign, point the reviewer at this page.


How it works

  1. Visitor opens /sms-opt-in — no account or login needed.

  2. They enter their phone number (international format, e.g. +15555550100) and optionally a name, and check the required consent checkbox:

    "I agree to receive SMS emergency alerts from this EAS Station. Message frequency varies. Message and data rates may apply. Reply STOP to opt out at any time, HELP for help. See the Terms of Use and Privacy Policy."

  3. EAS Station™ texts a 6-digit code to that number via Twilio (valid for 10 minutes).

  4. The visitor enters the code on the same page.

  5. On a correct code: the number is added to Settings → SMS Notifications → SMS Recipients automatically, and a permanent record is written — phone number, name, the exact consent text shown, the submitter's IP address, and the confirmation timestamp.

Administrators can review every confirmed sign-up under Settings → SMS Notifications → Consent Records.

Every SMS this system actually asks Twilio to send — alert broadcasts, opt-in verification codes, and admin test messages — is separately recorded in Settings → SMS Notifications → SMS Message Log, searchable by recipient phone number. Consent Records answers "did this number agree to receive alerts and when"; the Message Log answers "was a text actually sent to this number, and did it succeed."


Abuse protection

  • Requests are rate-limited per IP address (five attempts per 15-minute window, the same limiter /login uses for password attempts).
  • A given phone number can't be re-texted more than once a minute, so a bystander who doesn't control a number can't be used to spam it with repeated codes.
  • A confirmation code allows five wrong guesses before that attempt is invalidated — the visitor has to start over, rather than being able to brute-force a 6-digit code.
  • Codes are hashed at rest (the same peppered-hash scheme MFA backup codes use) — never stored in plaintext once sent.

Prerequisites

SMS notifications must already be configured under Settings → SMS Notifications (Twilio Account SID, Auth Token, and From Number) — see guides/notifications.md. /sms-opt-in returns a clear error if SMS isn't configured yet rather than silently failing.


Removing a self-serve sign-up

Self-serve sign-ups land in the same Settings → SMS Notifications → SMS Recipients list as administrator-added numbers — remove a number there the same way regardless of how it was added. The corresponding row in Consent Records is kept as a historical record even after removal (it's evidence of what consent was given and when, not a live subscription flag).


Related Pages

Resource Location
SMS messaging policy (opt-in, opt-out, message content) policies/SMS_MESSAGING.md
Notifications setup guide notifications.md
Public opt-in page (web UI) /sms-opt-in on your EAS Station™ instance
Consent records (admin, web UI) Settings → SMS Notifications → Consent Records

This document is served from docs/guides/SMS_OPT_IN.md in the EAS Station™ installation.