Схема работы каналов коммуникации
Общая структура
При запуске кампании запускается бинарный файл campaign, который:
- обрабатывает шаблон и бизнес-логику (стоп-списки, лимиты, подписки, фильтры и т.д.);
- формирует структуру сообщений для отправки;
- направляет готовые сообщения в очереди RabbitMQ;
- фиксирует ошибки в журнале кампании.
Далее каждое сообщение попадает в соответствующий сервис обработки в зависимости от канала.
Email
Для email-канала поддерживается несколько видов сендеров (отправщиков): AKMTA (сендер Altcraft) и внешние сендеры. В зависимости от используемого сендера, схема работы может отличаться.

Процесс отправки
AKMTA
Кампания отправляет сообщения в очереди:
akmta_<sender_id>— обычная очередь;akmta_prior_<sender_id>— приоритетная очередь;geo_akmta_<sender_id>— очередь рассылки по часовому поясу. Она приоритетнее обычной очереди, но менее приоритетнаakmta_prior. Используется для того, чтобы даже при высокой нагрузке на платформу клиент получал коммуникации в пределах выбранного часа в его часовом поясе.
Из очередей сообщения обрабатывает сервис akmtad. Дальнейшее поведение процесса akmtad зависит от приоритетности сообщения:
- Для неприоритетных со общений — сохраняет сообщения на диск, периодически читает и отправляет их по стратегии отправки, заданной для конкретного
sender_id; - Для приоритетных — производит попытку немедленной отправки. Если установлены правила повторной отправки, то при неудаче сообщение будет сохранено на диск.
На диске сообщения попадают в очередь spool. Отправка оттуда происходит в соответствии с правилами сендера, платформа "читает" spool с периодичностью равной MTA_EXCHANGE_SCAN_PERIOD. Обратите внимание, что эти сообщения больше не хранятся в RabbitMQ.
Схема отправки выглядит следующим образом:
campaign —> Очередь RMQ (akmta / akmta_prior) —> akmtad —> (при неудаче — запись в очередь spool на диске ) —> SMTP
Остальные сендеры
Отправка происходит от бинарного файла campaign через внешний HTTP-запрос. Если платформа не может отправить сообщение, то регистрируется ошибка кампании. Обратите внимание, что подобная ошибка не засчитывается как "Недоставка" и в отчет по недоставкам не вносится.
Регистрация статусов
AKMTA
Статусы доставки регистрируются сразу по:
- коду ответа SMTP-сервера;
- bounce-паттернам (анализ шаблонов возвратов).
Остальные сендеры (#other-status)
Cтатус события обрабатывают трекинг-сервисы платформы.