diff --git a/gateway/linux/wechat_webhook.py b/gateway/linux/wechat_webhook.py index 9b01c4c..a977719 100644 --- a/gateway/linux/wechat_webhook.py +++ b/gateway/linux/wechat_webhook.py @@ -4,6 +4,13 @@ import os, sys, json, logging, threading, queue, time from http.server import HTTPServer, BaseHTTPRequestHandler +# ── MoFin session routing (shared with XMPP) ── +_SCRIPTS_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "scripts") +if _SCRIPTS_DIR not in sys.path: + sys.path.insert(0, _SCRIPTS_DIR) +from chat_bridge import SessionBridge +from session_router import SessionRouter + HERMES_API = "http://192.168.1.246:8646/v1/chat/completions" HERMES_KEY = "hermes123" PORT = 5804 @@ -23,6 +30,12 @@ logging.basicConfig( ) log = logging.getLogger("wc-webhook") +# ── Session router (per-user session context via opencode.db) ── +_router = SessionRouter( + bridge=SessionBridge(session_id="wechat-mohe"), + default_session="wechat-mohe", +) + # ── 消息队列(串行处理,防止并发打爆 Hermes)────────────── _msg_queue = queue.Queue() @@ -42,29 +55,15 @@ def _hermes_worker(): def _do_forward(sender, sender_id, text): - """实际调用 Hermes API 并回复微信。""" - payload = json.dumps({ - "model": "nova-4", - "messages": [ - {"role": "user", "content": f"[微信消息] 来自 {sender}({sender_id}): {text}"} - ] - }).encode() - + """通过 SessionRouter 发送消息(自动带上下文 + 会话管理)。""" try: - import urllib.request as ureq - handler = ureq.ProxyHandler({}) - opener = ureq.build_opener(handler) - req = ureq.Request(HERMES_API, data=payload, - headers={"Content-Type": "application/json", "Authorization": f"Bearer {HERMES_KEY}"}) - resp = opener.open(req, timeout=600) - resp_data = json.loads(resp.read()) - reply = resp_data.get('choices', [{}])[0].get('message', {}).get('content', '') - log.info(f"Hermes OK, reply: {reply[:60]}") + reply = _router.route("wechat", sender_id, text) + log.info(f"Router OK, reply: {reply[:60] if reply else '(empty)'}") if reply and sender: WebhookHandler._send_wechat_static(sender, reply) except Exception as e: - log.error(f"Hermes error: {e}") + log.error(f"Router error: {e}") # 启动 worker 线程