updates
This commit is contained in:
parent
1486f3c512
commit
150bd1d825
|
|
@ -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":
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue