Ваш вопрос тянет на полноценное ТЗ, нужно декомпозировать задачи, уточнить всё и уже потом решать, как делать.
Конкретно эта часть
Пользователю по api пришел тег. А для этого тега есть автоматизация:
Подождать 30 минут
Отправить письмо на почту
Подождать 30 минут
Отправить другое письмо на почту
Отправить сообщение в чат
Решается тем, что по событию "Пользователю по api пришел тег" в таблице задач создаются записи с "расписанием" - полем, когда она должна отработать. Крон опрашивает таблицу каждую минуту (или чуть реже), смотрит, пришло ли время забирать запись и обрабатывает ее. Обработку можно вынести в очереди сообщений, чтобы не страдать с тем, что старые задачи скриптом еще не обработались, а нужно уже новые брать.