HubSpot + Jira: что ломает нативная интеграция при передаче клиентов

HubSpot + Jira: что ломает нативная интеграция при передаче клиентов команде разработки

Нативная интеграция HubSpot и Jira существует — она доступна в HubSpot Marketplace. Но она решает не ту задачу. Интеграция создана для Customer Support: связывает HubSpot Tickets с Jira Issues. Sales-процесс — передача клиента после Closed Won команде реализации через Jira — нативная интеграция не покрывает. Компании устанавливают её, обнаруживают пробелы, и либо работают в обход, либо переходят на кастомную интеграцию через API.

Что ломается в нативной интеграции

Deals не интегрируются с Jira — только Tickets. Нативная интеграция связывает Jira Issues с HubSpot Tickets, не с Deals. При Closed Won процесс передачи клиента реализуется через Deal — а не через Ticket. Чтобы использовать нативную интеграцию, нужно вручную создавать Ticket из Deal, затем ждать создания Jira Issue. Это лишний шаг, которого команды избегают — и передача снова становится ручной.

Статус синхронизируется только в одну сторону. Официальная документация HubSpot подтверждает: статус тикета синхронизируется только из Jira в HubSpot, не наоборот. Когда менеджер закрывает Deal в Closed Won, Jira об этом не знает автоматически. Когда Dev-команда закрывает задачу в Jira как Done, HubSpot Deal не обновляется — только если добавлена отдельная автоматизация.

Кастомные поля не синхронизируются. Технический стек клиента, требования к интеграции, SLA, тип onboarding-а — всё это хранится в кастомных полях Deal HubSpot. При создании Jira Issue через нативную интеграцию эти поля не передаются. Dev-команда получает задачу без контекста и уточняет данные вручную.

Jira Server и Data Center не поддерживаются. Нативная интеграция работает только с Jira Cloud. Компании на Jira Server или Data Center (самостоятельный хостинг) получают «Not supported» при попытке подключить.

Вложения не синхронизируются. Техническая документация, NDA, spec-файлы из HubSpot не попадают в Jira автоматически.

Что реально нужно для процесса передачи клиентов

Корректная передача клиента при Closed Won включает:

  1. Создание Jira Epic или Task с полными данными о клиенте
  2. Описание: тариф, технический стек, контактное лицо, SLA, срок
  3. Labels и Priority на основе тарифа (Enterprise -> Priority: High)
  4. Уведомление ответственного в dev/CS-команде
  5. При переходе Jira -> Done: обновление HubSpot Deal Stage или создание Activity

Нативная интеграция покрывает 0 из 5 пунктов для Deal-центричного процесса.

Правильный подход: кастомная интеграция через API

HubSpot -> Jira при Closed Won:

# HubSpot Webhook: deal.propertyChange, hs_deal_stage_probability = 1.0 (Closed Won)
def on_deal_closed_won(deal_id: str):
    # 1. Получить данные сделки
    deal = hubspot_get_deal(deal_id, properties=[
        'dealname', 'amount', 'hubspot_owner_id',
        'tech_stack',          # кастомное поле
        'onboarding_type',     # кастомное поле
        'implementation_sla'   # кастомное поле
    ])
    contact = hubspot_get_deal_contact(deal_id)

    # 2. Создать Jira Issue
    priority = 'High' if deal['amount'] > 10000 else 'Medium'
    issue_key = jira_create_issue(
        project_key='IMPL',
        summary=f'Onboarding: {deal["dealname"]}',
        description=build_jira_description(deal, contact),
        issue_type='Task',
        priority=priority,
        labels=[deal['onboarding_type'], 'closed-won'],
        custom_fields={
            'customfield_10200': deal_id,  # HubSpot Deal ID
            'customfield_10201': deal['implementation_sla']
        }
    )

    # 3. Обновить HubSpot Deal
    hubspot_update_deal(deal_id, {
        'jira_ticket': issue_key,
        'jira_ticket_url': f'https://company.atlassian.net/browse/{issue_key}'
    })

    # 4. Создать Activity в HubSpot
    hubspot_create_note(
        deal_id,
        f'Jira задача создана: {issue_key}. Команда реализации уведомлена.'
    )

def build_jira_description(deal: dict, contact: dict) -> str:
    return (
        f'Клиент: {contact.get("firstname")} {contact.get("lastname")}\n'
        f'Email: {contact.get("email")}\n'
        f'Компания: {deal.get("company_name", "")}\n'
        f'Тариф: {deal.get("tier", "")}\n'
        f'Сумма: ${deal.get("amount", 0)}\n'
        f'Технический стек: {deal.get("tech_stack", "")}\n'
        f'SLA: {deal.get("implementation_sla", "")}\n'
        f'HubSpot Deal ID: {deal["id"]}'
    )

Jira -> HubSpot при переходе Issue в Done:

