Kommo + 8x8: запись звонков и транскрипты UCaaS-платформы в карточку сделки
При интеграции Kommo и 8x8 каждый завершённый звонок автоматически появляется в хронологии нужной сделки: дата, длительность, направление (входящий/исходящий), запись и транскрипт. Менеджер не переключается между вкладками и не вводит заметки вручную.
8x8 - UCaaS (Unified Communications as a Service) платформа, которая объединяет голосовую связь, видеоконференции и командный чат в одном решении. Популярна среди международных компаний как корпоративная замена разрозненным телефонным системам. В отличие от специализированных sales-диалеров (Aircall, JustCall), 8x8 - это полноценная корпоративная телефония, что создаёт сложности при интеграции с CRM: API устроен иначе, события звонков приходят в другом формате.
В 7 из 10 проектов по интеграции корпоративной UCaaS-телефонии с Kommo мы сталкиваемся с одной и той же картиной: менеджеры по продажам работают в двух системах параллельно - звонят через 8x8, а контекст разговора пытаются вспомнить по памяти или перенести вручную в CRM. Нативный виджет 8x8 не передаёт кастомные поля звонка (направление, длительность по сегментам, результат) и не умеет привязать запись к конкретной сделке, если у контакта несколько активных pipeline. Именно на этом шаге теряется контекст при передаче клиента между менеджерами. В этой статье - архитектура интеграции, которая закрывает эти пробелы, с кастомными полями в Kommo и автоматическим логированием всего цикла звонка.
Почему нативная интеграция не работает
8x8 не имеет готовой интеграции с Kommo. В Marketplace Kommo 8x8 отсутствует. Единственный путь без разработки - Zapier, но здесь возникают три проблемы:
Во-первых, 8x8 Zapier trigger срабатывает на «завершённый звонок», но не передаёт идентификатор контакта из Kommo - это значит, что автоматически привязать звонок к нужной сделке невозможно без дополнительной логики сопоставления по номеру телефона.
Во-вторых, 8x8 хранит записи звонков на своих серверах с ограниченным сроком хранения (зависит от тарифа). Zapier не умеет скачивать аудиофайл и прикреплять его к карточке Kommo.
В-третьих, транскрипты звонков в 8x8 появляются с задержкой до 15-20 минут после окончания разговора. Zapier-зоонк на момент триггера видит только метаданные, но не текст.
Что реализовывается - архитектура решения
8x8 (звонок завершён)
|
v
8x8 Webhook -> Ваш сервер
- phone_from, phone_to, duration, call_id
|
v
Логика сопоставления:
- поиск контакта в Kommo по номеру телефона
- определение активной сделки контакта
|
v
Kommo API:
- добавить заметку о звонке
- создать задачу если нет ответа
|
(через 20 минут - polling или webhook) |
v
8x8 API: получить транскрипт
|
v
Kommo API: добавить транскрипт к заметке
Ключевой момент архитектуры - сопоставление номера телефона из 8x8 с контактом в Kommo. 8x8 передаёт номера в формате E.164 (+12025551234). Kommo хранит телефоны в разных форматах. Нормализация обоих значений перед сравнением - обязательный шаг.
Технические детали
8x8 предоставляет два вида API: CPaaS API (для программируемой телефонии) и Work API (для UCaaS-функционала). Для интеграции с CRM используется Work API v2 - он даёт доступ к call records, recordings и transcripts.
Аутентификация - OAuth 2.0 с токеном типа Bearer. Webhook настраивается через 8x8 Admin Console -> Integrations -> Webhooks.
import requests
import re
from flask import Flask, request, jsonify
import time
app = Flask(__name__)
EIGHTx8_API_BASE = "https://api.8x8.com/work/v2"
EIGHTx8_TOKEN = "your_8x8_api_token"
def normalize_phone(phone: str) -> str:
"""Нормализует номер телефона до формата E.164 без +"""
digits = re.sub(r"\D", "", phone)
if len(digits) == 10: # US number without country code
digits = "1" + digits
return digits
def find_kommo_deal_by_phone(phone: str):
"""Ищет сделку в Kommo по номеру телефона контакта"""
normalized = normalize_phone(phone)
contacts = kommo_api.search_contacts_by_phone(normalized)
if not contacts:
return None
# Берём контакт с открытой сделкой
for contact in contacts:
deals = kommo_api.get_contact_deals(contact["id"], statuses=["open"])
if deals:
return deals[0], contact
return None
@app.route("/8x8/webhook", methods=["POST"])
def handle_8x8_webhook():
data = request.json
event = data.get("event") # call.ended
if event != "call.ended":
return jsonify({"ok": True})
call_data = data["call"]
call_id = call_data["id"]
duration_sec = call_data.get("duration", 0)
direction = call_data.get("direction", "inbound") # inbound | outbound
# Определяем, кто внешний абонент
if direction == "outbound":
external_phone = call_data["to"]
else:
external_phone = call_data["from"]
result = find_kommo_deal_by_phone(external_phone)
if not result:
# Контакт не найден - создать новый лид или пропустить
return jsonify({"ok": True, "msg": "Contact not found"})
deal, contact = result
duration_min = duration_sec // 60
duration_str = f"{duration_min} мин {duration_sec % 60} сек"
note_text = (
f"Звонок 8x8 ({direction})\n"
f"Длительность: {duration_str}\n"
f"Номер: {external_phone}\n"
f"Call ID: {call_id}"
)
if duration_sec == 0:
note_text += "\nБез ответа"
kommo_api.create_task(
deal["id"],
text=f"Перезвонить: пропущенный звонок от {external_phone}",
deadline_hours=2
)
kommo_api.add_note(deal["id"], note_text)
# Запланировать получение транскрипта через 20 минут
schedule_transcript_fetch(call_id, deal["id"], delay_seconds=1200)
return jsonify({"ok": True})
def fetch_and_attach_transcript(call_id: str, deal_id: int):
headers = {"Authorization": f"Bearer {EIGHT_X8_TOKEN}"}
resp = requests.get(
f"{EIGHT_X8_API_BASE}/calls/{call_id}/transcript",
headers=headers
)
if resp.status_code == 200:
transcript = resp.json().get("text", "")
if transcript:
kommo_api.add_note(
deal_id,
f"Транскрипт звонка 8x8:\n\n{transcript[:2000]}"
)
Пошаговая реализация
Шаг 1. Включите API доступ в 8x8
Войдите в 8x8 Admin Console -> Account -> API Access. Создайте API ключ с правами calls:read, recordings:read, transcripts:read. Сохраните токен - он понадобится для всех API-запросов.
Шаг 2. Настройте webhook в 8x8
В 8x8 Admin Console -> Integrations -> Webhooks создайте новый webhook с URL https://yourserver.com/8x8/webhook. Выберите события: call.ended, call.missed. Система отправит тестовый запрос для проверки доступности endpoint.
Шаг 3. Настройте кастомные поля в Kommo
Добавьте поля для сделки: last_call_duration (текст), last_call_direction (список), call_count_total (число). Это даст возможность строить отчёты и фильтровать сделки по активности коммуникаций.
Шаг 4. Настройте логику неотвеченных звонков
При duration = 0 интеграция создаёт задачу «Перезвонить» с дедлайном 2 часа и назначает её ответственному менеджеру сделки. Это критически важно для команд, где входящие звонки - основной канал лидов.
Шаг 5. Настройте хранение записей
Если нужно сохранять записи звонков (не только ссылки), добавьте логику скачивания аудиофайла через 8x8 API и загрузки в облачное хранилище (S3, Google Cloud Storage). Ссылку на файл добавляйте в заметку Kommo. Это важно, если тариф 8x8 не включает долгосрочное хранение записей.
Реальный кейс с цифрами
Европейская B2B-компания, предоставляющая профессиональные услуги, использует 8x8 как корпоративную АТС. 15 менеджеров по продажам совершают 200-300 звонков в неделю.
До интеграции ситуация была типичной: менеджеры логировали звонки вручную после разговора, примерно 30-40% звонков вообще не попадали в CRM. История коммуникаций с клиентом была неполной, руководителю было сложно понять на каком этапе работы находится сделка.
Частая ситуация: менеджер менялся, новый сотрудник открывал карточку и не видел контекста - звонил клиенту заново, повторял те же вопросы, терял доверие.
После интеграции Kommo + 8x8 через Exceltic.dev:
- 100% звонков фиксируются в карточке сделки автоматически
- Транскрипты помогают руководителю слышать реальные разговоры без прослушивания записей
- Задачи на перезвон создаются автоматически - ни один неотвеченный звонок не теряется
- Время на ручное логирование: 0
О том, как правильно настроить воронку Kommo CRM с учётом телефонной активности - в отдельном материале.
Для кого подходит
Интеграция Kommo + 8x8 актуальна для:
- Компаний, использующих 8x8 как корпоративную АТС и желающих видеть историю звонков в CRM
- Команд с 10+ менеджерами по продажам, где ручное логирование неэффективно
- B2B с длинным циклом сделки - история коммуникаций критична для передачи клиента между менеджерами
- Компаний с compliance-требованиями к записи переговоров - интеграция помогает хранить и находить нужные записи
Если вы используете специализированный sales-диалер (Aircall, JustCall, CloudTalk) - для него уже существуют готовые решения. 8x8 как UCaaS-платформа требует кастомной разработки, но это оправдано когда телефония используется всей компанией, а не только отделом продаж.
Больше об интеграции IP-телефонии с CRM-системами - в обзорном материале.
Часто задаваемые вопросы
8x8 поддерживает webhook-уведомления о звонках?
Да. 8x8 Work API поддерживает webhook для событий call.ended, call.missed, call.answered. Webhook настраивается в Admin Console и доставляет события в реальном времени. Документация доступна на developer.8x8.com. Для использования API нужен тариф не ниже X2 или X4 (Business тарифы).
Как интеграция определяет к какой сделке привязать звонок?
По номеру телефона. Когда 8x8 отправляет webhook с номером внешнего абонента, сервер ищет контакт в Kommo с этим номером (с нормализацией формата). Если у контакта несколько открытых сделок - используется самая последняя активная. Если контакта нет - можно настроить автоматическое создание нового лида или отправку уведомления менеджеру.
Транскрипты доступны на всех тарифах 8x8?
Транскрипция звонков (AI-powered) доступна на тарифах X4 и выше. На X2 доступны только записи без транскрипта. Если транскрипция не нужна, интеграция всё равно работает - просто без шага получения текста разговора.
Можно ли настроить автоматическое создание лида для входящего звонка с неизвестного номера?
Да. Если 8x8 присылает webhook с номером, которого нет в Kommo, сервер может автоматически создать новый контакт и сделку на первом этапе воронки. Это особенно полезно для компаний, у которых входящий звонок - основной канал новых заявок. Подробнее о кастомных интеграциях в Kommo для автоматизации входящих запросов.
Сколько времени занимает разработка интеграции Kommo + 8x8?
Базовый вариант (логирование звонков + заметки + задачи на перезвон) - 2-3 недели. С транскрипцией и записями - 3-4 недели. Если нужна интеграция с другими системами компании (ERP, helpdesk) - оцениваем отдельно.
Если 8x8 - ваша корпоративная телефония и вы хотите видеть все звонки в Kommo - опишите задачу команде Exceltic.dev. Разберём архитектуру под ваш стек звонков и оценим объём работ.