Коннектор HubSpot

Коннектор HubSpot

Подключите вашу HubSpot CRM к Brevo через Tajo для двусторонней синхронизации контактов, отслеживания сделок, данных об активности и единой маркетинговой автоматизации на обеих платформах.

Обзор

СвойствоЗначение
ПлатформаHubSpot
КатегорияCRM
Сложность настройкиСредняя
Официальная интеграцияДа
Синхронизируемые данныеКонтакты, компании, сделки, тикеты, события
Базовый URL APIhttps://api.hubapi.com

Возможности

  • Двусторонняя синхронизация контактов, контакты синхронизируются между HubSpot и Brevo в реальном времени
  • Отслеживание воронки сделок, синхронизируйте стадии и суммы сделок для сегментации по выручке
  • Синхронизация данных о компаниях, связывайте контакты с записями компаний и фирмографическими данными
  • Интеграция тикетов, отслеживайте тикеты поддержки для оценки здоровья клиентов
  • Отслеживание активности, синхронизируйте открытия писем, клики, встречи, звонки и заметки
  • Поддержка кастомных объектов, сопоставляйте кастомные объекты HubSpot с атрибутами Brevo
  • Триггеры рабочих процессов, используйте изменения стадий жизненного цикла HubSpot для запуска автоматизаций Brevo
  • События вебхуков, уведомления об изменениях данных CRM в реальном времени

Предварительные требования

Прежде чем начать, убедитесь, что у вас есть:

  1. Аккаунт HubSpot (Free, Starter, Professional или Enterprise)
  2. Приватное приложение HubSpot или OAuth-приложение с необходимыми scope
  3. Аккаунт Brevo с доступом к API
  4. Аккаунт Tajo

Аутентификация

Токен доступа приватного приложения (рекомендуется)

Создайте приватное приложение в HubSpot для прямого доступа к API с детальным контролем scope.

  1. Перейдите в HubSpot Settings > Integrations > Private Apps
  2. Создайте новое приватное приложение
  3. Настройте необходимые scope
  4. Скопируйте токен доступа
Terminal window
curl -X GET "https://api.hubapi.com/crm/v3/objects/contacts" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json"

OAuth 2.0

Используйте OAuth 2.0 для мультиаккаунтных интеграций, которые требуют авторизации пользователя.

Terminal window
# Authorization URL
https://app.hubspot.com/oauth/authorize?client_id={client_id}&scope=crm.objects.contacts.read&redirect_uri={redirect_uri}

Необходимые scope

crm.objects.contacts.read
crm.objects.contacts.write
crm.objects.companies.read
crm.objects.deals.read
crm.objects.deals.write
crm.objects.custom.read
crm.schemas.custom.read

Конфигурация

Базовая настройка

connectors:
hubspot:
enabled: true
access_token: "${HUBSPOT_ACCESS_TOKEN}"
# Data sync options
sync:
contacts: true
companies: true
deals: true
tickets: true
engagements: true
# Sync direction
direction: bidirectional # or 'hubspot_to_brevo' | 'brevo_to_hubspot'
# List assignment in Brevo
lists:
all_contacts: 10
qualified_leads: 11
customers: 12

Сопоставление полей

Сопоставьте свойства HubSpot с атрибутами контакта Brevo:

Сопоставления по умолчанию

Parameter Type Description
email required
string

Email контакта (основной идентификатор)

firstname optional
string

Сопоставляется с атрибутом FIRSTNAME в Brevo

lastname optional
string

Сопоставляется с атрибутом LASTNAME в Brevo

phone optional
string

Сопоставляется с атрибутом SMS для WhatsApp/SMS

company optional
string

Название связанной компании

lifecyclestage optional
string

Стадия жизненного цикла HubSpot (subscriber, lead, MQL, SQL, customer)

hs_lead_status optional
string

Статус квалификации лида

hubspot_owner_id optional
string

Идентификатор назначенного менеджера по продажам

Сопоставление кастомных свойств

field_mapping:
# Standard fields
email: email
firstname: FIRSTNAME
lastname: LASTNAME
phone: SMS
# CRM fields
lifecyclestage: LIFECYCLE_STAGE
hs_lead_status: LEAD_STATUS
company: COMPANY_NAME
# Deal metrics
hs_total_deal_value: DEAL_VALUE
num_associated_deals: DEAL_COUNT
# Custom properties
preferred_channel: PREFERRED_CHANNEL
customer_segment: SEGMENT

Эндпоинты API

CRM-объекты

МетодЭндпоинтОписание
GET/crm/v3/objects/contactsСписок контактов
POST/crm/v3/objects/contactsСоздать контакт
PATCH/crm/v3/objects/contacts/{id}Обновить контакт
GET/crm/v3/objects/companiesСписок компаний
GET/crm/v3/objects/dealsСписок сделок
POST/crm/v3/objects/dealsСоздать сделку
GET/crm/v3/objects/ticketsСписок тикетов

Ассоциации

МетодЭндпоинтОписание
GET/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}Получить ассоциации
PUT/crm/v4/objects/{objectType}/{objectId}/associations/{toObjectType}/{toObjectId}Создать ассоциацию

Активности

МетодЭндпоинтОписание
GET/crm/v3/objects/callsСписок звонков
GET/crm/v3/objects/emailsСписок email-активностей
GET/crm/v3/objects/meetingsСписок встреч
GET/crm/v3/objects/notesСписок заметок
GET/crm/v3/objects/tasksСписок задач

