From 4bfaed46931e391813dfcd113d829fc4061bc38b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Sat, 1 Aug 2026 17:58:00 +0800 Subject: [PATCH] fix: parse WhatsApp lastUpdate datetime string to ms epoch WA list endpoints return wall-clock strings ('2026-08-01 16:39') for lastUpdate; storing raw broke CustomerOut.last_chat_time (int) validation -> 500 on /api/customers?channel=whatsapp. Now parsed via parse_datetime_to_ms. Co-Authored-By: Claude --- yunke-server/app/scraper/whatsapp.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/yunke-server/app/scraper/whatsapp.py b/yunke-server/app/scraper/whatsapp.py index 5319b69..e29a971 100644 --- a/yunke-server/app/scraper/whatsapp.py +++ b/yunke-server/app/scraper/whatsapp.py @@ -33,7 +33,7 @@ from collections.abc import AsyncIterator from typing import Any from app.scraper.base import paginate_by_cursor, paginate_by_page -from app.scraper.parsers import coerce_int_or_none, normalize_whatsapp_type +from app.scraper.parsers import coerce_int_or_none, normalize_whatsapp_type, parse_datetime_to_ms from app.session.yunke_client import YunkeClient __all__ = [ @@ -44,6 +44,10 @@ __all__ = [ WHATSAPP_ACCOUNTS_PATH = "/qqweb/WhatsAppUser/businessSalesList" WHATSAPP_FRIENDS_PATH = "/qqweb/WhatsAppUser/businessFriendList" + +# WhatsApp list endpoints return wall-clock strings like "2026-08-01 16:39" +# (no seconds) for lastUpdate/createTime — parse to ms epoch (naive UTC). +_WA_DATETIME_FORMATS = ["%Y-%m-%d %H:%M", "%Y-%m-%d %H:%M:%S"] WHATSAPP_MESSAGES_PATH = "/qqweb/WhatsAppUser/chatRecords" @@ -121,7 +125,7 @@ def _normalize_whatsapp_account(record: dict[str, Any]) -> dict[str, Any]: "talker_count": record.get("talkerCount"), "friend_add_num": record.get("friendAddNum"), "is_on_job": record.get("isOnJob"), - "last_update": record.get("lastUpdate"), + "last_update": parse_datetime_to_ms(record.get("lastUpdate"), _WA_DATETIME_FORMATS), "version": record.get("version"), "raw_json": record, } @@ -254,7 +258,7 @@ def _normalize_whatsapp_friend(record: dict[str, Any]) -> dict[str, Any]: "sale_name": record.get("salesNickName"), "user_id": record.get("userId"), "message_count": record.get("messageCount"), - "last_chat_time": record.get("lastUpdate"), + "last_chat_time": parse_datetime_to_ms(record.get("lastUpdate"), _WA_DATETIME_FORMATS), "version": record.get("version"), "raw_json": record, }