ForcePilot/backend/package/yuxi/channels/adapters/whatsapp/channel_meta.py
Kris 5c3611ff19 refactor(whatsapp): 整理WhatsApp适配器代码结构并修复多线程安全问题
主要变更:
1. 重构导入顺序,统一模块导入规范
2. 提取通用方法到session模块,减少代码重复
3. 为缓存类添加线程/异步锁,修复并发安全问题
4. 新增入站处理器和发送管理器模块,拆分业务逻辑
5. 优化凭证队列,改为异步实现
6. 移除废弃的SSE_POLLING能力标识
7. 修复轮询投票解析逻辑
8. 优化Markdown转换规则,避免格式冲突
9. 完善连接控制器的异常处理
10. 新增发送静默消息的API支持
2026-05-13 16:17:30 +08:00

70 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from __future__ import annotations
from dataclasses import dataclass, field
from enum import StrEnum
class ChannelMode(StrEnum):
BRIDGE = "bridge"
CLOUD_API = "cloud_api"
class ChannelCapability(StrEnum):
TEXT = "text"
IMAGE = "image"
VIDEO = "video"
AUDIO = "audio"
DOCUMENT = "document"
STICKER = "sticker"
LOCATION = "location"
CONTACT = "contact"
REACTION = "reaction"
BUTTONS = "buttons"
LIST_MESSAGE = "list_message"
TEMPLATE = "template"
POLL = "poll"
GROUP = "group"
BROADCAST = "broadcast"
QR_LOGIN = "qr_login"
PAIRING = "pairing"
SSE_POLLING = "sse_polling"
@dataclass
class WhatsAppChannelMeta:
channel_type: str = "whatsapp"
display_name: str = "WhatsApp"
protocol: str = "whatsapp"
supported_modes: list[ChannelMode] = field(default_factory=lambda: [ChannelMode.BRIDGE, ChannelMode.CLOUD_API])
capabilities: list[ChannelCapability] = field(
default_factory=lambda: [
ChannelCapability.TEXT,
ChannelCapability.IMAGE,
ChannelCapability.VIDEO,
ChannelCapability.AUDIO,
ChannelCapability.DOCUMENT,
ChannelCapability.STICKER,
ChannelCapability.LOCATION,
ChannelCapability.CONTACT,
ChannelCapability.REACTION,
ChannelCapability.BUTTONS,
ChannelCapability.LIST_MESSAGE,
ChannelCapability.POLL,
ChannelCapability.GROUP,
ChannelCapability.QR_LOGIN,
ChannelCapability.PAIRING,
]
)
inbound_rate_limit: int = 60
outbound_rate_limit: int = 30
description: str = "WhatsApp Bridge适配器通过Baileys协议连接WhatsApp"
def has_capability(self, capability: ChannelCapability) -> bool:
return capability in self.capabilities
def supports_mode(self, mode: ChannelMode) -> bool:
return mode in self.supported_modes
ChannelMeta = WhatsAppChannelMeta