События

События контактов

СобытиеТриггерСценарий использования
contact.creationСоздан новый контактЗапуск приветственной цепочки
contact.propertyChangeОбновлено свойство контактаСинхронизация атрибутов
contact.mergeКонтакты объединеныОбработка дедупликации
contact.deletionКонтакт удалёнОчистка в Brevo

События сделок

СобытиеТриггерСценарий использования
deal.creationСоздана новая сделкаУведомление продажам
deal.propertyChangeИзменена стадия сделкиАвтоматизация воронки
deal.deletionСделка удаленаОтчётность по выручке

События компаний

СобытиеТриггерСценарий использования
company.creationДобавлена новая компанияAccount-based маркетинг
company.propertyChangeОбновлены данные компанииФирмографическая синхронизация

Примеры кода

Инициализация коннектора

import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
brevoApiKey: process.env.BREVO_API_KEY
});
// Connect HubSpot
await tajo.connectors.connect('hubspot', {
accessToken: process.env.HUBSPOT_ACCESS_TOKEN
});

Запуск синхронизации контактов

// Full bidirectional sync
await tajo.connectors.sync('hubspot', {
type: 'full',
resources: ['contacts', 'companies', 'deals'],
direction: 'bidirectional',
since: '2023-01-01'
});
// Check sync status
const status = await tajo.connectors.status('hubspot');
console.log(status);
// {
// connected: true,
// lastSync: '2024-01-15T10:30:00Z',
// contactsSynced: 34200,
// companiesSynced: 5100,
// dealsSynced: 2340
// }

Обработка событий вебхуков

// Handle HubSpot webhook notifications
app.post('/webhooks/hubspot', async (req, res) => {
const signature = req.get('X-HubSpot-Signature-v3');
// Verify webhook signature
if (!verifyHubSpotSignature(req.body, signature)) {
return res.status(401).send('Unauthorized');
}
for (const event of req.body) {
await tajo.connectors.handleWebhook('hubspot', {
eventType: event.subscriptionType,
objectId: event.objectId,
propertyName: event.propertyName,
propertyValue: event.propertyValue
});
}
res.status(200).send('OK');
});

Ограничения скорости

HubSpot применяет лимиты запросов на приватное или OAuth-приложение:

ТарифЛимитBurst-лимит
Free/Starter100 запросов/10 секунд150 запросов/10 секунд
Professional150 запросов/10 секунд200 запросов/10 секунд
Enterprise200 запросов/10 секунд250 запросов/10 секунд
API add-on200 запросов/10 секунд250 запросов/10 секунд

Дополнительные ограничения:

  • Search API: 5 запросов/секунду на приложение
  • Пакетные операции: 100 записей на пакетный запрос
  • Дневной лимит: 500 000 запросов/день (OAuth-приложения)

Обработка лимитов запросов

HubSpot возвращает ответ 429 Too Many Requests при превышении лимитов. Используйте экспоненциальную задержку и отслеживайте заголовки X-HubSpot-RateLimit-*.

Устранение неполадок

Частые проблемы

ПроблемаПричинаРешение
401 UnauthorizedИстёкший или недействительный токенПерегенерируйте токен приватного приложения или обновите OAuth-токен
Контакт не синхронизированОтсутствует свойство emailКонтакты HubSpot требуют email для синхронизации с Brevo
Дубликаты контактовНет правила дедупликацииНастройте правила объединения в HubSpot
Вебхук не полученПодписка неактивнаПовторно зарегистрируйте подписки вебхуков
Свойство не сопоставленоКастомное свойство не созданоСначала создайте свойство в HubSpot

Режим отладки

Включите подробное логирование:

connectors:
hubspot:
debug: true
log_level: verbose
log_webhooks: true

Проверка подключения

Terminal window
tajo connectors test hubspot
# ✓ API connection successful
# ✓ Contacts readable
# ✓ Companies readable
# ✓ Deals readable
# ✓ Webhooks registered

Лучшие практики

  1. Используйте приватные приложения вместо API-ключей, API-ключи устарели; используйте приватные приложения для лучшей безопасности
  2. Осторожно внедряйте двустороннюю синхронизацию, избегайте бесконечных циклов, отслеживая источник синхронизации
  3. Сопоставляйте стадии жизненного цикла, используйте стадии жизненного цикла HubSpot для сегментации контактов в Brevo
  4. Объединяйте API-запросы в пакеты, используйте пакетные эндпоинты для массовых операций, чтобы не выходить за лимиты
  5. Отслеживайте доставку вебхуков, настройте логику повтора и обработку “мёртвых” писем
  6. Используйте инкрементальную синхронизацию, синхронизируйте только изменённые записи с помощью свойства lastmodifieddate

Безопасность

  • Токены приватных приложений, токены доступа с детальными разрешениями
  • OAuth 2.0, отраслевой стандарт авторизации с ротацией refresh-токенов
  • Подписи вебхуков, проверка подписи на основе HMAC (v3)
  • TLS-шифрование, все API-коммуникации зашифрованы при передаче
  • Разрешения по scope, доступ с минимально необходимыми scope для каждой интеграции

Связанные ресурсы

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

AI-ассистент

Привет! Спрашивайте меня о документации.

Начните бесплатно с Brevo