fix: 修复实时消息报错内容
This commit is contained in:
@@ -202,8 +202,8 @@ def _on_ws_message(key: str, data: Any) -> None:
|
|||||||
for m in msg_list:
|
for m in msg_list:
|
||||||
if _is_self_sent(m):
|
if _is_self_sent(m):
|
||||||
continue
|
continue
|
||||||
from_user = (m.get("FromUserName") or m.get("from") 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 "").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")
|
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 from_user and content and (msg_type in (1, None) or str(msg_type) == "1"): # 仅文本触发 AI
|
||||||
if not _allowed_ai_reply(key, from_user):
|
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:
|
for m in data:
|
||||||
if not isinstance(m, dict) or _is_self_sent(m):
|
if not isinstance(m, dict) or _is_self_sent(m):
|
||||||
continue
|
continue
|
||||||
from_user = (m.get("FromUserName") or m.get("from") 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 "").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")
|
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 from_user and content and (msg_type in (1, None) or str(msg_type) == "1"):
|
||||||
if not _allowed_ai_reply(key, from_user):
|
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])
|
store.append_sync_messages(key, [data])
|
||||||
m = data if isinstance(data, dict) else {}
|
m = data if isinstance(data, dict) else {}
|
||||||
if not _is_self_sent(m):
|
if not _is_self_sent(m):
|
||||||
from_user = (m.get("FromUserName") or m.get("from") 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 "").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")
|
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 from_user and content and (msg_type in (1, None) or str(msg_type) == "1"):
|
||||||
if not _allowed_ai_reply(key, from_user):
|
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)
|
logger.warning("callback_log append failed: %s", le)
|
||||||
try:
|
try:
|
||||||
payload: Any = body
|
payload: Any = body
|
||||||
# 7006 回调当前格式示例:{"key": "...", "message": {...}, "type": "message"}
|
# 7006 回调格式:{"key": "...", "message": {...}|[...], "type": "message"} 或 {"key": "...", "Data": {...}}
|
||||||
# 优先按回调 message 结构归一化,再回退到 Data/data 解包。
|
if isinstance(body, dict) and body.get("message") is not None:
|
||||||
if isinstance(body, dict) and body.get("message"):
|
msg = body.get("message")
|
||||||
normalized = _normalize_callback_message(body)
|
if isinstance(msg, list):
|
||||||
if normalized:
|
# message 为数组时逐条归一化
|
||||||
payload = [normalized]
|
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):
|
elif isinstance(body, dict):
|
||||||
inner = body.get("Data") or body.get("data")
|
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
|
payload = inner
|
||||||
_on_ws_message(k, payload)
|
_on_ws_message(k, payload)
|
||||||
logger.info("callback message saved to sync_messages, key=%s", k[:8] + "..." if len(k) > 8 else k)
|
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