AI-копилот для деловых звонков: собрал за полдня, сделал продуктом к вечеру
У меня около десяти деловых звонков в неделю. Сюда входят созвоны с клиентами по проектам автоматизации, переговоры с партнёрами, планёрки по операционке управления виллами на Бали и технические сессии с разработчиками. К концу недели детали каждого разговора смазываются: кто что обещал, на каком шаге остановились, какая была боль у конкретного человека три недели назад. Я несколько раз заходил на созвон не помня, что мы обсуждали в прошлый раз, и тратил первые пять минут на то, чтобы вспомнить. Для человека, который строит AI-инструменты для бизнеса, это не просто неудобно — это несостыковка между тем, что я продаю, и тем, как работаю сам.
Otter, Granola, встроенный транскриптор Zoom — всё это пробовал. Результат один: стена текста на 30-40 страниц, которую никто не читает. Не потому что лень, а потому что этот формат не отвечает на нужный вопрос в нужный момент. Ответ на вопрос о чём мы договорились в прошлый раз нужен за 30 секунд до начала следующего звонка, а не в виде документа в котором надо искать. В мае 2026 года я решил собрать свой инструмент — локальный, без облака, с отправкой всего важного в Telegram. Вот как это устроено и почему к вечеру того же дня это стало ещё одним продуктом в моей линейке автоматизации.
Почему готовые транскрибаторы не решают задачу
Проблема Otter и Granola не в качестве транскрипции — она у них хорошая. Проблема в том, что они отвечают на неправильный вопрос. Они отвечают на вопрос что было сказано, а мне нужен ответ на вопрос что я должен помнить и что делать дальше. Это принципиально разные задачи: первая требует точного воспроизведения, вторая — умного резюмирования с выделением приоритетов и обязательств. Разница между ними — 15-20 минут ручной обработки при каждом использовании инструмента.
Второй изъян — момент подачи информации. Транскрипт появляется после звонка. Но к звонку нужно готовиться до него, а управлять разговором — во время него. Если через минуту я нажимаю присоединиться и мне нужно вспомнить что три недели назад этот человек упоминал проблему с базой данных и я обещал что-то проверить — транскрипт прошлого звонка уже не успевает помочь. Мне нужна информация сейчас, не потом.
Третье — изолированность контекста. Переписка с одним человеком у меня идёт в Telegram, WhatsApp, по email. Otter видит только то что было сказано в Zoom. Он не знает что накануне человек написал мне в WhatsApp и там был важный поворот который меняет всю картину разговора. Готовый инструмент видит только свою узкую часть пазла, а у меня пазл разложен по трём разным приложениям.
Четвёртый момент — конфиденциальность. Деловые звонки содержат реальные цены, условия договоров, детали финансирования, личные данные партнёров. Отправлять это в облачную инфраструктуру чужого сервиса мне некомфортно, даже если это доверенный сервис с шифрованием и хорошей репутацией. Нужен локальный вариант, где аудио не покидает мой компьютер ни при каких обстоятельствах.
Когда сформулировал, чего именно хочу, начал строить.
Список требований: что должен уметь копилот
Час потратил на формулировку требований. Это важный этап, который я часто пропускаю в порыве быстрее начать и потом переделываю всё с нуля. Разделил на обязательное, без которого не запускаю, и то, что добавлю в следующих фазах.
Обязательное: До звонка — сводка из переписки с конкретным человеком: о чём говорили в прошлый раз, что я обещал, какая была основная боль. Не весь диалог, а суть в пяти-семи предложениях — ровно столько, чтобы войти в контекст за тридцать секунд. Во время звонка — транскрипт в реальном времени. Не после, а во время — чтобы видеть что говорит человек пока говорит, и фиксировать точные формулировки без извините что вы только что сказали. Подсказки в нужный момент — реплика, которую могу сказать прямо сейчас, в моём стиле, а не в стиле корпоративного скрипта продаж. После звонка — структурный итог: что решили, что каждый обещал, следующий шаг и дата. Итог уходит в папку контрагента автоматически, без моего участия.
Необязательное, добавлю потом: автоклассификация звонка по типу (продажа, поддержка, переговоры о цене), режим слушателя для вебинаров и демо, полная интеграция с email. Всё это реальное, но не критичное для первого запуска.
С этим списком стало понятно: нужен хороший источник контекста. У меня уже есть работающий инструмент который хранит историю переписки по контактам. Нужно было просто подключить его как источник данных для brief.
Технический стек: что использовал и почему именно это
Архитектура получилась из четырёх независимых блоков, каждый из которых можно заменить без переделки остальных. Это важно: через месяц я хочу иметь возможность поменять LLM или источник транскрипции, не переписывая логику всего инструмента.
Захват звука: BlackHole и ffmpeg
На Mac нет встроенного способа захватить системный звук — то что выходит из динамиков не попадает на микрофонный вход. BlackHole это виртуальный аудиодрайвер (open source, бесплатно), который создаёт петлю: системный звук идёт и в колонки, и в виртуальный микрофон одновременно. RecordCall небольшой скрипт, который фиксирует поток с этого виртуального микрофона. Затем ffmpeg нарезает поток на чанки по пятнадцать секунд и передаёт каждый чанк на транскрипцию по мере готовности.
Это ключевое архитектурное решение для режима реального времени: не ждать конца звонка и обрабатывать весь файл разом, а обрабатывать кусками непрерывно пока звонок идёт. Каждые пятнадцать секунд новый кусок уходит в Whisper, результат идёт в Telegram. Размер чанка пятнадцать секунд это компромисс: короче будет слишком много запросов и накладных расходов, длиннее слишком большая задержка между словом и его появлением в чате.
Транскрипция: локальный whisper.cpp без облака
OpenAI Whisper это open-source модель транскрипции с хорошим качеством на русском и английском языках. whisper.cpp это её реализация на чистом C++, которая работает на CPU Apple Silicon без GPU и без отправки данных куда-либо внешнему сервису. На M1 MacBook чанк в пятнадцать секунд транскрибируется за три-четыре секунды локально. Этого достаточно: к моменту когда заканчиваются следующие пятнадцать секунд речи предыдущий чанк уже виден в Telegram и доступен для чтения.
Качество транскрипции на русском у модели medium хорошее. Технические термины иногда транскрибируются неточно, но для задачи понять суть разговора этого достаточно с запасом. Имена собственных контрагентов лучше добавить в словарь подсказок модели — тогда она запоминает их при транскрипции и не выдаёт случайные похожие слова.
Стриминг в Telegram: черновик вместо потока сообщений
Транскрипт идёт в мой личный Telegram-чат. Но не как отдельные сообщения на каждый чанк — это засорило бы историю сотнями коротких обрывков, через которые потом было бы неудобно листать. Вместо этого я использую sendMessageDraft: черновик обновляется с каждым новым куском транскрипта. В любой момент видишь актуальный полный транскрипт одним экраном, без прокрутки по истории сообщений и поиска нужного места.
Параллельно бот следит за ключевыми словами в транскрипте. Когда видит слова цена, договор, срок, не могу, проблема, нужно — отправляет отдельное уведомление с предлагаемой репликой. Это самая ценная часть всего инструмента: я не смотрю в Telegram постоянно во время разговора, но уведомление сигнализирует, что сейчас важный момент разговора который стоит зафиксировать или на который стоит отреагировать определённым образом.
Персона: модель говорящая моим голосом
Для подсказок нужна модель которая предлагает то что сказал бы я — не корпоративный скрипт не шаблон из учебника по продажам. Я взял семнадцать транскриптов своих прошлых деловых звонков, которые сам считаю удачными: правильно отработал возражение, вовремя задал вопрос, не продавил там где не нужно, правильно закончил разговор с конкретными следующими шагами. Из них составил профиль голоса: как строю ответы, какие формулировки использую, как реагирую на конкретные типы ситуаций. Это вошло в системный промпт LLM как основа для генерации реплик.
Перед каждым звонком бот вытаскивает историю переписки с человеком из базы и готовит brief: чем занимается контрагент, что мы обсуждали в прошлый раз, что я обещал, что сейчас является основной темой по последним сообщениям. Это пять-семь предложений ровно столько чтобы войти в контекст за тридцать секунд перед нажатием кнопки присоединиться.
Как это работает на реальном звонке: шаг за шагом
За пять минут до звонка нажимаю горячую клавишу Command+Shift+Z. Бот находит в базе переписку с человеком по имени, формирует brief и отправляет его в Telegram. За тридцать секунд знаю контекст — это заменяет десять-пятнадцать минут ручного поиска по переписке в нескольких приложениях.
Во время звонка транскрипт идёт в Telegram непрерывно. Смотрю в него только в двух ситуациях: когда человек быстро говорит и я не успел расслышать, или когда хочу зафиксировать точную формулировку его слов для последующего использования. Подсказки появляются редко — только когда бот засёк ключевое слово из списка. Не стараюсь использовать их буквально, это просто триггер для собственной мысли.
После звонка через одну-две минуты в Telegram приходит итог. Структура каждый раз одинаковая: что обсуждали, что решили, что обещала каждая сторона, следующий шаг и конкретная дата если она была упомянута в разговоре. Итог автоматически сохраняется в папку этого контрагента в моей файловой системе без дополнительных действий с моей стороны.
Первый реальный звонок с копилотом прошёл в тринадцать ноль ноль мая 2026 года. К этому моменту всё уже работало. На настройку от нуля ушло около четырёх часов с перерывами на параллельную работу по другим задачам.
Итоги первых дней: что реально изменилось
Прошло несколько дней с момента запуска. Фиксирую конкретные наблюдения — не ожидания, а то, что произошло на практике.
Время на подготовку к звонку сократилось с десяти-пятнадцати минут до одной-двух минут. Раньше открывал переписку, листал историю, искал нужный момент разговора, иногда открывал второе окно для параллельного поиска. Теперь читаю brief в Telegram. Экономия реальная, не гипотетическая.
Качество итогов после звонка неожиданно высокое. Транскрипт даёт достаточно материала для LLM чтобы вычленить конкретные договорённости из потока разговора. В одном случае копилот включил в итог обещание которое я дал в конце разговора и уже начал забывать на пути к следующей задаче. Это именно та ситуация под которую строил инструмент — не потерять то что обещал в конце разговора когда голова уже переключилась на следующее.
Подсказки работают неравномерно. Для переговоров они попадают примерно в шесть случаях из десяти. Для технических звонков хуже — профиль голоса обучен на продажах и переговорах а не на техническом объяснении архитектуры или онбординге. Следующий этап — обучить отдельный профиль специально на технических сессиях с разработчиками.
Один незапланированный эффект: я стал точнее формулировать договорённости прямо во время звонка. Зная что копилот напишет итог на основе транскрипта, стараюсь произносить договорённости явно вслух: итак ты берёшь на себя задачу X до среды. Это меняет стиль разговора в сторону большей структурности и конкретности — полезный побочный эффект которого я не планировал заранее.
Как я построил базу контекста для brief
Самое ценное в копилоте — brief перед звонком. Но brief хорош ровно настолько насколько полна база контекста из которой он формируется. У меня к маю 2026 года уже был работающий инструмент: система хранения переписки в которую автоматически попадают все входящие и исходящие сообщения из Telegram. Каждое сообщение привязано к карточке контакта с именем никнеймом компанией и тегами. Это инфраструктура которую я строил под другие задачи но для копилота она стала идеальным источником.
Для brief бот берёт последние пятьдесят-сто сообщений из переписки с контрагентом в зависимости от давности последнего разговора. Если разговаривали три дня назад берёт меньше. Если три месяца берёт больше чтобы восстановить достаточно контекста. Эти сообщения прогоняет через LLM с промптом: сделай brief в пяти-семи предложениях о чём мы говорили что я обещал какая была боль. Результат уходит в Telegram за минуту до начала звонка.
Качество brief сильно зависит от того насколько информативно я веду переписку. Если в Telegram у меня с человеком только стикеры и ссылки — brief пустой. Если есть содержательные обсуждения с фактами и договорённостями — brief получается действительно полезным. Это интересная обратная связь: копилот мотивирует вести переписку более структурно потому что ты знаешь что сам же потом будешь читать её в виде сводки перед каждым звонком.
Почему личный инструмент стал продуктом к вечеру
К вечеру того же дня думал о том сколько людей вокруг меня испытывают те же проблемы. Не нет памяти после звонков — это у всех. А именно такого сочетания: локально, в Telegram, с моим стилем, с контекстом из переписки, а не только из Zoom. Этого нет нигде в готовом виде и я это только что построил за полдня.
У меня к тому моменту было больше десятка личных инструментов, каждый начинался как нужно только мне. Локальная диктовка вместо платного сервиса. Перевод сообщений от балийских сотрудников. Финансовый бот для семьи. Дашборд для инвесторов виллы — о том как я его строил писал отдельно. Каждый в итоге оказался нужен кому-то ещё кроме меня. Копилот для звонков встал в этот же ряд.
К ночи на 4bos.ru появилась витрина из пятнадцати IT-продуктов с отдельными страницами под каждый. Все страницы собрала AI-команда по моим заметкам и архитектурным документам. Я не писал ни одной строчки HTML и не копирайтил ни одного описания. Подробнее про этот паттерн — когда один день закрывает несколько независимых задач — писал про день где строишь систему а не гасишь пожары.
Когда копилот помогает, а когда лучше без него
Честно опишу обратную сторону. Инструмент работает не для всех звонков и не во всех ситуациях.
Не работает для коротких созвонов на десять-пятнадцать минут. Транскрипт только начинает накапливаться, подсказки не успевают появиться, а brief и так в голове. Накладные расходы выше пользы, и проще просто позвонить без дополнительных инструментов.
Не работает для звонков с людьми у которых нет истории переписки в базе. Brief будет пустым, подсказки нейтральными. Полезность минимальная — инструмент зависит от наличия контекста.
Требует дисциплины в ведении базы контактов. Бот ищет по имени или никнейму. Если человек записан по-разному в Telegram и в базе — не свяжет их вместе и brief получится неполным или пустым.
Первые две недели обязательный мониторинг. Я сам просматривал каждый итог и каждую подсказку. Без этого накапливаются тихие ошибки которые потом сложно найти. Этот паттерн — смотреть на выход системы глазами а не только на сводную статистику — описывал в посте про кладбище тихих поломок.
Подсказки иногда приходят в неудобный момент. Копилот не понимает что ты сам сейчас говоришь или человек делает паузу. Уведомление приходит по слову-триггеру а не по смыслу ситуации. Иногда надо просто проигнорировать и продолжить разговор.
Что дальше: три следующих фазы
Phase 3 в плане — интеграция с email. Сейчас копилот видит только Telegram и WhatsApp при формировании brief. Многие договорённости с клиентами идут через почту и это реальный пробел в контексте который хочу закрыть.
Второе направление — режим обучения. Когда я слушаю вебинар или демо клиентского продукта а не участвую активно. В этом режиме копилот не предлагает реплики но конспектирует и классифицирует всё что слышит. Уже тестировал на одном вебинаре по теме продаж — получил десять ключевых тезисов вместо шестидесяти страничного транскрипта который никто не прочитал бы.
Третье — обогащение подсказок данными из воронки. Сейчас подсказки строятся на общем профиле голоса. Но если я веду человека по воронке копилот должен знать на каком этапе мы находимся и адаптировать реплики под этот конкретный этап. Это следующая интеграция с CRM-данными которую планирую сделать после email.
Если вы хотите похожий инструмент под свои задачи — я делаю это в рамках проектов на автоматизацию бизнеса. Конфигурация зависит от мессенджера количества звонков в неделю и нужного контекста. Напишите в Telegram — расскажу детали и дам примерную оценку по срокам и стоимости. Подобные решения занимают одну-две недели внедрения при наличии базовой инфраструктуры: сервера Telegram-бота истории переписки по контактам.
Главный вывод из этого дня: если инструмент решает настоящую боль и работает — он становится продуктом почти автоматически. Потому что ту же боль испытывают другие люди. Вопрос только в упаковке. И теперь у меня есть команда которая умеет упаковывать быстро по моим заметкам не забирая моё время на копирайтинг и вёрстку. Скорость между это работает у меня и это продукт на рынке сократилась до одного рабочего дня.