ForcePilot/backend/package/yuxi/external_systems/integrations/twilio/metadata.py

87 lines
3.8 KiB
Python
Raw Normal View History

"""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 SIDAC 开头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 阶段评估。"
),
)