Как я завайбкодил приложение для анализа звонков, хотя вообще-то работаю в маркетинге

Это наш день, мы узнали его по расположению звезд, Знаки огня и воды, взгляды богов. И вот мы делаем шаг на недостроенный мост, Мы поверили звездам, И каждый кричит: "Я готов!"

Попробуй спеть вместе со мной - © Кино

У меня не было цели стать разработчиком. У меня была папка с записями звонков и стойкое нежелание слушать их вручную.

Как выяснилось, между этими двумя фактами вполне помещается полноценное десктопное приложение с локальной расшифровкой, анализом через нейросеть, цветными Excel-отчётами, установщиками, обновлениями и лицензиями.

Называется всё это достаточно прямолинейно – «Расшифровка от DGD».

Как я завайбкодил приложение для анализа звонков, хотя вообще-то работаю в маркетинге

Сама расшифровка происходит локально: записи звонков не покидают компьютер пользователя.

Стоит сразу оговориться: я не разработчик.

Почти десять лет я работаю в digital и performance-маркетинге. За это время успел пройти путь от SEM-специалиста до руководителя performance-отдела, поработать в агентствах и на стороне застройщика, управлять командами, бюджетами и процессами.

При этом значительная часть моей работы давно состоит не только из запуска рекламы. Это аналитика, построение процессов, развитие сотрудников, автоматизация отчётности и создание внутренних инструментов, которые должны помогать людям тратить меньше времени на рутину.

Из одной такой рабочей задачи и выросло приложение.

Всё началось с одного простого вопроса

В отделах продаж ежедневно накапливаются десятки, сотни, а иногда и тысячи записей звонков. Их нужно слушать, оценивать работу контакт-центра, находить проблемы в скриптах, понимать реальные потребности клиентов и периодически отвечать на главный вопрос российского маркетинга:

Лиды действительно плохие или их просто плохо обработали?

В теории всё просто.

Записи → расшифровка → анализ → таблица.

На практике человек открывает папку с несколькими сотнями аудиофайлов, слушает первые три, переносит задачу на следующий день и больше никогда к ней не возвращается.

Первым вариантом решения стал обычный Python-скрипт на базе faster-whisper. Записи складывались в папку, скрипт запускался через консоль, а на выходе появлялись готовые текстовые файлы.

Позже я добавил ускорение на видеокарте, благодаря чему всё это стало работать заметно быстрее. На этом месте можно было бы написать стандартную историю об успешной автоматизации и десятках освобождённых часов.

Но реальность, как обычно, внесла небольшие корректировки.

Расшифрованные файлы всё равно нужно было собирать, отдельно отправлять в нейросеть, объяснять ей критерии оценки, проверять ответы и вручную переносить результаты в таблицу. То есть один ручной процесс я автоматизировал, после чего получил три новых.

Не баг, а горизонтальное масштабирование проблем.

Консоль прекрасна, но есть нюанс

У первой версии скрипта была ещё одна особенность: пользоваться им умел я. Возможно, смогло бы ещё какое-то количество людей, которым не становится плохо при словах «терминал», «Python» и «переменная окружения».

Но если инструмент предназначен для маркетолога, руководителя контакт-центра или отдела продаж, инструкция следующего содержания вряд ли поможет его распространению:

Откройте PowerShell → перейдите в директорию → активируйте окружение → запустите скрипт с нужными аргументами.

Это не инструкция. Это вежливая просьба больше никогда не пользоваться инструментом.

Параллельно стало понятно, что сама задача не уникальная. Разбирать звонки нужно не только мне, а консолью при этом владеют единицы.

У большинства компаний остается три основных варианта:

  1. Слушать всё вручную.
  2. Загружать записи в облачный сервис.
  3. Платить регулярную подписку за систему речевой аналитики.

Для части компаний второй и третий варианты вполне подходят. Для части — уже нет.

Записи звонков могут содержать персональные данные, коммерческую информацию и разговоры, которые не хотелось бы отправлять на очередной неизвестный сервер. Кроме того, стоимость подписки особенно хорошо ощущается в тот момент, когда количество звонков начинает расти.

Так постепенно появилась основная идея:

Расшифровка должна происходить локально, а весь процесс должен запускаться без консоли, Python и ритуального жертвоприношения системному администратору.

Что в итоге получилось

Сейчас процесс выглядит примерно так:

Записи звонков → локальная расшифровка → группировка разговоров одного лида → анализ выбранной нейросетью → готовый Excel-отчёт

