新增 Twitter 和 Viber 两个渠道扩展。 Twitter 渠道扩展功能模块: - auth: OAuth 认证管理 - config: 渠道配置管理 - gateway: SSE/WebSocket 网关接入 - webhook: Webhook 事件处理 - outbound: 外发消息管理 - streaming: 流式消息处理 - pairing: 用户配对与绑定 - security: 安全校验 - dedupe: 消息去重 - monitor: 渠道状态监控 - status: 会话状态管理 - session: 会话管理 - tweets: 推文管理 - social: 社交互动 - reactions: 表情反应 - media: 媒体资源处理 Viber 渠道扩展功能模块: - config: 渠道配置管理 - gateway: SSE/WebSocket 网关接入 - webhook: Webhook 事件处理 - outbound: 外发消息管理 - streaming: 流式消息处理 - pairing: 用户配对与绑定 - security: 安全校验 - dedupe: 消息去重 - monitor: 渠道状态监控 - status: 会话状态管理 - rate_limiter: 速率限制 - media: 媒体资源处理
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
import httpx
|
|
|
|
from yuxi.channel.extensions.viber.types import VIBER_API_BASE
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ViberStatusAdapter:
|
|
async def probe(self, account: dict | None = None) -> bool:
|
|
if not account:
|
|
return False
|
|
|
|
auth_token = account.get("auth_token", "")
|
|
if not auth_token:
|
|
return False
|
|
|
|
try:
|
|
headers = {"X-Viber-Auth-Token": auth_token}
|
|
async with httpx.AsyncClient(timeout=httpx.Timeout(10.0)) as client:
|
|
resp = await client.post(
|
|
f"{VIBER_API_BASE}/get_account_info",
|
|
headers=headers,
|
|
)
|
|
result = resp.json()
|
|
ok = result.get("status") == 0
|
|
if ok:
|
|
logger.info(
|
|
"Viber health: name=%s uri=%s subscribers=%s",
|
|
result.get("name"),
|
|
result.get("uri"),
|
|
result.get("subscribers_count"),
|
|
)
|
|
return ok
|
|
except Exception:
|
|
logger.exception("Viber health probe error")
|
|
return False
|
|
|
|
def build_summary(self, snapshot: object) -> dict:
|
|
account = getattr(snapshot, "account", {})
|
|
return {
|
|
"channel": "viber",
|
|
"mode": "webhook",
|
|
"account_id": account.get("account_id", "") if isinstance(account, dict) else "",
|
|
}
|
|
|
|
def resolve_account_state(self, account: dict, config: dict, configured: bool, enabled: bool) -> str:
|
|
if not configured:
|
|
return "unconfigured"
|
|
if not enabled:
|
|
return "disabled"
|
|
return "ok"
|