"""Pydantic schemas for Meta WhatsApp webhook.""" from __future__ import annotations from datetime import datetime from pydantic import BaseModel, Field # ── Meta Webhook Verification ──────────────────────────────────────── class WebhookVerificationResponse(BaseModel): challenge: str # ── Inbound Message Parsing ───────────────────────────────────────── class MessageText(BaseModel): text: str class Message(BaseModel): from_field: str = Field(alias="from") id: str | None = None text: MessageText | None = None type: str | None = None class Contact(BaseModel): wa_id: str | None = None profile: dict | None = None class EntryMessagesItem(BaseModel): id: str | None = None message: Message | None = None contacts: list[Contact] | None = None timestamp: str | None = None class Entry(BaseModel): id: str | None = None changes: list[EntryMessagesItem] | None = None metadata: dict | None = None class MetaWebhookRequest(BaseModel): object: str | None = None entry: list[Entry] | None = None # ── Auto-reply ────────────────────────────────────────────────────── class WhatsAppReplyResponse(BaseModel): success: bool message: str # ── Legacy mock schemas (kept for /mock-log endpoint) ─────────────── class MockWhatsAppLogEntry(BaseModel): id: int from_number: str message_text: str wa_message_id: str | None ticket_id: int | None ticket_number: str | None received_at: datetime model_config = {"from_attributes": True} class MockWhatsAppRequest(BaseModel): command: str from_number: str | None = None ticket_id: int | None = None class MockWhatsAppResponse(BaseModel): status: str = "received" message: str = "Command logged successfully"