Skip to content

leestarch/milavitsa-dev-demo

Repository files navigation

Установка

composer dump-autoload php artisan db:seed php artisan schedule:run или php artisan schedule:work

Для тестов отправки номер телефона и емейл захардкожен мой, места можно найти по TODO: delete next line

В общих чертах алгоритм таков: -по расписанию раз в минуту создается список сообщений на отправку для рассылок, чей срок подошел Канал выбирается первый в очереди для рассылки и настроек клиента (настройки клиента - заглушка ввиде геттера аттрибута)

-Email высылаются сразу по SMTP. Шаблоны емейлов тут resources\views\emails\mailing (протестировано). Результат отправки выставялется сразу. В шаблоне подставляется картинка-пиксель для отслеживания окрытиия. Статус проставляется (протестировано)

-Телеграм высылается сразу с использованием существовавшего метода в helpers (не протестировано). Результат отправки выставляется сразу.

-SMS и Whatsapp отправляются пачками по 1000 за итерацию на idigitl и встают в статус "отправляются" и по мере поступления коллбеков от сервиса статус сообщений обновляется. Для Whatsapp передается выбранный шаблон. Шаблон пока в config. Так же передается разрешенное время доставки. (не протестировано - доведено до ответа сервиса "вам не присвоено имя для отправки", коллбеки протестировал с помощью postman)

Во всех каналах перед отправкой сообщения клиент проверяется на "черный список" и если он в нем - задается соотв. статус

При ошибке отправки или коллбеке, свидетельсвующем о "недоставке" или ошибке срабатывает $message->queueNext(); - планирует сообщение следующий по порядку канал при его наличии

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

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

Менять рассылки, которые начались или завершились - нельзя. Если запланирована но не началась - можно.

Можно создавать копии рассылок с любым статусом.

Короткие ссылки

Короткие ссылки - проставляются автоматом в текст - сейчас стоит только в email. В другие каналы при необходимостии копипастим - привязка идет к ID сообщения, так что все будет работать. $text = LinkCounter::shortenLinks($message->mailingList->text, $message->id); В SMS/Whatsapp это может поменять длину итоговорого сообщения!

Адрес формируется как /shorturl/{slug}/{message_id} $link->slug = base_convert($link->id, 10, 36); - то есть получится весьма коротко

Стастистика

Сделаны срезы по статусам доставки, статусам открытия, октрытым ссылкам. Далее на основе любого канала + статуса можно формировать сегмент (не реализовано, совместить с формой создания сегмента)

Автоматические сегменты

Сделано пока ввиде заглушки - обычный сегмент с статусом авто (помечено в списке) Думаю, лучше будет не делать копии сегментов на момент "планирования". Это и сложнее, и создаст накладку по времени. При отправке, максимально близко к этому событию сегмент считывается. То есть при сценариии - запланирована рассылка наовогоднего поздравления выбранным сотрудникам - автоматический сегмент обновляем при добавлении сотрудника, а при рассылке читаем состояние сегмента в момент отправки.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published