Agent Skillsopenai/plugins › twilio-sms-send-message

twilio-sms-send-message

GitHub

Twilio SMS/MMS深度参考,涵盖错误码、过滤排查、MMS支持及防泵攻击。用于调试短信投递问题或获取非发送类特定细节,不用于常规发送。

plugins/twilio-developer-kit/skills/twilio-sms-send-message/SKILL.md openai/plugins

Trigger Scenarios

调试短信投递失败或拦截问题 查询SMS特定错误代码 排查消息被过滤原因 了解MMS媒体支持限制

Install

npx skills add openai/plugins --skill twilio-sms-send-message -g -y
More Options

Non-standard path

npx skills add https://github.com/openai/plugins/tree/main/plugins/twilio-developer-kit/skills/twilio-sms-send-message -g -y

Use without installing

npx skills use openai/plugins@twilio-sms-send-message

指定 Agent (Claude Code)

npx skills add openai/plugins --skill twilio-sms-send-message -a claude-code -g -y

安装 repo 全部 skill

npx skills add openai/plugins --all -g -y

预览 repo 内 skill

npx skills add openai/plugins --list

SKILL.md

Frontmatter
{
    "name": "twilio-sms-send-message",
    "description": "SMS and MMS deep-dive reference. Covers SMS-specific error codes, message filtering troubleshooting (\"Messages Being Filtered or Blocked?\" diagnostic checklist), MMS media support (US\/CA\/AU only), and SMS pumping indicators. For sending SMS, use twilio-send-message instead. Use this skill only when debugging SMS delivery issues or needing SMS-specific details not in the consolidated send skill."
}

Overview

SMS is one channel in Twilio's Messaging platform. All channels — SMS, WhatsApp, RCS, Facebook Messenger — share the same messages.create() API. See twilio-messaging-overview for the full channel comparison and onboarding sequence.

When to use SMS When to consider alternatives
Reach any phone number globally Need rich media outside US/CA/AU → WhatsApp
No app install required Opted-in audience prefers chat apps → WhatsApp
Time-sensitive alerts (OTP, outage) Marketing campaigns → twilio-marketing-promotions-advisor
Regulatory/compliance requires SMS Cost-sensitive high-volume → WhatsApp (lower per-msg cost in many markets)

For production SMS: Use a Messaging Service (messagingServiceSid) instead of a raw from number. It enables sender pool management, compliance toolkit, SMS pumping protection, link shortening, and message scheduling. See twilio-messaging-services.

Every outbound SMS requires a from Twilio number (or messagingServiceSid) and a to recipient — both in E.164 format.


Prerequisites

  • Twilio account with an SMS-capable phone number — New to Twilio? See twilio-account-setup for signup, getting a number, and trial limitations
  • Environment variables:
    • TWILIO_ACCOUNT_SID
    • TWILIO_AUTH_TOKEN — See twilio-iam-auth-setup for credential setup and best practices
  • SDK: pip install twilio / npm install twilio

Quickstart

Python

import os
from twilio.rest import Client

client = Client(os.environ["TWILIO_ACCOUNT_SID"], os.environ["TWILIO_AUTH_TOKEN"])

message = client.messages.create(
    from_="+15017122661",   # Your Twilio number (E.164)
    to="+15558675310",      # Recipient (E.164)
    body="Your appointment is confirmed for tomorrow at 2pm."
)

print(message.sid)     # SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
print(message.status)  # queued | sent | delivered | failed

Node.js

const twilio = require("twilio");
const client = twilio(process.env.TWILIO_ACCOUNT_SID, process.env.TWILIO_AUTH_TOKEN);

const message = await client.messages.create({
    from: "+15017122661",
    to: "+15558675310",
    body: "Your appointment is confirmed for tomorrow at 2pm.",
});

console.log(message.sid);
console.log(message.status);

Key Patterns

Send MMS (with media)

Python

message = client.messages.create(
    from_="+15017122661",
    to="+15558675310",
    body="Here is your invoice.",
    media_url=["https://example.com/invoice.pdf"]
)

