fix: 修复实时消息报错内容
This commit is contained in:
@@ -202,8 +202,8 @@ def _on_ws_message(key: str, data: Any) -> None:
|
||||
for m in msg_list:
|
||||
if _is_self_sent(m):
|
||||
continue
|
||||
from_user = (m.get("FromUserName") or m.get("from") or "").strip()
|
||||
content = (m.get("Content") or m.get("content") or "").strip()
|
||||
from_user = (m.get("FromUserName") or m.get("from") or _unwrap_wechat_field(m.get("from_user_name")) or "").strip()
|
||||
content = (m.get("Content") or m.get("content") or _unwrap_wechat_field(m.get("content")) or "").strip()
|
||||
msg_type = m.get("MsgType") or m.get("msgType")
|
||||
if from_user and content and (msg_type in (1, None) or str(msg_type) == "1"): # 仅文本触发 AI
|
||||
if not _allowed_ai_reply(key, from_user):
|
||||
@@ -220,8 +220,8 @@ def _on_ws_message(key: str, data: Any) -> None:
|
||||
for m in data:
|
||||
if not isinstance(m, dict) or _is_self_sent(m):
|
||||
continue
|
||||
from_user = (m.get("FromUserName") or m.get("from") or "").strip()
|
||||
content = (m.get("Content") or m.get("content") or "").strip()
|
||||
from_user = (m.get("FromUserName") or m.get("from") or _unwrap_wechat_field(m.get("from_user_name")) or "").strip()
|
||||
content = (m.get("Content") or m.get("content") or _unwrap_wechat_field(m.get("content")) or "").strip()
|
||||
msg_type = m.get("MsgType") or m.get("msgType")
|
||||
if from_user and content and (msg_type in (1, None) or str(msg_type) == "1"):
|
||||
if not _allowed_ai_reply(key, from_user):
|
||||
@@ -236,8 +236,8 @@ def _on_ws_message(key: str, data: Any) -> None:
|
||||
store.append_sync_messages(key, [data])
|
||||
m = data if isinstance(data, dict) else {}
|
||||
if not _is_self_sent(m):
|
||||
from_user = (m.get("FromUserName") or m.get("from") or "").strip()
|
||||
content = (m.get("Content") or m.get("content") or "").strip()
|
||||
from_user = (m.get("FromUserName") or m.get("from") or _unwrap_wechat_field(m.get("from_user_name")) or "").strip()
|
||||
content = (m.get("Content") or m.get("content") or _unwrap_wechat_field(m.get("content")) or "").strip()
|
||||
msg_type = m.get("MsgType") or m.get("msgType")
|
||||
if from_user and content and (msg_type in (1, None) or str(msg_type) == "1"):
|
||||
if not _allowed_ai_reply(key, from_user):
|
||||
@@ -1372,15 +1372,31 @@ async def api_callback_wechat_message(request: Request, key: Optional[str] = Que
|
||||
logger.warning("callback_log append failed: %s", le)
|
||||
try:
|
||||
payload: Any = body
|
||||
# 7006 回调当前格式示例:{"key": "...", "message": {...}, "type": "message"}
|
||||
# 优先按回调 message 结构归一化,再回退到 Data/data 解包。
|
||||
if isinstance(body, dict) and body.get("message"):
|
||||
# 7006 回调格式:{"key": "...", "message": {...}|[...], "type": "message"} 或 {"key": "...", "Data": {...}}
|
||||
if isinstance(body, dict) and body.get("message") is not None:
|
||||
msg = body.get("message")
|
||||
if isinstance(msg, list):
|
||||
# message 为数组时逐条归一化
|
||||
normalized_list = []
|
||||
for m in msg:
|
||||
if isinstance(m, dict):
|
||||
n = _normalize_callback_message({"message": m})
|
||||
if n:
|
||||
normalized_list.append(n)
|
||||
if normalized_list:
|
||||
payload = normalized_list
|
||||
else:
|
||||
normalized = _normalize_callback_message(body)
|
||||
if normalized:
|
||||
payload = [normalized]
|
||||
elif isinstance(body, dict):
|
||||
inner = body.get("Data") or body.get("data")
|
||||
if isinstance(inner, (dict, list)):
|
||||
if isinstance(inner, dict) and (inner.get("from_user_name") is not None or inner.get("FromUserName") is not None):
|
||||
# Data/data 为单条消息结构时也归一化,保证 FromUserName/Content 等字段统一
|
||||
normalized = _normalize_callback_message({"message": inner})
|
||||
if normalized:
|
||||
payload = [normalized]
|
||||
elif isinstance(inner, list):
|
||||
payload = inner
|
||||
_on_ws_message(k, payload)
|
||||
logger.info("callback message saved to sync_messages, key=%s", k[:8] + "..." if len(k) > 8 else k)
|
||||
|
||||
Reference in New Issue
Block a user