新增 Webex、微信 iLink、微信小程序三个渠道扩展。 Webex 渠道扩展功能模块: - config: 渠道配置管理 - gateway: SSE/WebSocket 网关接入 - webhook: Webhook 事件处理 - outbound: 外发消息管理 - streaming: 流式消息处理 - pairing: 用户配对与绑定 - security: 安全校验 - dedupe: 消息去重 - monitor: 渠道状态监控 - status: 会话状态管理 - media: 媒体资源处理 微信 iLink 渠道扩展功能模块: - config: 渠道配置管理 - gateway: SSE/WebSocket 网关接入 - outbound: 外发消息管理 - streaming: 流式消息处理 - pairing: 用户配对与绑定 - security: 安全校验 - dedupe: 消息去重 - monitor: 渠道状态监控 - status: 会话状态管理 - context_store: 上下文存储 - aes_ecb: AES-ECB 加解密 - media: 媒体资源处理 - typing: 输入状态 微信小程序渠道扩展功能模块: - config: 渠道配置管理 - gateway: SSE/WebSocket 网关接入 - webhook: Webhook 事件处理 - outbound: 外发消息管理 - streaming: 流式消息处理 - pairing: 用户配对与绑定 - security: 安全校验 - crypto: 加解密处理 - dedupe: 消息去重 - message: 消息处理 - passive_reply: 被动回复 - media: 媒体资源处理 - status: 会话状态管理
66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
from pathlib import Path
|
|
|
|
|
|
class WebexMedia:
|
|
MIME_MAP = {
|
|
".pdf": "application/pdf",
|
|
".doc": "application/msword",
|
|
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
".xls": "application/vnd.ms-excel",
|
|
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
".ppt": "application/vnd.ms-powerpoint",
|
|
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
".png": "image/png",
|
|
".jpg": "image/jpeg",
|
|
".jpeg": "image/jpeg",
|
|
".gif": "image/gif",
|
|
".bmp": "image/bmp",
|
|
}
|
|
|
|
def __init__(self, api):
|
|
self._api = api
|
|
|
|
async def send_local_file(
|
|
self,
|
|
room_id: str,
|
|
file_path: str | Path,
|
|
*,
|
|
description: str = "",
|
|
parent_id: str | None = None,
|
|
) -> str:
|
|
file_path = Path(file_path)
|
|
import aiofiles
|
|
|
|
async with aiofiles.open(file_path, "rb") as f:
|
|
file_content = await f.read()
|
|
|
|
kwargs = {"roomId": room_id, "files": [file_content]}
|
|
if description:
|
|
kwargs["text"] = description
|
|
if parent_id:
|
|
kwargs["parentId"] = parent_id
|
|
|
|
msg = self._api.messages.create(**kwargs)
|
|
return msg.id
|
|
|
|
async def send_remote_file(
|
|
self,
|
|
room_id: str,
|
|
file_url: str,
|
|
*,
|
|
description: str = "",
|
|
parent_id: str | None = None,
|
|
) -> str:
|
|
kwargs = {"roomId": room_id, "files": [file_url]}
|
|
if description:
|
|
kwargs["text"] = description
|
|
if parent_id:
|
|
kwargs["parentId"] = parent_id
|
|
|
|
msg = self._api.messages.create(**kwargs)
|
|
return msg.id
|
|
|
|
@classmethod
|
|
def _guess_mime(cls, suffix: str) -> str:
|
|
return cls.MIME_MAP.get(suffix.lower(), "application/octet-stream")
|