Node.js

const message = await client.messages.create({
    from: "+15017122661",
    to: "+15558675310",
    body: "Here is your invoice.",
    mediaUrl: ["https://example.com/invoice.pdf"],
});

Supported media types: images (JPEG, PNG, GIF), PDF, audio, video. Max 5 MB per message.

Send via Messaging Service (recommended for scale)

Use messagingServiceSid instead of from — Twilio picks the best sender automatically from your pool.

Python

message = client.messages.create(
    messaging_service_sid="MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    to="+15558675310",
    body="Your order has shipped."
)

Node.js

const message = await client.messages.create({
    messagingServiceSid: "MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    to: "+15558675310",
    body: "Your order has shipped.",
});

Track Delivery Status

Python

message = client.messages.create(
    from_="+15017122661",
    to="+15558675310",
    body="Hello!",
    status_callback="https://yourapp.com/sms-status"
)

Node.js

const message = await client.messages.create({
    from: "+15017122661",
    to: "+15558675310",
    body: "Hello!",
    statusCallback: "https://yourapp.com/sms-status",
});

Twilio POSTs to your URL at each transition: queued → sent → delivered (or failed/undelivered).


Response Fields

Field Description
sid Message identifier (SM...)
status queued, sent, delivered, undelivered, failed
error_code Populated on failure
error_message Human-readable description
price Cost (populated after delivery)
date_sent UTC timestamp

Common Errors

Code Meaning Fix
21211 Invalid to number Validate E.164 format
21408 Permission to send to region not enabled Enable geo-permissions in Console
21610 Number is on blocklist (opted out) Do not retry; respect opt-out
30003 Unreachable destination Carrier cannot deliver; try later
30007 Message filtered as spam Review content and sender reputation
30034 Message from unregistered number Complete A2P 10DLC registration — see twilio-compliance-onboarding
30450 SMS pumping detected Message blocked by SMS pumping protection — see twilio-messaging-services

Messages Being Filtered or Blocked?

If your messages aren't being delivered, check these causes in order:

  1. Unregistered sender (error 30034) — US 10DLC numbers must be registered. See twilio-compliance-onboarding
  2. Spam filtered (error 30007) — Carrier flagged content. Check: opt-out language included? URL shorteners avoided? Content matches registered campaign?
  3. Opted-out recipient (error 21610) — Recipient sent STOP. Do not retry. See twilio-compliance-traffic
  4. Geo-permissions disabled (error 21408) — Enable the destination country in Console > Messaging > Settings > Geo Permissions. See twilio-security-hardening
  5. SMS pumping (error 30450) — Artificial traffic detected. Whitelist known prefixes via Global Safe List. See twilio-messaging-services
  6. Account suspended — Check Console for account status notifications. See twilio-account-setup

For delivery event tracking, set up StatusCallbacks or use twilio-debugging-observability.


CANNOT

  • Cannot send without E.164 format — Both from and to must be + followed by country code and number
  • Cannot send to unverified numbers on trial accounts — Upgrade to paid or verify recipient numbers first
  • Cannot send MMS outside US, Canada, and Australia — MMS is only supported on US/CA/AU numbers; for international rich media use WhatsApp
  • Cannot exceed 1,600 characters per message — Longer messages are automatically split into segments (each billed separately)
  • Cannot prevent SMS pumping without a Messaging Service — Enable SMS pumping protection via Messaging Services to prevent artificial traffic inflation. See twilio-messaging-services

Next Steps

  • Channel overview and onboarding guide: twilio-messaging-overview
  • Receive inbound SMS and delivery status: twilio-messaging-webhooks
  • Manage sender pools at scale: twilio-messaging-services
  • US compliance for A2P traffic: twilio-compliance-onboarding
  • Send via WhatsApp instead: twilio-whatsapp-send-message

Version History

  • 11c74d6 Current 2026-07-19 09:50

Same Skill Collection

