Расшифровка звонков из CRM и телефонии через API

Звонок завершился — запись уходит на расшифровку, а текст по репликам и краткий итог возвращаются в карточку сделки. Связка с amoCRM, Битрикс24 или IP-телефонией собирается на API и вебхуках, без ручной загрузки файлов.

API работает на любом платном тарифе, от Базового. Качество распознавания можно бесплатно попробовать в личном кабинете.

POST /v1/transcriptions
# Запись звонка уже скачана из CRM или АТСcurl -X POST "$API_BASE/v1/transcriptions" \  -H "Authorization: Bearer $AUDIO2TEXT_API_KEY" \  -H "Idempotency-Key: crm-call-8841" \  -F "file=@call-8841.mp3" \  -F "language=ru" \  -F "num_speakers=2" \  -F 'metadata={"external_id":"crm-call-8841"}' # 202 Accepted{  "id": "124",  "status": "queued",  "duration_seconds": 312,  "request_id": "req_..."}

Нам доверяют команды из крупнейших компаний

РБК
Альфа-Банк
Avito
Сбер
Skyeng
Ozon
МТС
ВШЭ
Ведомости
Wildberries
РБК
Альфа-Банк
Avito
Сбер
Skyeng
Ozon
МТС
ВШЭ
Ведомости
Wildberries
РБК
Альфа-Банк
Avito
Сбер
Skyeng
Ozon
МТС
ВШЭ
Ведомости
Wildberries

Быстрый старт за три запроса

Ключ, задача и результат — без SDK и сложной настройки

Шаг 1Создайте API-ключ

Личный кабинет → Настройки → API. Выберите scopes — ключ показывается один раз.

Authorization: Bearer tr_live_…
Шаг 2Отправьте файл или ссылку

POST /v1/transcriptions принимает file или source_url и сразу отвечает 202 с id задачи.

POST /v1/transcriptions
→ 202 {"id":"123","status":"queued"}
Шаг 3Заберите результат

Дождитесь вебхука transcription.completed или опрашивайте статус, затем запросите результат.

GET /v1/transcriptions/123/result
→ 200 text, segments, …

Что вы получаете в ответе

Не просто распознанный текст, а готовая структура: реплики, спикеры, таймкоды, саммари и ваш ID

GET /v1/transcriptions/:id/result
{  "data": {    "id": "123",    "status": "done",    "language": "ru",    "duration_seconds": 1840,    "text": "Добрый день! Давайте сверим план на квартал. ...",    "segments": [      {        "start": 0.0,        "end": 4.2,        "speaker": "Speaker 1",        "text": "Добрый день! Давайте сверим план на квартал."      },      {        "start": 4.6,        "end": 9.8,        "speaker": "Speaker 2",        "text": "Да, по продажам идём с опережением на 12%."      }    ],    "participants": "...",    "summary": "Сверили квартальный план: продажи опережают план на 12%, ...",    "tags": "...",    "metadata": { "external_id": "crm-call-123" }  },  "request_id": "req_..."}
Так результат выглядит в вашей системе
00:00Speaker 1

Добрый день! Давайте сверим план на квартал.

00:04Speaker 2

Да, по продажам идём с опережением на 12%.

00:10Speaker 1

Отлично. Тогда обсудим бюджет на рекламу.

AI-саммари в ответе

Сверили квартальный план: продажи опережают план на 12%. Следующий шаг — обсудить рекламный бюджет.

textsegments[].start / endsegments[].speakersummarytagsparticipantsmetadata.external_id

Что получает CRM

Всё, что нужно для записи расшифровки обратно в карточку сделки

Реплики по спикерам

Каждый сегмент — с меткой спикера и таймкодами; для звонка передайте num_speakers=2.

ID звонка в ответе

metadata.external_id возвращается в статусе, списке и результате — не нужна своя таблица соответствий.

Краткий итог звонка

summary и теги в том же ответе — удобно показать в ленте событий сделки.

Вебхук по готовности

Событие transcription.completed приходит на ваш HTTPS-адрес с подписью Transcripta-Signature.

Без дублей

ID звонка в Idempotency-Key: повторная отправка той же записи не создаст вторую задачу.

Контроль минут

GET /v1/usage показывает остаток минут тарифа и дополнительных, а также использование по дням.

Как связать CRM с расшифровкой

Схема для amoCRM, Битрикс24 и IP-телефонии: четыре шага, которые собирает ваш разработчик или интегратор

  1. Шаг 1

    Звонок завершён

    CRM или АТС сообщает вашему обработчику о новом звонке — вебхуком, событием или выгрузкой по расписанию.

  2. Шаг 2

    Запись скачана

    Обработчик забирает файл записи. Ссылки на записи из CRM в source_url не принимаются — только файл.

  3. Шаг 3

    Задача в API

    POST /v1/transcriptions: file, num_speakers=2 и metadata.external_id с ID звонка. Ответ 202 и id задачи.

  4. Шаг 4

    Текст в карточке

    Вебхук transcription.completed → GET /v1/transcriptions/:id/result → реплики по спикерам и саммари в карточке сделки.

Обработчик вебхука

  • Проверьте подпись Transcripta-Signature секретом whsec_ — так вы отсечёте чужие запросы.
  • Событие содержит transcription_id. Результат заберите через GET /v1/transcriptions/:id/result.
  • metadata.external_id из результата — это ID звонка, по нему находится карточка в CRM.
  • Ответьте 2xx: при ошибке сервис повторит доставку с тем же event id.

Готового приложения в маркетплейсах amoCRM и Битрикс24 нет — связка работает через API. Если звонков немного, запись можно загрузить вручную на странице транскрибации звонков.

