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 разберёт логику фильтрации и предложит архитектуру без лишнего шума.