from dataclasses import dataclass from typing import Literal, TypedDict from pydantic import AwareDatetime, BaseModel MessageChannel = Literal["SMS", "WHATSAPP"] class SendBatchRequest(BaseModel): batch_id: int campaign_id: str messages_to_send: int safe_until: AwareDatetime | None = None class PersonalizedAttributes(TypedDict): fan_id: str phone_number: str channel: MessageChannel class RenderedMessage(BaseModel): fan_id: str channel: MessageChannel recipient: str sender: str message: str media_url: str | list[str] | None = None @dataclass(frozen=True, slots=True) class TwilioSendCredentials: account_sid: str messaging_service_sid: str api_key_id: str api_secret: str @dataclass(frozen=True, slots=True) class FanSendOutcome: fan_id: str sent: bool message_id: str | None = None error_message: str | None = None