Коннекторы Brevo: четыре способа подключить Brevo к своему стеку

Как на самом деле работают коннекторы Brevo: нативные плагины, iPaaS, интеграционный слой или прямой API. Выберите подходящий вариант и переживите сбои синхронизации в бою.

Brevo connector
Коннекторы Brevo?

Поищите «Brevo connector», и вы получите разрозненную смесь плагинов из маркетплейса, сторонних приложений автоматизации и модулей от сообщества. Так происходит потому, что «коннектор» не является чем-то одним. Это категория, которая покрывает четыре по-настоящему разных инженерных решения, у каждого свой режим отказа и свой владелец в момент поломки.

Это руководство определяет, что такое коннектор, честно раскладывает четыре подхода, а затем большую часть объёма посвящает тому, о чём почти не пишут: что ломается, когда коннектор уже запущен и несёт реальный трафик.

Что такое коннектор Brevo на самом деле

Если убрать брендинг, любой коннектор Brevo состоит из одних и тех же трёх компонентов.

Транспорт. Как данные физически перемещаются. На практике это вызовы REST API Brevo в одну сторону и вебхуки Brevo в другую. Brevo делит вебхуки на маркетинговые и транзакционные, они настраиваются из панели управления или через эндпоинты создания и обновления вебхука, с потолком в 40 вебхуков на аккаунт по обоим типам.

Сопоставление. Как поле в исходной системе становится полем в Brevo. У клиента Shopify есть first_name, у контакта Brevo есть тот атрибут, который вы определили, причём Brevo молча игнорирует атрибуты, которых нет в вашем аккаунте. Именно сопоставление тихо гниёт в большинстве коннекторов.

Состояние. Что коннектор помнит между запусками: какие записи он уже отправил, какие упали, до какой позиции курсора дошёл. Коннекторы без состояния не умеют делать дозагрузку, не умеют повторять сбойную отправку и не могут сказать, потерян контакт или просто опаздывает.

Оценивайте любой коннектор по тому, насколько хорошо он справляется со всеми тремя частями. Большинство маркетинговых страниц описывает только первую.

Проблема идентификатора лежит в основании всего

Эндпоинт создания контакта в Brevo требует хотя бы один идентификатор: email, SMS или ext_id, то есть ваш собственный внешний идентификатор. По умолчанию конфликтующий идентификатор возвращает ошибку 4xx. Параметр updateEnabled со значением true превращает вызов в upsert, а forceMerge объединяет дубли, сохраняя запись с самой свежей меткой времени и удаляя вторую.

Одно это решение, какой идентификатор коннектор считает основным, определяет, получите вы чистую базу контактов или по две копии всего. Примите его до выбора инструмента.

Четыре способа подключить Brevo

Вариант 1: нативные плагины и приложения маркетплейса

Brevo ведёт маркетплейс приложений, который сам описывает как связывающий Brevo с «более чем 150 цифровыми инструментами вроде Shopify, WordPress, Stripe, Zapier и других». Продвигаемые собственные приложения: WordPress, WooCommerce, Shopify и BigCommerce, а маркетплейс фильтруется по категории и по разработчику приложения, что важнее, чем звучит: у приложения от Brevo и у приложения от партнёра совершенно разные пути поддержки.

Сильные стороны. Самый быстрый путь к работающему решению. Аутентификация, базовое сопоставление полей и распространённые события уже настроены. Когда Brevo меняет API, вендор обновляет плагин.

Слабые стороны. Вы получаете то сопоставление, которое выбрал вендор. Кастомные атрибуты, нестандартные объекты и специфичная для магазина логика обычно за его пределами. Отладка ограничена тем, что плагин пишет в лог, а это часто ничего полезного. И если приложение партнёра заброшено, вы узнаёте об этом во время аварии.

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

Вариант 2: универсальные инструменты iPaaS

Zapier, Make и Pabbly Connect поддерживают Brevo. Brevo встраивает Zapier прямо на своей странице интеграций под заголовком «Connect Brevo with your apps, automate your work via Zapier». Make публикует приложение Brevo, модули которого покрывают отслеживание, создание, обновление, вывод списка и удаление контактов, списков, папок, кампаний, событий, писем и SMS. Pabbly Connect указывает Brevo среди поддерживаемых приложений.

Сильные стороны. По-настоящему хороши для длинного хвоста. Форма от вендора, о котором никто не слышал, разовый внутренний инструмент, шаг согласования с человеком посередине: iPaaS закрывает такие задачи за полдня, а поддерживать сценарий сможет не инженер.

Слабые стороны. Тарификация за операцию наказывает за объём. Большинство сценариев работает по одной записи за раз, поэтому дозагрузка 40 000 контактов либо невозможна, либо дорога. Обработка ошибок обычно сводится к «запуск упал, вот письмо», без автоматического повтора и без возможности спросить, какие записи прошлого вторника так и не доехали. Порядок не гарантирован, поэтому обновление может обогнать создание, от которого оно зависит.

Используйте, когда объём небольшой, поток односторонний, а потерянная запись скорее раздражает, чем дорого стоит. Наш обзор лучших интеграционных платформ напрямую сравнивает варианты в этой категории.

Вариант 3: специализированный интеграционный слой

Слой, который стоит между вашими системами и Brevo, владеет сопоставлением и состоянием синхронизации и построен именно под эту задачу, а не под связку «любое приложение с любым».

Tajo является одним из таких вариантов. Сервис описывает себя как AI-команду маркетинга для Brevo, которая подключает поддерживаемые коммерческие данные к Brevo, строит сегменты клиентов по правилам и готовит управляемые email и SMS кампании. На практике компромисс любого специализированного слоя одинаков: вы принимаете его модель контактов, событий и кампаний, а взамен получаете дозагрузку, повторы и видимость по каждой записи, чего не даёт ни плагин, ни универсальный iPaaS. Наше руководство по интеграции с Brevo проводит по настройке от начала до конца.

Сильные стороны. Массовые операции являются первоклассным сценарием. Сбои видны по каждой записи и допускают повтор. Сопоставление задано явно и версионируется, а не спрятано внутри плагина.

Слабые стороны. Ещё один вендор в цепочке и ещё одна вещь, которую надо оценивать. Если вам нужно, чтобы одна форма WordPress отправляла данные в один список Brevo, это тяжёлая техника для мелкой работы. Признайте это честно: нативный плагин здесь лучше.

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

Вариант 4: прямая интеграция через API

Ваш собственный код поверх API Brevo.

Сильные стороны. Потолка нет. Вы точно контролируете разрешение идентичности, батчинг, политику повторов и журнал аудита. Для хранилища данных, которое выгружает смоделированные аудитории в Brevo, это часто единственный подходящий подход.

Слабые стороны. Вы владеете этим навсегда, включая части, которые никто не закладывает в оценку: повторы с экспоненциальной задержкой, хранилище необработанных сообщений, оповещения о дрейфе схемы, ротация учётных данных и регламент действий. Команды закладывают бюджет на счастливый путь и потом тратят втрое больше на всё остальное.

Используйте, когда логика действительно ваша и объём это оправдывает. Начните с нашего руководства по API Brevo, где разобраны детали на уровне эндпоинтов.

Схема принятия решения

Всё решают шесть вопросов. Ответьте на них до того, как смотреть на инструменты.

ВопросНативный плагинiPaaSИнтеграционный слойСобственный API
Объём данныхСколько поддержит вендорНебольшой, тарификация за операциюБольшой, с поддержкой батчейНе ограничен
Направление синхронизацииОбычно в одну сторону, внутрьОдна сторона на сценарийОдна сторона с назначенными владельцамиВсё, что напишете
Требование к задержкеНа усмотрение вендораМинутыПочти в реальном времениНа ваше усмотрение
Сложность сопоставленияФиксированные поляПростое, по сценариюЯвное и версионируемоеПроизвольное
Обработка ошибокЧасто невидимаОповещение при сбоеПовтор и переигровка по каждой записиЧто напишете
Кто чинитВендор плагинаВы, в визуальном редактореВендор, с вашей видимостьюВы, в два часа ночи

Последняя строка является той, которую пропускают, а потом жалеют. Коннектор является долгосрочным операционным обязательством, а не задачей по настройке, поэтому выбирайте вариант, с чьим режимом отказа вы сможете жить.

Схемы синхронизации, которые решают, работает ли всё это

Односторонняя против двусторонней

У односторонней синхронизации один владелец на поле, и она скучна в самом хорошем смысле. Двусторонняя требует подавления циклов, разрешения конфликтов и правила разрешения ничьей, а Brevo с радостью пришлёт вебхук contact_updated на изменение, которое только что записал ваш собственный коннектор.

Не стройте двустороннюю синхронизацию потому, что она звучит мощнее. Составьте вместо этого таблицу владения полями: ваша платформа электронной коммерции владеет данными заказов, ваша CRM владеет стадией жизненного цикла, Brevo владеет согласиями и вовлечённостью. Синхронизируйте каждое поле только в одну сторону. Если движение в обе стороны по полю действительно необходимо, добавляйте метку источника к каждой записи и отбрасывайте входящие события с вашей собственной меткой.

Опрос против вебхуков

Вебхуки дешевле и быстрее, но не гарантированы. Маркетинговые события вебхуков включают delivered, opened, click, hard_bounce, soft_bounce, spam, unsubscribe, contact_updated, contact_deleted и list_addition. Транзакционные вебхуки покрывают жизненный цикл отправки от sent и delivered до deferred, blocked, complaint и error.

Планировать надо две вещи. Во-первых, документация Brevo по вебхукам делает упор на белый список опубликованных IP-адресов Brevo, а не на подпись полезной нагрузки, поэтому считайте эндпоинт неаутентифицированным по умолчанию и подтверждайте всё значимое повторным чтением записи через API. Во-вторых, ни одна система вебхуков не доставляет всё и всегда, поэтому дополните вебхуки редким сверочным опросом, который подберёт всё пропущенное.

Пакетная обработка против реального времени

Реальное время важно для триггеров, поэтому брошенная корзина и приветственные сценарии заслуживают вызовов событий. Для ночного обновления атрибутов оно не имеет значения.

Подбирайте схему под лимиты. Эндпоинты контактов Brevo и эндпоинт POST /v3/events допускают 10 запросов в секунду на стандартных аккаунтах, транзакционная почта допускает 1 000 в секунду, а любой другой эндпоинт ограничен 100 запросами в час. Аккаунты Professional и Enterprise примерно удваивают первый набор. Потолок в 100 запросов в час для «всех остальных эндпоинтов» является самым частым сюрпризом: коннектор, который читает списки или папки на каждой записи, исчерпает его до обеда и начнёт собирать ответы HTTP 429.

Для массовой работы используйте эндпоинт импорта вместо цикла. Он принимает ссылку на файл, тело файла или тело JSON объёмом до 10 МБ при безопасном пределе 8 МБ, работает асинхронно, возвращает processId и вызывает URL уведомления по завершении.

Идемпотентность и идентичность

Эндпоинт событий Brevo принимает event_name, минимум один идентификатор, необязательные свойства контакта и необязательные свойства события объёмом до 50 КБ и возвращает 204 при успехе. Задокументированного ключа идемпотентности нет, поэтому повторный вызов может создать дублирующее событие.

Стройте идемпотентность сами. Выводите детерминированный ключ из исходной записи и её версии, храните отправленные ключи и проверяйте их перед отправкой. Для контактов выберите один основной идентификатор, заполняйте ext_id из идентификатора исходной системы и используйте updateEnabled для upsert, чтобы повтор обновлял, а не падал с ошибкой.

Проектирование повторной синхронизации, которой можно доверять

Повторная синхронизация вам понадобится. Проектируйте под неё с первого дня.

  • Делайте каждую запись идемпотентной, чтобы повтор был безопасным, а не разрушительным.
  • Держите курсор для каждого типа объекта и храните его вне памяти коннектора.
  • Тестируйте повторную синхронизацию на одноразовом списке Brevo, а не на настоящем.
  • Оставляйте emptyContactsAttributes в значении по умолчанию false во время импорта. Значение true сообщает Brevo, что пустые поля должны стирать существующие значения, и это превращает частичную выгрузку в безвозвратную потерю данных.
  • Логируйте результат по каждой записи. «Задача выполнена» не является результатом, когда 400 из 40 000 записей не прошли валидацию.

Что реально ломается в бою

Дрейф сопоставления полей

