PrimeMeet

Качество, безопасность и приёмка

Проверка качества звонков и транскрипции, безопасность production, регламент эксплуатации, чек-листы приёмки и справочник переменных окружения.

Финальный блок серверной части: как проверить качество звонков и транскрипции, обеспечить безопасность production, выстроить регламент эксплуатации и принять установку по чек-листам. В конце — справочник переменных окружения и финальная проверка всей установки.

Проверка качества звонков

Матрица

CallerCalleeСеть
Chrome desktopAndroidWi-Fi/LTE
Chrome desktopiPhone PWAWi-Fi/LTE
AndroidAndroidLTE/LTE
iPhone PWAAndroidWi-Fi/LTE
Safari desktopChromeразные сети

Сценарий

Для каждой пары:

  1. Audio call.
  2. Accept/reject.
  3. Mute/unmute.
  4. Video on/off.
  5. Camera flip.
  6. Background/foreground.
  7. Network switch.
  8. End.
  9. Повторный звонок сразу после окончания.

Что записать при ошибке

  • точное время;
  • caller handle и callee handle;
  • callId;
  • устройства, ОС и версия;
  • сети;
  • кто кого слышал;
  • было ли видео;
  • текст ошибки.

Серверные журналы

Ищите:

[CALL] INVITE
[CALL] ACCEPT
[CALL] REJECT
[CALL] END
[CALL] delete room failed

WebRTC stats

Собирайте: ICE state, selected candidate, relay/direct, RTT, jitter, packets lost, bitrate, frames dropped, audio level и codec.

Проверка транскрипции

Worker

curl -fsS http://127.0.0.1:8001/health
journalctl -u whisper-worker -n 200 --no-pager

Очередь

Backend обрабатывает один job за раз. Живые chunks имеют практический приоритет относительно финальной диаризации через механизм preemption.

Тест

Используйте запись 2–3 минуты с двумя спикерами, без музыки и одновременной речи, на русском языке, с одинаковым расстоянием до микрофона.

Проверьте текст, длительность, timestamps, число спикеров, сохранение аудио и итоговый status.

Плохой текст

Проверьте input codec, ffmpeg, sample rate, громкость, шум, ASR model, language, filter и CPU throttling.

Плохое разделение

Проверьте segmentation model, embedding model, thresholds, overlapping speech, короткие реплики и акустику.

Важно. Не подбирайте threshold по одной записи. Используйте набор разных совещаний.

Зависание

Проверьте worker PID, memory, native crash, diarization_status, attempts, file path и свободное место.

Безопасность production

Обязательное

  • уникальные JWT secrets;
  • HTTPS;
  • закрытые internal ports;
  • firewall;
  • service users;
  • строгие права;
  • backup;
  • обновления;
  • log review;
  • secret rotation.

Не хранить в Git

.env
runtime/env
data/app.db*
data/uploads/
data/audio/
data/vapid.json
data/fcm-service-account.json
mobile/android/app/google-services.json
Android keystore
ASR models

JWT

Типы: session, conference join, transcript upload, transcript audio, stream token, LiveKit token.

Каждый token должен проверять kind, subject, TTL и принадлежность к объекту.

Internal endpoints

  • LiveKit webhook проверяет подпись;
  • MediaMTX auth проверяет token/shared secret;
  • Whisper слушает localhost;
  • LiveKit admin API не публикуется напрямую.

Файлы

  • случайные storage names;
  • защита от path traversal;
  • безопасный Content-Type;
  • авторизация preview/download;
  • ограничение размера;
  • retention.

Регистрация

Если сервис предназначен только для компании, публичная регистрация должна быть ограничена до внешнего запуска.

Регламент эксплуатации

Каждый день

  • health;
  • disk;
  • ошибки backend;
  • ошибки worker;
  • transcript queue;
  • push;
  • активные конференции;
  • backup.

Каждую неделю

  • полный smoke test;
  • Android call test;
  • iPhone PWA call test;
  • Office preview;
  • restore sample;
  • dependency alerts;
  • failed diarization.

Каждый месяц

  • восстановление backup;
  • ротация старых logs;
  • capacity review;
  • TURN test;
  • TLS expiry;
  • access review;
  • Android release check;
  • модели PrimeResume.

Перед релизом

  • ветка актуальна;
  • diff просмотрен;
  • нет секретов;
  • все тесты прошли;
  • есть backup;
  • есть rollback;
  • проверены миграции;
  • проверен PWA cache;
  • проверен Android update;
  • проверены calls.

Чек-листы приемки

Аккаунт

  • регистрация;
  • login;
  • sliding session;
  • avatar;
  • email verify;
  • password reset;
  • phone.

Чаты

  • DM;
  • group;
  • typing;
  • unread;
  • mute;
  • pin;
  • block;
  • edit/delete;
  • attachments;
  • drag-and-drop.

