Разбор

ИИ делает конспект звонка с клиентом за 2 минуты: Whisper + Claude вместо ручных заметок

60% договорённостей со звонка менеджер забывает через 24 часа — это деньги которые ушли молча. Схема Whisper + Claude делает структурированный конспект за 2 минуты: задачи, возражения, следующий шаг, тональность. Стоит ~5 рублей за звонок.

• 7 мин чтения

Менеджер провёл переговоры. Звонок был хорошим — клиент заинтересован, обсудили детали, договорились о следующем шаге. Через два дня менеджер открывает CRM и пытается вспомнить: что именно они там согласовали? До какого числа? Был же какой-то вопрос по документам…

60%
деталей звонка с клиентом менеджер забывает в течение 24 часов после разговора
Источник: Salesforce State of Sales, 2024

Это не проблема памяти конкретного человека. Мозг так устроен: без немедленной фиксации детали испаряются. А в продажах «договорились, но я не записал» — это потерянные сделки, сорванные дедлайны, клиент который чувствует что его не слушали.

Решение банальное — нужны заметки после каждого звонка. Проблема в том, что менеджер с 10–15 звонками в день физически не успевает это делать хорошо. Либо пишет «поговорил, заинтересован», либо не пишет ничего.

Что происходит без конспекта

Посчитаем потери конкретной команды. 5 менеджеров, 30 звонков в день, средний чек 50 000 рублей, конверсия из звонка в сделку 15%. Если 60% деталей теряется — часть этих сделок срывается не потому что клиент передумал, а потому что менеджер не перезвонил в нужный момент или забыл о принципиальном возражении.

Даже если потери от забытых деталей снижают конверсию всего на 2 процентных пункта — это минус 6 000 рублей выручки в день, 180 000 в месяц. На команду из 5 человек.

При этом ручное заполнение CRM после звонков съедает время. В среднем 3–5 минут на звонок. При 30 звонках в день по команде — это 90–150 минут ежедневно, которые уходят на заметки вместо следующего звонка.

Куда уходит время менеджера после звонка (в минутах на звонок)
Ручные заметки в CRM
3–5 мин
Отправка follow-up письма
5–10 мин
Постановка задач
2–3 мин
С автоконспектом (всё)
1–2 мин
При 30 звонках в день — экономия 45 минут. Или один дополнительный полноценный звонок.

Схема: аудио → текст → структура → CRM

Архитектура намеренно простая. Никакого real-time стриминга и сложных интеграций — просто файл после звонка запускает цепочку.

🎙️Аудио звонкаmp3/wav/m4a
из телефонии
🔊Whisper APIтранскрипция
$0.006/мин
🤖Claude Sonnetанализ текста
~1–2 руб.
📋amoCRMпримечание
к сделке
✈️Telegramконспект
менеджеру

Whisper транскрибирует речь. Это единственная часть где нужен внешний сервис помимо Claude — Whisper очень хорошо справляется с русским, в том числе с деловым жаргоном и аббревиатурами.

Claude получает готовый текст разговора и структурирует его по заданному шаблону. Никаких инструментов и агентных цепочек — один запрос, один ответ в JSON. Потом Python-скрипт разбирает JSON и пишет в CRM и Telegram.

Сколько это стоит

5 ₽
Whisper за звонок
(15 мин × $0.006)
1–2 ₽
Claude Sonnet
за анализ транскрипта
~6 ₽
Итого за звонок
(30 звонков/день = ~180 ₽)

Для сравнения — готовые сервисы аналитики звонков:

СервисСтоимость/мес.Конспект?Гибкость промпта
Whisper + Claude (свой)~5 400 ₽ (30 зв./день)ДаПолная
Речь Аналитика (МТС)от 5 000 ₽ЧастичноФиксированная
Calltouchот 7 900 ₽НетФиксированная
CoMagicот 5 500 ₽НетФиксированная

Calltouch и CoMagic — это колл-трекинг, не анализ содержания. Они фиксируют откуда пришёл звонок, не о чём говорили. Речь Аналитика МТС умеет транскрибировать, но промпт не настроить — шаблон жёстко зафиксирован. Для B2B продаж со специфическими возражениями и терминологией это часто бесполезно.

Что выглядит на выходе

Вот реальный пример конспекта для звонка с потенциальным клиентом по ERP-интеграции:

Конспект звонка — 28 мая 2026, 14:32 — Иван Петров (ООО «Металлпром»)

Ключевые договорённости
Клиент готов рассмотреть пилот на одном складе. Бюджет на пилот — до 300 000 руб. Решение принимается вместе с IT-директором (Сергей Михайлов), встреча запланирована на 5 июня.