.agents/skills/plugin-creator/SKILL.md
plugins/airtable/skills/airtable-cli/SKILL.md
plugins/airtable/skills/airtable-filters/SKILL.md
plugins/airtable/skills/airtable-overview/SKILL.md
plugins/atlassian-rovo/skills/capture-tasks-from-meeting-notes/SKILL.md
plugins/atlassian-rovo/skills/generate-status-report/SKILL.md
plugins/base44/skills/base44-cli/SKILL.md
plugins/base44/skills/base44-sdk/SKILL.md
plugins/base44/skills/base44-troubleshooter/SKILL.md
plugins/boltz-api-cli/skills/boltz-check-status/SKILL.md
plugins/boltz-api-cli/skills/boltz-cli-setup/SKILL.md
plugins/boltz-api-cli/skills/boltz-protein-design/SKILL.md
plugins/boltz-api-cli/skills/boltz-protein-screen/SKILL.md
plugins/boltz-api-cli/skills/boltz-small-molecule-adme/SKILL.md
plugins/boltz-api-cli/skills/boltz-small-molecule-design/SKILL.md
plugins/boltz-api-cli/skills/boltz-small-molecule-screen/SKILL.md
plugins/boltz-api-cli/skills/boltz-structure-and-binding/SKILL.md
plugins/box/skills/box/SKILL.md
plugins/brighthire/skills/brighthire/SKILL.md
plugins/build-ios-apps/skills/ios-app-intents/SKILL.md
plugins/build-ios-apps/skills/ios-debugger-agent/SKILL.md
plugins/build-ios-apps/skills/ios-ettrace-performance/SKILL.md
plugins/build-ios-apps/skills/ios-memgraph-leaks/SKILL.md
plugins/build-ios-apps/skills/ios-simulator-browser/SKILL.md
plugins/build-ios-apps/skills/swiftui-liquid-glass/SKILL.md
plugins/build-ios-apps/skills/swiftui-performance-audit/SKILL.md
plugins/build-ios-apps/skills/swiftui-ui-patterns/SKILL.md
plugins/build-ios-apps/skills/swiftui-view-refactor/SKILL.md
plugins/build-macos-apps/skills/appkit-interop/SKILL.md
plugins/build-macos-apps/skills/build-run-debug/SKILL.md
plugins/build-macos-apps/skills/liquid-glass/SKILL.md
plugins/build-macos-apps/skills/packaging-notarization/SKILL.md
plugins/build-macos-apps/skills/signing-entitlements/SKILL.md
plugins/build-macos-apps/skills/swiftpm-macos/SKILL.md
plugins/build-macos-apps/skills/swiftui-patterns/SKILL.md
plugins/build-macos-apps/skills/telemetry/SKILL.md
plugins/build-macos-apps/skills/test-triage/SKILL.md
plugins/build-macos-apps/skills/view-refactor/SKILL.md
plugins/build-macos-apps/skills/window-management/SKILL.md
plugins/build-web-apps/skills/frontend-app-builder/SKILL.md
plugins/build-web-apps/skills/frontend-testing-debugging/SKILL.md
plugins/build-web-apps/skills/react-best-practices/SKILL.md
plugins/build-web-apps/skills/shadcn-best-practices/SKILL.md
plugins/build-web-apps/skills/supabase-best-practices/SKILL.md
plugins/build-web-data-visualization/skills/accessibility-and-inclusive-visualization/SKILL.md
plugins/build-web-data-visualization/skills/canvas2d-data-visualization/SKILL.md
plugins/build-web-data-visualization/skills/d3-data-visualization/SKILL.md
plugins/build-web-data-visualization/skills/dashboards-and-real-time-visualization/SKILL.md
plugins/build-web-data-visualization/skills/data-visualization/SKILL.md
plugins/build-web-data-visualization/skills/gantt-chart-visualization/SKILL.md

Metadata

Files
0
Version
11c74d6
Hash
115fd1a5
Indexed
2026-07-19 09:50

Главная - Вики-сайт
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-05 04:33
浙ICP备14020137号-1 $Гость$