网淘吧来吧,欢迎您!

Twilio技能使用说明

2026-03-28 新闻来源:网淘吧 围观:15
电脑广告
手机广告

Twilio

通过托管的OAuth认证访问Twilio API。发送短信、拨打电话、管理电话号码,并操作Twilio资源。

快速开始

# List all accounts
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/twilio/2010-04-01/Accounts.json')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

基础URL

https://gateway.maton.ai/twilio/2010-04-01/Accounts/{AccountSid}/{resource}.json

网关将请求代理至api.twilio.com并自动注入您的OAuth令牌。

重要提示:大多数Twilio端点都需要在路径中包含您的账户SID。您可以从/Accounts.json端点获取您的账户SID。

认证

所有请求都需要在Authorization标头中包含Maton API密钥:

Authorization: Bearer $MATON_API_KEY

环境变量:将您的API密钥设置为MATON_API_KEY

export MATON_API_KEY="YOUR_API_KEY"

获取您的API密钥

  1. 登录或前往maton.ai
  2. 创建账户前往
  3. 复制您的API密钥

连接管理

请在以下网址管理您的Twilio OAuth连接https://ctrl.maton.ai

列出连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=twilio&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

创建连接

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'twilio'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

获取连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "connection": {
    "connection_id": "ebe566b1-3eaf-4926-bc92-0d8d47445f12",
    "status": "ACTIVE",
    "creation_time": "2026-02-09T23:18:44.243582Z",
    "last_updated_time": "2026-02-09T23:19:55.176687Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "twilio",
    "metadata": {}
  }
}

在浏览器中打开返回的网址以完成OAuth授权。

删除连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

指定连接

如果您有多个Twilio连接,请使用Maton-Connection请求头指定要使用的连接:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/twilio/2010-04-01/Accounts.json')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', 'ebe566b1-3eaf-4926-bc92-0d8d47445f12')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

如果省略,网关将使用默认(最早创建的)活动连接。

API参考

账户

列出账户

GET /twilio/2010-04-01/Accounts.json

响应:

{
  "accounts": [
    {
      "sid": "ACf5d980cd4b3f7604a464afaec191fc60",
      "friendly_name": "My first Twilio account",
      "status": "active",
      "date_created": "Mon, 09 Feb 2026 20:19:55 +0000",
      "date_updated": "Mon, 09 Feb 2026 20:20:05 +0000"
    }
  ]
}

获取账户

GET /twilio/2010-04-01/Accounts/{AccountSid}.json

消息(短信/彩信)

列出消息

GET /twilio/2010-04-01/Accounts/{AccountSid}/Messages.json

查询参数:

  • 每页条数- 每页结果数量(默认:50)
  • 收件人- 按收件人电话号码筛选
  • 发件人- 按发件人电话号码筛选
  • 发送日期- 按发送日期筛选

响应:

{
  "messages": [
    {
      "sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "body": "Hello!",
      "from": "+15551234567",
      "to": "+15559876543",
      "status": "delivered",
      "date_sent": "Mon, 09 Feb 2026 21:00:00 +0000"
    }
  ],
  "page": 0,
  "page_size": 50
}

获取消息

GET /twilio/2010-04-01/Accounts/{AccountSid}/Messages/{MessageSid}.json

发送消息

POST /twilio/2010-04-01/Accounts/{AccountSid}/Messages.json
Content-Type: application/x-www-form-urlencoded

To=+15559876543&From=+15551234567&Body=Hello%20from%20Twilio!

必需参数:

  • 收件人- 收件人电话号码(E.164格式)
  • 发件人- Twilio电话号码或消息服务SID
  • 正文- 消息文本(最多1600个字符)

可选参数:

  • 消息服务SID- 用于消息路由,可替代“发件人”参数
  • 媒体网址- 用于发送(彩信)的媒体文件URL
  • 状态回调- 用于状态更新的Webhook URL

响应:

{
  "sid": "SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "body": "Hello from Twilio!",
  "from": "+15551234567",
  "to": "+15559876543",
  "status": "queued",
  "date_created": "Mon, 09 Feb 2026 21:00:00 +0000"
}

更新消息(编辑)

POST /twilio/2010-04-01/Accounts/{AccountSid}/Messages/{MessageSid}.json
Content-Type: application/x-www-form-urlencoded

Body=

将Body设置为空字符串可编辑消息内容。

删除消息

DELETE /twilio/2010-04-01/Accounts/{AccountSid}/Messages/{MessageSid}.json

