Коннектор Intercom
Подключите рабочее пространство Intercom к Brevo через Tajo для единого клиентского мессенджинга, отслеживания диалогов и маркетинговой автоматизации на основе данных поддержки и продукта.
Обзор
| Свойство | Значение |
|---|---|
| Платформа | Intercom |
| Категория | Support |
| Сложность настройки | Средняя |
| Официальная интеграция | Да |
| Синхронизируемые данные | Контакты, диалоги, компании, события |
| Базовый URL API | https://api.intercom.io |
Возможности
- Синхронизация контактов, двунаправленная синхронизация пользователей и лидов Intercom с контактами Brevo
- Отслеживание диалогов, синхронизация данных диалогов для сегментации на основе поддержки
- Маппинг компаний, привязка контактов к компаниям для аккаунт-ориентированных рабочих процессов
- Пользовательские атрибуты, маппинг пользовательских атрибутов Intercom на поля контактов Brevo
- Трекинг событий, синхронизация пользовательских событий и активности для поведенческого таргетинга
- Синхронизация тегов, маппинг тегов Intercom в членство в списках или атрибуты Brevo
- Данные мессенджера, трекинг вовлечённости в чате и взаимодействий
- Интеграция AI-агента, синхронизация результатов диалогов AI-агента с Brevo
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть:
- Рабочее пространство Intercom (план Starter, Pro или Premium)
- Приложение Intercom с токеном доступа (private app) или настроенным OAuth (public app)
- Аккаунт Brevo с доступом к API
- Аккаунт Tajo
Аутентификация
Access Token (приватное приложение)
Для приватных интеграций, обращающихся к данным вашего рабочего пространства.
- Перейдите в Developer Hub > Your Apps > Create new app
- Привяжите к рабочему пространству Intercom
- Скопируйте токен доступа
curl https://api.intercom.io/contacts \ -H "Authorization: Bearer {access_token}" \ -H "Content-Type: application/json" \ -H "Intercom-Version: 2.11"OAuth 2.0 (публичное приложение)
Для интеграций, получающих доступ к данным Intercom других клиентов.
# URL авторизацииhttps://app.intercom.com/oauth?client_id={client_id}&state={state}
# Обмен токенаcurl -X POST https://api.intercom.io/auth/eagle/token \ -d "client_id={client_id}" \ -d "client_secret={client_secret}" \ -d "code={auth_code}"Версионирование API
Всегда включайте заголовок Intercom-Version в запросы. По умолчанию Tajo использует версию API 2.11. Следите за журналом изменений Intercom на предмет критических изменений.
Конфигурация
Базовая настройка
connectors: intercom: enabled: true access_token: "${INTERCOM_ACCESS_TOKEN}" api_version: "2.11"
# Параметры синхронизации данных sync: contacts: true conversations: true companies: true events: true tags: true
# Направление синхронизации direction: intercom_to_brevo
# Назначение листов Brevo lists: all_users: 35 active_conversations: 36 leads: 37Сопоставление полей
Сопоставьте данные контактов Intercom с атрибутами контактов Brevo:
Сопоставления по умолчанию
| Parameter | Type | Description |
|---|---|---|
email required | string | Email-адрес контакта (уникальный идентификатор) |
name optional | string | Полное имя, разделяется на FIRSTNAME/LASTNAME |
phone optional | string | Сопоставляется с атрибутом SMS для WhatsApp/SMS |
role optional | string | Тип контакта: user или lead |
company.name optional | string | Название связанной компании |
signed_up_at optional | timestamp | Дата регистрации пользователя |
last_seen_at optional | timestamp | Временная метка последней активности |
custom_attributes optional | object | Пары ключ-значение пользовательских атрибутов |
Маппинг пользовательских атрибутов
field_mapping: # Стандартные поля email: email name: FULLNAME phone: SMS
# Поля вовлечённости signed_up_at: SIGNUP_DATE last_seen_at: LAST_ACTIVE session_count: SESSION_COUNT unsubscribed_from_emails: UNSUBSCRIBED
# Поля компании company.name: COMPANY_NAME company.plan: COMPANY_PLAN company.size: COMPANY_SIZE
# Пользовательские атрибуты custom_attributes.plan_tier: PLAN_TIER custom_attributes.feature_usage: FEATURE_USAGEЭндпоинты API
Contacts API
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | /contacts | Список всех контактов |
POST | /contacts | Создание контакта |
PUT | /contacts/{id} | Обновление контакта |
GET | /contacts/{id} | Получить контакт |
POST | /contacts/search | Поиск контактов |
DELETE | /contacts/{id} | Архивирование контакта |
Conversations API
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | /conversations | Список диалогов |
GET | /conversations/{id} | Получить диалог |
POST | /conversations | Создание диалога |
POST | /conversations/{id}/reply | Ответить на диалог |
POST | /conversations/{id}/parts | Добавить часть диалога |
Companies API
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | /companies | Список компаний |
POST | /companies | Создание или обновление компании |
GET | /companies/{id} | Получить компанию |
GET | /companies/{id}/contacts | Контакты компании |
Events API
| Метод | Эндпоинт | Описание |
|---|---|---|
POST | /events | Отправка события |
GET | /events?type=user&intercom_user_id={id} | Список событий пользователя |
События
События диалогов
| Событие | Триггер | Сценарий использования |
|---|---|---|
conversation.created | Начат новый диалог | Оповещение о тикете поддержки |
conversation.closed | Диалог закрыт | Триггер CSAT-опроса |
conversation.rating.added | Оценка поставлена | Отслеживание удовлетворённости |
conversation.snoozed | Диалог отложен | Планирование follow-up |
События контактов
| Событие | Триггер | Сценарий использования |
|---|---|---|
contact.created | Добавлен новый контакт | Приветственная серия |
contact.updated | Данные контакта изменены | Синхронизация атрибутов |
contact.deleted | Контакт архивирован | Очистка |
contact.tag.created | Тег добавлен к контакту | Обновление сегмента |
События пользователей
| Событие | Триггер | Сценарий использования |
|---|---|---|
user.created | Новый пользователь зарегистрировался | Поток онбординга |
user.email.updated | Email изменён | Объединение контактов |
user.unsubscribed | Отписан от email | Обновление предпочтений |
Примеры кода
Инициализация коннектора
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Подключение Intercomawait tajo.connectors.connect('intercom', { accessToken: process.env.INTERCOM_ACCESS_TOKEN, apiVersion: '2.11'});Синхронизация контактов и диалогов
// Полная синхронизация контактов и данных диалоговawait tajo.connectors.sync('intercom', { type: 'full', resources: ['contacts', 'conversations', 'companies'], since: '2023-01-01'});
// Проверка статуса синхронизацииconst status = await tajo.connectors.status('intercom');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsSynced: 14200,// conversationsSynced: 28400,// companiesSynced: 2100// }Обработка вебхуков Intercom
import crypto from 'crypto';
app.post('/webhooks/intercom', async (req, res) => { const signature = req.get('X-Hub-Signature'); const expectedSig = 'sha1=' + crypto .createHmac('sha1', process.env.INTERCOM_CLIENT_SECRET) .update(JSON.stringify(req.body)) .digest('hex');
if (signature !== expectedSig) { return res.status(401).send('Unauthorized'); }
await tajo.connectors.handleWebhook('intercom', { topic: req.body.topic, data: req.body.data });
res.status(200).send('OK');});Ограничения скорости
Intercom устанавливает лимиты скорости в зависимости от плана:
| План | Лимит | Детали |
|---|---|---|
| Starter | 20 запросов/10 сек | На приложение |
| Pro | 50 запросов/10 сек | На приложение |
| Premium | 100 запросов/10 сек | На приложение |
| Эндпоинт поиска | 1 запрос/сек | На приложение |
| Эндпоинт прокрутки | 1 запрос/мин | На приложение |
Дополнительные ограничения:
- Bulk-операции: 15 контактов на bulk-запрос
- Отправка событий: 500 событий/сек на рабочее пространство
- Доставка вебхуков: автоматические повторные попытки в течение 24 часов
- Экспорт данных: 1 параллельный экспорт
Ответ при превышении лимита
Intercom возвращает 429 Too Many Requests с заголовком Retry-After. Реализуйте экспоненциальную задержку и соблюдайте окно повторных попыток.
Устранение неполадок
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
| 401 Unauthorized | Недействительный или истёкший токен | Перегенерируйте токен доступа в Developer Hub |
| Контакт не синхронизирован | Отсутствует поле email | Лиды Intercom могут не иметь email; фильтруйте по роли |
| Данные диалога пусты | Приложение не имеет scope для диалога | Повторно авторизуйтесь с разрешениями на чтение диалогов |
| Вебхук не получен | Вебхук не зарегистрирован | Настройте вебхуки в Developer Hub |
| Несоответствие версии API | Критические изменения в новой версии | Закрепите версию API с заголовком Intercom-Version |
Режим отладки
Включение подробного логирования:
connectors: intercom: debug: true log_level: verbose log_webhooks: trueПроверка подключения
tajo connectors test intercom# ✓ API connection successful# ✓ Contacts readable# ✓ Conversations readable# ✓ Companies readable# ✓ Webhooks registeredЛучшие практики
- Закрепляйте версию API, всегда указывайте
Intercom-Versionво избежание критических изменений - Эффективно используйте Search API, применяйте фильтры и пагинацию для уменьшения передаваемых данных
- Синхронизируйте пользователей и лидов, охватывайте всю воронку в Brevo
- Маппируйте теги диалогов, используйте теги диалогов для сегментов постпокупочного маркетинга
- Отслеживайте пользовательские события, отправляйте ключевые события продукта в Intercom для поведенческого таргетинга
- Обрабатывайте объединение контактов, реализуйте логику слияния для дублирующихся контактов
Безопасность
- Access Token, аутентификация через Bearer-токен для приватных приложений
- OAuth 2.0, делегированная авторизация для публичных приложений с client secret
- Верификация вебхуков, валидация подписи HMAC SHA-1 через
X-Hub-Signature - TLS-шифрование, все API-коммуникации зашифрованы через HTTPS
- Контроль доступа к данным, гранулярный доступ к данным на конфигурацию приложения