Kommo + CloudTalk: звонки, записи и AI-транскрипты автоматически в карточку сделки
CloudTalk — cloud-based call center решение для EU-команд продаж и поддержки: AI-транскрипция звонков, power dialer, IVR, 160+ готовых интеграций, серверы в ЕС (GDPR-compliant). Популярен в европейских SaaS и e-commerce — особенно где важна локализация номеров (CloudTalk предоставляет номера в 160+ странах). В отличие от Aircall или Dialpad, CloudTalk делает акцент на EU-инфраструктуре и compliance. Нативной интеграции с Kommo в маркетплейсе нет — разбираем правильную архитектуру через API.
CloudTalk vs Aircall vs Dialpad для Kommo-команд
| Параметр | CloudTalk | Aircall | Dialpad |
|---|---|---|---|
| Серверы | EU (GDPR) | EU + US | US (EU PoP) |
| AI транскрипция | Да (CloudTalk AI) | Через интеграцию | Нативная |
| Power Dialer | Да | Нет | Да |
| Номера | 160+ стран | 100+ стран | 70+ стран |
| Нативная интеграция Kommo | Нет | Нет | Нет |
| Цена (per user/мес) | от $25 | от $30 | от $15 |
CloudTalk выбирают EU-команды где GDPR и локализация номеров — требования, а не опции.
Архитектура: что синхронизируется
CloudTalk -> Kommo:
— call.ended -> Note с длительностью, направлением (in/out), ссылкой на запись
— call.ended + AI transcript -> Note с текстом транскрипта (если подключён CloudTalk AI)
— Пропущенный входящий -> Task менеджеру «Перезвонить»
Kommo -> CloudTalk:
— Новый контакт/лид -> синхронизация в CloudTalk Phone Book
— Изменение имени/компании -> обновление CloudTalk Contact
CloudTalk REST API: ключевые запросы
Base URL: https://my.cloudtalk.io/api. Аутентификация: Basic Auth (API key как логин, API secret как пароль из CloudTalk -> Account -> Integrations -> API).
import requests
from requests.auth import HTTPBasicAuth
CT_API_KEY = "your_api_key"
CT_API_SECRET = "your_api_secret"
CT_BASE_URL = "https://my.cloudtalk.io/api"
CT_AUTH = HTTPBasicAuth(CT_API_KEY, CT_API_SECRET)
def get_call_detail(call_id: str) -> dict:
resp = requests.get(
f"{CT_BASE_URL}/calls/{call_id}.json",
auth=CT_AUTH,
)
resp.raise_for_status()
return resp.json().get("responseData", {})
def get_call_recording_url(call_id: str) -> str:
call = get_call_detail(call_id)
return call.get("recordingUrl", "")
def create_cloudtalk_contact(name: str, phone: str, email: str = "",
company: str = "") -> dict:
payload = {
"name": name,
"phone": phone,
"email": email,
"company": company,
}
resp = requests.post(
f"{CT_BASE_URL}/contacts.json",
auth=CT_AUTH,
json=payload,
)
resp.raise_for_status()
return resp.json().get("responseData", {})
def update_cloudtalk_contact(contact_id: str, data: dict) -> dict:
resp = requests.put(
f"{CT_BASE_URL}/contacts/{contact_id}.json",
auth=CT_AUTH,
json=data,
)
resp.raise_for_status()
return resp.json().get("responseData", {})
Webhook: CloudTalk -> Kommo Note
CloudTalk поддерживает webhooks: Account -> Integrations -> Webhook -> Add. Событие call-ended отправляет payload с деталями звонка.
@app.route("/webhooks/cloudtalk", methods=["POST"])
def cloudtalk_webhook():
payload = request.json
event = payload.get("event")
call = payload.get("call", {})
if event != "call-ended":
return "", 200
call_id = call.get("id")
phone = call.get("callerNumber") or call.get("destinationNumber", "")
direction = call.get("direction", "")
duration = call.get("talkTime", 0)
recording = call.get("recordingUrl", "")
agent_name = call.get("agentName", "")
transcript = call.get("transcript", "")
lead_id = find_kommo_lead_by_phone(phone)
if not lead_id:
return "", 200
dir_label = "Входящий" if direction == "inbound" else "Исходящий"
note_parts = [
f"CloudTalk: {dir_label} звонок ({agent_name}), {duration} сек.",
]
if recording:
note_parts.append(f"Запись: {recording}")
if transcript:
short = transcript[:500] + ("..." if len(transcript) > 500 else "")
note_parts.append(f"Транскрипт: {short}")
create_kommo_note(lead_id, "\n".join(note_parts))
if direction == "inbound" and duration == 0:
create_kommo_task(lead_id, f"CloudTalk: пропущенный звонок с {phone} - перезвонить")
return "", 200
Синхронизация контактов Kommo -> CloudTalk
При создании нового лида в Kommo — контакт добавляется в CloudTalk Phone Book. Это позволяет агентам CloudTalk видеть имя звонящего и историю звонков:
@app.route("/webhooks/kommo", methods=["POST"])
def kommo_lead_webhook():
payload = request.json
event = payload.get("type")
if event == "contact_add":
contact = payload.get("data", [{}])[0]
name = contact.get("name", "")
phone = get_phone_from_contact(contact)
email = get_email_from_contact(contact)
company = get_company_from_contact(contact)
if phone:
ct_contact = create_cloudtalk_contact(name, phone, email, company)
save_cloudtalk_contact_id(contact["id"], ct_contact.get("id"))
elif event == "contact_update":
contact = payload.get("data", [{}])[0]
ct_id = get_cloudtalk_contact_id(contact["id"])
if ct_id:
update_cloudtalk_contact(ct_id, {
"name": contact.get("name"),
"company": get_company_from_contact(contact),
})
return "", 200
CloudTalk AI: транскрипция и саммари
CloudTalk AI (доступен на Expert планах) автоматически транскрибирует звонки и генерирует саммари. Транскрипт передаётся в webhook payload в поле transcript, саммари — в aiSummary. Для Kommo Note достаточно включить оба поля:
def format_cloudtalk_note(call: dict) -> str:
lines = []
direction = "Входящий" if call.get("direction") == "inbound" else "Исходящий"
lines.append(
f"CloudTalk: {direction}, {call.get('talkTime', 0)} сек, "
f"агент: {call.get('agentName', '')}"
)
if call.get("recordingUrl"):
lines.append(f"Запись: {call['recordingUrl']}")
if call.get("aiSummary"):
lines.append(f"AI саммари: {call['aiSummary']}")
elif call.get("transcript"):
preview = call["transcript"][:300]
lines.append(f"Транскрипт: {preview}...")
return "\n".join(lines)
Реальный кейс
B2B SaaS (Czech Republic, 40 человек, Kommo + CloudTalk + EU номера):
- До: после каждого звонка менеджер вручную писал заметку в Kommo — что обсудили, следующий шаг. 5–10 минут административной работы на звонок. Пропущенные звонки терялись — не было системного follow-up.
- После:
call-ended-> Note с длительностью + ссылкой на запись автоматически. CloudTalk AI transcript -> первые 300 символов в Note. Пропущенный -> Task «Перезвонить» на того же менеджера. - Результат: административная нагрузка на звонок — с 8 мин до 0 (менеджер только добавляет итог своими словами если нужно). Follow-up на пропущенные: 100% vs ~60% ранее. Team lead начал слушать записи через Kommo Notes напрямую — без входа в CloudTalk.
Для кого актуально
- EU-команды продаж где GDPR важен: данные звонков на EU-серверах CloudTalk
- Компании с локализованными номерами (Германия, Франция, Нидерланды) — CloudTalk 160+ стран
- SDR/BDR команды с высоким объёмом исходящих — power dialer + автоматическая история
- Support-команды где история взаимодействий в CRM критична
Часто задаваемые вопросы
CloudTalk нативная интеграция с Kommo — есть ли?
В CloudTalk есть нативные интеграции с HubSpot, Pipedrive, Salesforce, Freshdesk. Kommo — нет. CloudTalk поддерживает Generic CRM Integration через их открытый webhook + REST API. Exceltic.dev строит кастомный двусторонний коннектор: CloudTalk webhook -> Kommo Notes, Kommo webhook -> CloudTalk Contacts.
Как CloudTalk определяет какой менеджер отвечал за звонок?
В webhook payload поле agentId и agentName — CloudTalk агент кто принял/совершил звонок. Если Kommo пользователи совпадают с CloudTalk агентами (один email), можно матчить по email и создавать Note от правильного пользователя через Kommo API с created_by параметром.
CloudTalk Power Dialer — как интегрировать с очередью звонков из Kommo?
CloudTalk Power Dialer работает со списками контактов внутри CloudTalk. Для автоматической загрузки очереди из Kommo: cron-задача каждый час выбирает лиды в нужном этапе воронки -> через CloudTalk Contacts API создаёт/обновляет контакты -> добавляет в Dialer Campaign через POST /campaigns/{id}/contacts. Так менеджер утром открывает CloudTalk и видит очередь звонков из Kommo-воронки.
Где хранятся записи CloudTalk звонков?
На серверах CloudTalk (EU, AWS eu-west-1). Ссылка в webhook — прямая ссылка на MP3/WAV, действительна 7 дней без авторизации. Для долгосрочного хранения: при получении webhook — скачать запись в S3/GCS, сохранить постоянную ссылку в Kommo Note. CloudTalk Enterprise предлагает кастомный retention period.
Итого
- API: Basic Auth (API key + API secret), base URL
https://my.cloudtalk.io/api - Webhook
call-ended-> Note в Kommo: направление, длительность, агент, запись, транскрипт - CloudTalk AI transcript и aiSummary доступны на Expert планах — не нужен отдельный сервис
- Пропущенный звонок -> Task «Перезвонить» — 100% follow-up
- Синхронизация Kommo Contacts -> CloudTalk Phone Book — агент видит имя клиента при звонке
Если вы используете CloudTalk и Kommo и хотите автоматическую историю звонков в CRM — опишите объём звонков и нужны ли AI-транскрипты. Exceltic.dev настроит интеграцию за 3–5 рабочих дней.