This commit is contained in:
zwt13703 2026-04-27 19:48:05 +08:00
parent 1486f3c512
commit 150bd1d825
1 changed files with 14 additions and 6 deletions

View File

@ -11,17 +11,18 @@ async def save_messages(db: AsyncSession, msg_list: list[dict]) -> int:
"""批量保存消息,按 msg_id 去重,返回新增数量""" """批量保存消息,按 msg_id 去重,返回新增数量"""
saved = 0 saved = 0
for msg in msg_list: for msg in msg_list:
origin = _normalize_origin(msg.get("origin", 3))
stmt = pg_insert(Message).values( stmt = pg_insert(Message).values(
msg_id=msg.get("msgid") or msg.get("msg_id", ""), msg_id=str(msg.get("msgid") or msg.get("msg_id", "")),
open_kfid=msg.get("open_kfid", settings.open_kfid), open_kfid=str(msg.get("open_kfid", settings.open_kfid)),
external_userid=msg.get("external_userid", ""), external_userid=str(msg.get("external_userid", "")),
servicer_userid=msg.get("servicer_userid"), servicer_userid=msg.get("servicer_userid"),
send_time=datetime.fromtimestamp(msg.get("send_time", 0)), send_time=datetime.fromtimestamp(msg.get("send_time", 0)),
msgtype=msg.get("msgtype", "unknown"), msgtype=str(msg.get("msgtype", "unknown")),
origin=msg.get("origin", "customer"), origin=origin,
content=_extract_text_content(msg), content=_extract_text_content(msg),
raw_data=msg, raw_data=msg,
direction="inbound" if msg.get("origin") != "servicer" else "outbound", direction="inbound" if origin != "servicer" else "outbound",
status="received", status="received",
).on_conflict_do_nothing(index_elements=["msg_id"]) ).on_conflict_do_nothing(index_elements=["msg_id"])
result = await db.execute(stmt) result = await db.execute(stmt)
@ -133,6 +134,13 @@ async def send_and_save(db: AsyncSession, external_userid: str, content: str,
return result return result
def _normalize_origin(origin) -> str:
"""将微信 API 返回的 origin 整数转为字符串"""
if isinstance(origin, int):
return {3: "customer", 4: "system", 5: "servicer"}.get(origin, str(origin))
return str(origin)
def _extract_text_content(msg: dict) -> str: def _extract_text_content(msg: dict) -> str:
"""从消息中提取文本内容""" """从消息中提取文本内容"""
if msg.get("msgtype") == "text": if msg.get("msgtype") == "text":