Пользователь выбирает папку с записями, после чего приложение самостоятельно приводит аудио к нужному формату, отделяет речь от тишины и запускает распознавание.

Дополнительно результат очищается от типичных галлюцинаций Whisper. Да, иногда нейросеть способна услышать в полной тишине «Продолжение следует», «Спасибо за просмотр» или упоминание несуществующих субтитров. Видимо, даже искусственному интеллекту сложно принять, что разговор просто закончился.

Записи не покидают компьютер

Расшифровка выполняется локально на устройстве пользователя. Аудиофайлы не загружаются на внешний сервер.

На Windows для ускорения используется Vulkan, на macOS – Metal. Если подходящего GPU нет, приложение переключается на процессор. Работать будет медленнее, но будет.

Для расшифровки доступны три варианта модели:

  1. Быстрая – быстрее, но с меньшей точностью;
  2. Оптимальная – основной вариант и выбор по умолчанию;
  3. Максимальная – максимальное качество, но более высокие требования к компьютеру.

От текста к готовому отчёту

Приложение определяет номер телефона в названии файла и объединяет все разговоры одного лида (если конечно российский номер вообще есть в названии). Поэтому, если клиент звонил три раза, в итоговом отчёте он всё равно займёт одну строку, а нейросеть будет оценивать всю историю взаимодействия целиком.

Сейчас есть два основных режима.

Режим «КЦ»

Оценивает работу контакт-центра:

  • выявил ли менеджер потребность;
  • задал ли необходимые вопросы;
  • предоставил ли нужную информацию;
  • договорился ли о следующем шаге;
  • не превратил ли разговор в соревнование по скоростному чтению скрипта.

Режим «Целевой»

Смотрит уже не на менеджера, а на самого клиента. То есть определяет, действительно ли человек рассматривает покупку, пока просто изучает рынок или обращение изначально не имеет отношения к продукту.

Результаты собираются в Excel со светофором:

🟢 4–5 баллов – всё хорошо. Менеджер отработал разговор без серьезных ошибок.

🟡 3 балла – есть вопросы. Часть обязательных действий выполнена, но разговор можно было провести лучше.

🔴 2 балла – проблема. Ключевые этапы разговора пропущены или выполнены формально.

Рядом формируются комментарии с выделением ключевых моментов разговора.

В результате получается не просто оценка, а краткое объяснение, почему лид или работа менеджера получили именно такой результат.

Промпты можно менять под собственные критерии. Правда, перед этим приложение попросит поставить галку «понимаю риски». Это не полноценная юридическая защита от самого себя, но хотя бы честное предупреждение.

Где здесь внешняя нейросеть

Здесь важно разделять две части приложения.

Расшифровка аудио всегда происходит локально.

Для анализа во внешнюю нейросеть отправляется уже готовый текст – и только после того, как пользователь сам запускает этот этап. Можно подключить OpenAI, Grok, Groq, DeepSeek, совместимые модели Gemini, Anthropic или локальную Ollama. Приложение не привязано к одному поставщику и использует API-ключ самого пользователя.

Почему именно так?

Потому что недорогой API доступен почти каждому, а ещё одна обязательная ежемесячная подписка нужна уже далеко не всем. Пользователь самостоятельно выбирает сервис и оплачивает фактическое использование по его тарифам.

API-ключи сохраняются в зашифрованном виде с использованием системных механизмов Windows и macOS, а не файла passwords.txt, предусмотрительно оставленного на рабочем столе.

Для тех, кому важна техническая часть: интерфейс написан на Avalonia и .NET 8, распознавание работает через whisper.cpp, обработка аудио – через ffmpeg, а Excel формируется с помощью ClosedXML.

В какой момент скрипт стал продуктом

Точную границу провести сложно.

Наверное, скрипт перестал быть просто скриптом, когда оказалось, что для нормальной работы недостаточно добавить к нему две кнопки.

Постепенно появились:

  • интерфейс + загрузка и выбор моделей + инструкция для пользователей;
  • группировка звонков + настройка промптов + хранение API-ключей;
  • формирование Excel;
  • установщик + обновления + сборка для macOS
  • лицензии + серверная часть

А вместе с ними появились и проблемы, которых не существовало, пока весь проект состоял из одного Python-файла.

Особенно интересной оказалась версия для macOS.

Написать приложение недостаточно. Его нужно собрать, упаковать, подписать и отдельно объяснить операционной системе, что автор не планирует украсть у пользователя все фотографии и немедленно покинуть страну. Платной подписи Apple пока нет, поэтому при первом запуске приложение потребуется разрешить в настройках безопасности. Сам процесс описан в инструкции.

