Расписываю алгоритм как это делал я:
1. Создается бот.
2. Если пользователь хочет подписаться на что-то, он должен авторизоваться в боте.
3. Создаете ему ключ, создаете команду, например /auth {key}
, где key - ключ пользователя.
4. Бот принимает сообщение с ключем, выделяет его и по данному ключу находит id пользователя у вас на сайте, для него сохраняет полученный от этого пользователя chat_id (когда пользователь отправляет вам сообщение в первый раз).
5. Все, теперь вы храните chat_id пользоваетелей и можете любому из них отправлять сообщения ботом.
Следующая задача: выбирать что отправлять и как отправлять.
6. Пользователь подписывается например, на категорию. Вы должны в таблице, например user_subscribes хранить user_id и category_id. Затем когда в категории с id = category_id у вас постится публикация, из этой таблицы вы берете все user_id, с category_id = категории, в которой появился пост. Если такие пользователи есть, то по их user_id получаете chat_id, на данные chat_id через цикл, с паузой (апи телеграма позволяет только определенное кол-во запросов в минуту), отправляете сообщения, с помощью метода api телеграмма, sendMessage по-моему.
7. На этом все. Ваш бот будет отправлять сообщения только тем, кто подписывался на данные материалы.
Делал подобный функционал давно на laravel, возможно сейчас есть более адекватные варианты.