成功时返回204 No Content。

通话(语音)

列出通话

GET /twilio/2010-04-01/Accounts/{AccountSid}/Calls.json

查询参数:

  • 页面大小- 每页结果数
  • 状态- 按状态筛选(排队中、响铃中、进行中、已完成等)
  • 收件方- 按接收方筛选
  • 发件方- 按呼叫方筛选

响应:

{
  "calls": [
    {
      "sid": "CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "from": "+15551234567",
      "to": "+15559876543",
      "status": "completed",
      "duration": "60",
      "direction": "outbound-api"
    }
  ],
  "page": 0,
  "page_size": 50
}

获取通话

GET /twilio/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}.json

发起通话

POST /twilio/2010-04-01/Accounts/{AccountSid}/Calls.json
Content-Type: application/x-www-form-urlencoded

To=+15559876543&From=+15551234567&Url=https://example.com/twiml

必填参数:

  • - 接收方电话号码
  • 来自- Twilio电话号码
  • 网址- TwiML应用程序URL

可选参数:

  • 状态回调- 用于通话状态更新的Webhook URL
  • 状态回调事件- 要接收的事件(已发起、振铃中、已接听、已完成)
  • 超时- 等待接听的秒数(默认:60)
  • 录音- 设置为true以录制通话

更新通话

POST /twilio/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}.json
Content-Type: application/x-www-form-urlencoded

Status=completed

使用状态=已完成来结束进行中的通话。

删除通话

DELETE /twilio/2010-04-01/Accounts/{AccountSid}/Calls/{CallSid}.json

电话号码

列出呼入电话号码

GET /twilio/2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers.json

响应:

{
  "incoming_phone_numbers": [
    {
      "sid": "PNxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "phone_number": "+15551234567",
      "friendly_name": "My Number",
      "capabilities": {
        "voice": true,
        "sms": true,
        "mms": true
      }
    }
  ]
}

获取电话号码

GET /twilio/2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{PhoneNumberSid}.json

更新电话号码

POST /twilio/2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{PhoneNumberSid}.json
Content-Type: application/x-www-form-urlencoded

FriendlyName=Updated%20Name&VoiceUrl=https://example.com/voice

删除电话号码

DELETE /twilio/2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers/{PhoneNumberSid}.json

应用

列出应用

GET /twilio/2010-04-01/Accounts/{AccountSid}/Applications.json

响应:

{
  "applications": [
    {
      "sid": "APxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "friendly_name": "My App",
      "voice_url": "https://example.com/voice",
      "sms_url": "https://example.com/sms"
    }
  ]
}

获取应用

GET /twilio/2010-04-01/Accounts/{AccountSid}/Applications/{ApplicationSid}.json

创建应用

POST /twilio/2010-04-01/Accounts/{AccountSid}/Applications.json
Content-Type: application/x-www-form-urlencoded

FriendlyName=My%20App&VoiceUrl=https://example.com/voice

响应:

{
  "sid": "APxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "friendly_name": "My App",
  "voice_url": "https://example.com/voice",
  "date_created": "Tue, 10 Feb 2026 00:20:15 +0000"
}

更新应用

POST /twilio/2010-04-01/Accounts/{AccountSid}/Applications/{ApplicationSid}.json
Content-Type: application/x-www-form-urlencoded

FriendlyName=Updated%20App%20Name

删除应用

DELETE /twilio/2010-04-01/Accounts/{AccountSid}/Applications/{ApplicationSid}.json

成功时返回204 No Content。

队列

列出队列

GET /twilio/2010-04-01/Accounts/{AccountSid}/Queues.json

响应:

{
  "queues": [
    {
      "sid": "QUxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
      "friendly_name": "Support Queue",
      "current_size": 0,
      "max_size": 1000,
      "average_wait_time": 0
    }
  ]
}

创建队列

POST /twilio/2010-04-01/Accounts/{AccountSid}/Queues.json
Content-Type: application/x-www-form-urlencoded

FriendlyName=Support%20Queue&MaxSize=100

更新队列

POST /twilio/2010-04-01/Accounts/{AccountSid}/Queues/{QueueSid}.json
Content-Type: application/x-www-form-urlencoded

FriendlyName=Updated%20Queue%20Name

删除队列

DELETE /twilio/2010-04-01/Accounts/{AccountSid}/Queues/{QueueSid}.json

地址

列出地址

GET /twilio/2010-04-01/Accounts/{AccountSid}/Addresses.json

