--- компонент: Чешуйка «Эхо» — источник Zoom: звонок → расшифровка → разбор → дело статус: черновик v1 обновлено: 2026-09-11 имя во вселенной: Эхо (уже в каноне: «слышит каждый звонок и возвращает его делом») поверхность: iFrame у чата (разбор) · док (последние звонки клиента) · карман (послушать до планёрки) · артефакт (качество) связано: [[chesuyka]] · [[cheshuyka-crm]] — сделка и клиент · [[cheshuyka-tasks]] — действия · [[cheshuyka-veche]] — встречи --- # Эхо · Zoom-звонки Zoom-звонок закончился — через десять минут у чата клиента лежит расшифровка, список того, что менеджер обещал, что сказал неверно и что забыл спросить, и предложенные действия: задачи, поля сделки, заметка в чат. Человек подтверждает — Эхо возвращает звонок делом. ## Это Эхо, а не новая чешуйка В каноне Эхо уже есть: «слушает разговоры операторов с клиентами и превращает услышанное в действие: ошибку — в перезвон, обещание — в задачу, просадку — в обучение». Zoom — **не новая боль и не новый словарь**, а новый **источник записей**. По мерке это ступень 3 лесенки: та же боль, новый инструмент. Заводить рядом вторую чешуйку «Zoom» значит получить две сущности с одним и тем же словарём `transcribe · extract_promises · create_task`, которые через месяц разойдутся. Поэтому этот файл — **спецификация источника Zoom внутри Эха**, с тем, что у Zoom своё: выкачка, сопоставление с клиентом и разбор «неверно / не сказали». ## Что реально есть Разведка 11.09.2026: | | | |---|---| | Событий в календаре Б24 за 2026 | 556, из них **547 повторяющихся** | | Из них со ссылкой на Zoom | **365** — все ритуалы команды: Daily, Обзор спринта, Планирование | | Клиентские Zoom-встречи в календаре | **0** — они живут в полях сделки | | «Ссылка в зум для сбора требований» у сделок | 39% свежих сделок | | «Дата и время сбора требований» / «проведён» | 39% / 37% | | Расшифровка в ядре Кобры | **уже есть**: `cobra_transcribe_start` / `status` (с прогресс-баром), `transcribe_media` для коротких | | Ключи Zoom API в окружении | нет — заводить в SSI | ### Три находки 1. **Клиентские звонки не в календаре, а в сделке.** Ссылка и время «сбора требований» — поля сделки, не события. Значит сопоставление звонка с клиентом идёт **через сделку**: по ссылке на встречу и по времени, а не через календарь. 2. **Расшифровку не строить — она в ядре.** Кобра умеет транскрибировать по прямой ссылке на файл, не блокируя и показывая прогресс. Своя STT — дублирование. 3. **Эталон «что должны были спросить» уже существует** — это восемь полей анкеты брифа сделки (`UF_CRM_6687E088*`: чем занимается компания, какую задачу решить, какая CRM, какие мессенджеры, объём чатов, для какого отдела, куда подключены, когда готовы). Незаполненное после звонка сбора требований поле — и есть «не спросили». --- ## Модель ``` zoom_meeting ── recording ── transcript ── review ── proposed_action ── (подтверждено) → CRM / Задачи / чат │ │ └── link: deal → client └── issue {missed | wrong | promise} ``` | Сущность | Что это | Ключ | |---|---|---| | `zoom_meeting` | встреча Zoom: id, uuid, тема, хост, время, участники (email) | `zoom_uuid` | | `recording` | файлы: MP4, M4A, VTT-расшифровка Zoom, чат; куда выкачано | `zoom_uuid` + тип | | `transcript` | расшифровка ядра Кобры с таймкодами и говорящими | `recording` | | `link` | сделка и клиент, способ сопоставления, уверенность | `zoom_uuid` | | `review` | разбор: тип встречи, эталон, найденное | `transcript` | | `issue` | одно замечание: `missed` (не спросили), `wrong` (сказано неверно), `promise` (обещали) — с таймкодом и цитатой | `review` + n | | `proposed_action` | что предлагается сделать: задача, поле сделки, заметка, событие, тикет, обучение | `issue` | Файлы записей кладутся в **Сундук** (файловая чешуйка) или в папку клиента — не в Zoom: облачное хранение Zoom ограничено тарифом и стирается. ## Выкачка - **Zoom Server-to-Server OAuth** — учётка приложения, ключи в SSI. Скоупы: `recording:read`, `meeting:read`, `user:read`. - **Событие `recording.completed`** — вебхук с `download_token`; по нему забираем файлы сразу. Плюс **доборка** `GET /users/{id}/recordings` раз в час — вебхуки теряются, если сервер лежал. - Забираем: `MP4` (в Сундук), `M4A` (на расшифровку — легче), `TRANSCRIPT` (VTT от Zoom — как черновик, если включён), `CHAT` (что писали в чате встречи — там часто ссылки и цифры). - Участники: `GET /past_meetings/{uuid}/participants` — email и имена для сопоставления. ## Сопоставление с клиентом — каскад По порядку, побеждает первое: 1. **ссылка встречи = «Ссылка в зум» в сделке** — самый точный ключ; 2. **время встречи ≈ «Дата и время сбора требований»** сделки ± 30 минут, тот же хост; 3. **email участника** → контакт CRM (через каскад чешуйки CRM); 4. **тема встречи** содержит название компании → подсказка, не связь; 5. не сопоставилось → в «Неразобранные», оператору видно. Внутренние ритуалы (Daily, спринты) распознаются по календарю Б24 и **не разбираются как клиентские** — у них другой эталон и другой адресат (см. Вече). ## Разбор: что неверно, что не сказали, что обещали Три эталона, три типа замечаний: | Тип | Эталон | Как находим | Пример | |---|---|---|---| | **`missed` — не сказали / не спросили** | чек-лист по типу встречи. Для сбора требований — 8 полей анкеты брифа | после звонка поле пустое, в расшифровке тема не поднималась | «Не спросили, какая CRM у клиента» | | **`wrong` — сказано неверно** | база знаний продукта: `cobra_docs`, КБ Конструктора, тарифы | утверждение менеджера противоречит КБ | «Сказали „интеграция с RetailCRM за день“ — по КБ 3–5 дней» | | **`promise` — обещали** | — | обязательство с датой или без | «Пришлём КП до среды» · 41:12 | У каждого замечания — **таймкод и цитата**. Без цитаты замечание не показывается: разбор без доказательства воспринимается как разнос, и его перестают открывать. Тип встречи определяется по сделке (стадия «Сбор треб. запланирован» → сбор требований; «КП отправлено» → защита КП; «Установка» → приёмка) и правится оператором. У каждого типа — свой чек-лист в SSI. ## Действия из разговора Каждое замечание порождает **предложение**, не действие. Человек видит список и подтверждает галочками; отклонённое сохраняется с причиной — это тоже сигнал. | Замечание | Предложение | Куда уходит | |---|---|---| | `missed` поле анкеты | «Уточнить у клиента: какая CRM» → задача менеджеру | Задачи (очередь) | | `missed` + ответ есть в расшифровке | заполнить поле сделки значением из цитаты | CRM `set_deal_fields` (очередь) | | `wrong` | перезвон/сообщение с исправлением + заметка в обучение | Задачи · чат клиента (заметка) · артефакт качества | | `promise` с датой | задача с дедлайном на обещавшего | Задачи | | `promise` «встретимся ещё раз» | событие | Вече | | просьба клиента о том, чего нет | заявка на доработку | `request_feature` | | решение | запись решения с таймкодом | Вече (память встречи) | Подтверждённые действия уходят **через очереди чешуек CRM и Задачи** — Эхо в Б24 напрямую не пишет. --- ## Экраны - **iFrame у чата — Разбор звонка:** плеер с таймкодами, расшифровка с говорящими, справа замечания трёх типов, снизу — список предложений с галочками и кнопкой «Применить выбранное». - **Док у чата:** последние звонки этого клиента: дата, длительность, сколько замечаний, что уехало в задачи. Одно действие — открыть разбор. - **Карман:** «мои звонки за сегодня» — послушать свой разбор с телефона до планёрки, а не после. - **Артефакт в папке (страница качества):** типовые ошибки за неделю, лучшие звонки, темы для обучения, доля «не спросили» по полям анкеты. ## Компоненты — React + shadcn/ui | Компонент | shadcn | Заметка | |---|---|---| | `Player` + `TimecodeList` | `Slider` + `ScrollArea` | клик по таймкоду — перемотка | | `Transcript` | `ScrollArea` + `Badge`(говорящий) | синхронизация с плеером | | `IssueCard` | `Card` + `Badge` вариант по типу | цитата обязательна | | `ProposalList` | `Checkbox` + `Button` | отклонение — `Popover` с причиной | | `LinkConfidence` | `Badge` + `HoverCard` | «сопоставлено по ссылке · 100%» | | `QualityBoard` | `Tabs` + `Table` + `Progress` | только артефакт | ## MCP-инструменты `list_calls` · `get_call_review` · `transcribe_call` (через ядро) · `extract_issues` · `extract_promises` · `propose_actions` · `apply_actions` (подтверждённые → очереди) · `link_call_to_deal` · `coach_hint` · `quality_snapshot` · `request_feature`. Агент **не применяет** предложения сам — только человек. `apply_actions` с `actor` агента отклоняется. ## SSI | Группа | Поля | |---|---| | Zoom | Account ID, Client ID / Secret, хост-аккаунты, вебхук-секрет | | Хранение | куда выкачивать (Сундук / папка), срок хранения, удалять ли из Zoom после | | Типы встреч | правила определения по стадии, чек-лист на каждый тип | | Эталон | какие КБ сверять для `wrong`, тарифы | | Действия | какие предложения разрешены к автоприменению (по умолчанию — никакие) | | Видимость | кто видит чужие разборы: сам, руководитель, отдел | ## Права - Записи — голоса и персональные данные. Хранить **только в папке с правами** или Сундуке, не в модуле рейла, который видят все. - Разбор видит участник и его руководитель. Клиенту — только резюме и решения, никогда замечания. - Скоупы Кобры: `chats:read`, `chats:write` (заметка), `folders:write` (файлы). Не больше. ## Чек-лист - [ ] это источник Эха, а не вторая чешуйка со словарём «звонок → задача» - [ ] расшифровка через ядро, своя STT не заведена - [ ] вебхук + часовая доборка, оба - [ ] сопоставление каскадом через сделку; «Неразобранные» видны - [ ] внутренние ритуалы не разбираются как клиентские - [ ] у каждого замечания таймкод и цитата - [ ] чек-лист сбора требований = поля анкеты брифа - [ ] предложения подтверждает человек, применяются через очереди CRM и Задач - [ ] записи не в Zoom и не в рейле ## Где обычно ломается 1. **Вторая чешуйка «Zoom» рядом с Эхом** — два словаря одной боли. 2. **Разбор без цитаты** — воспринимается как донос, интерфейс закрывают. 3. **Автоприменение действий** — агент создал задачу по неверно понятой фразе. 4. **Записи оставили в Zoom** — тариф стёр через месяц. 5. **Клиентский звонок ищут в календаре** — там только Daily; связь через сделку. 6. **Ритуалы команды разобраны как клиентские** — «не спросили какая CRM» на Daily. ## Источники - Канон: `person-echo.html` — Эхо; `agent-meetings.html` — K3 - Разведка Б24 11.09.2026: календарь 2026 (556/547/365), поля сделок «Ссылка в зум», «Дата сбора требований» - Ядро Кобры: `cobra_transcribe_start` / `cobra_transcribe_status` / `cobra_transcribe_media` - [Чешуйка CRM](manifest-cheshuyka-crm.md) — анкета брифа, очередь · [Задачи](manifest-cheshuyka-tasks.md) · [Вече](manifest-cheshuyka-veche.md) --- _Источник: `cobra-components/cheshuyka-echo-zoom.md` в репозитории audio-talks. Эта копия обновляется скриптом `sync-components.mjs` — правки вносить в источник, не здесь._