Разбор
ИИ делает конспект звонка с клиентом за 2 минуты: Whisper + Claude вместо ручных заметок
60% договорённостей со звонка менеджер забывает через 24 часа — это деньги которые ушли молча. Схема Whisper + Claude делает структурированный конспект за 2 минуты: задачи, возражения, следующий шаг, тональность. Стоит ~5 рублей за звонок.
Менеджер провёл переговоры. Звонок был хорошим — клиент заинтересован, обсудили детали, договорились о следующем шаге. Через два дня менеджер открывает CRM и пытается вспомнить: что именно они там согласовали? До какого числа? Был же какой-то вопрос по документам…
Это не проблема памяти конкретного человека. Мозг так устроен: без немедленной фиксации детали испаряются. А в продажах «договорились, но я не записал» — это потерянные сделки, сорванные дедлайны, клиент который чувствует что его не слушали.
Решение банальное — нужны заметки после каждого звонка. Проблема в том, что менеджер с 10–15 звонками в день физически не успевает это делать хорошо. Либо пишет «поговорил, заинтересован», либо не пишет ничего.
Что происходит без конспекта
Посчитаем потери конкретной команды. 5 менеджеров, 30 звонков в день, средний чек 50 000 рублей, конверсия из звонка в сделку 15%. Если 60% деталей теряется — часть этих сделок срывается не потому что клиент передумал, а потому что менеджер не перезвонил в нужный момент или забыл о принципиальном возражении.
Даже если потери от забытых деталей снижают конверсию всего на 2 процентных пункта — это минус 6 000 рублей выручки в день, 180 000 в месяц. На команду из 5 человек.
При этом ручное заполнение CRM после звонков съедает время. В среднем 3–5 минут на звонок. При 30 звонках в день по команде — это 90–150 минут ежедневно, которые уходят на заметки вместо следующего звонка.
Схема: аудио → текст → структура → CRM
Архитектура намеренно простая. Никакого real-time стриминга и сложных интеграций — просто файл после звонка запускает цепочку.
из телефонии
$0.006/мин
~1–2 руб.
к сделке
менеджеру
Whisper транскрибирует речь. Это единственная часть где нужен внешний сервис помимо Claude — Whisper очень хорошо справляется с русским, в том числе с деловым жаргоном и аббревиатурами.
Claude получает готовый текст разговора и структурирует его по заданному шаблону. Никаких инструментов и агентных цепочек — один запрос, один ответ в JSON. Потом Python-скрипт разбирает JSON и пишет в CRM и Telegram.
Сколько это стоит
(15 мин × $0.006)
за анализ транскрипта
(30 звонков/день = ~180 ₽)
Для сравнения — готовые сервисы аналитики звонков:
| Сервис | Стоимость/мес. | Конспект? | Гибкость промпта |
|---|---|---|---|
| Whisper + Claude (свой) | ~5 400 ₽ (30 зв./день) | Да | Полная |
| Речь Аналитика (МТС) | от 5 000 ₽ | Частично | Фиксированная |
| Calltouch | от 7 900 ₽ | Нет | Фиксированная |
| CoMagic | от 5 500 ₽ | Нет | Фиксированная |
Calltouch и CoMagic — это колл-трекинг, не анализ содержания. Они фиксируют откуда пришёл звонок, не о чём говорили. Речь Аналитика МТС умеет транскрибировать, но промпт не настроить — шаблон жёстко зафиксирован. Для B2B продаж со специфическими возражениями и терминологией это часто бесполезно.
Что выглядит на выходе
Вот реальный пример конспекта для звонка с потенциальным клиентом по ERP-интеграции:
- Отправить КП с расчётом ROI до 30 мая — клиент ждёт цифры перед встречей с IT.
- Уточнить у технического отдела совместимость с SAP B1 — клиент спрашивал дважды.
- Подготовить референс-кейс из металлургии.
«У нас уже есть 1С, зачем ещё один продукт?» — отвечено через сценарий интеграции.
На этот конспект Claude тратит 8–12 секунд. Whisper транскрибировал 15-минутный звонок за 40 секунд. Итого от конца звонка до появления конспекта в Telegram — меньше двух минут.
Код: Python + Whisper + Claude + amoCRM
Базовый скрипт. Подключаете к папке куда телефония складывает записи звонков (большинство облачных АТС умеют это делать через webhook или FTP).
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 вопроса — поймёте где дыра
Кейс: 30 звонков в день, 45 минут экономии
Компания-интегратор B2B-ПО. 5 менеджеров, 30 звонков в день суммарно. До внедрения — CRM заполнялась в конце дня по памяти, часть звонков не фиксировалась вообще.
После двух недель на автоконспекте несколько наблюдений:
Менеджеры перестали тратить время на заметки — конспект приходил в Telegram пока они ещё закрывали звонок. В CRM стало вдвое больше структурированных записей.
Руководитель отдела продаж начал читать конспекты выборочно — 10–15 минут утром вместо прослушивания записей. Выявил паттерн: один из менеджеров систематически не отрабатывал возражение про сроки интеграции. Ни он сам, ни коллеги этого не замечали.
Через месяц пересмотрели скрипт под этот кейс. Конверсия из звонка в следующий шаг выросла на 18% — уже за счёт качества переговоров, не автоматизации.
Ресурс на автоматизацию: один день разработки, ~6 000 рублей в месяц на API.
Промпт для Claude — это та часть которую стоит потратить время на настройку. Базовый шаблон из статьи работает для большинства B2B-продаж. Если у вас специфическая ниша — добавьте в промпт явные поля: «зафиксируй упоминание конкурентов», «выдели ценовые возражения отдельно», «отмечай если клиент называл конкретные имена в компании». Claude поймёт.
Есть вопрос по теме?
Разберу вашу ситуацию и предложу конкретный шаг
Похожие кейсы
- Квалификация лидов в AmoCRM через ИИ
- WhatsApp-ассистент для продаж
- Коммерческое предложение за 10 минут
- FAQ-бот для сайта без галлюцинаций
Источники
AI-агенты · Персональная карта
4 часа потратил — не работает?
Покажу где ты пошёл не туда и как сделать правильно за 2 недели
Получить разбор бесплатно →AI-агенты · 10 мест
Ты работаешь до полуночи — AI-агент будет работать вместо тебя
Покажу какой агент закроет твою главную операционную боль
Узнать свой маршрут →Есть вопрос по теме?
Разберу вашу ситуацию и предложу конкретный шаг
Источники
Читайте также
Часто задаваемые вопросы
- Как работает автоматическая транскрипция звонков через 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 без ограничений по размеру.
Канал «Лёха Маркетолог»
Практика без воды: кейсы, инсайты, разборы. 1–2 поста в неделю.
Пока без комментариев. Будьте первым.