@den94ka

Как отправлять сообщения чаще чем раз в минуту в Telegram на PHP?

Дано: у меня есть бот в Telegram. Он рассылает сообщения пользователям раз в определенное время. Обычно раз в сутки.
Схема работы такая:
Пользователь регистрируется, ему отправляется сообщение и считается время следующей отправки (дата регистрации + 86400 (день в секундах)). Оно хранится в базе данных.
Есть cron скрипт, выполняется каждую минуту. Есть суть простая:
1. Выбрать из базы данных всех пользователей, у которых время отправки следующего сообщения меньше, чем сейчас Unix время.
2. Отправить им сообщение по очереди через цикл

Если у сообщений разница в отправке хотя бы в минуту - две - все отлично.
Вопрос в следующем:
Я хочу сделать несколько сообщений в минуту. Просто есть некоторые сообщения, которые нужно отправить буквально друг за другом (с разницей в 10-15 секунд). Просто если делать им разницу в минуту, то они отправляются в среднем через 70-100 секунд (все зависит от количества пользователей в очереди и тд).
В общем, пользователь теряет фокусировку и ему надоедает ждать больше минуты следующего сообщения.

Думал сделать через sleep. Но в таком случае задержка отражается на работе всего бота - не знаю почему. Он начинает с задержкой откликаться на кнопки и тд.

Как возможно решить этот вопрос?
  • Вопрос задан
  • 655 просмотров
Пригласить эксперта
Ответы на вопрос 1
@linkinkov
Через sleep точно такое себе решение. Если у вас монолитный скрипт, советую работу с кроном вынести отдельно и использовать его в потоке (react-php, примеров с ним очень много), а лучше вообще накидать простенький сервис на js, который сам будет слушать постоянно таблицу и отправлять сообщения. У меня также был бот телеграма, я его разделил на три части:
- сам бот (php)
- уведомления (nodejs)
- подписки (php)

Уведомления, как раз таки были на том, что слушалась таблица и при ее изменении отправлялись уведомления.
Подписки как и у вас были сделаны на кроне, запуск раз в пол часа
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы