Laravel. Как реализовать расписание для уведомлений? - PullRequest
0 голосов
/ 29 октября 2019

Допустим, я создал в своем приложении какой-то тикет, а затем вызвал событие TicketCreated. Это событие имеет метод broadcastOn. Там я выбираю всех пользователей-администраторов и отправляю им сообщения в реальном времени (на персональные каналы с именами channelname + user_id), в которых написано «тикет создан». Это часть функциональности в реальном времени.

Далее - у меня есть два прослушивателя событий.

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

Notification::send($allowedUsers, new DatabaseNotification(...)); // where DatabaseNotifications using custom databasechannel for custom users table, not native Laravel's table. 

Second - viberNotificationListener. Здесь я получаю всех зарегистрированных пользователей-администраторов, которым могу отправлять уведомления от viber, а затем отправляю их.

Часть вопроса.

Мой билет может быть задержан при исполнении. Например, помеченный тип является «обратным вызовом», это означает, что любой сотрудник должен совершать звонок клиенту в определенное время, указанное в тикете. Мне нужно как-то запланировать это. У меня есть два случая (я еще не решил, что именно буду использовать, поэтому я упомяну оба): 1) В первом случае я хочу, чтобы все, что я описал выше, имело место, и я хочу билет по расписанию. 2) Я не хочу, чтобы пользователи с правами администратора видели какие-либо уведомления до запланированных дней.

Логика следующая: после того, как тикет создан, он сохраняется в базе данных (со своим расписанием), любой администратор может зайти на страницу тикетов в веб-приложении и просмотреть полный список. И все эти администраторы должны видеть уведомления об этом тикете в определенный день и время.

Допустим, время билета 15:00 первого дня месяца. Пользователи, которые включили свои компьютеры и вошли в приложение, должны видеть сообщение в режиме реального времени (трансляционные события Laravel) и уведомление базы данных также должны быть созданы. Пользователи, которые вошли в систему после, должны видеть то же самое сообщение в реальном времени, когда они вошли в систему.

Я хочу, чтобы все работало, используя систему уведомлений Laravel (я могу просто показывать пользователю уведомления, просто проверяя таблицу заявок каждый раз, когда пользователь запускаетприложение, но не хочу).

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

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

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

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

Notification::send($allowedUsers, ...)->delay($when);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...