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

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

Loom позволяет записать экран и камеру за секунду и поделиться ссылкой вместо встречи. Для продаж это означает персонализированный видео-аутрич: менеджер записывает 90-секундное видео с демонстрацией релевантного сценария конкретно для этого клиента. Без интеграции с Kommo ссылка на Loom живёт только в переписке — нет истории в сделке, нет информации о том, смотрел ли клиент видео, нет транскрипта для следующего менеджера. С интеграцией каждое новое видео автоматически появляется в карточке сделки с транскриптом, а просмотр фиксируется как событие.

Что даёт связка Kommo + Loom

Без интеграции:
— Менеджер записал Loom -> вставил ссылку вручную в Note или переписку
— Неизвестно, смотрел ли клиент — нет сигнала для follow-up
— Транскрипт остаётся в Loom, следующий менеджер не видит что обсуждалось
— После перехода клиента к другому менеджеру — история видео недоступна в CRM

С интеграцией:
— Loom записан -> транскрипт + ссылка автоматически в Note сделки через 2–3 минуты
video.viewed -> Note: «Клиент открыл видео» -> сигнал для follow-up звонка
— Тег kommo:{deal_id} -> автоматический маппинг видео к нужной сделке
— Транскрипт в истории сделки — следующий менеджер видит всё без просмотра видео

Архитектура

Менеджер записывает Loom с тегом kommo:{deal_id}
  ↓ Loom завершает обработку
  Loom Webhook: video.transcription_complete
  ↓ Backend
  1. Из payload: video_id, title, share_url, transcript (text)
  2. Извлечь deal_id из тегов видео (tag = "kommo:12345")
  3. GET /api/v4/leads/{deal_id} -> верификация что сделка существует
  4. Kommo: POST /leads/{deal_id}/notes
     -> «Loom: {title}\n{share_url}\nТранскрипт: {transcript[:500]}...»
  5. Kommo: PATCH /leads/{deal_id}
     -> кастомное поле loom_last_video_id = video_id

Loom Webhook: video.viewed (если доступно в тарифе)
  ↓ Backend
  1. Найти сделку по loom_last_video_id
  2. Kommo: POST /leads/{deal_id}/notes
     -> «Loom: клиент просмотрел видео - время для follow-up»
  3. (опционально) Kommo: POST /tasks -> задача на звонок сегодня

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

Base URL: https://www.loom.com/v1.
Аутентификация: Bearer token (Authorization: Bearer {api_key}).
API key: Loom -> Settings -> API -> Create API key.

Получить информацию о видео:

import requests

LOOM_API_KEY = "your_loom_api_key"
LOOM_BASE_URL = "https://www.loom.com/v1"

headers = {
    "Authorization": f"Bearer {LOOM_API_KEY}",
    "Content-Type": "application/json"
}

def get_video(video_id: str) -> dict:
    resp = requests.get(
        f"{LOOM_BASE_URL}/videos/{video_id}",
        headers=headers
    )
    resp.raise_for_status()
    return resp.json()

def get_video_transcript(video_id: str) -> str:
    resp = requests.get(
        f"{LOOM_BASE_URL}/videos/{video_id}/transcript",
        headers=headers
    )
    if resp.status_code == 404:
        return ""
    resp.raise_for_status()
    data = resp.json()
    # Объединить segments в текст
    segments = data.get("segments", [])
    return " ".join(seg.get("text", "") for seg in segments)

Обработка Loom Webhook:

from flask import Flask, request, abort
import hmac, hashlib

app = Flask(__name__)
LOOM_WEBHOOK_SECRET = "your_loom_webhook_secret"

