Встречи и транскрипция
Control Center может записать звонок и вернуть вам аккуратный итог — сводку, пункты действий и решения, — при этом распознавание речи и разделение спикеров работают на вашем собственном оборудовании. Вспомните Granola, только размещённую у себя и подключённую к тому же рабочему пространству, где живут ваши агенты.
Что такое встреча
Заголовок раздела «Что такое встреча»Встреча — это записанный и транскрибированный сеанс. Это не то же самое, что событие календаря: событие — это запланированное обязательство, синхронизированное из Google, а встреча — то, что вы действительно записали. Их можно связать, поскольку запись можно начать из события, но это остаются разные записи.
Каждая встреча привязана к рабочему пространству, как и всё остальное в Control Center. Встречи, записанные в одном рабочем пространстве, никогда не появятся в другом.
Где происходит работа
Заголовок раздела «Где происходит работа»«На устройстве» — правильная интуиция, но неверное существительное. Клиент
захватывает звук и передаёт кадры 16 кГц PCM16 на машину, где работает
cc_server. Этот хост делает всё остальное: пишет WAV-файлы по каналам в
<dataDir>/meetings/<meetingId>/, транскрибирует в воркер-изоляте,
отфильтровывает эхо и выполняет диаризацию после факта. На автономном настольном
компьютере этот хост — та же машина. При подключении к удалённому серверу — уже
нет, поэтому «ничего не покидает мой ноутбук» верно только тогда, когда сервер и
есть ваш ноутбук.
Есть ещё одно исключение, и оно самое важное.
Всё до сводки — захват, транскрипция, подавление эха, диаризация, сопоставление голосовых отпечатков — выполняется на сервере без сетевых вызовов.
Какие модели поставляются
Заголовок раздела «Какие модели поставляются»Модели эмбеддингов, диаризации и распознавания речи (ASR) принудительно устанавливаются при первой загрузке (в деморежиме пропускаются), поэтому разделение спикеров и запись доступны без захода в настройки. ASR по-прежнему можно выбирать — она занимает несколько сотен мегабайт, и в списке доступны четыре сборки. Речи всё ещё нужен один перезапуск после первой загрузки, потому что модуль транскрипции определяет свою модель раньше, чем успевает завершиться скачивание.
Четыре варианта в списке, различающиеся размером, охватом языков и точностью:
- Parakeet TDT 0.6B v3 — многоязычная, рекомендуемая по умолчанию (~600 МБ)
- Parakeet TDT 0.6B v2 — английская (~480 МБ)
- Whisper large-v3-turbo — многоязычная (~626 МБ)
- Whisper base.en — только английский, небольшая историческая модель по умолчанию (~198 МБ)
Модели — единственные артефакты, которые сервер скачивает во время работы; каждая нативная библиотека поставляется в составе сборки.
Как устроен захват
Заголовок раздела «Как устроен захват»Встреча записывает два звуковых канала одновременно:
- Вы («я»): ваш микрофон.
- Они («другие»): звук встречи, захватываемый через loopback без драйверов — перехваты процессов и устройств Core Audio в macOS, loopback WASAPI в Windows, монитор PipeWire / PulseAudio в Linux.
Поскольку два канала захватываются раздельно, транскрипт с самого начала размечен
по спикерам: ваши слова помечаются me, все остальные на звонке — them.
Ваш собственный голос просачивается из системного вывода обратно в микрофон и иначе был бы транскрибирован дважды. Это останавливают два фильтра. Сигнальный AEC3 работает при каждой записи в удалённом режиме и обязателен — если нативная библиотека AEC не может загрузиться, запись отказывается запускаться, вместо того чтобы молча передавать поток с микрофона, загрязнённый эхом. (В режиме личного присутствия нет опорного сигнала дальнего конца, который можно вычесть, поэтому AEC там работает как сквозная передача без изменений.) Поверх него на каждой платформе работает текстовый фильтр эха на стороне хоста.
Вся обработка микрофона на уровне ОС намеренно отключена. Включение собственного подавления эха или автоматического усиления в macOS переводит микрофон в режим Voice Processing I/O, что в этой сборке убивало и микрофон, и перехват системного звука.
Транскрипция и диаризация
Заголовок раздела «Транскрипция и диаризация»Пока вы записываете, звук декодируется скользящими окнами — обрезаемыми по короткой концевой тишине или по максимальной длине окна — вне потока UI. Каждое окно становится сегментом транскрипта с меткой спикера и смещениями в миллисекундах.
Окна, которые так и не поднялись выше порога RMS, пропускаются вообще без декодирования, потому что речевая модель отображает тишину как галлюцинированные неречевые токены, а декодирование впустую тратит процессор. Практическое следствие: постоянно очень тихий спикер не даёт транскрипта. Если чей-то фрагмент получается пустым, проверьте уровень его входа, прежде чем винить модель.
После остановки диаризация выполняется офлайн по всей записи и разделяет
удалённый канал на отдельных спикеров (Person 1, Person 2, …), которых можно
переименовать. Число спикеров выводится из порога кластеризации, а не из
заданного вами количества, — поэтому это артефакт порога, и тихий или
перекрывающийся спикер может быть объединён с соседним. Транскрипт отображается
строками вида [mm:ss] SPEAKER: text.
Голосовые профили
Заголовок раздела «Голосовые профили»Переименование спикера делает больше, чем просто помечает один транскрипт. Control Center может сохранить голосовой отпечаток спикера как голосовой профиль, чтобы автоматически узнавать его на будущих встречах. Когда вы называете спикера после диаризации, вас спрашивают, сохранить ли голосовой отпечаток; если сохранить, он примешивается к текущему центроиду для этого имени и сопоставляется с новыми спикерами по косинусной близости, поэтому тот же человек в следующий раз появится со своим именем без повторной разметки.
Голосовые профили привязаны к рабочему пространству и никогда не выходят за его границы. Управляйте ими в Настройки → Рабочее пространство → Встречи. Переименование ранее сохранённого спикера снимает привязку старого имени и предлагает привязать новое; удаление профиля убирает сохранённый голосовой отпечаток, но оставляет неизменными имена, уже применённые к прошлым встречам.
Конвейер сводки
Заголовок раздела «Конвейер сводки»Когда запись останавливается, сервер публикует доменное
событие MeetingRecordingStopped.
По этому событию запускается встроенный шаблон конвейера meeting_summary.
Компонент записи его не ждёт; встреча просто проходит через свой жизненный цикл
статусов:
recording → processing → doneСуммирующий агент получает название, ваши черновые заметки по ходу встречи и транскрипт и возвращает структурированный JSON. То, какие разделы он пишет, определяется активным шаблоном заметок о встречах рабочего пространства (Настройки → Рабочее пространство → Встречи); активный шаблон применяется к новым сводкам и при повторном запуске. Затем шаги сохранения конвейера записывают этот JSON в отдельные строки:
enhancedNotesиsummary→ заметки встречи- каждый пункт действий → строка
MeetingActionItem(содержание, ответственный, необязательная привязка к тикету) - каждое решение → строка
MeetingDecision
Пункты действий и решения никогда не извлекаются из свободного markdown,
только из структурированных массивов агента. Если запуск не даёт
структурированного вывода, шаги сохранения пропускаются, а исходный транскрипт
сохраняется как запасной вариант, так что вы никогда не теряете запись. Ничто в
конвейере не помечает встречу как done — это делает единственный согласующий
компонент по терминальному событию запуска, поэтому сбой соседнего шага не может
оставить встречу недописанной, хотя она уже выглядит завершённой.
Где появляются встречи
Заголовок раздела «Где появляются встречи»| Поверхность | Что показывает |
|---|---|
/meetings |
Список встреч со счётчиками пунктов действий и решений |
/meetings/record |
HUD записи в реальном времени: заметки с одной стороны, потоковый транскрипт с другой |
/meetings/:meetingId |
Детали встречи: вкладки «Заметки», «Транскрипт», «Пункты действий» и «Решения» |
| Настройки → Рабочее пространство → Встречи | Шаблоны заметок и сохранённые голосовые профили этого рабочего пространства |
Поддержка платформ
Заголовок раздела «Поддержка платформ»Захват работает без драйверов на всех трёх настольных платформах (перехваты Core Audio в macOS, WASAPI в Windows, PipeWire в Linux).
Веб-клиент тоже записывает, что остальная часть этой страницы с её настольной
оптикой может скрыть: браузер получает ваш микрофон через getUserMedia, а звук
встречи — через getDisplayMedia (демонстрация экрана), понижает частоту до
16 кГц PCM16 и передаёт поток на тот же хост. Здесь действуют три оговорки:
- У демонстрируемой поверхности обязательно должна быть звуковая дорожка. Демонстрация экрана в Safari, Firefox и в полноэкранном режиме macOS её не даёт, и запись отказывается запускаться.
- Нативного AEC3 нет. У микрофона запрашивается собственное подавление эха браузера; текстовый фильтр эха на стороне хоста по-прежнему работает. HUD показывает индикатор уровня входа, управляемый PCM микрофона.
- Пересоздать сводку и отменить обработку можно только в настольном клиенте.
Действие Начать запись и привязать в календаре доступно только в настольном клиенте и честно сообщает об этом в веб-версии, хотя собственный сценарий записи на экране встреч там работает.
См. также
Заголовок раздела «См. также»- Календарь и планирование: записать встречу прямо из события календаря
- Конвейеры и автоматизация: движок, стоящий за
meeting_summary - Тикеты и делегирование: связать пункты действий встречи с тикетами
- Доменные события:
MeetingRecordingStoppedиMeetingStartingSoon - Записать и резюмировать встречу