Обсудить задачу

Kommo + ChatGPT: авто-резюме переписки в сделку

Автоматическое резюме переписки в Kommo строится на трёх API-вызовах: история чата через GET amojo.kommo.com/v2/origin/custom/{scope_id}/chats/{conversation_id}/history, суммаризация через POST api.openai.com/v1/chat/completions с моделью gpt-4o-mini, запись результата через POST /api/v4/leads/notes. Менеджер открывает карточку перед звонком и видит структурированный контекст - без прокрутки 60 сообщений.

Got-made виджеты для этого не существуют: Kommo Chats API работает через отдельный домен с HMAC-SHA1 аутентификацией, никак не пересекающейся с основным OAuth-токеном. No-code коннекторы типа Zapier или Make не поддерживают этот API-слой. Реализация требует кастомного микросервиса.

В проектах Exceltic.dev мы регулярно фиксируем одно и то же: менеджеры тратят 15-20 минут на изучение переписки перед каждым звонком. При 8 звонках в день это 2-2.5 часа ежедневно - время, которое уходит не на продажи, а на чтение чатов. Проблема удваивается при передаче сделки между менеджерами: принимающий тратит ещё 30-40 минут на погружение. Эта статья показывает, как закрыть задачу архитектурно - с конкретными эндпоинтами, примерами кода и цифрами.

Что реализуется

Авто-резюме переписки - структурированный текст, сгенерированный языковой моделью на основе истории чата и записанный в заметку и кастомное поле карточки сделки Kommo.

Интеграция решает конкретную задачу: менеджер не читает переписку перед звонком. Он видит готовый вывод - кто клиент, что обсуждали, какие возражения, согласованный следующий шаг.

Триггер: webhook или cron

Два рабочих варианта запуска:

  • Webhook на завершение чата - Kommo отправляет событие при закрытии диалога. Реакция мгновенная, резюме появляется сразу. Подходит если менеджеры явно закрывают диалоги.
  • Cron каждые N часов - сервис сам проверяет активные сделки и обновляет резюме по расписанию. Подходит большинству команд, где чаты не закрываются явно.

Kommo Chats API: получение истории

Эндпоинт истории чата:

GET https://amojo.kommo.com/v2/origin/custom/{scope_id}/chats/{conversation_id}/history?limit=50&offset=0

scope_id - идентификатор, объединяющий ID канала и ID аккаунта (формат: {channel_id}_{account_id}). Выдаётся при подключении канала. conversation_id - ID конкретного диалога, доступный из webhook-события или из карточки контакта.

Важно: аутентификация здесь принципиально отличается от основного REST API. Требуется HMAC-SHA1 подпись каждого запроса через заголовок X-Signature. Стандартный OAuth Bearer-токен Kommo здесь не работает. Подпись формируется из HTTP-метода, значений заголовков Date/Content-MD5/Content-type и пути запроса, подписывается channel secret.

Перед отправкой в OpenAI сообщения форматируются в текстовый блок:

def format_messages(messages):
    lines = []
    for msg in messages:
        from datetime import datetime
        ts = datetime.fromtimestamp(msg["timestamp"]).strftime("%d.%m %H:%M")
        sender = msg.get("sender", {}).get("name", "unknown")
        text = msg.get("text", "[media]")
        lines.append(f"{ts} [{sender}]: {text}")
    return "\n".join(lines)

OpenAI: модель, промпт, стоимость

Модель - gpt-4o-mini. Стоимость по состоянию на 2026 год: $0.15 за 1 млн входящих токенов и $0.60 за 1 млн исходящих. Один диалог из 50 сообщений (~2500 токенов) обходится в $0.0004-0.001 - дешевле одной десятой цента.

System prompt для структурированного вывода:

You are a CRM assistant. Summarize the following sales conversation in Russian.
Output format (strict):
- Client context: who the client is, their need (1-2 sentences)
- Key facts: budget, timeline, decision maker, objections (bullets)
- Open questions: what was promised or needs follow-up
- Sentiment: positive / neutral / negative
Be concise. Max 150 words total.

Вызов API:

import openai

response = openai.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": formatted_chat}
    ],
    max_tokens=300,
    temperature=0.3
)
summary = response.choices[0].message.content

temperature=0.3 снижает вариативность - резюме становится предсказуемым по структуре.

Запись результата в Kommo

Результат записывается двумя путями одновременно:

Заметка в сделке - через стандартный Kommo REST API:

