from typing import Optional from dataclasses import dataclass @dataclass class CallMetadata: call_id: Optional[str] = None caller_number: Optional[str] = None callee_number: Optional[str] = None caller_name: Optional[str] = None callee_name: Optional[str] = None employee: Optional[str] = None direction: Optional[str] = None duration_sec: Optional[int] = None datetime: Optional[str] = None audio_url: Optional[str] = None audio_data: Optional[bytes] = None audio_filename: Optional[str] = None source_email_id: Optional[str] = None class BaseEmailParser: def parse_email(self, subject: str, body_text: str, body_html: str) -> Optional[CallMetadata]: raise NotImplementedError def parse_url(self, url: str) -> Optional[CallMetadata]: raise NotImplementedError def extract_audio_url(self, body_text: str, body_html: str) -> Optional[str]: raise NotImplementedError