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 <noreply@anthropic.com>
This commit is contained in:
@@ -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,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user