Коннектор HubSpot
Коннектор HubSpot
Подключите вашу HubSpot CRM к Brevo через Tajo для двусторонней синхронизации контактов, отслеживания сделок, данных об активности и единой маркетинговой автоматизации на обеих платформах.
Обзор
| Свойство | Значение |
|---|---|
| Платформа | HubSpot |
| Категория | CRM |
| Сложность настройки | Средняя |
| Официальная интеграция | Да |
| Синхронизируемые данные | Контакты, компании, сделки, тикеты, события |
| Базовый URL API | https://api.hubapi.com |
Возможности
- Двусторонняя синхронизация контактов, контакты синхронизируются между HubSpot и Brevo в реальном времени
- Отслеживание воронки сделок, синхронизируйте стадии и суммы сделок для сегментации по выручке
- Синхронизация данных о компаниях, связывайте контакты с записями компаний и фирмографическими данными
- Интеграция тикетов, отслеживайте тикеты поддержки для оценки здоровья клиентов
- Отслеживание активности, синхронизируйте открытия писем, клики, встречи, звонки и заметки
- Поддержка кастомных объектов, сопоставляйте кастомные объекты HubSpot с атрибутами Brevo
- Триггеры рабочих процессов, используйте изменения стадий жизненного цикла HubSpot для запуска автоматизаций Brevo
- События вебхуков, уведомления об изменениях данных CRM в реальном времени
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть:
- Аккаунт HubSpot (Free, Starter, Professional или Enterprise)
- Приватное приложение HubSpot или OAuth-приложение с необходимыми scope
- Аккаунт Brevo с доступом к API
- Аккаунт Tajo
Аутентификация
Токен доступа приватного приложения (рекомендуется)
Создайте приватное приложение в HubSpot для прямого доступа к API с детальным контролем scope.
- Перейдите в HubSpot Settings > Integrations > Private Apps
- Создайте новое приватное приложение
- Настройте необходимые scope
- Скопируйте токен доступа
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 для мультиаккаунтных интеграций, которые требуют авторизации пользователя.
# Authorization URLhttps://app.hubspot.com/oauth/authorize?client_id={client_id}&scope=crm.objects.contacts.read&redirect_uri={redirect_uri}Необходимые scope
crm.objects.contacts.readcrm.objects.contacts.writecrm.objects.companies.readcrm.objects.deals.readcrm.objects.deals.writecrm.objects.custom.readcrm.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 HubSpotawait tajo.connectors.connect('hubspot', { accessToken: process.env.HUBSPOT_ACCESS_TOKEN});Запуск синхронизации контактов
// Full bidirectional syncawait tajo.connectors.sync('hubspot', { type: 'full', resources: ['contacts', 'companies', 'deals'], direction: 'bidirectional', since: '2023-01-01'});
// Check sync statusconst 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 notificationsapp.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/Starter | 100 запросов/10 секунд | 150 запросов/10 секунд |
| Professional | 150 запросов/10 секунд | 200 запросов/10 секунд |
| Enterprise | 200 запросов/10 секунд | 250 запросов/10 секунд |
| API add-on | 200 запросов/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Проверка подключения
tajo connectors test hubspot# ✓ API connection successful# ✓ Contacts readable# ✓ Companies readable# ✓ Deals readable# ✓ Webhooks registeredЛучшие практики
- Используйте приватные приложения вместо API-ключей, API-ключи устарели; используйте приватные приложения для лучшей безопасности
- Осторожно внедряйте двустороннюю синхронизацию, избегайте бесконечных циклов, отслеживая источник синхронизации
- Сопоставляйте стадии жизненного цикла, используйте стадии жизненного цикла HubSpot для сегментации контактов в Brevo
- Объединяйте API-запросы в пакеты, используйте пакетные эндпоинты для массовых операций, чтобы не выходить за лимиты
- Отслеживайте доставку вебхуков, настройте логику повтора и обработку “мёртвых” писем
- Используйте инкрементальную синхронизацию, синхронизируйте только изменённые записи с помощью свойства
lastmodifieddate
Безопасность
- Токены приватных приложений, токены доступа с детальными разрешениями
- OAuth 2.0, отраслевой стандарт авторизации с ротацией refresh-токенов
- Подписи вебхуков, проверка подписи на основе HMAC (v3)
- TLS-шифрование, все API-коммуникации зашифрованы при передаче
- Разрешения по scope, доступ с минимально необходимыми scope для каждой интеграции