Kommo + Slack: уведомления о сделках без лишнего шума

Kommo + Slack: уведомления о сделках без лишнего шума

Команда продаж не знает в реальном времени, что происходит с воронкой. Менеджер закрыл крупную сделку — никто не видит. Горячий лид завис на этапе уже неделю — никто не реагирует. Интеграция Kommo и Slack решает это — при условии, что уведомления настроены с умом. Наивная реализация «слать всё подряд» приводит к обратному: канал превращается в шум, и команда отключает уведомления.

Два сценария: уведомления и команды

Интеграция Kommo -> Slack закрывает два класса задач:

Уведомления (Kommo -> Slack):
— Новый лид поступил -> сообщение в канал #leads
— Сделка перешла на этап «Договор подписан» -> сообщение в #wins
— Сделка просрочена (дедлайн прошёл, этап не изменился) -> пинг менеджеру в #alerts
— Крупная сделка (сумма > порога) закрыта -> сообщение в общий канал команды

Команды (Slack -> Kommo): создание задачи в Kommo из сообщения Slack через slash-команду или реакцию — более сложный сценарий, требует Slack App с Bot Token.

В большинстве случаев достаточно первого сценария — направленный поток уведомлений Kommo -> Slack.

Slack Incoming Webhooks vs Bot API

Incoming Webhooks — простейший способ: создаётся URL, на который отправляется POST с JSON. Настройка за 5 минут, не требует создания Slack App с правами. Ограничение: один webhook = один канал. Подходит для большинства сценариев уведомлений.

Slack Web API (chat.postMessage) — требует Bot Token и Slack App. Позволяет:
— Отправлять сообщения в любой канал динамически
— Отправлять DM конкретному пользователю (например, ответственному менеджеру)
— Обновлять или удалять ранее отправленные сообщения
— Загружать файлы

Для роутинга «разные события -> разные каналы или пользователи» нужен Slack API с Bot Token.

Архитектура интеграции

Kommo: событие в воронке (смена этапа, новый лид)
  ↓ Webhook -> Backend
  1. Парсим событие: тип, сделка, этап, менеджер, сумма
  2. Применяем фильтры (см. ниже)
  3. Формируем Slack Block Kit сообщение
  4. POST -> Slack Incoming Webhook URL или chat.postMessage

Фильтрация: что отправлять, что не отправлять

Правило: уведомление должно требовать действия или информировать о важном событии. Смена этапа с «Новый» на «В работе» — не событие. Закрытая сделка на $10,000 — событие.

def should_notify(event: dict) -> bool:
    lead = event["lead"]
    old_status = event["old_status_id"]
    new_status = event["new_status_id"]

    # Всегда уведомлять о закрытых сделках
    if new_status == STATUS_WON:
        return True

    # Уведомлять о крупных лидах
    if new_status == STATUS_NEW and lead["price"] > 5000:
        return True

    # Уведомлять если сделка зависла (не менялась N дней)
    days_stuck = (now() - lead["updated_at"]).days
    if days_stuck > 7 and new_status not in [STATUS_WON, STATUS_LOST]:
        return True

    return False

Форматирование через Slack Block Kit

Простой текст в Slack быстро теряется. Block Kit позволяет сформировать структурированное сообщение с секциями, кнопкой-ссылкой на сделку и эмодзи-статусом.

def build_slack_message(lead: dict, event_type: str) -> dict:
    emoji = "🏆" if event_type == "won" else "🆕" if event_type == "new" else "⚠️"

    return {
        "blocks": [
            {
                "type": "section",
                "text": {
                    "type": "mrkdwn",
                    "text": f"{emoji} *{lead['name']}*\n"
                            f"Сумма: ${lead['price']:,} · "
                            f"Менеджер: {lead['responsible_user']}"
                }
            },
            {
                "type": "actions",
                "elements": [{
                    "type": "button",
                    "text": {"type": "plain_text", "text": "Открыть сделку"},
                    "url": f"https://app.kommo.com/leads/detail/{lead['id']}"
                }]
            }
        ]
    }

