Юридическая компания теряла информацию после встреч и звонков с клиентами. Юрист выходил с консультации с договорённостями в голове: что клиент пришлёт, что подготовить, к какому сроку перезвонить. В CRM это попадало не всегда, с опозданием и в свободной форме. Руководитель не видел, чем закончился разговор, а задачи терялись.
Задача: сделать так, чтобы после каждой встречи и каждого звонка в карточке сделки сами появлялись протокол, ключевые данные (суммы, сроки, предмет договора), итог разговора и задачи с конкретными датами, без ручного ввода.
Отдельное требование — конфиденциальность. Разговоры с доверителями — это адвокатская тайна. Поэтому система работает на сервере самой компании, записи хранятся зашифрованными, а по запросу клиента разговор удаляется полностью.
Сделал систему из трёх частей:
Мобильное приложение для юриста. Записывает встречу, фотографирует документы клиента и отправляет всё на сервер компании.
Сервер обработки («коробка»), развёрнутый у клиента. Распознаёт речь и разделяет говорящих, читает текст с фото документов. Языковая модель составляет протокол, вытаскивает ключевые данные и черновик технического задания по делу. Звонки берутся из телефонии CRM: система сама определяет, где сотрудник, а где клиент, итог разговора, обещания сторон и их сроки («завтра», «через неделю», «до 28-го»).
Модуль CRM. Результат появляется в карточке сделки: протокол, карточка разговора с итогом и задача юристу с правильной датой. Поля сделки заполняются по кнопке, юрист подтверждает перед записью. На карточке звонка есть кнопки 👍/👎: юрист оценивает разбор в один клик, оценки копятся и служат эталоном для улучшения.
Что сделано для надёжности: — модель отвечает строго по схеме (structured output), а смысловые решения (кто есть кто, хватает ли материала на протокол) принимаются отдельным классификатором с оценкой уверенности; при низкой уверенности система честно пишет «не определено» и не угадывает; — каждая обработка — это граф шагов на очереди заданий (Mastra workflows): переживает перезапуск сервера, по каждому шагу видно, что произошло и сколько стоило; — сбои громкие: администратору приходит уведомление, а не тихо неполный протокол; — изменения проверяются замером на реальных разговорах до и после, прежде чем попасть в работу.
Стек: TypeScript, Node.js, Hono, SQLite, Mastra, React Native, REST API CRM, языковые модели и распознавание речи.
Система работает у клиента каждый день. Звонки разбираются автоматически: после разговора в сделке появляется карточка с итогом и, если нужно, задача с датой. Встречи превращаются в протокол и ключевые данные без ручного ввода.
Качество измеряется на реальных разговорах. Например, на наборе из 100 звонков доля разборов с «итог не определён» снизилась с 12 до 0, а ошибок в определении сотрудника и клиента на 63 звонках стало 0. Записи и данные доверителей не покидают инфраструктуру компании.