创建地址

POST /twilio/2010-04-01/Accounts/{AccountSid}/Addresses.json
Content-Type: application/x-www-form-urlencoded

FriendlyName=Office&Street=123%20Main%20St&City=San%20Francisco&Region=CA&PostalCode=94105&IsoCountry=US&CustomerName=Acme%20Inc

使用记录

列出使用记录

GET /twilio/2010-04-01/Accounts/{AccountSid}/Usage/Records.json

查询参数:

  • 类别- 按使用类别筛选(通话、短信等)
  • 起始日期- 起始日期(年-月-日)
  • 结束日期- 结束日期(年-月-日)

响应:

{
  "usage_records": [
    {
      "category": "sms",
      "description": "SMS Messages",
      "count": "100",
      "price": "0.75",
      "start_date": "2026-02-01",
      "end_date": "2026-02-28"
    }
  ]
}

分页

Twilio使用基于页面的分页:

GET /twilio/2010-04-01/Accounts/{AccountSid}/Messages.json?PageSize=50&Page=0

参数:

  • 页面大小- 每页结果数(默认:50)
  • 页码- 页码(从0开始)

响应包含:

{
  "messages": [...],
  "page": 0,
  "page_size": 50,
  "first_page_uri": "/2010-04-01/Accounts/{AccountSid}/Messages.json?PageSize=50&Page=0",
  "next_page_uri": "/2010-04-01/Accounts/{AccountSid}/Messages.json?PageSize=50&Page=1",
  "previous_page_uri": null
}

使用next_page_uri来获取下一页结果。

代码示例

JavaScript

const response = await fetch(
  'https://gateway.maton.ai/twilio/2010-04-01/Accounts.json',
  {
    headers: {
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    }
  }
);
const data = await response.json();
const accountSid = data.accounts[0].sid;
console.log(`Account SID: ${accountSid}`);

Python

import os
import requests

# Get account SID
response = requests.get(
    'https://gateway.maton.ai/twilio/2010-04-01/Accounts.json',
    headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
account_sid = response.json()['accounts'][0]['sid']
print(f"Account SID: {account_sid}")

Python(发送短信)

import os
import requests

account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

response = requests.post(
    f'https://gateway.maton.ai/twilio/2010-04-01/Accounts/{account_sid}/Messages.json',
    headers={
        'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    data={
        'To': '+15559876543',
        'From': '+15551234567',
        'Body': 'Hello from Python!'
    }
)
message = response.json()
print(f"Message SID: {message['sid']}")
print(f"Status: {message['status']}")

Python(拨打电话)

import os
import requests

account_sid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

response = requests.post(
    f'https://gateway.maton.ai/twilio/2010-04-01/Accounts/{account_sid}/Calls.json',
    headers={
        'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}',
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    data={
        'To': '+15559876543',
        'From': '+15551234567',
        'Url': 'https://demo.twilio.com/docs/voice.xml'
    }
)
call = response.json()
print(f"Call SID: {call['sid']}")
print(f"Status: {call['status']}")

注意事项

  • 所有端点都需要/2010-04-01/API版本前缀
  • 大多数端点都要求在路径中包含您的账户SID
  • 请求体使用application/x-www-form-urlencoded格式(而非JSON)
  • 电话号码必须采用E.164格式(例如+15551234567)
  • SID是唯一的标识符:
    • 账户SID以AC
    • 开头消息SID以SM(短信)或MM
    • (彩信)开头通话SID以
    • CA开头
    • 电话号码SID以PN
    • 开头应用SID以
  • AP
  • 开头
  • 重要提示:当将curl输出通过管道传递给jq或其他命令时,在某些shell环境中,环境变量如$MATON_API_KEY可能无法正确展开

错误处理

状态码含义
400缺少Twilio连接或请求格式错误
401Maton API密钥无效或缺失
404资源未找到
429请求频率受限
4xx/5xx来自Twilio API的透传错误

Twilio错误响应包括:

{
  "code": 20404,
  "message": "The requested resource was not found",
  "more_info": "https://www.twilio.com/docs/errors/20404",
  "status": 404
}

故障排除:API密钥无效

当您收到"API密钥无效"错误时,在断定存在问题之前,请务必遵循以下步骤:

  1. 检查MATON_API_KEY环境变量已设置:
echo $MATON_API_KEY
  1. 通过列出连接来验证API密钥是否有效:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

资源

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第326323名访客 今日有221篇新文章/评论