payload = [
    {
        "entity_id": lead_id,
        "note_type": "common",
        "params": {
            "text": f"AI-резюме ({datetime.now().strftime('%d.%m.%Y %H:%M')}):\n\n{summary}"
        }
    }
]
requests.post(
    f"https://{subdomain}.kommo.com/api/v4/leads/notes",
    headers={"Authorization": f"Bearer {access_token}"},
    json=payload
)

Кастомное поле сделки - удобно для быстрого просмотра без открытия ленты заметок:

requests.patch(
    f"https://{subdomain}.kommo.com/api/v4/leads/{lead_id}",
    headers={"Authorization": f"Bearer {access_token}"},
    json={
        "custom_fields_values": [
            {"field_id": AI_SUMMARY_FIELD_ID, "values": [{"value": summary}]}
        ]
    }
)

Поле типа textarea создаётся один раз в настройках Kommo. В шаблоне карточки его выводят в верхней части - менеджер видит его сразу при открытии сделки.

Стоимость, идемпотентность, приватность

Стоимость. При 100 активных сделках с частотой обновления дважды в день - около $5-10 в месяц на весь аккаунт. Значительно меньше одного часа работы менеджера.

Идемпотентность. Сервис хранит хэш последнего обработанного msgid по каждой паре lead_id + conversation_id. Если новых сообщений не появилось - вызов OpenAI пропускается. Дублирующих заметок не создаётся.

Приватность. Текст переписки передаётся в OpenAI API. По политике OpenAI, данные из API-запросов не используются для обучения моделей. Для EU-команд с жёсткими требованиями к локализации данных - альтернатива self-hosted LLM (Llama 3 или Mistral через Ollama). Интерфейс Chat Completions API совместим, смена модели в коде занимает одну строку.

Пошаговая схема

Шаг 1. Создать private integration в developer panel Kommo. Получить client_id, client_secret для OAuth и channel_id + channel_secret для Chats API. Эти два набора credentials существуют независимо.

Шаг 2. Настроить OAuth 2.0 авторизацию: получить access_token и refresh_token. Access token живёт 24 часа - реализовать автоматическое обновление через refresh token при каждом запросе к основному API.

Шаг 3. Получить conversation_id для сделки. Он доступен через GET /api/v4/leads/{id}?with=chats - в ответе возвращается привязанный чат. Либо из webhook-payload при событии нового сообщения.

Шаг 4. Запросить историю через Chats API с HMAC-SHA1 подписью. Если сообщений более 50 - пагинация через offset. Для очень длинных переписок брать последние 40 сообщений + первые 5 (сохранить начальный контекст знакомства).

Шаг 5. Форматировать сообщения, отправить в OpenAI. Записать результат в заметку (POST /api/v4/leads/notes) и кастомное поле (PATCH /api/v4/leads/{id}).

Шаг 6. Логировать каждый запуск: lead_id, количество сообщений, токены OpenAI, время выполнения. При ошибке 403 от Chats API - проверить срок действия channel secret. При 429 от OpenAI - exponential backoff с базой 2 секунды.

Весь цикл занимает 3-8 секунд. Инфраструктура: один Docker-контейнер на Railway или VPS, PostgreSQL или Redis для хранения состояния.

Реальный кейс с цифрами

B2B-компания в Западной Европе, 8 менеджеров по продажам, около 120 активных сделок в Kommo. Основной канал - WhatsApp Business через Kommo Inbox. Средняя переписка по сделке - 55-70 сообщений за весь цикл.

До внедрения. Time-tracking в течение рабочей недели показал: в среднем 17 минут на подготовку к звонку по активной сделке, 30-40 минут на погружение при передаче сделки другому менеджеру.

После внедрения. Время подготовки к звонку - 2-3 минуты. Менеджер читает структурированный блок в верхнем поле карточки. Экономия по команде из 8 человек: около 95-110 часов в месяц.

Стоимость реализации: 3-4 рабочих дня разработки, VPS за $12/месяц, OpenAI API при данном объёме - около $8-10 в месяц. Инвестиция окупилась в первые две недели работы.

Побочный эффект: при смене менеджера принимающий выходит на первый звонок с клиентом уже подготовленным. Раньше это было точкой трения - клиент чувствовал, что ему снова объясняют то, что он уже рассказывал.

Для кого подходит

Интеграция оптимальна для B2B-команд на Kommo, где:

  • 5+ менеджеров ведут активную переписку через Kommo Inbox (WhatsApp, Telegram, Instagram)
  • Средняя переписка - 20+ сообщений до первого звонка или встречи
  • Есть регулярная передача сделок между менеджерами
  • Цикл сделки - от 2 недель (за это время накапливается история, которую трудно восстановить)
  • Компания работает в нескольких часовых поясах: менеджер подхватывает диалог после ночи

