Kommo + Gong: AI-анализ звонков и транскрипты в карточку сделки
Gong — платформа revenue intelligence: записывает звонки менеджеров, строит транскрипт, выделяет ключевые темы (возражения, конкуренты, бюджет, следующий шаг), анализирует talk/listen ratio. Без интеграции с Kommo данные из Gong живут отдельно — менеджер должен вручную переносить итоги звонка в CRM. С интеграцией каждый завершённый звонок из Gong автоматически появляется в карточке сделки: ссылка на запись, AI-саммари, ключевые темы.
Зачем интегрировать Gong с Kommo
Типичная проблема: менеджер провёл звонок, клиент упомянул конкурента и бюджетное ограничение. Через 3 дня — следующий звонок с другим менеджером. Без записи в CRM контекст теряется. С Gong + Kommo история звонков в сделке: каждый разговор, его резюме, выявленные возражения — всё в одном месте.
Сравнение с другими инструментами из блога:
— Kommo + Fireflies.ai — транскрипты встреч, дешевле, нет revenue intelligence
— Kommo + TL;DV — тайм-метки встреч, фокус на видео
— Kommo + Gong — enterprise revenue intelligence: AI-коучинг, прогнозирование, анализ победных/проигранных сделок
Что синхронизируется
Gong -> Kommo:
— Звонок завершён -> Note с AI-саммари, ссылкой на запись, длительностью
— Ключевые темы из разговора (конкуренты, возражения, следующий шаг) -> Note
— Talk ratio менеджера -> Note (для коучинга)
— Обновить поле «Последний контакт» в сделке
Kommo -> Gong:
— Won -> добавить тег won_customer к контакту в Gong
— Данные сделки (тариф, сумма) -> кастомные поля звонка в Gong (для анализа победных сделок)
Gong API: ключевые запросы
Base URL: https://api.gong.io/v2.
Аутентификация: Basic Auth — access_key:access_key_secret (Base64).
Credentials: Gong Settings -> Company Settings -> API.
import requests
from requests.auth import HTTPBasicAuth
GONG_ACCESS_KEY = "your_access_key"
GONG_ACCESS_SECRET = "your_access_key_secret"
GONG_BASE_URL = "https://api.gong.io/v2"
GONG_AUTH = HTTPBasicAuth(GONG_ACCESS_KEY, GONG_ACCESS_SECRET)
def get_call(call_id: str) -> dict:
resp = requests.get(
f"{GONG_BASE_URL}/calls/{call_id}",
auth=GONG_AUTH
)
resp.raise_for_status()
return resp.json()
def get_call_transcript(call_id: str) -> list:
# Возвращает массив utterances с текстом и speaker
resp = requests.get(
f"{GONG_BASE_URL}/calls/{call_id}/transcript",
auth=GONG_AUTH
)
resp.raise_for_status()
return resp.json().get("transcript", [])
def list_calls(from_dt: str, to_dt: str, cursor: str = None) -> dict:
# from_dt, to_dt: ISO 8601. Используй для polling новых звонков
params = {"fromDateTime": from_dt, "toDateTime": to_dt}
if cursor:
params["cursor"] = cursor
resp = requests.get(
f"{GONG_BASE_URL}/calls",
auth=GONG_AUTH,
params=params
)
resp.raise_for_status()
return resp.json()
def get_call_highlights(call_id: str) -> dict:
# AI-выделенные ключевые моменты (key points, next steps, risks)
resp = requests.get(
f"{GONG_BASE_URL}/calls/{call_id}/highlights",
auth=GONG_AUTH
)
resp.raise_for_status()
return resp.json()
Основная логика синхронизации (polling или webhook):
from datetime import datetime, timezone, timedelta
def find_kommo_deal_by_email(email: str) -> int | None:
# Найти сделку по email участника звонка
# Поиск контакта по email в Kommo, затем его открытую сделку
...
def build_call_note(call: dict, highlights: dict) -> str:
duration_sec = call.get("duration", 0)
duration = f"{duration_sec // 60} мин {duration_sec % 60} сек"
url = call.get("url", "")
title = call.get("title", "Звонок")
started = call.get("started", "")[:10]
# Talk ratio из metaData
talk_ratio = call.get("metaData", {}).get("talkRatio", {})
manager_ratio = round(talk_ratio.get("speakerRatio", {}).get("0", 0) * 100)
lines = [
f"Gong: {title} ({started}), {duration}",
f"Запись: {url}",
f"Менеджер говорил: {manager_ratio}% времени",
]
# Ключевые точки из AI
key_points = highlights.get("keyPoints", [])
if key_points:
lines.append("\nКлючевые моменты:")
for kp in key_points[:5]:
lines.append(f" • {kp.get('text', '')}")
next_steps = highlights.get("nextSteps", [])
if next_steps:
lines.append("\nСледующие шаги:")
for ns in next_steps[:3]:
lines.append(f" -> {ns.get('text', '')}")
return "\n".join(lines)
def sync_new_calls():
# Прогнать звонки за последний час, вызывать через cron каждые 30 мин
now = datetime.now(timezone.utc)
from_dt = (now - timedelta(hours=1)).isoformat()
to_dt = now.isoformat()
result = list_calls(from_dt, to_dt)
calls = result.get("calls", [])
for call in calls:
call_id = call.get("id")
parties = call.get("parties", [])
# Найти email внешнего участника (клиент)
client_email = None
for p in parties:
if p.get("speakerType") == "External":
client_email = p.get("emailAddress")
break
if not client_email:
continue
deal_id = find_kommo_deal_by_email(client_email)
if not deal_id:
continue
# Проверить что не добавляли этот звонок раньше
if call_already_synced(deal_id, call_id):
continue
full_call = get_call(call_id)
highlights = {}
try:
highlights = get_call_highlights(call_id)
except Exception:
pass
note = build_call_note(full_call, highlights)
create_kommo_note(deal_id, note)
mark_call_synced(deal_id, call_id)
Webhook (если доступен на вашем Gong-плане):
@app.route("/webhooks/gong", methods=["POST"])
def gong_webhook():
# Gong Enterprise: webhooks для call.completed, deal.updated
payload = request.json
event = payload.get("event")
if event == "call.completed":
call_id = payload.get("callId")
# Асинхронно: обработать через queue (Gong требует ответ < 3сек)
enqueue_call_sync(call_id)
return "", 200
Gong API: важные ограничения
- Rate limits: 100 запросов в минуту на организацию
- Webhook: доступен только на Enterprise-плане. На Standard — только polling через
GET /calls - Transcript lag: AI-транскрипт готов через 1–4 часа после звонка (не мгновенно)
- Data retention: зависит от плана Gong, обычно 12–24 месяца записей
Поэтому реальная архитектура для большинства команд — cron-polling каждые 30 минут вместо webhook.
Реальный кейс
B2B SaaS (US + EU, enterprise sales, 15–20 звонков в день, Kommo + Gong):
- До: после каждого звонка менеджер вручную писал итоги в Note. Занимало 5–10 минут. 30% звонков — без Notes вообще: «забыл» или «напишу потом». Следующий звонок — без контекста предыдущего.
- После:
sync_new_calls()каждые 30 минут -> Note с AI-саммари, ссылкой и следующими шагами. 100% звонков в CRM. Менеджер приходит на следующий звонок с контекстом из Gong. - Дополнительно: Gong-анализ победных сделок показал: менеджеры с talk ratio < 45% закрывают на 28% чаще. Данные передаются в Kommo -> head of sales видит в карточке сделки метрику звонка + результат.
Для кого актуально
- Enterprise sales команды с 10+ звонками в день
- Компании уже использующие Gong — нужно достроить CRM-слой
- Head of sales, который хочет видеть историю коммуникаций без переключения из Kommo
- Команды с длинным циклом сделки (60–180 дней) — контекст критичен
Часто задаваемые вопросы
Gong API доступен на всех планах?
Gong API доступен на Business и Enterprise планах. На Starter — нет API доступа. Перед интеграцией проверьте план и запросите API credentials у Gong account manager.
Как найти нужную сделку Kommo по данным из Gong?
Gong хранит email участников звонка. По email ищем Contact в Kommo (GET /contacts?query={email}), затем по contact_id — открытую сделку (GET /leads?contact_id={id}). Если email не совпадает (другой формат) — можно сопоставлять по номеру телефона.
Транскрипт доступен через API?
Да, через GET /calls/{id}/transcript. Возвращает массив utterances: speaker, text, start/end time. Можно строить полный текст звонка для хранения в CRM. Учитывайте: транскрипт появляется с задержкой 1–4 часа после завершения звонка.
Gong отправляет webhook или только polling?
Webhook (call.completed, deal.updated) — Enterprise план. Business — только polling через GET /calls с fromDateTime/toDateTime. Для большинства команд polling каждые 15–30 минут — приемлемая задержка.
Итого
- Gong API: Basic Auth (access_key:secret),
https://api.gong.io/v2 - Основной поток:
GET /calls->GET /calls/{id}->GET /calls/{id}/highlights-> Note в Kommo - Polling каждые 30 минут — рабочее решение для Business-плана без webhook
- AI-хайлайты:
keyPoints,nextSteps,risks— структурированный контент для Notes - Talk ratio из metaData — коучинговая метрика в CRM
Если вы используете Gong и Kommo и хотите видеть AI-резюме звонков в карточках сделок — опишите структуру своих звонков и какие данные критично фиксировать. Exceltic.dev настроит polling и маппинг хайлайтов.