Jitsi: роадмап транскрипции и конспектов (будущая фаза)
Статус — будущее, non-blocking. Транскрипция и конспект встреч в MVP не реализуются. Этот документ фиксирует только шов (seam): что уже готово в модели/событиях, чтобы фаза не потребовала переделки. Ничто в текущем контракте от этого не зависит.
Готовый шов
- Событие
pin.messenger.call-recording-available.v1уже несёт достаточный контекст для запуска STT-пайплайна:FileId,SessionId,SessionKind,DealId?,MediaType,DurationSeconds. Это — естественный триггер post-hoc транскрипции. - В
CallRecordingEntityзарезервированы поля-швыTranscriptFileIdиSummaryFileId(логические ссылки на file storage). Они не наполняются сейчас. - Артефакты транскрипта/конспекта будут жить в отдельной будущей сущности
CallMeetingInsightEntity(AggregateRoot, 1:1 к записи), а не колонками записи: у STT/суммаризации иной жизненный цикл (асинхронный, переобрабатываемый, несколько языков/артефактов).
Два возможных пути (при реализации)
Post-hoc STT (предпочтительно)
Транскрипция после звонка, по событию call-recording-available:
- Идеальный артефакт — audio-only
.mka(Matroska audio) отmultitrack-recorder(JMR_FORMAT = "mka",content-type audio/x-matroska): отдельные аудио-дорожки участников дают лучшее качество диаризации, чем видеомикс jibri. Для этого пути в записи добавится modality/track-only захват. - Отдельный пайплайн (вне
messenger) потребляет событие → STT → кладёт транскрипт/конспект в file storage → создаётCallMeetingInsightEntity→ (опц.) карточка в таймлайн сделкиcrm.
Live-транскрипция (альтернатива)
Транскрипция во время звонка через Jitsi:
jigasi(сейчас реплик 0, jitsi-deployment.md) как транскрайбер, или backend-транскрипция jicofo:transcription.url-template = "wss://…/{{MEETING_ID}}"вreference.conf(сейчас закомментировано) + событиеtranscriptionChunkReceivedна клиенте.- Требует разворачивания дополнительных компонентов и STT-провайдера — тяжелее post-hoc пути; рассматривается только при явном требовании «живых субтитров».
Что НЕ делаем сейчас
- Не разворачиваем
jigasi/multitrack-recorder/transcriber(nomad/{transcriber,multitrack-recorder}.hcl— референс на будущее). - Не наполняем
TranscriptFileId/SummaryFileId, не создаёмCallMeetingInsightEntity. - Не расширяем событие
call-recording-available(оно уже самодостаточно как триггер).
Обратные ссылки
Автоссылки: где используется этот документ.
- Домен (CQRS) (1): Entity / Aggregate: CallRecordingEntity — запись звонка (хранение в file storage)
- Use Cases (1): UC-MSG-007. Авто-запись звонка по сделке и её выдача участнику
- События (2): События сервиса messenger: реестр топиков, Event Contract: pin.messenger.call-recording-available (CallRecordingAvailableEvent)
- index.md (1): Messenger Service
- calls (4): Медиа-звонки и запись на Jitsi — интеграционный гид (messenger), Медиа-звонки на Jitsi: план поставки (playbook аналитик → разработчик), Jitsi: инвентарь изменений в thirdparty/jitsi, Jitsi: сквозной пайплайн авто-записи
Связанные документы
- Сущность записи и раздел роадмапа: call-recording.md; событие-триггер: call-recording-available.md; пайплайн записи: recording-pipeline.md.
- Источник (референс):
thirdparty/jitsi/infra-provisioning/nomad/{multitrack-recorder.hcl,transcriber.hcl,jigasi-haproxy.hcl},thirdparty/jitsi/jicofo/.../reference.conf(transcription.url-template). - Решение: ADR-0062.