Kommo + Dialpad: AI-транскрипты и записи звонков в карточку сделки

Kommo + Dialpad: AI-транскрипты и записи звонков в карточку сделки

Dialpad — облачная телефония с нативным AI-слоем: транскрипция звонка в реальном времени, автоматическое выделение Action Items, sentiment analysis собеседника, Real-time Assist Cards (подсказки менеджеру во время разговора). В отличие от Aircall или RingCentral, Dialpad строит AI-слой поверх телефонии как core-feature, а не add-on. Без интеграции с Kommo данные о звонке живут в Dialpad. С интеграцией каждый завершённый звонок — Note с транскриптом, Action Items и ссылкой в карточке сделки.

Dialpad vs Aircall vs Gong для CRM-интеграции

ПараметрDialpadAircallGong
AI-транскрипцияНативная, реальное времяЧерез интеграциюДа, с задержкой
Action ItemsАвтоматические из звонкаНетЧерез highlights
Sentiment analysisДаНетДа
Real-time coachingДа (Assist Cards)НетНет
PricingОт $27/user/месОт $30/user/месEnterprise
Подходит дляSMB-Enterprise с AI-фокусомSMB-Enterprise телефонияEnterprise revenue intel

Dialpad выбирают команды которым нужна телефония + AI-коучинг в одном продукте без enterprise-ценника Gong.

Что синхронизируется

Dialpad -> Kommo:
call.ended -> Note с AI-саммари, длительностью, ссылкой на запись
— Action Items из звонка -> Задачи в Kommo
— Sentiment (если negative) -> задача: «Клиент выразил недовольство — follow-up»
— Обновить поле «Последний звонок» в сделке

Kommo -> Dialpad:
— Создание звонка из карточки сделки через Click-to-Call (нативная функция Dialpad)

Dialpad API: ключевые запросы

Base URL: https://dialpad.com/api/v2.
Аутентификация: OAuth 2.0 или API Key (для server-side интеграций).
API Key: Dialpad Admin -> API -> Create API Key.

import requests
from datetime import datetime, timezone, timedelta

DIALPAD_API_KEY = "your_api_key"
DIALPAD_BASE_URL = "https://dialpad.com/api/v2"
HEADERS = {
    "Authorization": f"Bearer {DIALPAD_API_KEY}",
    "Content-Type": "application/json",
}

def get_call(call_id: str) -> dict:
    resp = requests.get(
        f"{DIALPAD_BASE_URL}/calls/{call_id}",
        headers=HEADERS,
    )
    resp.raise_for_status()
    return resp.json()

def get_call_transcript(call_id: str) -> dict:
    # Возвращает полный транскрипт с utterances
    resp = requests.get(
        f"{DIALPAD_BASE_URL}/calls/{call_id}/transcript",
        headers=HEADERS,
    )
    resp.raise_for_status()
    return resp.json()

def list_calls(started_after: str, started_before: str) -> list:
    # Для polling: ISO 8601 timestamps
    resp = requests.get(
        f"{DIALPAD_BASE_URL}/calls",
        headers=HEADERS,
        params={"started_after": started_after, "started_before": started_before},
    )
    resp.raise_for_status()
    return resp.json().get("items", [])

def build_call_note(call: dict, transcript: dict) -> str:
    duration_sec = call.get("duration", 0)
    duration_str = f"{duration_sec // 60} мин {duration_sec % 60} сек"
    recording_url = call.get("recording_url", "")
    started = call.get("date_started", "")[:10]
    direction = "Входящий" if call.get("direction") == "inbound" else "Исходящий"

    lines = [
        f"Dialpad: {direction} звонок ({started}), {duration_str}",
    ]
    if recording_url:
        lines.append(f"Запись: {recording_url}")

    # Action Items из AI
    action_items = call.get("ai_summary", {}).get("action_items", [])
    if action_items:
        lines.append("\nAction Items (AI):")
        for item in action_items[:5]:
            lines.append(f"  • {item}")

    # Sentiment
    sentiment = call.get("ai_summary", {}).get("sentiment", "")
    if sentiment:
        lines.append(f"\nSentiment: {sentiment}")

    return "\n".join(lines)