Не подходит если вся коммуникация идёт через email вне Kommo, команда из 1-3 человек или сделки закрываются за 1-2 контакта.

Если вы используете другие AI-интеграции с Kommo - например автоматическую квалификацию лидов через OpenAI - авто-резюме переписки встраивается в тот же сервисный слой без дублирования авторизационной логики. Для команд с активной работой в мессенджерах также актуальна статья про Kommo и Telegram-бот в воронке.

Термин: Chats API - отдельный API-слой Kommo на домене amojo.kommo.com, предназначенный для работы с мессенджер-чатами. Использует HMAC-SHA1 аутентификацию вместо стандартного OAuth Bearer-токена.

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

Как Kommo Chats API отличается от основного REST API?

Kommo имеет два независимых API. Основной REST API ({subdomain}.kommo.com/api/v4/) работает со сделками, контактами, заметками и использует OAuth 2.0 Bearer-токен. Chats API (amojo.kommo.com/v2/) - отдельный сервис для чатов и сообщений мессенджеров с HMAC-SHA1 аутентификацией: каждый запрос подписывается channel secret, а не access token. Это означает две разные системы аутентификации в одном микросервисе - их нельзя использовать взаимозаменяемо. Именно поэтому Zapier и Make не умеют работать с историей чатов: их Kommo-коннектор поддерживает только основной REST API.

Можно ли настроить авто-резюме без разработки через Zapier или Make?

Нет. Kommo Chats API недоступен через стандартные no-code коннекторы. Помимо аутентификации, проблема ещё и в размере данных: Zapier имеет ограничение на размер payload в 10 MB и не умеет удобно делать пагинацию через offset для длинных переписок. Минимальный вариант без full-stack разработки - Python-скрипт на cron в облачном окружении (например Railway или Render). Это занимает 1-2 дня работы разработчика вместо 3-4 дней для полноценного сервиса.

Насколько точно gpt-4o-mini суммаризирует переписку на русском?

Для структурированного извлечения фактов из переписки gpt-4o-mini показывает качество, достаточное для практического применения. Модель хорошо обрабатывает русский язык, извлекает имена, суммы, даты, возражения. Слабые места: смешанный сленг и аббревиатуры из конкретных отраслей (например строительство или медицина). В таких случаях помогает дополнить system prompt примерами терминологии. Для критически важных сделок резюме стоит рассматривать как вспомогательный инструмент, не заменяющий полное прочтение при необходимости.

Что происходит с данными переписки в OpenAI?

По политике OpenAI, данные из API-запросов не используются для обучения моделей по умолчанию - это задокументировано в их Data Processing Agreement. Данные временно хранятся до 30 дней для целей безопасности и логирования. Если переписка содержит персональные данные, подпадающие под GDPR, убедитесь что ваша privacy policy покрывает обработку данных AI-сервисами. Для максимальной приватности - self-hosted LLM (Mistral 7B через Ollama): интерфейс совместим с OpenAI Chat Completions API, данные не покидают вашу инфраструктуру.

Можно ли хранить резюме в custom field вместо заметки?

Можно, и это часто удобнее для оперативного просмотра. Поле типа textarea в верхней части шаблона карточки видно сразу при открытии сделки - без прокрутки ленты событий. Минус: поле перезаписывается при каждом обновлении, история резюме не сохраняется. Оптимальная схема: заметки для полной истории (каждое новое резюме - новая заметка) плюс кастомное поле с последним резюме для быстрого доступа. Тогда менеджер видит актуальный контекст вверху карточки и может при необходимости посмотреть историю изменений в ленте.

Итог

Авто-резюме переписки в Kommo через ChatGPT - это решённая инженерная задача с предсказуемым ROI.

Ключевые параметры реализации:

  • Стек: Kommo Chats API (amojo.kommo.com) -> Python/Node.js -> OpenAI gpt-4o-mini -> Kommo Notes API + Custom Fields
  • Стоимость: $0.0004-0.001 за одно резюме, $5-15/месяц при среднем объёме
  • Экономия: 90-120 минут рабочего времени на менеджера в день при 8+ менеджерах
  • Срок внедрения: 3-5 рабочих дней
  • Две системы аутентификации в одном сервисе: HMAC-SHA1 для Chats API и OAuth Bearer для Notes API

Документация: Kommo Chats API - история чатов, ценообразование OpenAI API.

Если у вас команда на Kommo с активными чатами и менеджеры тратят время на изучение истории перед звонками - опишите задачу команде Exceltic.dev. Разберём архитектуру под ваш стек: тип триггера, объём переписки, требования к приватности данных и необходимость кастомной обработки по отраслям.

Ещё статьи

Все →