Тут больше подходят брокеры сообщений.
Но если вообще влом - есть более простое решение)
Делаешь сам мини-брокер. =)
Делаешь таблицу с сообщением в телеграм.
Делаешь таблицу с пользователями.
В таблице с сообщениями:
… всякие поля …
- статус - new/done
В таблице с пользователями:
… всякие поля …
- статус - new/done
——————
Когда формируешь сообщение - то не сразу отправляешь, а записываешь в базу и статус “new”
И формируешь список получателей этого сообщения в таблицу с пользователями с статусом “new”.
и потом, у тебя должен быть последний игрок - крон.
Например, он запускается каждую минуту.
Смотрит - если есть сообщения со статусом “new” - берет для него пачку пользователей типо 500 аккаунтов и ставим им статус “done”.
И отправляем им сообщения.
Если пользователи не найдены - ставим сообщению тоже статус “done”.
Самая главная тут проблемма - а что если мы поставили статус done пользователю, но в скрипте была ошибка и сообщение не отправилось… но тут уже сам придумай)