Роутинг по каналам

Разные события -> разные каналы:

СобытиеКаналКто видит
Новый лид > $5,000#leads-hotВся команда продаж
Сделка закрыта (Won)#winsВся компания
Сделка зависла 7+ днейDM менеджеруТолько ответственный
Новый лид (любой)#leadsКоманда продаж
Лид потерян (Lost)#analyticsРуководитель

Для DM нужен Slack user ID менеджера. Его можно хранить как кастомное поле пользователя Kommo или в маппинг-таблице на бэкенде.

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

SaaS-компания (5 менеджеров по продажам, Kommo, 80–100 лидов в месяц):

  • До интеграции: CEO узнавал о закрытых сделках из ежемесячного отчёта. Горячие лиды зависали без эскалации.
  • Реализация: Incoming Webhook для #wins (сделки Won) + Slack API для DM менеджерам (лиды без активности 5+ дней).
  • Фильтр: уведомления только для сделок > $1,000 и при закрытии.
  • Результат: #wins стал живым каналом — команда видит закрытия в реальном времени. Лиды без активности эскалируются автоматически — количество «забытых» лидов снизилось на 60%.

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

Интеграция Kommo + Slack имеет смысл если:
— Команда уже работает в Slack как основном мессенджере
— Нужна реал-тайм видимость важных событий в воронке без открытия CRM
— Есть задача эскалации зависших лидов ответственному менеджеру
— Важно отделять «значимые» события от рутинных смен этапов

Если основной мессенджер — Microsoft Teams, аналогичная интеграция описана в статье о Kommo и Microsoft Teams.

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

Kommo уже умеет слать уведомления в Slack — зачем кастомная интеграция?

Kommo имеет встроенные уведомления, но они ограничены: фиксированный формат сообщений, нет роутинга по каналам в зависимости от параметров сделки, нет фильтрации по сумме или длительности зависания. Для базовых нотификаций встроенного хватит. Для условной логики — нет.

Как отправить DM конкретному менеджеру, а не в канал?

Для DM нужен Slack Web API (chat.postMessage) и Bot Token. Slack user ID менеджера нужно сопоставить с пользователем Kommo — хранится в маппинг-таблице или как кастомное поле. Это чуть сложнее Incoming Webhooks, но закрывает сценарий персональных эскалаций.

Можно ли создавать задачи в Kommo из Slack?

Да, через Slack Slash Commands или Workflow Builder. Пользователь вводит /kommo task 'Перезвонить клиенту' @ivan -> backend создаёт задачу в Kommo на указанного менеджера. Это двусторонняя интеграция — сложнее в настройке, требует Slack App.

Сколько webhook-событий генерирует Kommo при активной воронке?

Kommo генерирует webhook на каждую смену этапа, добавление контакта, создание задачи и т.д. При 100 лидах в месяц и нескольких этапах — 300–500 событий. Без фильтрации все они превратятся в Slack-спам. Фильтрация на бэкенде обязательна.

Нужен ли отдельный сервер для интеграции?

Да, нужен webhook-приёмник: небольшой backend (Python/Node.js) на VPS или serverless (AWS Lambda, Vercel Functions). Он получает события Kommo, применяет фильтры и отправляет в Slack. Минимальная конфигурация для 500 событий в месяц — самый дешёвый VPS (4–5 USD/мес).

Итого

  • Ключевой принцип: фильтруй события до отправки, иначе Slack превращается в шум
  • Slack Incoming Webhooks — для простых случаев (один канал). Slack Bot API — для роутинга и DM
  • Block Kit: структурированные сообщения с кнопкой-ссылкой на сделку лучше plain text
  • Типовые триггеры: Won, крупный новый лид, зависшая сделка 5–7+ дней
  • Срок разработки: 1–2 недели

Если вы хотите настроить уведомления из Kommo в Slack — опишите, какие события важны для вашей команды. Exceltic.dev разберёт логику фильтрации и предложит архитектуру без лишнего шума.

Ещё статьи

Все →