87 lines
3.8 KiB
Python
87 lines
3.8 KiB
Python
|
|
"""Twilio 厂商集成元数据。
|
|||
|
|
|
|||
|
|
定义 ``IntegrationMetadata(key="twilio", ...)``,由 ``__init__.py`` 自注册到
|
|||
|
|
``IntegrationRegistry``。元数据为内存态,不持久化到数据库。
|
|||
|
|
|
|||
|
|
同时定义 API 版本常量、API 根路径、核心资源路径模板与健康检查路径,
|
|||
|
|
供 ``operations.py`` / ``generators.py`` 复用。
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
from yuxi.external_systems.integrations.schemas import IntegrationMetadata
|
|||
|
|
|
|||
|
|
# Account API 长期稳定版本
|
|||
|
|
DEFAULT_API_VERSION = "2010-04-01"
|
|||
|
|
# API 根路径(不含尾部斜杠,与 HttpAdapterConfig.base_url 拼接约定一致)
|
|||
|
|
DEFAULT_BASE_URL = "https://api.twilio.com"
|
|||
|
|
# 健康检查路径模板({AccountSid} 由 use_cases 层填充)
|
|||
|
|
HEALTH_CHECK_PATH = "/2010-04-01/Accounts/{AccountSid}.json"
|
|||
|
|
|
|||
|
|
# 核心资源路径模板(相对路径,base_url 由 adapter_config.base_url 提供)
|
|||
|
|
# {AccountSid} 在生成期烘焙到 path_template(见设计文档 §3.5)
|
|||
|
|
RESOURCE_PATHS = {
|
|||
|
|
"Messages": "/2010-04-01/Accounts/{AccountSid}/Messages.json",
|
|||
|
|
"Calls": "/2010-04-01/Accounts/{AccountSid}/Calls.json",
|
|||
|
|
"IncomingPhoneNumbers": "/2010-04-01/Accounts/{AccountSid}/IncomingPhoneNumbers.json",
|
|||
|
|
"AvailablePhoneNumbers": "/2010-04-01/Accounts/{AccountSid}/AvailablePhoneNumbers/{CountryCode}/Local.json",
|
|||
|
|
"UsageRecords": "/2010-04-01/Accounts/{AccountSid}/Usage/Records.json",
|
|||
|
|
"Accounts": "/2010-04-01/Accounts/{AccountSid}.json",
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
TWILIO_METADATA = IntegrationMetadata(
|
|||
|
|
key="twilio",
|
|||
|
|
display_name="Twilio",
|
|||
|
|
description="Twilio 通信集成,支持短信、语音、号码管理与 Webhook 验签",
|
|||
|
|
adapter_type="http",
|
|||
|
|
source_types=["twilio"],
|
|||
|
|
supported_auth_types=["basic", "api_key", "twilio_hmac"],
|
|||
|
|
tags=["Communication", "SMS", "Voice", "Telecom"],
|
|||
|
|
icon="twilio",
|
|||
|
|
docs_url="https://www.twilio.com/docs/usage/api",
|
|||
|
|
# connection_extra_schema 遵循 JSON Schema 格式(与 dynamics365 一致),
|
|||
|
|
# 描述 connection_config 除 base_url 外的额外字段。
|
|||
|
|
connection_extra_schema={
|
|||
|
|
"type": "object",
|
|||
|
|
"properties": {
|
|||
|
|
"account_sid": {
|
|||
|
|
"type": "string",
|
|||
|
|
"pattern": "^AC[0-9a-f]{32}$",
|
|||
|
|
"description": "Twilio Account SID(AC 开头,32 位十六进制)",
|
|||
|
|
},
|
|||
|
|
"api_version": {
|
|||
|
|
"type": "string",
|
|||
|
|
"default": "2010-04-01",
|
|||
|
|
"description": "API 版本(Account API 长期稳定)",
|
|||
|
|
},
|
|||
|
|
"webhook_url": {
|
|||
|
|
"type": "string",
|
|||
|
|
"description": ("Webhook 完整 URL(启用 twilio_hmac 验签时必填,须与 Twilio 控制台配置完全一致)"),
|
|||
|
|
},
|
|||
|
|
"region": {
|
|||
|
|
"type": "string",
|
|||
|
|
"description": "Twilio 区域(如 us1 / ie1)",
|
|||
|
|
},
|
|||
|
|
"edge": {
|
|||
|
|
"type": "string",
|
|||
|
|
"description": "Twilio 边缘节点(如 sydney)",
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
"required": ["account_sid"],
|
|||
|
|
},
|
|||
|
|
# example_config 仅包含 connection_config 字段(auth_config 由 auth_type + auth_config 单独管理)
|
|||
|
|
example_config={
|
|||
|
|
"account_sid": "AC" + "a" * 30,
|
|||
|
|
"base_url": "https://api.twilio.com",
|
|||
|
|
"api_version": "2010-04-01",
|
|||
|
|
},
|
|||
|
|
dependency_note=(
|
|||
|
|
"出站 API 请求使用 basic 认证(Account SID + Auth Token),复用框架插件。"
|
|||
|
|
"入站 Webhook 验签使用 twilio_hmac 认证(新增专属插件,仅承载凭证模型,"
|
|||
|
|
"验签逻辑在 operations.py 实现)。"
|
|||
|
|
"Auth Token 长期有效,无需自动刷新;管理员轮换 Token 后需更新连接配置。"
|
|||
|
|
"短信/语音按条计费,调用前需确认目标国家合规要求与费用预算。"
|
|||
|
|
"Messaging Service 批量发送待 P3 阶段评估。"
|
|||
|
|
),
|
|||
|
|
)
|