ForcePilot/backend/package/yuxi/channels/adapters/zalo_user/constants.py
Kris 9285da5c55 feat(zalo-user): 实现完整的Zalo用户频道适配器
新增了Zalo用户频道的完整适配器实现,包括:
- 基础的适配器初始化与导出结构
- 群组同步与成员获取功能
- 请求限流与退避重试机制
- 健康检查与状态探针
- 消息反应/表情处理工具
- 贴纸缓存与消息去重功能
- 消息ID格式化与追踪
- TTS语音合成支持
- 消息发送权限校验
- 长文本分块发送
- 操作审批流程
- 常量配置与国际化支持
- 图像视觉分析功能
- 贴纸消息处理
- 登录与配置向导
- 群组上下文缓存
- 网关连接管理
- 配置Schema校验
- 状态问题与安全审计
- 内联按钮与交互组件
- 交互式回调分发
- 联系人与群组目录管理
- 富媒体卡片消息支持
2026-05-12 00:53:13 +08:00

88 lines
1.9 KiB
Python

from __future__ import annotations
from enum import StrEnum
ZALO_TEXT_LIMIT = 2000
ZALO_MAX_STYLED_MESSAGE_LENGTH = 2000
WS_MAX_MESSAGE_SIZE = 10 * 1024 * 1024
WS_PING_INTERVAL = 30
WS_PING_TIMEOUT = 10
WS_RECONNECT_DELAY = 5
WATCHDOG_INTERVAL = 30
WATCHDOG_MAX_IDLE = 35
GROUP_CONTEXT_CACHE_TTL = 300
GROUP_CONTEXT_CACHE_MAX_ENTRIES = 500
DEFAULT_BRIDGE_URL = "http://localhost:5556"
DEFAULT_TIMEOUT = 30.0
DEFAULT_CONNECT_TIMEOUT = 10
DEFAULT_LOGIN_POLL_INTERVAL = 2.0
DEFAULT_LOGIN_TIMEOUT = 120.0
DEFAULT_QR_START_TIMEOUT = 30.0
DEFAULT_MAX_SEND_PER_MINUTE = 30
DEFAULT_RETRY_ATTEMPTS = 3
DEFAULT_RETRY_MIN_DELAY_MS = 500
DEFAULT_RETRY_MAX_DELAY_MS = 10000
DEFAULT_CIRCUIT_BREAKER_THRESHOLD = 5
DEFAULT_CIRCUIT_BREAKER_RECOVERY = 60
ZALO_REACTION_EMOJIS = frozenset(
{
"\U0001f44d",
"\u2764\ufe0f",
"\U0001f602",
"\U0001f62e",
"\U0001f622",
"\U0001f621",
}
)
REACTION_ALIAS_MAP: dict[str, str] = {
"like": "\U0001f44d",
"+1": "\U0001f44d",
":+1:": "\U0001f44d",
"love": "\u2764\ufe0f",
"heart": "\u2764\ufe0f",
":heart:": "\u2764\ufe0f",
"laugh": "\U0001f602",
"haha": "\U0001f602",
":laughing:": "\U0001f602",
"wow": "\U0001f62e",
"surprised": "\U0001f62e",
":open_mouth:": "\U0001f62e",
"sad": "\U0001f622",
"cry": "\U0001f622",
":cry:": "\U0001f622",
"angry": "\U0001f621",
"mad": "\U0001f621",
":rage:": "\U0001f621",
}
TARGET_PREFIXES: dict[str, str] = {
"zalouser:": "user",
"zlu:": "user",
"user:": "user",
"dm:": "user",
"u:": "user",
"u-": "user",
"group:": "group",
"g:": "group",
"g-": "group",
}
class ZaloCredentialStage(StrEnum):
UNINITIALIZED = "uninitialized"
QR_PENDING = "qr_pending"
QR_SCANNED = "qr_scanned"
QR_DECLINED = "qr_declined"
QR_EXPIRED = "qr_expired"
CONNECTED = "connected"
LOGGED_OUT = "logged_out"
ERROR = "error"