twilio-sms-automation

Automate SMS communications, two-way messaging, notifications, and voice workflows with Twilio

INSTALLATION
npx skills add https://github.com/claude-office-skills/skills --skill twilio-sms-automation
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

Twilio SMS Automation

Comprehensive skill for automating SMS, voice, and verification workflows with Twilio.

Core Workflows

1. SMS Messaging Flow

SMS AUTOMATION FLOW:

┌─────────────────┐

│    Trigger      │

│  (Event/API)    │

└────────┬────────┘

         ▼

┌─────────────────┐

│  Message Build  │

│  - Template     │

│  - Personalize  │

└────────┬────────┘

         ▼

┌─────────────────┐

│  Number Lookup  │

│  - Validate     │

│  - Format       │

└────────┬────────┘

         ▼

┌─────────────────┐

│     Send        │

│  - Twilio API   │

│  - Queue        │

└────────┬────────┘

         ▼

┌─────────────────┐

│    Delivery     │

│  - Status       │

│  - Callback     │

└─────────────────┘

2. Message Configuration

sms_config:

  sender:

    phone_number: "+1234567890"

    messaging_service_sid: "MG..."  # For higher throughput

  defaults:

    status_callback: "https://api.example.com/sms/status"

    validity_period: 14400  # 4 hours

  rate_limiting:

    messages_per_second: 10

    daily_limit_per_recipient: 5

  compliance:

    opt_out_keywords: ["STOP", "UNSUBSCRIBE", "CANCEL"]

    opt_in_required: true

    quiet_hours:

      start: "21:00"

      end: "09:00"

      timezone: "America/New_York"

Message Templates

Notification Templates

templates:

  order_confirmation:

    content: |

      {{company}}: Your order #{{order_id}} has been confirmed!

      Total: ${{total}}

      Track: {{tracking_url}}

      Reply HELP for assistance.

    max_length: 160

  shipping_update:

    content: |

      {{company}}: Your order #{{order_id}} has shipped!

      Carrier: {{carrier}}

      Tracking: {{tracking_number}}

      Delivery: {{estimated_date}}

  appointment_reminder:

    content: |

      Reminder: Your appointment with {{provider}} is tomorrow at {{time}}.

      Location: {{address}}

      Reply C to confirm or R to reschedule.

  two_factor:

    content: |

      Your {{company}} verification code is: {{code}}

      This code expires in 10 minutes.

      Don't share this code with anyone.

Conversational Templates

