Как мы строили интеграцию с сервисом рассылок: RabbitMQ, вебхуки и CRON
faizovagulshat 2 минуты назад Как мы строили интеграцию с сервисом рассылок: RabbitMQ, вебхуки и CRON Средний 4 мин 4 Микросервисы * Кейс ВведениеКогда мы проектировали интеграцию CRM-системы с внешним сервисом...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. faizovagulshat 2 минуты назад Как мы строили интеграцию с сервисом рассылок: RabbitMQ, вебхуки и CRON Средний 4 мин 4 Микросервисы * Кейс ВведениеКогда мы проектировали интеграцию CRM-системы с внешним сервисом рассылок, задача казалась типовой: пользователь создаёт сообщение или рассылку - и оно уходит через провайдера. Но когда мы начали погружаться в детали, стало понятно: всё решает не API, а архитектура. Как не потерять ни одно сообщение?
Как не упасть под нагрузкой массовой рассылки? Как понять, что сообщение действительно доставлено? В этой статье я расскажу, как мы строили интеграцию с сервисом рассылок, почему выбрали микросервисную архитектуру, зачем понадобились вебхуки и очереди, и как CRON стал нашим спасательным кругом.
Технические детали
Задача и контекстВ CRM-системе пользователь может:создать одиночное SMS-сообщение в CRM (из карточки документа, из формы документа, из раздела «Сообщения»)создать одиночное email-письмосоздать массовую SMS- или email-рассылкуВсе эти сообщения должны отправляться через внешнего провайдера - сервис, который специализируется на доставке. Где в CRM это доступноОдиночные сообщения отправляются из формы документа, из раздела «Сообщения» в блоке CRM или из карточки документаРассылки создаются в разделе «Рассылки» (подраздел «Сообщения и рассылки»)Также сообщение может отправляться автоматически при назначении специального статуса документаПочему не только REST APIМожно было бы сделать прямую интеграцию: CRM → API провайдера. Но мы столкнулись с ограничениями:провайдер мог не принять запрос из-за нагрузкиCRM не должна была тормозить из-за внешних вызововнужно было гарантировать доставку даже в случае сбоевПоэтому мы решили строить интеграцию на микросервисной архитектуре с использованием очередей.
Архитектура интеграцииМикросервис-посредникМы выделили отдельный микросервис - интеграционный модуль, который:подписывается на вебхуки от CRMотправляет данные в провайдеротслеживает статусы сообщений и рассылокобновляет статусы в CRMЭто позволило нам не трогать ядро CRM при изменениях в интеграции. Любые доработки касались только микросервиса. Вебхуки - основной каналCRM отправляет вебхуки при создании сообщения или рассылки.
Микросервис подписывается на них и обрабатывает. Какие модели используются:sms - для одиночных SMS-сообщенийsenders - для массовых рассылокПочему вебхуки: это асинхронный способ передачи данных. CRM не ждёт ответа - она просто уведомляет микросервис, и тот начинает обработку.
Отраслевые последствия
CRON - как резервный каналМы столкнулись с тем, что вебхуки иногда не доходят. Причины разные: сеть, перегрузка, ошибки на стороне провайдера. Решение: добавили CRON-задачу, которая каждые 3 часа проверяет наличие новых сообщений и рассылок, которые не были обработаны через вебхуки.
Почему 3 часа: это компромисс между оперативностью и нагрузкой на систему. Сообщение не должно потеряться, но и проверять каждую минуту - избыточно.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