def verify_loom_signature(payload: bytes, signature: str) -> bool:
    expected = "sha256=" + hmac.new(
        LOOM_WEBHOOK_SECRET.encode(),
        payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

def extract_deal_id_from_tags(video: dict) -> int | None:
    # Менеджер добавляет тег kommo:12345 при записи
    tags = video.get("tags", [])
    for tag in tags:
        if tag.startswith("kommo:"):
            try:
                return int(tag.split(":")[1])
            except (ValueError, IndexError):
                pass
    return None

@app.route("/webhooks/loom", methods=["POST"])
def loom_webhook():
    sig = request.headers.get("X-Loom-Signature", "")
    if not verify_loom_signature(request.data, sig):
        abort(403)

    payload = request.json
    event_type = payload.get("type")
    video_data = payload.get("data", {})
    video_id = video_data.get("id")

    if event_type == "video.transcription_complete":
        video = get_video(video_id)
        deal_id = extract_deal_id_from_tags(video)
        if not deal_id:
            return "", 200

        title = video.get("name", "Loom видео")
        share_url = video.get("share_url", "")
        duration_sec = video.get("duration", 0)
        transcript = get_video_transcript(video_id)

        note_text = (
            f"Loom: {title} ({duration_sec}с)\n"
            f"{share_url}\n"
        )
        if transcript:
            note_text += f"\nТранскрипт:\n{transcript[:800]}"
            if len(transcript) > 800:
                note_text += "... (полный в Loom)"

        create_kommo_note(deal_id, note_text)
        update_kommo_deal(deal_id, {"loom_last_video_id": video_id})

    elif event_type == "video.viewed":
        video_id_from_event = video_data.get("id")
        deal_id = find_deal_by_field("loom_last_video_id", video_id_from_event)
        if deal_id:
            create_kommo_note(deal_id,
                "Loom: клиент открыл видео - подходящий момент для follow-up звонка")
            create_kommo_task(deal_id, "Follow-up после просмотра Loom-видео")

    return "", 200

Настройка Webhook в Loom: Settings -> Webhooks -> Add webhook endpoint. Выбрать события: video.transcription_complete, video.viewed (доступно с тарифа Business). Секрет для верификации генерируется при создании.

Тег как способ связать видео со сделкой

Менеджер добавляет тег kommo:12345 к видео при загрузке в Loom — через UI или через Chrome-расширение. Для автоматизации этого шага можно сделать bookmarklet: пока менеджер в карточке сделки, bookmarklet открывает Loom с предзаполненным тегом через URL-параметр.

Альтернатива — соглашение по имени: [Kommo:12345] Демо для Acme Corp. Парсинг через regex:

import re

def extract_deal_id_from_title(title: str) -> int | None:
    match = re.search(r"\[Kommo:(\d+)\]", title)
    return int(match.group(1)) if match else None

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

B2B SaaS (US, enterprise-сегмент, Kommo + Loom, 15–20 активных сделок одновременно):

  • До: менеджеры использовали Loom для персонализированных демо, но ссылки жили только в email. Следующий менеджер при передаче сделки не знал, что уже показывалось.
  • После: каждое Loom-видео автоматически в истории сделки с транскриптом. При передаче — новый менеджер читает транскрипт за 3 минуты вместо созвона с предыдущим.
  • Дополнительно: video.viewed -> задача на follow-up в тот же день -> конверсия follow-up звонков выросла, потому что звонили в момент пока клиент «тёплый».

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

  • Enterprise B2B с длинным циклом сделки — персонализированное видео для каждого чемпиона
  • Команды с частой передачей сделок между менеджерами — транскрипт в истории важен
  • Sales-команды, которые уже используют Loom, но хотят видеть активность в CRM
  • SDR/AE модель — SDR записывает видео для прогрева, AE продолжает в Kommo с историей

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

Какой тариф Loom нужен для webhook и API?

API-доступ и webhook video.transcription_complete доступны с тарифа Business ($12.50/мес/пользователь). Тариф Starter (бесплатный) позволяет записывать видео, но API и webhooks закрыты. video.viewed — только Business и выше.

Транскрипт Loom точный?

Loom использует собственный движок транскрипции. Для английского — хорошее качество (технические термины иногда транскрибируются с ошибками). Для русского — транскрипция работает, но точность ниже. Если клиент говорит на русском, транскрипт лучше использовать как вспомогательный ориентир, а не как дословную запись.

Как связать видео со сделкой без тегов?

Через название видео: [Kommo:12345] в начале — менеджер вводит ID сделки при записи. Или через промежуточный webhook: перед записью менеджер нажимает кнопку в Kommo, которая генерирует уникальный код и открывает Loom с этим кодом в параметрах. Код хранится в pending-таблице, при webhook — матчится.

Loom vs Vidyard для интеграции с CRM?

Vidyard ориентирован на sales-автоматизацию — глубокая интеграция с HubSpot, Salesforce, Outreach. Loom — универсальный инструмент с API. Для кастомной интеграции с Kommo оба одинаково реализуемы. Loom проще в ежедневном использовании, Vidyard даёт больше аналитики по просмотрам.

Итого

  • Loom API: Bearer token, https://www.loom.com/v1
  • Получить видео: GET /videos/{video_id}, транскрипт: GET /videos/{video_id}/transcript
  • Webhook верификация: HMAC-SHA256, заголовок X-Loom-Signature
  • Маппинг видео -> сделка: тег kommo:{deal_id} или паттерн в названии
  • Ключевые события: video.transcription_complete (Business+), video.viewed (Business+)
  • Транскрипт в Note — главная ценность: история разговора в сделке без переключения в Loom

Если ваша команда использует Loom для видео-аутрича и вы хотите видеть активность в Kommo — опишите как сейчас устроен процесс записи и передачи ссылок. Exceltic.dev настроит маппинг и webhook-обработчик.

Ещё статьи

Все →