call-to-text/imap/config.py
ed0ss 92f1d76ff8 IMAP-ингестор: обработка старых звонков Novofon из почты Yandex
Добавлен полный пайплайн выгрузки записей разговоров из IMAP-почты
Yandex, транскрипции через faster-whisper (turbo, CUDA) и сохранения
в Directus.

Новые файлы:
- imap/email_fetcher.py — подключение к IMAP (imap.yandex.ru:993),
  пагинация по UID (200/страница), автоматическое переподключение
  при IMAP4.abort (3 retry)
- imap/config.py — конфигурация из .env
- imap/ingestor.py — основной цикл: чтение письма, парсинг метаданных,
  сохранение вложения, конвертация в WAV, разделение стереоканалов,
  транскрипция, запись в Directus; поддержка --limit
- imap/parsers/base.py — абстрактный парсер писем
- imap/parsers/novofon.py — парсер писем Novofon/Zadarma:
  темы [АТС Zadarma] и Novofon, тело письма (JSON+HTML),
  имя файла вложения как fallback; маппинг внутренних номеров
  102/201 на виртуальные; _clean_number без +
- imap/preprocessor.py — конвертация в WAV (ffmpeg),
  разделение стереоканалов (левый=callee, правый=caller),
  get_audio_duration() через ffprobe
- imap/stt.py — транскрипция через faster-whisper (turbo, CUDA)
- imap/aligner.py — alignment результатов STT
- imap/directus.py — клиент Directus: check_call (дедуп),
  save_call в calls/calls_74951284933, find_contact
- match_contacts.py — сопоставление всех звонков с контактами
  по номеру телефона, заполнение caller_name/callee_name
- count_remaining.py — утилита подсчёта оставшихся писем в IMAP

Изменения:
- .env.example: добавлена секция IMAP (сервер, логин, пароль, папка)
- requirements.txt: добавлен imap-tools (IMAP-клиент)

Обработано ~3900 звонков из IMAP (3670 в calls + 687 в
calls_74951284933). Все записи с длительностью аудио из файла
(ffprobe). Все звонки без + в номерах телефонов.
2026-06-28 22:44:51 +03:00

24 lines
784 B
Python

import os
from dotenv import load_dotenv
load_dotenv()
class ImapConfig:
IMAP_SERVER = os.getenv("IMAP_SERVER", "imap.yandex.ru")
IMAP_PORT = int(os.getenv("IMAP_PORT", "993"))
IMAP_USER = os.getenv("IMAP_USER", "")
IMAP_PASSWORD = os.getenv("IMAP_PASSWORD", "")
IMAP_FOLDER = os.getenv("IMAP_FOLDER", "запись разговоров")
DIRECTUS_URL = os.getenv("DIRECTUS_URL", "http://localhost:8055")
DIRECTUS_TOKEN = os.getenv("DIRECTUS_TOKEN", "")
WHISPER_MODEL_SIZE = os.getenv("WHISPER_MODEL_SIZE", "turbo")
WHISPER_DEVICE = os.getenv("WHISPER_DEVICE", "cuda")
WHISPER_COMPUTE_TYPE = os.getenv("WHISPER_COMPUTE_TYPE", "float16")
TEMP_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "temp")
cfg = ImapConfig()