На Windows всё привычнее: скачивается обычный установщик, приложение ставится для текущего пользователя и при необходимости нормально удаляется.

Модели распознавания хранятся отдельно от программы. Поэтому при обновлении не приходится заново скачивать несколько гигабайт только из-за того, что где-то изменилась одна кнопка.

Немного о безопасности

Чем дальше развивалось приложение, тем больше оно начинало соприкасаться не только с интерфейсом и расшифровкой, но и с вещами, где фраза «вроде работает» перестает быть достаточным критерием.

Например, с автообновлениями.

Приложение получает с сервера информацию о новой версии, но не устанавливает всё подряд. При обновлении скачиваются только необходимые файлы, без моделей и повторной загрузки всего приложения. Для обновлений и лицензий используются разные ключи. В самой программе находятся только их публичные части: ими можно проверить подлинность, но нельзя самостоятельно создать новое обновление или лицензию.

Проект прошел четыре аудита кода. Это не означает, что теперь в нём гарантированно нет ошибок. Обычно человек, утверждающий, что ему написали систему без ошибок, просто ещё не знает, где именно они находятся. Но стандартные уязвимости, очевидные способы подделки ключей и другие базовые варианты взлома были отдельно проверены и закрыты.

Бесплатно, но не совсем благотворительность

Приложение бесплатно и не ограничивает основные функции. Можно расшифровывать звонки, запускать анализ и формировать отчёты без покупки лицензии.

Сама лицензия работает примерно по принципу WinRAR: это разовый платёж в поддержку дальнейшей разработки. Она убирает напоминание и в будущем даст доступ к дополнительным функциям по мере их появления.

Именно лицензия, а не донат.

Оплата проходит официально, с фискальным чеком, а ключ после покупки приходит на указанную электронную почту.

А теперь главный вопрос: это действительно вайбкодинг?

Да – большая часть приложения создавалась с помощью нейросетей.

Они писали код, помогали разбираться с C#, Avalonia, обработкой аудио, сборкой под разные операционные системы, установщиками, обновлениями и ещё несколькими десятками вещей, о существовании которых я раньше предпочитал не знать.

Но кнопки «создать продукт» у нейросети пока нет. И саму архитектуру приложения: от общей логики и последовательности обработки файлов до режимов анализа, структуры отчета, работы с моделями, обновлениями и лицензиями – придумал я.

По сути, задача нейросетей заключалась не в том, чтобы решить за меня, что именно нужно создать, а в том, чтобы помочь это реализовать. Я описывал, как должен работать продукт, из каких блоков он должен состоять, что пользователь должен увидеть на каждом этапе и что должно произойти, если что-то пойдет не по плану. Нейросеть уже переводила эту логику в код, предлагала технические варианты и помогала находить ошибки.

Но она не знает:

  • зачем человек вообще откроет приложение;
  • где он запутается и какие данные готов отправлять наружу;
  • что должно произойти при ошибке;
  • после какого сообщения он решит, что проще всё удалить.

Эти решения всё ещё остаются на человеке. Поэтому вайбкодинг не отменяет разработку.

Он снижает порог входа и позволяет человеку без классического технического бэкграунда пройти гораздо дальше, чем ещё несколько лет назад.

Правда, одновременно он позволяет намного быстрее создавать не только работающие продукты, но и значительно более сложные ошибки.

Что в итоге

Первая версия «Расшифровки от DGD» готова и доступна для Windows и macOS.

Это не попытка заменить все существующие системы речевой аналитики, построить единорога или продать вам очередную революцию.

Это инструмент, который вырос из конкретной рабочей проблемы.

Сначала я написал небольшой скрипт для себя. Потом понял, что пользоваться им неудобно. Затем решил добавить нормальный интерфейс и две кнопки. В какой-то момент у этих двух кнопок появились установщик, обновления, версия для macOS, сервер и система лицензий.

В общем, классическая история о том, как автоматизировать одну рутинную задачу и незаметно получить новую профессию.

Скачать и попробовать

Прямые ссылки:

Для Windows полный установщик пока имеет номер 0.1.0, но после первого запуска приложение самостоятельно проверит обновления и предложит перейти на актуальную версию 0.1.1.

Для macOS уже доступна отдельная сборка 0.1.1. Автоматического обновления на macOS пока нет, поэтому следующие версии также потребуется устанавливать из нового .dmg.

Буду благодарен за найденные ошибки, обратную связь и реальные примеры использования.

4