two_way_messaging:

  welcome:

    trigger: opt_in

    response: |

      Welcome to {{company}} updates!

      You'll receive order and shipping notifications.

      Reply HELP for commands or STOP to unsubscribe.

  help:

    trigger: ["HELP", "?", "INFO"]

    response: |

      {{company}} SMS Commands:

      STATUS - Check order status

      TRACK - Get tracking info

      SUPPORT - Contact support

      STOP - Unsubscribe

  status_inquiry:

    trigger: ["STATUS", "ORDER"]

    action: lookup_order

    response: |

      Order #{{order_id}}: {{status}}

      {{#if tracking}}

      Tracking: {{tracking_url}}

      {{/if}}

  unsubscribe:

    trigger: ["STOP", "UNSUBSCRIBE"]

    action: opt_out

    response: |

      You've been unsubscribed from {{company}} messages.

      Reply START to resubscribe anytime.

Verification (2FA)

Verify API Integration

verification_config:

  channel: sms  # or: call, email, whatsapp

  code_settings:

    length: 6

    expiry_minutes: 10

  rate_limits:

    max_attempts: 5

    lockout_minutes: 30

  templates:

    sms: "Your {{company}} code is {{code}}"

    call: "Your verification code is {{code_spoken}}"

Verification Flow

// Start Verification

const verification = await twilio.verify.v2

  .services('VA...')

  .verifications

  .create({

    to: '+1234567890',

    channel: 'sms',

    customCode: '123456', // Optional

    locale: 'en'

  });

// Check Verification

const check = await twilio.verify.v2

  .services('VA...')

  .verificationChecks

  .create({

    to: '+1234567890',

    code: '123456'

  });

// Result

if (check.status === 'approved') {

  // Verification successful

} else {

  // Invalid code

}

Voice Automation

Outbound Calls

voice_config:

  outbound_call:

    from: "+1234567890"

    twiml_url: "https://api.example.com/voice/script"

    status_callback: "https://api.example.com/voice/status"

    timeout: 30

    record: true

  twiml_script: |

    <?xml version="1.0" encoding="UTF-8"?>

    <Response>

      <Say voice="alice">

        Hello {{name}}, this is a reminder about your

        appointment tomorrow at {{time}}.

      </Say>

      <Gather numDigits="1" action="/handle-response">

        <Say>Press 1 to confirm, 2 to reschedule.</Say>

      </Gather>

    </Response>

IVR Menu

ivr_menu:

  greeting: |

    Thank you for calling {{company}}.

    For sales, press 1.

    For support, press 2.

    For billing, press 3.

    To speak with an operator, press 0.

  routing:

    - digit: "1"

      action: transfer

      destination: "+1987654321"

      queue: "sales"

    - digit: "2"

      action: transfer

      destination: "+1876543210"

      queue: "support"

    - digit: "3"

      action: transfer

      destination: "+1765432109"

      queue: "billing"

    - digit: "0"

      action: operator

      fallback: voicemail

Bulk Messaging

Campaign Configuration

bulk_campaign:

  name: "Holiday Promotion"

  audience:

    source: segment

    filter:

      opted_in: true

      last_purchase: "> 30_days"

  message:

    template: holiday_promo

    variables:

      discount_code: "HOLIDAY20"

  schedule:

    start_time: "2024-11-25T10:00:00"

    timezone: "America/New_York"

    batch_size: 100

    delay_between_batches: 60  # seconds

  tracking:

    delivery_report: true

    click_tracking: true

    conversion_tracking: true

Broadcast Status

CAMPAIGN STATUS: Holiday Promotion

═══════════════════════════════════════

Progress: ████████████████░░░░ 78%

DELIVERY STATS:

Sent:        7,800

Delivered:   7,450 (95.5%)

Failed:      125 (1.6%)

Pending:     225 (2.9%)

ENGAGEMENT:

Clicks:      1,245 (16.7%)

Replies:     89 (1.2%)

Opt-outs:    23 (0.3%)

ERRORS:

Invalid Number:  45

Unsubscribed:    52

Carrier Block:   18

Rate Limited:    10

ESTIMATED COMPLETION: 25 minutes

Phone Number Management

Number Lookup

number_lookup:

  capabilities:

    - carrier_info

    - caller_name

    - line_type

  validation:

    - check_format

    - verify_active

    - detect_landline_vs_mobile

  example_response:

    phone_number: "+14155551234"

    country_code: "US"

    carrier:

      name: "Verizon"

      type: "mobile"

    caller_name: "John Doe"

    valid: true

Number Provisioning

number_management:

  search_criteria:

    country: "US"

    area_code: "415"

    capabilities: ["SMS", "MMS", "Voice"]

  purchase:

    phone_number: "+14155559999"

    friendly_name: "Marketing Line"

    sms_url: "https://api.example.com/sms/incoming"

    voice_url: "https://api.example.com/voice/incoming"

Analytics Dashboard

SMS ANALYTICS - LAST 30 DAYS

═══════════════════════════════════════

VOLUME:

Sent:        45,230

Delivered:   43,456 (96.1%)

Failed:      1,774 (3.9%)

BY TYPE:

Notifications  ████████████░░░░ 62%

Marketing      ██████░░░░░░░░░░ 23%

2FA            ████░░░░░░░░░░░░ 15%

DELIVERY BY CARRIER:

Verizon     ████████████████ 97%

AT&#x26;T        ███████████████░ 95%

T-Mobile    ██████████████░░ 94%

Sprint      █████████████░░░ 92%

COST:

Total Spend:     $1,245.67

Per Message:     $0.0275

Per Delivered:   $0.0287

ENGAGEMENT:

Link Clicks:     3,456 (7.9%)

Replies:         892 (2.1%)

Opt-outs:        56 (0.1%)

API Examples

Send SMS

// Simple SMS

const message = await twilio.messages.create({

  body: 'Hello from Twilio!',

  from: '+1234567890',

  to: '+0987654321',

  statusCallback: 'https://api.example.com/sms/status'

});

// With Messaging Service (recommended for scale)

const message = await twilio.messages.create({

  body: 'Order confirmed!',

  messagingServiceSid: 'MG...',

  to: '+0987654321'

});

// MMS with Media

const mms = await twilio.messages.create({

  body: 'Check out this image!',

  from: '+1234567890',

  to: '+0987654321',

  mediaUrl: ['https://example.com/image.jpg']

});

Handle Incoming SMS

// Express webhook handler

app.post('/sms/incoming', (req, res) => {

  const { From, Body } = req.body;

  const twiml = new twilio.twiml.MessagingResponse();

  if (Body.toUpperCase() === 'STATUS') {

    twiml.message('Your order is on the way!');

  } else {

    twiml.message('Thanks for your message. We\'ll respond shortly.');

  }

  res.type('text/xml');

  res.send(twiml.toString());

});

Best Practices

  • Get Consent: Always have opt-in before messaging
  • Include Opt-Out: STOP keyword in every message
  • Respect Quiet Hours: Don't message late night
  • Validate Numbers: Use Lookup API before sending
  • Handle Failures: Retry logic for transient errors
  • Monitor Delivery: Track delivery rates by carrier
  • Stay Compliant: Follow TCPA/CTIA guidelines
  • Use Templates: Consistent, tested messages
BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card