# Jira Webhook: issue_updated, status = Done
def on_jira_issue_done(issue_key: str, custom_fields: dict):
    deal_id = custom_fields.get('customfield_10200')  # HubSpot Deal ID
    if not deal_id:
        return

    # Обновить стадию в HubSpot или создать Activity
    hubspot_create_note(
        deal_id,
        f'Jira {issue_key}: реализация завершена. Клиент готов к запуску.'
    )

    # Перевести сделку в следующую стадию (например, Customer Success)
    hubspot_update_deal(deal_id, {
        'dealstage': 'customer_success_stage_id',
        'jira_status': 'done'
    })

Почему не Zapier/Make?

Zapier и Make предоставляют коннекторы для HubSpot и Jira, но:

  • Deals -> Jira: Zapier триггерит по смене Stage в HubSpot. Но заполнить описание Jira-задачи данными из кастомных полей Deal — это 10+ шагов в Zap с трансформациями. На практике Zap становится хрупким и ломается при добавлении нового кастомного поля.
  • Jira -> HubSpot: нет нативного триггера «статус сменился на Done» — нужен webhook от Jira через промежуточный HTTP step. Это работает, но сложно дебажить.
  • Кастомная логика: приоритет по сумме сделки, разные проекты Jira для разных типов сделок, условный routing — всё это требует code-шагов в Zapier (Code by Zapier), что де-факто уже кастомная разработка.

При 20+ передачах в месяц Zapier-Zap становится точкой отказа, а стоимость Zapier Teams ($49–$799/mo) сопоставима с разработкой собственного решения на год вперёд.

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

EU SaaS (HubSpot Sales Hub Pro + Jira Cloud, 15 Closed Won в месяц, команда реализации 6 человек):

  • До: нативная интеграция HubSpot–Jira установлена, но использовалась для Support Tickets. Для Deals — ручное создание задач в Jira, 20–30 мин на передачу. Технический стек и SLA часто не указывались — Dev-команда узнавала в переписке.
  • Попытка через Zapier: Zap из 14 шагов ломался раз в 2 недели при изменении кастомных полей в HubSpot. 3 месяца чинки.
  • После кастомной интеграции: Closed Won -> Jira Task за 45 секунд с полным описанием. Dev-команда получает уведомление в Slack через Jira. При Done — автоматическая Activity в HubSpot Deal.

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

  • Компании с HubSpot Sales Hub (Professional или Enterprise) и Jira Cloud
  • Процесс: Closed Won -> передача команде реализации / Customer Success через Jira
  • 10+ Closed Won в месяц — ручная передача нерентабельна
  • Нативная интеграция установлена, но не решает задачу для Deals

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

Нативная интеграция HubSpot + Jira вообще работает?

Для Support Ticket -> Jira Issue — да. Это её основной use case. Для Sales Deal -> Jira Task при Closed Won — нет, нативно не поддерживается. Если ваш процесс завязан на Deals, нативная интеграция не поможет.

Какие разрешения нужны для HubSpot API?

Для чтения и обновления Deals: crm.objects.deals.read и crm.objects.deals.write. Для создания Notes/Activities: timeline.events.write. Private App в HubSpot (Settings -> Integrations -> Private Apps) — рекомендуемый способ для server-to-server интеграции.

HubSpot Webhook для Closed Won — как настроить?

В HubSpot: Settings -> Notifications -> Webhooks (доступно с Sales Hub Professional+). Создать webhook на событие deal.propertyChange, фильтр dealstage = closedwon. Payload содержит objectId (deal ID) — дальше запрашиваете детали через API.

Что если Jira Server, а не Cloud?

Нативная интеграция HubSpot работает только с Jira Cloud. Для Jira Server — только кастомная интеграция через Jira Server REST API (v2). Аутентификация: Basic Auth или Personal Access Tokens (PAT). API-структура та же, что у Jira Cloud.

Как избежать дублирования задач при повторном срабатывании webhook?

Сохраняйте deal_id -> jira_issue_key в вашей БД или в кастомном поле HubSpot Deal. Перед созданием Jira Issue проверяйте: если поле jira_ticket уже заполнено — обновляем существующую задачу вместо создания новой.

Итого

  • Нативная HubSpot + Jira интеграция: работает для Tickets, не для Deals
  • Статус — односторонний (Jira -> HubSpot), кастомные поля не синхронизируются
  • Только Jira Cloud — Server/Data Center не поддерживается
  • Zapier-решение: хрупко при 14+ шагах, не масштабируется при изменениях полей
  • Кастомная интеграция: HubSpot Private App webhook + Jira REST API v3, 1–2 недели разработки

Если у вас HubSpot и Jira и передача клиентов при Closed Won остаётся ручной — опишите структуру ваших Deals и проектов Jira. Exceltic.dev настроит двустороннюю синхронизацию с полным набором кастомных полей.

Ещё статьи

Все →