@app.route("/webhooks/dialpad", methods=["POST"])
def dialpad_webhook():
    payload = request.json
    event = payload.get("event")

    if event != "call.ended":
        return "", 200

    call_id    = payload.get("call_id")
    call       = payload.get("call", {})
    contact_ph = call.get("contact", {}).get("phone", "")

    deal_id = find_deal_by_phone(contact_ph)
    if not deal_id:
        # Попробуем по email
        contact_email = call.get("contact", {}).get("email", "")
        if contact_email:
            deal_id = find_deal_by_email(contact_email)
    if not deal_id:
        return "", 200

    note = build_call_note(call, {})
    create_kommo_note(deal_id, note)

    # Action Items -> задачи
    for item in call.get("ai_summary", {}).get("action_items", [])[:3]:
        create_kommo_task(deal_id, f"Dialpad Action Item: {item}")

    # Negative sentiment -> специальная задача
    sentiment = call.get("ai_summary", {}).get("sentiment", "")
    if sentiment == "negative":
        create_kommo_task(deal_id,
            "Dialpad: клиент выразил недовольство - срочный follow-up")

    return "", 200

Action Items: как AI Dialpad создаёт задачи

Dialpad AI автоматически выделяет Action Items из разговора — фразы типа «я пришлю вам…», «позвоните мне…», «согласуем до пятницы…». Через интеграцию с Kommo эти AI-выделенные пункты становятся задачами в карточке сделки. Менеджер заканчивает звонок и видит задачи уже созданными — без ручного ввода.

Real-time Assist Cards — отдельная функция Dialpad: подсказки появляются в UI Dialpad во время звонка при упоминании ключевых слов (конкуренты, ценообразование, objections). В Kommo не передаются — это инструмент коучинга в реальном времени.

Реальный кейс

B2B SaaS (Canada, 12 менеджеров, 80–120 звонков/день, Kommo + Dialpad):

  • До: после каждого звонка — 5 минут ввода итогов в CRM. 40% звонков без Notes вообще. Action Items теряются в памяти менеджера.
  • После: call.ended -> Note с AI-саммари + Action Items -> задачи в Kommo. Менеджер приходит на следующий звонок — в карточке полная история. Время ввода данных в CRM: 0 мин.
  • Дополнительно: sentiment analysis -> при negative-звонке Customer Success получает задачу в тот же день. Churn prevention: 3 клиента спасено за первый квартал через немедленный response.

Для кого актуально

  • Команды с 20+ звонками в день где ввод данных в CRM — узкое место
  • Компании которые уже используют Dialpad и хотят достроить CRM-слой
  • Sales-команды где коучинг критичен — Dialpad Assist Cards + интеграция с CRM
  • SMB-компании которым нужны AI-возможности Gong без enterprise-ценника

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

Dialpad transcript — когда доступен после звонка?

AI-транскрипт в Dialpad готов в течение нескольких минут после завершения звонка (в отличие от Gong с задержкой 1–4 часа). Webhook call.ended срабатывает сразу, данные AI-саммари обычно включены в payload.

Dialpad поддерживает EU data residency?

Dialpad имеет EU-регион для хранения данных (звонки, транскрипты). Настраивается при создании аккаунта. Для GDPR-compliant хранения звонков с EU-клиентами — уточняйте при онбординге.

Можно ли настроить Real-time Assist Cards для Kommo-данных?

Напрямую нет — Assist Cards настраиваются в Dialpad под конкретные ключевые слова. Но можно построить: при упоминании ключевого слова -> Dialpad webhook -> обогатить данными из Kommo (тариф, история) -> отобразить в кастомном UI. Это enterprise-кастомизация.

Dialpad vs Aircall — какой выбрать для Kommo?

Aircall: более зрелая интеграция с популярными CRM, простая настройка. Dialpad: AI-транскрипция и Assist Cards нативно, единая платформа для телефонии + видео (Dialpad Meetings). Для команд где AI-коучинг важен — Dialpad. Для команд где нужна максимально простая и быстрая настройка — Aircall.

Итого

  • Dialpad API: Bearer {api_key}, https://dialpad.com/api/v2
  • Webhook call.ended -> Note с AI-саммари + Action Items как задачи Kommo
  • AI-транскрипт готов в минутах после звонка (не часах)
  • Sentiment analysis -> negative -> приоритетная задача для CS-команды
  • Action Items выделяются AI автоматически — менеджер не вводит итоги вручную

Если вы используете Dialpad и Kommo и хотите видеть AI-саммари звонков в карточках сделок — опишите объём звонков и что важно фиксировать. Exceltic.dev настроит webhook и маппинг Action Items.

Ещё статьи

Все →