Skillok Meet#
Рабочее название. Продукт Skillok, адрес — meet.skillok.org.
Приложение для встреч в Zoom. Само начинает запись, когда начинается конференция, по ходу
ведёт расшифровку, а после встречи собирает конспект, ревью, решения и задачи.
Платформы: Windows и Android, плюс сервер.
Что делает#
-
Подключается к Zoom. Два способа, см. «Интеграция с Zoom»:
- локально на Windows;
- через сервер Zoom (RTMS или облачная запись).
-
Сам начинает запись, как только стартует встреча. Кнопку жать не нужно.
-
Ведёт расшифровку по ходу встречи. Реплики подписаны именами участников из Zoom.
Живой конспект обновляется раз в несколько минут. -
Разбирает встречу после её окончания:
- краткое содержание;
- ревью встречи: чего достигли, что осталось открытым, где ушли в сторону;
- решения;
- задачи с исполнителем и сроком, если они прозвучали;
- вопросы на следующую встречу.
Задачи можно выгрузить. Выгрузка в трекеры — на следующих этапах.
Интеграция с Zoom: что возможно и где ограничения#
Всё, что сказано ниже про Zoom и платформы, подтверждено документацией. Ссылки — в каждом пункте.
Выбранная схема — гибрид#
| Путь | Стартует сам | В реальном времени | Где работает | Что нужно от пользователя |
|---|---|---|---|---|
| A. Локальный захват на Windows (MVP) | да | да | любая встреча, в том числе чужая | ничего от Zoom |
| B. RTMS (этап 2) | да | да: звук и транскрипт Zoom | встречи, где хост разрешил наше приложение | авторизация приложения; кредиты Zoom Developer Pack |
| C. Облачная запись (запасной путь) | да, через «автозапись» | нет: после встречи | встречи наших пользователей-хостов | план Pro или выше, включены облачная запись и транскрипция |
A. Локальный захват на Windows#
- Звук берём только от процесса Zoom (process loopback) и отдельно с микрофона.
Системные звуки и музыка в запись не попадают.
См. Application loopback sample
и ActivateAudioInterfaceAsync.
Нужна Windows 10 сборки 20438 или новее. - Начало встречи определяем по появлению звуковой сессии процесса Zoom и окна встречи.
- API Zoom и одобрение в Marketplace не нужны.
- Минус: Zoom участникам ничего не показывает. Предупреждать их обязан пользователь,
см. «Согласие на запись».
Android: локальный захват невозможен#
- Android даёт захватить чужой звук, только если он помечен как
USAGE_MEDIA,USAGE_GAME
илиUSAGE_UNKNOWN. Голос в звонке помечен как голосовая связь и не захватывается
(AudioPlaybackCaptureConfiguration). - Микрофон тоже не выход: пока идёт голосовая связь (
VOICE_COMMUNICATION), другие
приложения получают тишину
(Sharing audio input). - Поэтому на Android встречи в Zoom записываются только через сервер: путь B или C.
Локально на Android — только очные встречи через микрофон.
B. RTMS (Realtime Media Streams)#
- Даёт живой звук по дорожкам, видео и транскрипт с разметкой: кто, что и когда сказал
(обзор RTMS). - Поток стартует тремя способами: автоматически, когда пользователь входит на встречу
или запускает её; вызовом REST API; из Zoom App
(Getting started). - Нужны кредиты Zoom Developer Pack. На форуме Zoom называют $0,01 за минуту потока
без транскрипта (devforum).
Точную цену сверить в продаже Zoom. - Участники видят значок Active Apps Notifier: какое приложение и к чему получает доступ
(Zoom Library). - Устройство участника неважно: поток идёт с сервера Zoom на наш. Поэтому путь B
закрывает Android. - SDK: zoom/rtms.
C. Облачная запись и вебхуки#
- Автозапись в облако включается в настройках
(KB0067954). - Транскрипт: план Pro, Business, Education или Enterprise, и в настройках включён
«Create audio transcript»
(KB0065911). - О готовности сообщают вебхуки
recording.completedиrecording.transcript_completed.
Файл транскрипта имеетfile_type: TRANSCRIPT, нужен scoperecording:read
(Cloud recording).
Почему не бот на Meeting SDK#
- С 2 марта 2026 на встречах чужих аккаунтов нужен токен OBF. Бот не войдёт, пока на встрече
нет авторизовавшего его пользователя, и выйдет вместе с ним. Для непрерывной записи
Zoom сам советует RTMS
(OBF FAQ). - Чтобы получать звук, боту нужно разрешение хоста на запись. Для внешних пользователей —
ещё и ревью в Marketplace. Выходит самый тяжёлый путь при тех же возможностях, что у RTMS.
Согласие на запись#
- РФ, 152-ФЗ. Голос — персональные данные, тайная запись запрещена. Если голос
используется для узнавания человека, это биометрия, и нужно письменное согласие
(Консультант).
Поэтому разметку «кто говорит» берём только из имён Zoom, отпечатки голоса не строим. - ЕС (GDPR) требует законного основания и уведомления. В ряде штатов США нужно
согласие всех сторон. - Что для этого делает продукт:
- перед записью показывает пользователю готовый текст объявления для участников;
- в режиме A запись не стартует без отметки «участники предупреждены»,
отметку можно поставить заранее; - сохраняет, когда и кем было дано уведомление;
- звук по умолчанию удаляется после расшифровки.
Расшифровка и разбор#
Распознавание речи
- По умолчанию — Whisper large-v3 на своём сервере: хорошо знает русский, звук не уходит
третьим лицам. - Для хранения данных в РФ — Yandex SpeechKit как запасной провайдер.
- В режиме B можно взять транскрипт Zoom вместо своего распознавания.
Разбор на Claude (Anthropic API)
| Задача | Модель | Цена, вход / выход за 1M токенов |
|---|---|---|
| Живой конспект раз в несколько минут | claude-haiku-4-5 |
$1 / $5 |
| Итоговое ревью, решения, задачи | claude-opus-5-5 |
$4 / $20 |
- Часовая встреча — это примерно 25 тыс. токенов, то есть порядка $0,15 на итоговый разбор.
- Результат — JSON строго по схеме (structured outputs):
summary,review,decisions[],
tasks[](текст, исполнитель, срок, цитата-основание),open_questions[]. - У каждой задачи есть ссылка на момент расшифровки, где она прозвучала.
Архитектура#
Windows (Flutter + C++/WASAPI) ──┐
├──► Сервер (Rust) ──► распознавание (Whisper) ──► Claude
Android (Flutter + Kotlin) ──────┘ ▲
│ вебхуки, RTMS
Zoom
Клиент — один код на Flutter для Windows и Android.
- Захват звука в любом случае пишется нативно: на Windows — C++ (WASAPI), на Android —
Kotlin (микрофон для очных встреч). Flutter даёт общий интерфейс поверх этого. - .NET MAUI на Windows слабее, у Kotlin Multiplatform интерфейс под Windows ещё сырой.
Сервер (Rust)
- Приём звука от клиентов и живая расшифровка.
- Вебхуки Zoom, OAuth-приложение Zoom, приём RTMS. Для RTMS на старте можно поставить
рядом сервис на официальном SDK Node.js. - Распознавание речи, вызовы Claude, хранение встреч.
- Вход через аккаунт Skillok.
Хранение
- Расшифровки и разборы — в Postgres.
- Звук удаляется после расшифровки. Хранить его можно только с явного включения.
План работ#
Этап 0. Каркас#
- Монорепозиторий:
app/(Flutter),server/(Rust),docs/. - Вход через аккаунт Skillok, список встреч.
- Схема разбора (JSON) и промпты с набором проверочных расшифровок.
Этап 1. MVP — Windows, локальный захват#
- Нативный модуль захвата: звук процесса Zoom и микрофон, две дорожки.
- Автостарт при начале встречи и остановка в конце. Иконка в трее.
- Экран согласия и текст объявления для участников.
- Потоковая отправка на сервер, живая расшифровка в окне.
- Живой конспект (Haiku) и итоговый разбор (Opus): ревью, решения, задачи.
- Android: просмотр встреч и разборов, запись очной встречи с микрофона.
Этап 2. RTMS — запись без десктопа, в том числе с Android#
- Приложение Zoom (OAuth), подписка на
meeting.rtms_startedиmeeting.rtms_stopped. - Приём потока и транскрипта Zoom, та же цепочка разбора.
- Автостарт для встреч, где хост — наш пользователь.
- Учёт минут и расходов Developer Pack.
Этап 3. Облачная запись как запасной путь#
- Вебхуки
recording.completedиrecording.transcript_completed. - Разбор после встречи для тех, у кого нет RTMS.
Дальше#
- Выгрузка задач: трекер задач Skillok, календарь, почта.
- Поиск по всем встречам и вопросы к архиву.
- Шаблоны разбора: планёрка, собеседование, встреча с клиентом.
- Ревью Zoom Marketplace — для пользователей из других аккаунтов Zoom.
Что должен сделать владелец#
- Создать приложение в Zoom App Marketplace (General App) и выдать ключи.
- Решить вопрос с кредитами Developer Pack для RTMS.
- Выдать ключ Anthropic API.
- Утвердить название и настроить адрес
meet.skillok.org.