HubSpot + Slack: что не умеет нативная интеграция
HubSpot имеет официальное приложение для Slack. Оно работает: уведомления о новых сделках и смене этапа появляются в канале. Проблема начинается когда команда хочет большего: чтобы уведомления шли в разные каналы в зависимости от суммы сделки, чтобы менеджер мог создать задачу в HubSpot прямо из Slack-сообщения, чтобы нотификации не приходили в нерабочее время. Всё это нативная интеграция не умеет — и именно здесь команды обнаруживают её границы.
Что умеет нативная интеграция HubSpot + Slack
Приложение HubSpot для Slack (устанавливается из HubSpot App Marketplace) предоставляет:
- Уведомления о событиях: создание контакта, сделки, смена Deal Stage
- HubSpot Cards в Slack: просмотр карточки контакта или сделки по команде
/hubspot [имя]прямо в Slack - Создание задач из Slack:
/hubspot task create— базовая задача без привязки к конкретному объекту - Нотификации из Workflows: HubSpot Workflow может отправить Slack-уведомление как действие
Для базового использования этого достаточно. Ограничения начинаются при масштабировании или нестандартных требованиях.
Ограничение 1: нет роутинга по условиям
Нативная интеграция отправляет уведомления в один заранее настроенный канал (или несколько, но с фиксированной логикой). Нельзя задать правило: «если Deal Amount > $20,000 — в #enterprise, если < $5,000 — в #smb, если потенциальный клиент из Healthcare — в #industry-healthcare».
В HubSpot Workflows можно настроить разные уведомления для разных условий — но это отдельный Workflow на каждое условие, что быстро становится неуправляемым.
При кастомной интеграции:
def route_deal_notification(deal: dict) -> str:
amount = deal.get('amount', 0)
industry = deal.get('industry', '')
if amount > 20000:
return SLACK_CHANNEL_ENTERPRISE
elif 'healthcare' in industry.lower():
return SLACK_CHANNEL_HEALTHCARE
elif amount < 5000:
return SLACK_CHANNEL_SMB
else:
return SLACK_CHANNEL_DEFAULT
Ограничение 2: нет DM ответственному менеджеру
Когда горячий лид зависает на этапе без активности — нужно уведомить конкретного менеджера, а не весь канал. Нативная интеграция отправляет в канал. DM конкретному пользователю Slack по событию в HubSpot — недоступно нативно.
Кастомная интеграция решает через маппинг HubSpot owner -> Slack user ID:
OWNER_TO_SLACK = {
'hubspot_owner_id_1': 'U01ABC123', # Slack User ID
'hubspot_owner_id_2': 'U02DEF456',
}
def send_deal_alert(deal: dict):
owner_id = deal['hubspot_owner_id']
slack_user = OWNER_TO_SLACK.get(owner_id)
if slack_user:
slack_client.chat_postMessage(
channel=slack_user, # DM при передаче user ID как channel
text=f'Сделка {deal["dealname"]} без активности 7 дней'
)
Ограничение 3: односторонний поток
Нативная интеграция — только HubSpot -> Slack. Из Slack создать задачу в HubSpot командой /hubspot task create можно, но она не привязывается к конкретной сделке или контакту.
Практический сценарий: менеджер видит уведомление о новом лиде в Slack и хочет прямо там назначить следующий шаг — создать Task в HubSpot, привязанную к этой сделке, с дедлайном. Нативно это невозможно без перехода в HubSpot.
Кастомная Slack App с Shortcut или Block Kit Actions позволяет нажать кнопку в сообщении -> создать Task в HubSpot через API:
@app.action('create_hubspot_task')
def handle_create_task(ack, body, client):
ack()
deal_id = body['actions'][0]['value']
hubspot.crm.objects.tasks.basic_api.create({
'properties': {
'hs_task_subject': 'Связаться с клиентом',
'hs_task_status': 'NOT_STARTED',
'hs_timestamp': datetime.now().isoformat()
},
'associations': [{
'to': {'id': deal_id},
'types': [{'associationCategory': 'HUBSPOT_DEFINED',
'associationTypeId': 216}]
}]
})
Ограничение 4: фиксированный формат уведомлений
Нативная интеграция отправляет стандартный текст: «New deal created: [Deal Name]». Нет контроля над форматом — нельзя добавить ссылку на deal, сумму, ответственного, приоритет, или кнопку «Открыть в HubSpot» прямо в сообщении.
Slack Block Kit решает это для кастомной интеграции: структурированное сообщение с секциями, полями и кнопками.
Ограничение 5: нет бизнес-часов
Уведомления приходят в любое время. Для глобальных команд (менеджеры в разных часовых поясах) это создаёт шум ночью. Нативная интеграция не поддерживает расписание уведомлений.
Кастомная интеграция:
def should_send_now(timezone: str = 'Europe/Berlin') -> bool:
local_time = datetime.now(pytz.timezone(timezone))
return 8 <= local_time.hour < 20 and local_time.weekday() < 5 # Пн-Пт, 8:00-20:00
Когда нативной интеграции достаточно
Нативная HubSpot + Slack интеграция закрывает задачу если:
— Один канал для всех уведомлений
— Не нужен DM конкретным менеджерам
— Команда в одном часовом поясе
— Достаточно текстовых уведомлений без кнопок
— Нет необходимости создавать Tasks из Slack с привязкой к объектам
Аналогичные ограничения нативных интеграций HubSpot описаны в статьях о HubSpot + Intercom и HubSpot + Calendly — паттерн один: нативное работает для базового случая, кастомное — для реальных требований команды.
Реальный кейс
SaaS-компания (12 менеджеров, 4 страны, HubSpot Enterprise):
- Включили нативную интеграцию -> через 2 недели менеджеры отключили уведомления: 200+ нотификаций в день в один канал, 80% нерелевантных.
- Кастомная интеграция: роутинг по сумме (3 канала), DM менеджеру при зависании сделки, уведомления только в рабочие часы по часовому поясу менеджера.
- Результат: 15–20 уведомлений в день на канал, открытость 90%+ (менеджеры перестали отключать).
Часто задаваемые вопросы
Можно ли настроить условный роутинг через HubSpot Workflows?
Частично. HubSpot Workflow может отправить Slack-уведомление как действие с условиями. Но это требует создания отдельного Workflow для каждого сценария роутинга. При 5+ условиях — неудобно и сложно поддерживать. Кастомная интеграция выносит логику роутинга в код.
HubSpot недавно обновил Slack-интеграцию — изменились ли ограничения?
HubSpot периодически обновляет Slack App. По состоянию на май 2026 основные ограничения сохраняются: нет DM по owner, нет условного роутинга по кастомным свойствам, нет двусторонних действий с привязкой к объектам CRM.
Сколько стоит кастомная интеграция?
Типовой проект: 2–3 недели разработки. Включает: роутинг по условиям, DM-уведомления, бизнес-часы, Block Kit-форматирование. Опционально: кнопки для создания Tasks из Slack.
Нужен ли Slack Bot Token для кастомной интеграции?
Да. Для chat.postMessage и DM нужен Bot Token. Создаётся через api.slack.com/apps -> создание Slack App -> OAuth Scopes: chat:write, im:write. Для Incoming Webhooks (только в канал, без DM) — Bot Token не нужен, только URL webhook.
Итого
- Нативная HubSpot + Slack интеграция: уведомления в один канал, базовые команды, без DM и условной логики
- Ключевые ограничения: нет роутинга по каналам, нет DM менеджеру, нет двусторонних действий с привязкой к объектам CRM, нет бизнес-часов
- Кастомная интеграция: HubSpot Webhook -> backend с условной логикой -> Slack API
- Типовой результат после кастомной: количество уведомлений снижается в 10 раз, открытость растёт
Если вы используете HubSpot и Slack и нативная интеграция создаёт шум или не закрывает нужные сценарии — опишите логику уведомлений. Exceltic.dev разберёт условия роутинга и предложит архитектуру.