[ PROMPT_NODE_25850 ]
twilio-communications
[ SKILL_DOCUMENTATION ]
# Twilio 通信
## 模式
### 短信发送模式
使用 Twilio 发送短信的基础模式。
处理基础知识:电话号码格式、消息投递和投递状态回调。
关键注意事项:
- 电话号码必须采用 E.164 格式 (+1234567890)
- 默认速率限制:每秒 80 条消息 (MPS)
- 超过 160 个字符的消息会被拆分(且成本更高)
- 运营商过滤可能会拦截消息(特别是发送到美国号码)
**使用场景**:['向用户发送通知', '事务性消息(订单确认、发货)', '警报和提醒']
python
from twilio.rest import Client
from twilio.base.exceptions import TwilioRestException
import os
import re
class TwilioSMS:
"""
带有适当错误处理和验证的短信发送。
"""
def __init__(self):
self.client = Client(
os.environ["TWILIO_ACCOUNT_SID"],
os.environ["TWILIO_AUTH_TOKEN"]
)
self.from_number = os.environ["TWILIO_PHONE_NUMBER"]
def validate_e164(self, phone: str) -> bool:
"""验证电话号码是否为 E.164 格式。"""
pattern = r'^+[1-9]d{1,14}$'
return bool(re.match(pattern, phone))
def send_sms(
self,
to: str,
body: str,
status_callback: str = None
) -> dict:
"""
发送短信。
参数:
to: E.164 格式的收件人电话号码
body: 消息文本 (160 字符 = 1 段)
status_callback: 投递状态 Webhook 的 URL
返回:
消息 SID 和状态
"""
# 验证电话号码格式
if not self.validate_e164(to):
return {
"success": False,
"error": "电话号码必须为 E.164 格式 (+1234567890)"
}
# 检查消息长度(警告关于分段)
segment_count = (len(body) + 159) // 160
if segment_count > 1:
print(f"警告:消息将作为 {segment_count} 段发送")
try:
message = self.client.messages.create(
to=to,
from_=self.from_number,
body=body,
status_callback=status_callback
)
return {
"success": True,
"message_sid": message.sid,
"status": message.status,
"segments": segment_count
}
excep