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 去重,返回新增数量"""
saved = 0
for msg in msg_list:
origin = _normalize_origin(msg.get("origin", 3))
stmt = pg_insert(Message).values(
msg_id=msg.get("msgid") or msg.get("msg_id", ""),
open_kfid=msg.get("open_kfid", settings.open_kfid),
external_userid=msg.get("external_userid", ""),
msg_id=str(msg.get("msgid") or msg.get("msg_id", "")),
open_kfid=str(msg.get("open_kfid", settings.open_kfid)),
external_userid=str(msg.get("external_userid", "")),
servicer_userid=msg.get("servicer_userid"),
send_time=datetime.fromtimestamp(msg.get("send_time", 0)),
msgtype=msg.get("msgtype", "unknown"),
origin=msg.get("origin", "customer"),
msgtype=str(msg.get("msgtype", "unknown")),
origin=origin,
content=_extract_text_content(msg),
raw_data=msg,
direction="inbound" if msg.get("origin") != "servicer" else "outbound",
direction="inbound" if origin != "servicer" else "outbound",
status="received",
).on_conflict_do_nothing(index_elements=["msg_id"])
result = await db.execute(stmt)
@ -133,6 +134,13 @@ async def send_and_save(db: AsyncSession, external_userid: str, content: str,
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:
"""从消息中提取文本内容"""
if msg.get("msgtype") == "text":