В CRM отдела продаж могут храниться тысячи часов разговоров с клиентами. Формально записи есть, но для управления продажами они почти бесполезны: руководитель не может регулярно прослушивать весь поток, а выборочная проверка нескольких звонков показывает только отдельные эпизоды.
В результате часть информации остается внутри аудиофайлов. Менеджер договорился перезвонить, но не создал задачу. Клиент назвал причину отказа, но в карточке сделки появилась общая формулировка. Покупатель пожаловался на доставку, однако обращение не дошло до продуктовой команды. Супервайзер заметил нарушение скрипта спустя неделю, когда сделка уже была потеряна.
Расшифровка звонков колл-центра решает только первый уровень задачи. Она переводит разговор в текст, но бизнесу нужны более прикладные результаты:
- краткое содержание звонка;
- договоренности и следующие действия;
- причина обращения или отказа;
- оценка работы менеджера;
- признаки недовольства;
- упоминания конкурентов;
- автоматически заполненные поля CRM;
- теги для фильтрации и отчетов.
Для этого используется речевая аналитика: запись разговора переводится в структурированный текст, разделяется по спикерам и передается на дальнейший AI-анализ.
Собрать такую систему можно самостоятельно. Понадобятся ASR-модель, диаризация, обработка аудио, очередь заданий, GPU-инфраструктура, хранение результатов, контроль ошибок и отдельный аналитический слой. Для пилотного проекта этот путь выглядит доступным. При запуске на потоке звонков выясняется, что большую часть времени команда тратит не на аналитику, а на поддержку технического конвейера.
Есть более короткий маршрут: подключить готовый speech to text API или CRM-виджет и сосредоточиться на бизнес-правилах.
Как внедряют речевую аналитику лидеры рынка и почему не каждый подход подходит отделу продаж
На Habr опубликовано несколько показательных кейсов. Каждый решает реальную задачу, но не каждое решение разумно переносить в малый или средний бизнес.
Кастомная платформа под один бизнес-процесс
В кейсе Technokratos для HT Lab была разработана система анализа интервью. Она принимала запись, расшифровывала ее через Whisper Large 3, распределяла ответы по компетенциям и формировала заключение с помощью языковой модели. Рабочий сервис собрали за три недели. [1]
Это хороший срок для заказной разработки, но к нему нужно добавить подготовку требований, тестирование, сопровождение, доработку промптов, мониторинг качества и поддержку инфраструктуры. Когда меняется CRM, формат отчета или модель оценки, изменения снова проходят через разработчиков.
Такой вариант оправдан, если процесс уникален, а готовый сервис не покрывает требования. Использовать его только ради транскрибации звонков CRM обычно невыгодно.
Python, Whisper и Google Colab
Команда ВкусВилл Бизнес пошла от практической задачи: в CRM находились тысячи звонков, которые невозможно было прослушать вручную. Записи скачивали скриптом, обрабатывали через Whisper в Google Colab, очищали от персональных данных и отправляли на анализ. Для первого теста применялась модель base, автор отдельно отметил ошибки в специальных терминах. [2]
Подход удобен для разового исследования. Например, продуктовой команде нужно разобрать 300 интервью и найти повторяющиеся жалобы.
Для ежедневной автоматизации отдела продаж возникают ограничения:
- среда Colab временная;
- загрузка и выгрузка файлов требуют дополнительных сценариев;
- при сбое часть заданий приходится перезапускать;
- результаты нужно самостоятельно возвращать в CRM;
- очистка персональных данных становится отдельным этапом;
- нет гарантированного времени обработки;
- сложно контролировать параллельный поток.
Прототип работает. Продакшен-сервис требует другой архитектуры.
Локальный стек из Whisper, NeMo, Ollama и Gemma
В материале Альфа-Банка показан локальный конвейер: ffmpeg готовит аудио, Whisper делает транскрипт, NVIDIA NeMo разделяет реплики по спикерам, Gemma через Ollama формирует саммари, а результаты сохраняются в Obsidian. [3]
Для аналитика, исследователя или внутреннего эксперимента это полезная схема. Все компоненты можно контролировать, а данные не требуется отправлять во внешний сервис.
Для колл-центра появляется другой масштаб. Нужно обновлять несколько библиотек, следить за совместимостью CUDA и драйверов, хранить модели, управлять очередью, распределять нагрузку и контролировать качество диаризации. Если утром одновременно завершились 200 звонков, локальная видеокарта не увеличит производительность автоматически.
Телеком-API с базовой транскрибацией
Exolve показывает сценарий, в котором приложение создает звонок, получает идентификатор записи и запускает транскрибацию через SDK. В статье 2024 года приводилась стоимость 0,60 рубля за минуту. Автор прямо описывал этот пример как базу для собственной механики. [4]
Телеком-API удобно использовать, когда телефония уже работает у того же поставщика. Но текст звонка еще не является речевой аналитикой. Отдельно потребуются:
- распределение реплик между клиентом и менеджером;
- нормализация текста;
- саммари;
- оценка скрипта;
- тегирование;
- запись результата в нужные поля CRM;
- отчеты для руководителя.
Сравнение подходов
| Подход | Когда подходит | Что придется поддерживать |
|---|---|---|
| Заказная AI-платформа | Уникальная корпоративная методология | Разработку, модели, интерфейс, инфраструктуру |
| Whisper в Colab | Разовый CustDev или исследование | Скрипты, загрузку файлов, очистку данных |
| Локальный GPU-стек | Закрытый контур и собственная ML-команда | CUDA, модели, очереди, серверы, мониторинг |
| Телеком-API | Транскрибация внутри телефонии | Аналитику, диаризацию и CRM-логику |
| Готовая CRM-интеграция | Регулярный контроль звонков | Настройки критериев и бизнес-процессов |
Попробуйте расшифровку звонков бесплатно
Три ловушки самописной STT-системы
Самостоятельный прототип часто выглядит как один вызов Whisper. Реальный конвейер сложнее. Основные проблемы становятся заметны после загрузки первых сотен записей.
Ловушка 1. Диаризация спикеров
Распознавание речи отвечает на вопрос, какие слова прозвучали. Диаризация определяет, кто и когда говорил.
Без нее получается текст, в котором реплики клиента и менеджера перемешаны. На таком материале трудно проверять скрипт. Система может приписать вопрос менеджера клиенту, а обещание клиента оплатить счет посчитать обязательством сотрудника.
Диаризация строится из нескольких компонентов. Например, каскадный сценарий NVIDIA NeMo включает детектор речевой активности, извлечение голосовых признаков и кластеризацию спикеров. [5]
На результат влияют:
- одновременная речь;
- фоновый шум;
- музыка ожидания;
- переадресация;
- громкая связь;
- разная громкость каналов;
- короткие реплики;
- соединение нескольких разговоров в одном файле.
Даже после разделения на Спикера 1 и Спикера 2 нужно определить роли. В стереозаписи телефонии задача проще: менеджер и клиент могут находиться на разных каналах. В монофайле роли приходится устанавливать по контексту или дополнительным данным CRM.
Ловушка 2. Границы чанков и галлюцинации
Whisper обрабатывает аудио сегментами. Базовая архитектура рассчитана на 30-секундные фрагменты. При длинной записи система должна последовательно распознать сегменты и сохранить контекст между ними. [6]
На границе могут возникнуть три типа дефектов:
- фраза делится между двумя сегментами;
- часть слова или реплики пропускается;
- предыдущий контекст вызывает повторение.
Отдельная проблема связана с тишиной, музыкой и неречевыми звуками. Исследования Whisper показывают, что на таких участках модель иногда генерирует связные фразы, которых нет в записи. Для длинных разговоров также характерны повторяющиеся последовательности и пропуски содержания. [7]
Поэтому production-пайплайн использует не только ASR. Нужны VAD, контроль временных меток, подавление повторов, проверка подозрительных сегментов, ограничения декодирования и правила обработки тишины.
Ловушка 3. Инфраструктура под неравномерную нагрузку
Нагрузка отдела продаж распределяется неравномерно. В середине дня очередь растет, ночью сервер простаивает. Собственная инфраструктура оплачивается независимо от загрузки.
Кроме GPU потребуются:
- API-шлюз;
- объектное хранилище;
- база заданий;
- очередь сообщений;
- обработчики повторных попыток;
- журналирование;
- контроль лимитов;
- мониторинг времени обработки;
- резервирование;
- механизм удаления файлов.
Если один час звонков обрабатывается несколько минут, это еще не значит, что система справится со ста часами, полученными одновременно. Нужно измерять не скорость одного файла, а пропускную способность всей очереди и максимальное время ожидания результата.
Готовое решение: подключаем Speech2Text к CRM
По состоянию на июнь 2026 года Speech2Text поддерживает API и webhook для получения результатов, массовую обработку файлов, очереди заданий, разделение речи по спикерам и выгрузку в структурированных форматах. Для amoCRM и Битрикс24 доступны отдельные виджеты. [8]
В CRM-сценарии система может выполнять следующую цепочку:
- Телефония завершает звонок и сохраняет запись.
- CRM или интеграционный модуль получает ссылку на аудиофайл.
- Запись передается в Speech2Text.
- Сервис возвращает транскрипт с тайм-кодами и спикерами.
- AI-ассистент анализирует содержание по заданным критериям.
- Результаты сохраняются в карточке контакта, сделки или звонка.
- CRM запускает следующий процесс: создает задачу, ставит тег или уведомляет руководителя.
Что получает отдел продаж
Текст разговора с разделением по собеседникам. Руководителю не нужно перематывать запись. Нужную реплику можно найти поиском или открыть по тайм-коду.
Краткое содержание. В карточке остается несколько абзацев с сутью разговора, а не неструктурированная стенограмма.
Договоренности и задачи. Система может выделить дату следующего контакта, обещание отправить коммерческое предложение, запрос документов или согласование встречи.
Оценку по собственным критериям. Компания сама задает вопросы для анализа. Например:
- представился ли менеджер;
- уточнил ли задачу клиента;
- задал ли вопросы о бюджете;
- назвал ли срок;
- отработал ли возражение;
- договорился ли о следующем действии.
Автоматические теги. В CRM можно отмечать звонки с жалобами, упоминанием конкурента, запросом скидки, готовностью купить или риском отказа.
Данные для управления. Речевая аналитика позволяет сравнивать команды, находить повторяющиеся возражения, контролировать внедрение нового скрипта и собирать обратную связь для маркетинга.
Результат зависит от настроек. Универсальный промпт не понимает внутреннюю методику продаж так же хорошо, как руководитель. До запуска нужно описать критерии, проверить их на реальных звонках и определить, какие выводы должны автоматически менять данные CRM.
Технический сценарий: интеграция API Speech2Text с CRM
Базовый прототип можно собрать в течение одного рабочего дня, если CRM уже отправляет webhook после завершения звонка и предоставляет ссылку на запись. Время production-запуска зависит от авторизации, структуры карточек, требований к персональным данным и обработки ошибок.
Публичная страница Speech2Text подтверждает наличие webhook API, но точные endpoint и названия полей выдаются в документации интеграции. Поэтому пример ниже показывает безопасную структуру обработчика. Адреса и payload нужно заменить значениями из актуальной документации.
import os
from typing import Any
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
S2T_CREATE_JOB_URL = os.environ["S2T_CREATE_JOB_URL"]
S2T_API_KEY = os.environ["S2T_API_KEY"]
S2T_CALLBACK_URL = os.environ["S2T_CALLBACK_URL"]
CRM_UPDATE_URL = os.environ["CRM_UPDATE_URL"]
CRM_TOKEN = os.environ["CRM_TOKEN"]
def build_http_session() -> requests.Session:
retry = Retry(
total=3,
backoff_factor=1,
status_forcelist=(429, 500, 502, 503, 504),
allowed_methods=("POST",),
)
session = requests.Session()
session.mount("https://", HTTPAdapter(max_retries=retry))
return session
http = build_http_session()
def handle_crm_webhook(call_id: str, audio_url: str) -> dict[str, Any]:
payload = {
"external_id": call_id,
"audio_url": audio_url,
"callback_url": S2T_CALLBACK_URL,
"options": {
"diarization": True,
"timestamps": True,
"summary": True,
},
}
response = http.post(
S2T_CREATE_JOB_URL,
headers={
"Authorization": f"Bearer {S2T_API_KEY}",
"Content-Type": "application/json",
},
json=payload,
timeout=30,
)
response.raise_for_status()
return response.json()
def handle_s2t_result(result: dict[str, Any]) -> None:
call_id = result["external_id"]
crm_payload = {
"call_id": call_id,
"transcript": result.get("transcript"),
"summary": result.get("summary"),
"speakers": result.get("speakers"),
"tags": result.get("tags", []),
"status": result.get("status"),
}
response = http.post(
CRM_UPDATE_URL,
headers={
"Authorization": f"Bearer {CRM_TOKEN}",
"Content-Type": "application/json",
},
json=crm_payload,
timeout=30,
)
response.raise_for_status()
В этом варианте запрос не ждет окончания распознавания. API создает задание, а готовый результат приходит на callback. Асинхронная схема надежнее синхронного запроса: длинная запись не удерживает соединение, а CRM не получает ошибку по тайм-ауту.
Для production-версии добавьте:
- проверку подписи входящих webhook;
- защиту от повторной обработки одного звонка;
- журнал статусов;
- очередь для временно недоступной CRM;
- удаление временных ссылок;
- маскирование персональных данных в логах;
- оповещение о заданиях, которые завершились с ошибкой.
Какие поля сохранять в карточке сделки
Не стоит складывать весь результат в одно текстовое поле. Структурированные данные проще фильтровать и использовать в автоматизации.
Минимальный набор:
| Поле | Пример значения |
|---|---|
| Результат звонка | Назначена демонстрация |
| Следующее действие | Отправить расчет до 18 июня |
| Ответственный | Менеджер |
| Настроение клиента | Нейтральное, есть сомнения |
| Причина сомнений | Нет утвержденного бюджета |
| Конкурент | Упомянут альтернативный поставщик |
| Оценка скрипта | 7 из 10 |
| Краткое содержание | Обсудили сроки, интеграцию и стоимость |
| Полная расшифровка | Текст с разделением по спикерам |
После этого CRM может автоматически создать задачу, изменить этап сделки или отправить руководителю уведомление о конфликтном звонке.
Безопасность и персональные данные
Записи звонков могут содержать имена, телефоны, адреса, сведения о заказах и другую персональную информацию. До запуска интеграции компании нужно определить правовое основание обработки, сроки хранения и перечень сотрудников с доступом.
Клиента рекомендуется информировать о записи разговора и ее цели. Если обработка передается внешнему исполнителю, условия поручения должны быть закреплены в договоре в соответствии со статьей 6 закона о персональных данных.
Политика Speech2Text указывает, что обработка выполняется с использованием баз данных на территории России и без трансграничной передачи. На сайте также заявлено шифрование данных при передаче. Условия NDA, срок автоматического удаления записей и порядок обработки конкретной категории информации нужно закрепить в корпоративном договоре, а не считать автоматически включенными для любого аккаунта.
Что проверить перед запуском на всех менеджеров
Начните не со всего архива, а с выборки реальных звонков разного качества. Включите короткие и длинные разговоры, шумную связь, перебивания, переадресацию и несколько типов клиентов.
Для пилота достаточно 50-100 записей. По ним можно оценить:
- точность распознавания терминов;
- качество разделения спикеров;
- корректность саммари;
- долю ошибочных тегов;
- соответствие оценок мнению руководителя;
- время появления результата в CRM;
- стоимость обработки одного звонка.
После пилота скорректируйте критерии. Иногда проблема находится не в распознавании, а в слишком общей инструкции. Например, тег Потенциальная жалоба будет срабатывать чаще, чем четкий критерий Клиент сообщил о нарушении срока, потребовал возврат или попросил соединить с руководителем.
Заключение
Речевая аналитика в 2026 году не требует отдельной ML-команды для каждого отдела продаж. Самостоятельный стек остается полезным для исследований, закрытых контуров и нестандартных задач. Но для регулярной транскрибации звонков CRM он создает дополнительный продукт, который придется разрабатывать и поддерживать.
Готовая интеграция закрывает техническую часть: прием записей, очереди, распознавание, диаризацию, webhook и возврат результата. Команда занимается тем, что влияет на продажи: формулирует критерии качества, настраивает поля CRM и превращает содержание звонков в задачи, теги и управленческие отчеты.
Проверьте сценарий на небольшой выборке и оцените результат на собственных записях. Подключить API или CRM-виджет можно на странице интеграции Speech2Text.