新增大量WhatsApp适配器相关代码,包括账号管理、会话处理、消息收发、验证授权、媒体处理、互动命令、审批流程、健康检测等完整功能模块,搭建基础的Baileys协议WhatsApp接入能力
73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
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.TEMPLATE,
|
||
ChannelCapability.POLL,
|
||
ChannelCapability.GROUP,
|
||
ChannelCapability.BROADCAST,
|
||
ChannelCapability.QR_LOGIN,
|
||
ChannelCapability.PAIRING,
|
||
ChannelCapability.SSE_POLLING,
|
||
]
|
||
)
|
||
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
|