Звонки

  • incoming push;
  • accept;
  • reject;
  • timeout;
  • repeat call;
  • microphone;
  • camera;
  • camera flip;
  • audio output;
  • end.

Конференции

  • instant;
  • scheduled;
  • invites;
  • prejoin;
  • guest;
  • owner transfer;
  • lock;
  • kick;
  • mute all;
  • screen share;
  • empty auto-end;
  • duration end.

PrimeResume

  • conference recording;
  • live chunks;
  • transcript;
  • diarization;
  • summary;
  • recap;
  • PDF;
  • audio playback;
  • search;
  • retention.

Диктофон

  • start/stop;
  • background processing;
  • несколько записей подряд;
  • recovery IndexedDB;
  • import phone audio;
  • upload progress;
  • history;
  • speakers.

Платформы

  • desktop web;
  • Android app;
  • Android PWA;
  • iPhone PWA;
  • tablet;
  • narrow mobile layout.

Справочник переменных окружения

Runtime

ПеременнаяНазначение
APP_ROOT_DIRКорень
APP_PUBLIC_DIRFrontend
APP_DATA_DIRДанные
APP_RUNTIME_DIRRuntime configs
APP_HOSTBind host
PORTHTTP port

Файлы

ПеременнаяНазначение
CHAT_FILE_MAX_BYTESМаксимальный файл
CHAT_TEXT_PREVIEW_BYTESText preview
CHAT_OFFICE_PREVIEW_MAX_BYTESOffice preview
OFFICE_PREVIEW_TIMEOUT_MSLibreOffice timeout
LIBREOFFICE_BINLibreOffice path

Security

ПеременнаяНазначение
APP_JWT_SECRETSession/conference JWT
STREAM_JWT_SECRETMedia stream JWT
SESSION_TTL_SECONDSSession TTL
AUDIO_TOKEN_TTL_SECAudio URL token TTL

LiveKit/TURN

ПеременнаяНазначение
LIVEKIT_API_KEYAPI key
LIVEKIT_API_SECRETAPI secret
LIVEKIT_PUBLIC_URLClient URL
LIVEKIT_API_URLInternal RoomService
TURN_HOSTTURN
TURN_TLS_HOSTTURN TLS
TURN_SHARED_SECRETTURN auth
TURN_CREDENTIAL_TTLCredential TTL

Integrations

ПеременнаяНазначение
FCM_SERVICE_ACCOUNTFirebase credential
DEEPSEEK_API_KEYLLM key
DEEPSEEK_MODELLLM model
DEEPSEEK_BASE_URLLLM URL
SMTP_HOSTSMTP
SMTP_PORTSMTP port
SMTP_USERSMTP user
SMTP_PASSSMTP password
SMTP_SECURETLS mode
SMTP_FROMSender
APP_BASE_URLPublic application URL
SMS_RU_API_IDSMS.ru

ASR

ПеременнаяНазначение
WHISPER_WORKER_URLWorker URL
ASR_ENGINEfaster-whisper/sherpa
WHISPER_MODELWhisper model
WHISPER_DEVICECPU/CUDA
WHISPER_COMPUTECompute type
ASR_NUM_THREADSCPU threads
SHERPA_MODEL_DIRGigaAM
DIARIZATION_SEGMENTATION_MODELSegmentation ONNX
DIARIZATION_EMBEDDING_MODELEmbedding ONNX
DIARIZATION_CLUSTER_THRESHOLDCluster threshold
DIARIZATION_SPEAKER_MATCH_THRESHOLDSpeaker match
ASR_WINDOW_SECONDSASR window
ASR_WINDOW_OVERLAP_SECONDSASR overlap
DIARIZATION_WINDOW_SECONDSDiarization window
DIARIZATION_WINDOW_OVERLAP_SECONDSDiarization overlap
DIARIZATION_MIN_SPEAKER_TURN_SECONDSMin speaker turn
ASR_AUDIO_FILTERffmpeg filters
FFMPEG_BINffmpeg path

Финальная проверка

PrimeMeet можно считать настроенным, если:

  1. Пользователь устанавливает клиент и входит.
  2. Разрешения работают предсказуемо.
  3. Сообщения доставляются без перезагрузки интерфейса.
  4. Файлы загружаются, открываются и скачиваются.
  5. Звонок проходит между разными сетями.
  6. Конференция имеет владельца и корректно завершается.
  7. Календарь и карточки отражают живое состояние.
  8. Android и iPhone получают уведомления в поддерживаемых режимах.
  9. Диктофон продолжает фоновые задачи и принимает аудио с телефона.
  10. PrimeResume создает текст и разделяет спикеров.
  11. Backup восстанавливается.
  12. Обновление имеет проверенный rollback.

Важно. Если любой пункт не выполнен, не маскируйте проблему повторным перезапуском. Зафиксируйте время, пользователя, устройство, request/call/conference ID, соберите логи нужного компонента и устраните первопричину.

Обновлено: 3 августа 2026 г.