ForcePilot/backend/package/yuxi/channel/extensions/jd/monitor.py
Kris bb8ade9e2b feat(channel): 添加京东渠道扩展
新增京东(JD)渠道扩展,支持在 Yuxi 平台中集成京东客服渠道。

包含以下功能模块:
- client: 京东 API 客户端封装
- config: 渠道配置管理
- gateway: SSE/WebSocket 网关接入
- webhook: Webhook 事件处理
- outbound: 外发消息管理
- pairing: 用户配对与绑定
- security: 安全校验
- signature: 请求签名验证
- crypto: 加解密处理
- dedupe: 消息去重
- monitor: 渠道状态监控
- status: 会话状态管理
- session: 会话管理
- business: 业务逻辑处理
- types: 类型定义
2026-05-21 11:05:40 +08:00

64 lines
2.1 KiB
Python

import json
import logging
from datetime import datetime, UTC
from yuxi.channel.extensions.jd.types import InboundJDMessage
from yuxi.channel.message.models import MessageType, PeerInfo, UnifiedMessage
from yuxi.channel.routing.models import PeerKind
logger = logging.getLogger(__name__)
class JDMonitor:
def convert_to_unified(self, msg: InboundJDMessage) -> UnifiedMessage:
msg_type = MessageType.TEXT
if msg.msg_type == 2:
msg_type = MessageType.IMAGE
content = self._extract_content(msg)
return UnifiedMessage(
msg_id=msg.msg_id,
channel_type="jd",
account_id="default",
content=content,
message_type=msg_type,
sender=PeerInfo(
id=msg.from_id,
kind=PeerKind.DIRECT,
display_name=msg.from_id,
),
timestamp=self._parse_timestamp(msg.msg_time),
raw_payload=msg.raw,
body_for_agent=content,
metadata={
"chat_id": msg.chat_id,
"to_id": msg.to_id,
"from_type": msg.from_type,
"extend": msg.extend,
},
)
def _extract_content(self, msg: InboundJDMessage) -> str:
if msg.msg_type in (2, 3, 4):
try:
data = json.loads(msg.content)
if msg.msg_type == 2:
return data.get("url", msg.content)
if msg.msg_type == 3:
return f"{data.get('text', '')}\n{data.get('url', '')}"
if msg.msg_type == 4:
return f"[商品卡片] {data.get('pid', '')}\n{data.get('url', '')}"
except (json.JSONDecodeError, TypeError):
return msg.content
return msg.content
def _parse_timestamp(self, msg_time: str) -> datetime | None:
try:
dt = datetime.strptime(msg_time, "%Y-%m-%d %H:%M:%S")
return dt.replace(tzinfo=UTC)
except (ValueError, TypeError):
import time
return datetime.fromtimestamp(time.time(), tz=UTC)