Кто-то переименовывает метаполе Shopify или добавляет обязательное поле в оформление заказа. Коннектор продолжает работать и продолжает рапортовать об успехе, потому что Brevo игнорирует атрибуты, которых не знает. Через несколько недель сегмент тихо оказывается наполовину пустым.

Что делать. Снимайте слепок схемы источника и списка атрибутов Brevo, сравнивайте их по расписанию и оповещайте о расхождении. Оповещайте также о падении доли непустых значений по атрибутам, а не только об ошибках.

Дубли контактов

Классическая причина: два коннектора с двумя идентификаторами. Плагин магазина создаёт контакты по email, поток SMS создаёт их по телефону, и один человек превращается в две записи с разорванной историей вовлечённости.

Что делать. Один основной идентификатор, соблюдаемый везде. Заполняйте ext_id из исходной системы, чтобы у вас всегда был устойчивый ключ связи. Применяйте forceMerge как осознанный шаг очистки, понимая, что он удаляет более старую запись, а не как рутинную настройку.

Циклы синхронизации

Коннектор A пишет в Brevo, Brevo отправляет contact_updated, коннектор B пишет обратно в источник, источник генерирует собственное событие изменения, и цикл повторяется. Обычно лимиты запросов вскрывают это раньше, чем вы заметите сами.

Что делать. Метки источника на каждой записи плюс счётчик изменений по каждой записи, который поднимает тревогу при превышении порога в заданном окне времени.

Лимиты запросов и частичные сбои

Превышение лимита возвращает 429. Опасен не сам 429, а батч, где часть записей прошла, а часть нет, и коннектор либо считает весь батч упавшим и повторяет его, либо считает успешным и теряет сбои.

Что делать. Повторы с экспоненциальной задержкой и джиттером, уважение любой подсказки о повторе и учёт результата по каждой записи, а не по батчу. Отправляйте сбои в хранилище необработанных сообщений вместе с полной полезной нагрузкой, чтобы их можно было повторить после исправления.

Тихая потеря данных

Худшие сбои являются тихими: импорт с пустой колонкой и emptyContactsAttributes в значении true, атрибут, которого больше нет, из-за чего его значения испаряются, эндпоинт вебхука, час отдающий 500, и никто не смотрит.

Что делать. Следите за количествами, а не только за ошибками. Созданные контакты в день, полученные события в час, доля заполненности атрибутов. Метрика, ушедшая в ноль, является самым понятным оповещением, которое вы когда-либо получите.

Две системы, которые не сходятся

Рано или поздно ваш источник говорит 18 400 активных контактов, а Brevo говорит 18 062. Без сверки вы не поймёте, кто прав.

Что делать. Запускайте плановую сверку, которая сравнивает количества и выборку записей по идентификатору, и формируйте отчёт о расхождениях. Устраняйте причины, а не переимпортируйте данные по кругу, потому что повторный импорт прячет расхождение, ничего не объясняя.

Типичные подключения на практике

Электронная коммерция. Shopify и WooCommerce являются двумя тяжеловесами, и у обоих есть собственные приложения в маркетплейсе Brevo. Нативный путь хорошо справляется с контактами и базовыми данными заказов. Кастомная логика по позициям заказа, состояние подписок и уровни лояльности обычно в него не вписываются, и здесь своё место зарабатывает слой или собственный код. Наше руководство по интеграции Brevo и Shopify подробно разбирает именно эту связку.

CMS. WordPress является самым частым подключением к Brevo за пределами электронной коммерции, обычно ради форм, подписки на рассылку и транзакционной почты через SMTP Brevo. Здесь путь через плагин почти всегда верен, поскольку модель данных проста, а объём невелик.

CRM и хранилище данных. Здесь коннекторы становятся сложными, потому что обе стороны считают, что владеют клиентом. Используйте таблицу владения полями, синхронизируйте каждое поле в одну сторону и подумайте о том, чтобы выгружать смоделированные аудитории из хранилища в списки Brevo, а не синхронизировать сырые записи. Как в эту картину вписываются собственные объекты CRM в Brevo, смотрите в нашем руководстве по CRM в Brevo.

Формы. Идеальный случай для iPaaS: малый объём, одно направление, терпимость к задержке. Не переусложняйте.

