mcpField
T
Twilio SMS Automation

Twilio SMS Automation

github.com/claude-office-skills其他5455.4k 次安装39 周前更新
代码仓库

关于 Twilio SMS Automation

用于设计 Twilio 短信、语音通话和验证工作流的技能,涵盖消息模板、批量活动、号码管理及投递分析。

主要功能

  1. 01短信模板与双向消息
  2. 02通过短信、电话、邮件或 WhatsApp 验证
  3. 03外呼与 IVR 菜单
  4. 04批量消息活动配置
  5. 05电话号码查询与配置
  6. 06投递分析与状态跟踪

适用场景

  1. 01发送订单和配送通知
  2. 02为应用添加电话验证
  3. 03开展用户同意的批量消息活动
  4. 04设置外呼和 IVR 流程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/claude-office-skills/skills --skill twilio-sms-automation

安装后在 Claude Code 中输入/twilio-sms-automation确认已加载。

详细介绍

Twilio 短信自动化

使用 Twilio 自动化短信、语音和验证工作流的综合指南。

核心工作流

1. 短信发送流程
SMS AUTOMATION FLOW:
┌─────────────────┐
│    Trigger      │
│  (Event/API)    │
└────────┬────────┘
         ▼
┌─────────────────┐
│  Message Build  │
│  - Template     │
│  - Personalize  │
└────────┬────────┘
         ▼
┌─────────────────┐
│  Number Lookup  │
│  - Validate     │
│  - Format       │
└────────┬────────┘
         ▼
┌─────────────────┐
│     Send        │
│  - Twilio API   │
│  - Queue        │
└────────┬────────┘
         ▼
┌─────────────────┐
│    Delivery     │
│  - Status       │
│  - Callback     │
└─────────────────┘
2. 消息配置
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"

消息模板

通知模板
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.
对话模板
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.

验证(2FA)

Verify API 集成
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}}"
验证流程
// 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_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 菜单
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_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
广播状态
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

电话号码管理

号码查询
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_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"

分析仪表板

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&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 示例

发送短信
// 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']
});
处理收到的短信
// 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());
});

最佳实践

  1. 获取同意:发送消息前务必获得用户主动同意
  2. 提供退订方式:在每条消息中包含 STOP 关键字
  3. 尊重免打扰时段:不要在深夜发送消息
  4. 验证号码:发送前使用 Lookup API
  5. 处理失败:针对暂时性错误设置重试逻辑
  6. 监控送达情况:按运营商跟踪送达率
  7. 遵守规范:遵循 TCPA/CTIA 指南
  8. 使用模板:采用一致且经过测试的消息

评论

支持 Markdown