Как организовать уведомления в Telegram с различными интервалами для каждого пользователя?
Я генерировал раписания постов для каждого пользователя, когда стояла аналогичная задача.
Пользователь регистрируется у бота, и в этот момент для существующих в БД постов к рассылке генерируется расписание для данного пользователя. Далее кроном дергается скрипт, который проверяет, есть ли на данный момент расписание для рассылки, и отправляет сообщения. 
Не уверен в оптимальности такого решения, но в моем случае получилось достаточно гибко.
Можно попробовать сделать нечто аналогичное.
Предполагаю, что в БД должны быть следующие поля: дата подписки и интервал оповещений (1 день, 7 дней, 30 дней и тд)
Запускать скрипт по крону раз в сутки и выбирать только тех юзеров, у которых разница в днях между датой подписки и настоящей датой кратна интервалу подписки:
DATEDIFF(DAY, '2020-03-11T15:12:13', GETDATE()) / 7 = 1