Как сделать правильно

Выбор коннектора является в основном вопросом эксплуатации, а не функций. Любой вариант умеет переместить контакт из A в B. Различаются они тем, что произойдёт в день, когда сопоставление уплывёт, лимит запросов сработает или 400 записей не пройдут валидацию внутри импорта на 40 000 записей.

Проработайте это в таком порядке:

  1. Запишите, какая система владеет каким полем. Всё остальное следует отсюда.
  2. Выберите один основной идентификатор контакта и заполняйте ext_id из исходной системы.
  3. Выбирайте самый лёгкий вариант, который переживёт ваш объём и ваше требование к обработке ошибок, а не самый функциональный.
  4. Постройте повторную синхронизацию и отчёт о сверке до запуска, а не после первого инцидента.
  5. Следите за количествами и заполняемостью полей, потому что тихая потеря встречается чаще громкого сбоя.

Сделайте эти пять вещей, и заработает любой из четырёх подходов. Пропустите их, и не заработает ни один.

Похожие статьи

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

Что такое коннектор Brevo?
Коннектор Brevo: это всё, что перемещает данные между Brevo и другой системой. У него три части: транспорт (вызовы API или вебхуки), сопоставление полей и учёт состояния синхронизации. Плагины, сценарии iPaaS, интеграционные слои и собственный код являются просто разной упаковкой этих трёх частей.
Есть ли у Brevo официальные коннекторы?
Да. Brevo ведёт маркетплейс приложений, который описывает как связывающий Brevo с более чем 150 цифровыми инструментами, и продвигает собственные приложения для WordPress, WooCommerce, Shopify и BigCommerce. Всё, чего нет в маркетплейсе, подключается через REST API и вебхуки.
Что выбрать: Zapier или собственную интеграцию с Brevo?
Zapier или похожий iPaaS подходит, когда объём небольшой, поток односторонний, а потеря отдельной записи не критична. Переходите на интеграционный слой или собственный код, когда нужны дозагрузка исторических данных, повторная отправка сбойных записей, двусторонняя синхронизация или аудит по каждой записи.
Почему в Brevo постоянно появляются дубли контактов?
Почти всегда потому, что два коннектора используют разные идентификаторы. Brevo принимает email, SMS или ext_id в качестве идентификатора, поэтому контакт, созданный по email в одном потоке и по телефону в другом, превращается в две записи. Выберите один основной идентификатор, заполняйте ext_id из исходной системы и применяйте forceMerge осознанно, а не случайно.
Как работают вебхуки Brevo?
Brevo поддерживает маркетинговые и транзакционные вебхуки, которые настраиваются в панели управления или через эндпоинты создания и обновления вебхука. Маркетинговые события включают delivered, opened, click, hard_bounce, unsubscribe, contact_updated, contact_deleted и list_addition. На аккаунт разрешено не более 40 вебхуков суммарно по обоим типам.
Какие лимиты у API Brevo?
На стандартных аккаунтах эндпоинты контактов и эндпоинт событий допускают 10 запросов в секунду, транзакционная почта допускает 1 000 запросов в секунду, а всё остальное ограничено 100 запросами в час. На тарифах Professional и Enterprise потолки выше. Превышение лимита возвращает HTTP 429.
Может ли Brevo синхронизироваться с CRM в обе стороны?
Brevo умеет и принимать записи, и отправлять вебхуки contact_updated, так что технически двусторонняя синхронизация возможна. На практике она редко оправдана. Назначьте одну систему владельцем каждого поля и синхронизируйте остальное в одну сторону, иначе понадобятся подавление циклов и правила разрешения конфликтов, которые большинство команд так и не пишет.
Как повторно залить данные в Brevo и ничего не сломать?
Используйте асинхронный эндпоинт импорта: он принимает ссылку на файл или тело JSON объёмом до 10 МБ и возвращает processId. Оставьте emptyContactsAttributes в значении по умолчанию false, чтобы пустые колонки не стирали существующие значения, и прогоняйте повторную загрузку сначала на тестовом списке, а не на боевом.

Подайте заявку на ранний доступ

Укажите имя, а также email или номер телефона. Мы отправим Вам информацию о доступе к Tajo.

определим автоматически
Получить Brevo