ForcePilot/backend/package/yuxi/channel/extensions/aliyun_sms/gateway.py
Kris b8864ac12f feat(aliyun-sms): 新增阿里云短信渠道插件
实现完整的阿里云短信服务接入能力,包含短信发送、状态回执处理、上行消息接收、安全策略校验、会话管理等功能
2026-05-21 10:39:43 +08:00

82 lines
2.4 KiB
Python

from __future__ import annotations
import asyncio
import logging
from .types import AliyunSmsAccount
logger = logging.getLogger(__name__)
class AliyunSmsGateway:
def __init__(self, account: AliyunSmsAccount):
self.account = account
self._client = None
self._queue = None
self._running = False
self._session_manager = None
@property
def running(self) -> bool:
return self._running
@property
def client(self):
if self._client is None:
raise RuntimeError("Gateway 未启动")
return self._client
@property
def queue(self) -> asyncio.Queue:
if self._queue is None:
raise RuntimeError("Gateway 未启动,队列不可用")
return self._queue
@property
def session_manager(self):
if self._session_manager is None:
raise RuntimeError("Gateway 未启动,会话管理器不可用")
return self._session_manager
async def start(self, ctx) -> object:
from .session import AliyunSmsSessionManager
from .sms_client import AliyunSmsClient
if not self.account.is_configured():
return {"running": False, "reason": "not-configured"}
self._client = AliyunSmsClient(
access_key_id=self.account.access_key_id,
access_key_secret=self.account.access_key_secret,
region=self.account.region,
ssl_verify=self.account.ssl_verify,
)
self._session_manager = AliyunSmsSessionManager(ttl_minutes=self.account.session_ttl_minutes)
self._queue = asyncio.Queue(maxsize=1000)
self._running = True
logger.info(
"阿里云短信 Gateway 已启动: account=%s region=%s sign=%s",
self.account.account_id,
self.account.region,
self.account.sign_name,
)
return {
"running": True,
"account_id": self.account.account_id,
"sign_name": self.account.sign_name,
"queue": self._queue,
}
async def stop(self, ctx) -> None:
self._running = False
if self._client:
await self._client.close()
self._client = None
self._queue = None
self._session_manager = None
logger.info("阿里云短信 Gateway 已停止: account=%s", self.account.account_id)