Коннектор SendGrid
Подключите аккаунт SendGrid к Brevo через Tajo для миграции email-инфраструктуры, синхронизации контактов, переноса данных кампаний и унифицированной аналитики вовлечённости на обеих платформах.
Обзор
| Свойство | Значение |
|---|---|
| Платформа | SendGrid (Twilio) |
| Категория | Marketing |
| Сложность настройки | Простая |
| Официальная интеграция | Да |
| Синхронизируемые данные | Контакты, кампании, транзакционный email, события |
| Базовый URL API | https://api.sendgrid.com/v3 |
Возможности
- Миграция контактов, перенос маркетинговых контактов SendGrid в Brevo с пользовательскими полями
- Синхронизация транзакционного email, трекинг событий транзакционного email для единой отчётности
- Данные кампаний, синхронизация данных эффективности кампаний Single Send и Automation
- Вебхуки событий, пересылка email-событий (доставлено, открыто, кликнуто, отклонено) в Brevo
- Синхронизация исключений, миграция списков отказов, блокировок и отписок для соответствия требованиям
- Миграция шаблонов, экспорт Dynamic Transactional Templates для использования в Brevo
- Верификация отправителя, синхронизация верифицированных удостоверений отправителей и доменной аутентификации
- Синхронизация статистики, импорт исторической статистики вовлечённости в атрибуты Brevo
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть:
- Аккаунт SendGrid (Free, Essentials, Pro или Premier)
- API-ключ SendGrid с необходимыми разрешениями
- Аккаунт Brevo с доступом к API
- Аккаунт Tajo
Аутентификация
Аутентификация по API Key
SendGrid использует аутентификацию Bearer-токена.
curl https://api.sendgrid.com/v3/marketing/contacts \ -H "Authorization: Bearer SG.YOUR_API_KEY" \ -H "Content-Type: application/json"Создавайте API-ключи в SendGrid Settings > API Keys с конкретными уровнями разрешений:
- Full Access, полный доступ к API
- Restricted Access, гранулярный контроль разрешений
- Billing Access, только операции выставления счетов
Необходимые разрешения
Marketing: Full Access - Contacts (read) - Single Sends (read) - Automations (read)Mail Send: Full Access - Mail Send (read)Stats: Read AccessSuppressions: Read AccessTracking: Read AccessБезопасность API Key
API-ключи SendGrid показываются только один раз при создании. Храните их надёжно. При потере необходимо создать новый ключ.
Конфигурация
Базовая настройка
connectors: sendgrid: enabled: true api_key: "${SENDGRID_API_KEY}"
# Параметры синхронизации данных sync: contacts: true campaigns: true transactional: true suppressions: true statistics: true
# Сопоставление списков с Brevo list_mapping: "All Contacts": 60 "Newsletter": 61 "Transactional": 62Сопоставление полей
Сопоставьте поля контактов SendGrid с атрибутами контактов Brevo:
Сопоставления по умолчанию
| Parameter | Type | Description |
|---|---|---|
email required | string | Email-адрес контакта (уникальный идентификатор) |
first_name optional | string | Сопоставляется с атрибутом FIRSTNAME |
last_name optional | string | Сопоставляется с атрибутом LASTNAME |
phone_number optional | string | Сопоставляется с атрибутом SMS |
city optional | string | Город контакта |
country optional | string | Страна контакта |
custom_fields optional | object | Пары ключ-значение пользовательских полей |
list_ids optional | array | Членство в списках SendGrid |
Сопоставление пользовательских полей
field_mapping: # Стандартные поля email: email first_name: FIRSTNAME last_name: LASTNAME phone_number: SMS
# Поля местоположения city: CITY state_province_region: STATE country: COUNTRY postal_code: POSTAL_CODE
# Метрики вовлечённости avg_open_rate: AVG_OPEN_RATE avg_click_rate: AVG_CLICK_RATE
# Пользовательские поля custom_fields.company: COMPANY_NAME custom_fields.plan: PLAN_TYPEЭндпоинты API
Маркетинговые контакты
| Метод | Эндпоинт | Описание |
|---|---|---|
PUT | /v3/marketing/contacts | Добавление или обновление контактов |
POST | /v3/marketing/contacts/search | Поиск контактов |
GET | /v3/marketing/contacts/count | Количество контактов |
POST | /v3/marketing/contacts/exports | Экспорт контактов |
DELETE | /v3/marketing/contacts | Удаление контактов |
GET | /v3/marketing/lists | Список всех списков контактов |
Транзакционный email (Mail Send)
| Метод | Эндпоинт | Описание |
|---|---|---|
POST | /v3/mail/send | Отправка email |
GET | /v3/templates | Список Dynamic Templates |
GET | /v3/templates/{id} | Детали шаблона |
Кампании (Single Sends)
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | /v3/marketing/singlesends | Список Single Sends |
GET | /v3/marketing/singlesends/{id} | Детали Single Send |
GET | /v3/marketing/automations | Список автоматизаций |
Статистика
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | /v3/stats | Глобальная статистика email |
GET | /v3/categories/stats | Статистика по категориям |
GET | /v3/marketing/stats/singlesends | Статистика Single Send |
Исключения
| Метод | Эндпоинт | Описание |
|---|---|---|
GET | /v3/suppression/bounces | Список отклонённых email |
GET | /v3/suppression/blocks | Список заблокированных email |
GET | /v3/suppression/spam_reports | Список жалоб на спам |
GET | /v3/suppression/unsubscribes | Список глобальных отписок |
События
Email-события (через Event Webhook)
| Событие | Триггер | Сценарий использования |
|---|---|---|
processed | Email принят SendGrid | Подтверждение отправки |
delivered | Email доставлен получателю | Отслеживание доставки |
open | Email открыт | Скоринг вовлечённости |
click | Кликнута ссылка | Отслеживание интереса |
bounce | Email отклонён | Гигиена списков |
dropped | Email исключён | Проверка соответствия |
deferred | Доставка отложена | Мониторинг повторных попыток |
spam_report | Помечен как спам | Управление репутацией |
unsubscribe | Отписка по ссылке | Синхронизация предпочтений |
Примеры кода
Инициализация коннектора
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Подключение SendGridawait tajo.connectors.connect('sendgrid', { apiKey: process.env.SENDGRID_API_KEY});Миграция контактов в Brevo
// Полная миграция контактов из SendGrid в Brevoawait tajo.connectors.sync('sendgrid', { type: 'full', resources: ['contacts', 'suppressions'], options: { includeCustomFields: true, migrateListMemberships: true, migrateSuppressions: true }});
// Проверка статуса миграцииconst status = await tajo.connectors.status('sendgrid');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// contactsMigrated: 45000,// suppressionsSynced: 3200,// listsMapped: 8// }Пересылка email-событий
// Обработка Event Webhook SendGridapp.post('/webhooks/sendgrid', async (req, res) => { const signature = req.get('X-Twilio-Email-Event-Webhook-Signature');
// Верификация подписи вебхука (ECDSA) if (!verifySendGridSignature(req.body, signature)) { return res.status(401).send('Unauthorized'); }
// Обработка пакета событий for (const event of req.body) { await tajo.connectors.handleWebhook('sendgrid', { type: event.event, email: event.email, timestamp: event.timestamp, payload: event }); }
res.status(200).send('OK');});Ограничения скорости
Ограничения скорости SendGrid API:
| Эндпоинт | Лимит | Детали |
|---|---|---|
Mail Send (/v3/mail/send) | Зависит от плана | Free: 100/день, Essentials: зависит от плана |
| Marketing Contacts PUT | 3 запроса/сек | Пакет до 30 000 контактов |
| Marketing Contacts Search | 50 запросов/сек | На API-ключ |
| General API | 1 000 запросов/сек | На API-ключ |
| Event Webhook | Пакетная доставка | До 1 000 событий в POST |
Лимиты Mail Send
Лимиты Mail Send зависят от вашего плана SendGrid. Бесплатные аккаунты ограничены 100 email/день. Проверьте детали вашего плана для точных лимитов отправки.
Устранение неполадок
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
| 401 Unauthorized | Недействительный API-ключ | Проверьте API-ключ в SendGrid Settings |
| 403 Forbidden | Недостаточно разрешений API-ключа | Создайте новый ключ с необходимыми scope |
| Экспорт контактов ожидает | Обработка большого набора данных | Опрашивайте эндпоинт статуса экспорта до завершения |
| Синхронизация исключений не завершена | Требуется пагинация | Реализуйте пагинацию с параметром offset |
| Event webhook не получен | URL не верифицирован | Выполните верификацию URL вебхука в SendGrid |
Режим отладки
Включение подробного логирования:
connectors: sendgrid: debug: true log_level: verbose log_webhooks: trueПроверка подключения
tajo connectors test sendgrid# ✓ API connection successful# ✓ Contacts readable# ✓ Lists accessible# ✓ Statistics readable# ✓ Suppressions accessibleЛучшие практики
- Сначала мигрируйте исключения, убедитесь, что отказы, блокировки и отписки в Brevo до начала отправки
- Используйте пакетную загрузку контактов, PUT до 30 000 контактов в запросе для эффективности
- Верифицируйте Event Webhook, включайте подписанные вебхуки с ECDSA-верификацией
- Маппируйте пользовательские поля, создайте соответствующие атрибуты Brevo перед миграцией контактов
- Синхронизируйте данные вовлечённости, импортируйте историческую статистику для сегментации в Brevo
- Обрабатывайте асинхронные экспорты, экспорт контактов асинхронный; опрашивайте статус завершения
Безопасность
- Аутентификация по API Key, Bearer-токен с гранулярными уровнями разрешений
- Подпись Event Webhook, верификация ECDSA-подписи для полезных нагрузок вебхуков
- TLS-шифрование, все API-коммуникации зашифрованы через HTTPS
- IP Access Management, ограничение доступа к дашборду и API по IP
- Двухфакторная аутентификация, 2FA доступна для доступа к аккаунту