POST /webhooks/transcription — ваш сервер
import hashlibimport hmacimport osimport time import requestsfrom flask import Flask, abort, request app = Flask(__name__)API_BASE = os.environ["API_BASE"]API_KEY = os.environ["AUDIO2TEXT_API_KEY"]WEBHOOK_SECRET = os.environ["WEBHOOK_SECRET"]  # whsec_..., показывается один раз def signature_ok(raw_body: bytes, header: str) -> bool:    if not header:        return False    parts = dict(item.split("=", 1) for item in header.split(","))    if abs(time.time() - int(parts.get("t", 0))) > 300:        return False    signed = f"{parts['t']}.".encode() + raw_body    expected = hmac.new(WEBHOOK_SECRET.encode(), signed, hashlib.sha256).hexdigest()    return hmac.compare_digest(expected, parts.get("v1", "")) @app.post("/webhooks/transcription")def transcription_webhook():    if not signature_ok(request.get_data(), request.headers.get("Transcripta-Signature", "")):        abort(401)    event = request.get_json()    if event["type"] == "transcription.completed":        task_id = event["data"]["transcription_id"]        result = requests.get(            f"{API_BASE}/v1/transcriptions/{task_id}/result",            headers={"Authorization": f"Bearer {API_KEY}"},        ).json()["data"]        call_id = result["metadata"]["external_id"]        save_to_crm(call_id, result["segments"], result["summary"])  # ваш код записи в CRM    return "", 204

Расшифровывайте часы записей за минуты

API входит во все платные тарифы, минуты общие с кабинетом · от 0,50 ₽ за минуту на тарифе «Экспертный» при помесячной оплате

5,0 рейтинг пользователей•50 000+ пользователей•500 000+ часов расшифровки
−50%

Базовый

для регулярных задач

295 ₽/мес
590 ₽ /мес
Оплата за год — 3 540 ₽
500 минут в месяц

сверх лимита — 2 ₽/мин

Популярный
−50%

Стандартный

для большинства задач

495 ₽/мес
990 ₽ /мес
Оплата за год — 5 940 ₽
1 000 минут в месяц

сверх лимита — 1 ₽/мин

−50%

Экспертный

для больших объёмов

1 245 ₽/мес
2 490 ₽ /мес
Оплата за год — 14 940 ₽
5 000 минут в месяц

сверх лимита — 1 ₽/мин

Просто попробовать?15 минут в месяц бесплатно, навсегда
Начать бесплатно →
В каждом тарифе:
Telegram-ботЗапись встречИИ-отчёты и чатФайлы до 5 ГБСпикеры и таймкодыAPI
Отмена в один кликВозврат 7 дней

Только распознавание или API Audio2Text

Что остаётся сделать вашей команде в каждом варианте

Параметр
Только распознавание речи
API Audio2Text
Результат
Текст и таймкоды
Текст, сегменты с таймкодами и спикерами, саммари, теги
Разметка спикеров
Часто отдельный сервис или ручная разметка
speaker в каждом сегменте, подсказка num_speakers
Саммари
Нужно отдельно отправлять текст в LLM
summary в том же ответе /result
Видео по ссылке
Сначала скачать ролик и извлечь звук
source_url на YouTube, Rutube, VK Видео
Готовность результата
Держать соединение или часто опрашивать
Вебхук transcription.completed с подписью
Связь с вашими данными
Своя таблица соответствий
metadata.external_id возвращается в ответах
Оплата
Отдельный счёт за API
Минуты общие с кабинетом, оплата в рублях, счёт для юрлиц

Как устроена автоматическая расшифровка звонков через API

Когда звонок завершается, CRM или АТС сообщает об этом вашему обработчику — через вебхук, событие или регулярную выгрузку. Обработчик скачивает запись разговора и отправляет её в POST /v1/transcriptions как файл, а в metadata.external_id кладёт ID звонка. Audio2Text ставит задачу в очередь, распознаёт речь, делит разговор на реплики и присылает событие transcription.completed на ваш HTTPS-адрес. Обработчик забирает результат по id задачи — metadata.external_id в ответе подскажет, к какому звонку он относится, — и записывает текст в карточку.

Расшифровка звонков amoCRM и Битрикс24: что понадобится

Готового приложения в маркетплейсах amoCRM и Битрикс24 у Audio2Text нет, поэтому связка делается через API: подойдёт собственный скрипт, серверная функция или платформа автоматизации. Понадобятся доступ к записям звонков в вашей CRM или телефонии, API-ключ Audio2Text на любом платном тарифе и HTTPS-адрес для вебхуков. Ссылку на запись из CRM передать напрямую нельзя: source_url принимает только YouTube, Rutube и VK Видео, поэтому запись нужно скачать и отправить в поле file. В качестве Idempotency-Key удобно использовать ID звонка — повторная отправка не создаст дубль.

Что даёт текст звонков отделу продаж

Текст разговора в карточке сделки читается за минуту — не нужно слушать запись целиком. Сегменты с таймкодами и метками спикеров позволяют быстро найти возражение клиента или обещание менеджера и прослушать только этот фрагмент. AI-саммари даёт короткий итог звонка, который удобно показывать прямо в ленте событий CRM. По накопленным расшифровкам проще проверять соблюдение скрипта и собирать примеры удачных разговоров для обучения новичков.

Частые вопросы

Коротко о подключении, лимитах и оплате API

Подключите расшифровку звонков к CRM

Создайте ключ, отправьте первую запись и подпишитесь на вебхук transcription.completed.

На любом платном тарифе · минуты общие с кабинетом · от 0,50 ₽ за минуту