- Клиент Novofon DATA API (JSON-RPC, get.calls_report, чанки по 90 дней) - faster-whisper (модель turbo) на CUDA с разделением стереоканалов - Маркировка спикеров: левый канал = caller, правый = callee - Directus: коллекции calls, calls_74951284933, contacts - CLI: process, process-file, export, daemon (polling 5 мин) - Docker Compose для Directus + PostgreSQL - Архив email-парсинга в old/
30 lines
959 B
Python
30 lines
959 B
Python
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
|