Задачи менеджера
  1. Отправить КП с расчётом ROI до 30 мая — клиент ждёт цифры перед встречей с IT.
  2. Уточнить у технического отдела совместимость с SAP B1 — клиент спрашивал дважды.
  3. Подготовить референс-кейс из металлургии.

Возражения клиента
«Сколько это займёт времени у нашей IT-команды?» — отвечено: 2–3 дня на настройку. Клиент скептически воспринял, попросил детали.
«У нас уже есть 1С, зачем ещё один продукт?» — отвечено через сценарий интеграции.

Следующий шаг
Встреча 5 июня в 11:00, видеозвонок. Участники: Иван Петров + Сергей Михайлов (IT) + наш менеджер.

Тональность
Позитивная. Клиент вовлечён, задавал уточняющие вопросы. Риска срыва нет, но решение зависит от IT-директора.

На этот конспект Claude тратит 8–12 секунд. Whisper транскрибировал 15-минутный звонок за 40 секунд. Итого от конца звонка до появления конспекта в Telegram — меньше двух минут.

Код: Python + Whisper + Claude + amoCRM

Базовый скрипт. Подключаете к папке куда телефония складывает записи звонков (большинство облачных АТС умеют это делать через webhook или FTP).

🐍 call_summary.py — pip install openai anthropic requests
import openai
import anthropic
import requests
import json
import os
from pathlib import Path

OPENAI_API_KEY = "YOUR_OPENAI_KEY"      # Whisper API
CLAUDE_API_KEY = "YOUR_CLAUDE_KEY"       # Claude API
AMO_DOMAIN = "your-company.amocrm.ru"   # домен amoCRM
AMO_TOKEN = "YOUR_AMO_LONG_TOKEN"        # долгосрочный токен amoCRM
TELEGRAM_TOKEN = "YOUR_BOT_TOKEN"
CHAT_ID = "YOUR_MANAGER_CHAT_ID"

openai_client = openai.OpenAI(api_key=OPENAI_API_KEY)
claude_client = anthropic.Anthropic(api_key=CLAUDE_API_KEY)


def transcribe_audio(audio_path: str) -> str:
  """Транскрибируем аудио через Whisper."""
  with open(audio_path, "rb") as f:
      response = openai_client.audio.transcriptions.create(
          model="whisper-1",
          file=f,
          language="ru",
          response_format="text"
      )
  return response


def analyze_call(transcript: str, manager_name: str) -> dict:
  """Claude анализирует транскрипт и возвращает структурированный конспект."""
  prompt = f"""Ты анализируешь транскрипт звонка менеджера по продажам {manager_name} с клиентом.

Транскрипт:
{transcript}

Составь структурированный конспект в JSON со следующими полями:
- agreements: список ключевых договорённостей (массив строк)
- tasks: задачи для менеджера с дедлайнами (массив объектов: task, deadline)
- objections: возражения клиента и ответы на них (массив объектов: objection, response)
- next_step: следующий шаг (строка: кто, что, когда)
- tone: тональность разговора (positive/neutral/at_risk) и короткое пояснение (объект: status, comment)
- summary: 2-3 предложения общего резюме звонка

Отвечай только валидным JSON без markdown-обёрток."""

  message = claude_client.messages.create(
      model="claude-sonnet-4-6",
      max_tokens=1500,
      messages=[{"role": "user", "content": prompt}]
  )
  return json.loads(message.content[0].text)


def find_lead_by_phone(phone: str) -> str | None:
  """Ищем сделку в amoCRM по номеру телефона клиента."""
  # Нормализуем номер: убираем всё кроме цифр
  clean_phone = "".join(c for c in phone if c.isdigit())

  headers = {
      "Authorization": f"Bearer {AMO_TOKEN}",
      "Content-Type": "application/json"
  }
  r = requests.get(
      f"https://{AMO_DOMAIN}/api/v4/contacts",
      headers=headers,
      params={"query": clean_phone, "limit": 1}
  )
  if r.status_code != 200:
      return None

  contacts = r.json().get("_embedded", {}).get("contacts", [])
  if not contacts:
      return None

  # Берём первую связанную сделку
  contact_id = contacts[0]["id"]
  r2 = requests.get(
      f"https://{AMO_DOMAIN}/api/v4/contacts/{contact_id}/links",
      headers=headers
  )
  links = r2.json().get("_embedded", {}).get("links", [])
  for link in links:
      if link.get("to_entity_type") == "leads":
          return str(link["to_entity_id"])
  return None


def add_note_to_lead(lead_id: str, text: str):
  """Добавляем примечание к сделке в amoCRM."""
  headers = {
      "Authorization": f"Bearer {AMO_TOKEN}",
      "Content-Type": "application/json"
  }
  payload = [{
      "entity_id": int(lead_id),
      "note_type": "common",
      "params": {"text": text}
  }]
  requests.post(
      f"https://{AMO_DOMAIN}/api/v4/leads/{lead_id}/notes",
      headers=headers,
      json=payload
  )


def format_for_telegram(summary: dict, manager_name: str) -> str:
  """Форматируем конспект для Telegram (HTML)."""
  tone_emoji = {"positive": "✅", "neutral": "🟡", "at_risk": "🔴"}
  tone_icon = tone_emoji.get(summary["tone"]["status"], "🟡")

  tasks_text = ""
  for t in summary["tasks"]:
      deadline = t.get("deadline", "—")
      tasks_text += f"  • {t['task']} ({deadline})\n"

  objections_text = ""
  for o in summary["objections"]:
      objections_text += f"  — {o['objection']}\n    → {o['response']}\n"

  return f"""🎙️ <b>Конспект звонка</b> — {manager_name}

<b>Резюме:</b> {summary['summary']}

<b>Договорённости:</b>
{chr(10).join('  • ' + a for a in summary['agreements'])}

<b>Задачи:</b>
{tasks_text.strip()}

<b>Возражения:</b>
{objections_text.strip() or '  Не зафиксированы'}

<b>Следующий шаг:</b> {summary['next_step']}

{tone_icon} <b>Тональность:</b> {summary['tone']['comment']}"""


def send_telegram(text: str):
  requests.post(
      f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage",
      json={
          "chat_id": CHAT_ID,
          "text": text,
          "parse_mode": "HTML"
      }
  )


def process_call(audio_path: str, manager_name: str, client_phone: str = None):
  """Основная функция: обрабатываем один звонок."""
  print(f"Транскрибируем: {audio_path}")
  transcript = transcribe_audio(audio_path)
  print(f"Транскрипт готов ({len(transcript)} символов), анализируем...")

  summary = analyze_call(transcript, manager_name)

  # Форматируем и отправляем в Telegram
  tg_text = format_for_telegram(summary, manager_name)
  send_telegram(tg_text)
  print("Конспект отправлен в Telegram")

  # Пишем в CRM если знаем номер клиента
  if client_phone:
      lead_id = find_lead_by_phone(client_phone)
      if lead_id:
          crm_note = f"Автоконспект звонка {manager_name}:\n\n{json.dumps(summary, ensure_ascii=False, indent=2)}"
          add_note_to_lead(lead_id, crm_note)
          print(f"Примечание добавлено к сделке {lead_id}")
      else:
          print(f"Сделка по номеру {client_phone} не найдена в CRM")

  return summary


# Пример запуска:
if __name__ == "__main__":
  result = process_call(
      audio_path="calls/2026-05-28-ivanov-metallprom.mp3",
      manager_name="Алексей Иванов",
      client_phone="+7 (495) 123-45-67"
  )
  print(json.dumps(result, ensure_ascii=False, indent=2))

Несколько нюансов которые выясняются на практике:

Whisper возвращает текст без разметки говорящих — одна сплошная строка. Для коротких звонков это нормально, Claude и так понимает кто говорит по контексту. Для длинных переговоров (30+ минут) стоит добавить diarization через pyannote.audio — отдельная библиотека, работает локально.

amoCRM требует долгосрочный токен для серверной интеграции. В интерфейсе он называется «Ключи API» в разделе интеграций — не путать с OAuth-токеном из приложения. Срок жизни — 2 года.

Если телефония умеет отправлять webhook после звонка — скрипт можно повесить на Flask-сервер и запускать автоматически без cron. Большинство облачных АТС (Mango Office, Beeline, Zadarma) умеют webhook с путём к файлу записи.

Что Claude делает лучше человека

Живой менеджер пишет заметки под влиянием момента — фиксирует то, что показалось важным прямо сейчас. Claude читает весь разговор целиком и замечает детали которые человек пропустил.

Три вещи где это особенно заметно:

Возражения которые «потонули» в разговоре. Клиент мимоходом сказал «ну, у нас ещё вопрос по срокам» — менеджер продолжил рассказывать про функции. Человек это не запишет. Claude зафиксирует как возражение с пометкой «не отработано».

Несоответствие обещаний и реальности. Если менеджер пообещал «пришлю в пятницу», а разговор был в четверг — в задачах появится дедлайн. Не просто «отправить», а «отправить до пятницы».

Тональность в динамике. Если клиент в начале звонка говорил активно, а в конце стал односложным — Claude это заметит и поставит риск-флаг. Человек после 10 звонков за день этот переход не уловит.

Проверьте свои процессы

Насколько вы теряете на незафиксированных звонках?

4 вопроса — поймёте где дыра

Вопрос 1 из 4
Как менеджеры фиксируют итоги звонков?
Вопрос 2 из 4
Бывало что сделка зависала или срывалась из-за забытого договора?
Вопрос 3 из 4
Записываются ли ваши звонки с клиентами?
Вопрос 4 из 4
Сколько менеджеров делают 10+ звонков в день?

Кейс: 30 звонков в день, 45 минут экономии

Компания-интегратор B2B-ПО. 5 менеджеров, 30 звонков в день суммарно. До внедрения — CRM заполнялась в конце дня по памяти, часть звонков не фиксировалась вообще.

После двух недель на автоконспекте несколько наблюдений:

Менеджеры перестали тратить время на заметки — конспект приходил в Telegram пока они ещё закрывали звонок. В CRM стало вдвое больше структурированных записей.

Руководитель отдела продаж начал читать конспекты выборочно — 10–15 минут утром вместо прослушивания записей. Выявил паттерн: один из менеджеров систематически не отрабатывал возражение про сроки интеграции. Ни он сам, ни коллеги этого не замечали.

Через месяц пересмотрели скрипт под этот кейс. Конверсия из звонка в следующий шаг выросла на 18% — уже за счёт качества переговоров, не автоматизации.

Ресурс на автоматизацию: один день разработки, ~6 000 рублей в месяц на API.


Промпт для Claude — это та часть которую стоит потратить время на настройку. Базовый шаблон из статьи работает для большинства B2B-продаж. Если у вас специфическая ниша — добавьте в промпт явные поля: «зафиксируй упоминание конкурентов», «выдели ценовые возражения отдельно», «отмечай если клиент называл конкретные имена в компании». Claude поймёт.

Похожие кейсы

Источники

Источники

Часто задаваемые вопросы

Как работает автоматическая транскрипция звонков через Whisper?
OpenAI Whisper получает аудиофайл звонка и возвращает текст с расстановкой говорящих. Для русской речи точность — 93–96% при среднем качестве записи. Стоимость: $0.006 за минуту аудио. Звонок на 15 минут обходится в ~5,5 рублей. Whisper работает через API или локально на сервере.
Что именно Claude выделяет из транскрипта звонка?
Промпт настраивается под нужды команды, но базовый набор: ключевые договорённости, задачи менеджера с дедлайном, возражения клиента и как на них ответили, следующий шаг (кто, что, когда), общая тональность разговора (позитив/нейтраль/риск срыва). Результат — структурированный JSON который уходит в CRM и Telegram.
Сколько стоит автоконспект одного звонка?
Whisper — $0.006/мин × 15 мин = ~5 рублей. Claude Sonnet для анализа — 1–2 рубля. Итого: 6–7 рублей за звонок. При 30 звонках в день — около 200 рублей/день или 6 000 рублей/месяц. Для сравнения: Речь Аналитика от МТС — от 5 000 рублей в месяц за базовый тариф.
Как интегрировать конспект с amoCRM?
amoCRM REST API позволяет добавлять примечания к сделке через POST /api/v4/leads/{id}/notes с type=common. В конспекте Python-скрипт находит нужную сделку по номеру телефона клиента через поиск контактов, затем прикрепляет структурированный текст. Настройка занимает 2–3 часа.
Чем этот подход лучше готовых сервисов типа Calltouch или CoMagic?
Готовые сервисы стоят 5 000–15 000 рублей/месяц и заточены под колл-трекинг, а не под структурированный конспект. Свой агент на Whisper + Claude обходится в 3 000–6 000 рублей/месяц при 30 звонках/день, при этом промпт настраивается под специфику бизнеса — можно добавить отслеживание конкретных слов, конкурентов, ценовых возражений.
Какие форматы аудио поддерживает Whisper API?
mp3, mp4, mpeg, mpga, m4a, wav, webm. Максимальный размер файла — 25 МБ. Для более длинных звонков нужно разбивать на части через ffmpeg или использовать локальную версию Whisper без ограничений по размеру.
Обсуждение

    Пока без комментариев. Будьте первым.

    Войдите, чтобы отправить комментарий

    Вы сможете комментировать статьи, сохранять материалы

    или войдите по email

    Бесплатная диагностика · 30 минут · без обязательств

    Маркетинг работает, но продажи не растут?

    Отвечу на 3–5 вопросов о вашем бизнесе — и мы вместе разберём, где именно теряются клиенты и что с этим делать.

    Без продаж. Без навязчивых звонков.