Я пишу телеграмму ботом с php. Я сохраняю пользователей chatid для отправки сообщения; используйте эту команду для отправки сообщения:
/admin sendall:hellow
и в приложении php используйте этот код:
case '/admin': if ($chat_id == 'my chatid') { $array = str_replace('/admin', '', $message); $array = trim($array); $array = explode(':', $array); $Admin = new AdminCommand(); $Admin->getCommand($array[0], $array[1]); } else { sendMessage($chat_id, 'block '); } break;
Класс AdminCommand:
class AdminCommand extends Database { public function getCommand($command, $action = null) { switch ($command) { case 'sendall': $this->sendall($action); break; default: # code... break; } } public function sendall($message) { $sql = $this->con->prepare('SELECT * FROM `users`'); $sql->execute(); $res = $sql->fetchAll(); foreach ($res as $row) { sendMessage($row['chatid'], $message); } exit(); } }
Функция sendMessage:
function sendMessage($chatId, $message) { $url = WEBSITE . "/sendMessage?chat_id=" . $chatId . "&text=" . urlencode($message); file_get_contents($url); }
В большинстве случаев он работает нормально, но иногда после отправки сообщения всем пользователям повторяется снова и снова и не останавливается. Пока я удаляю базу данных. в чем проблема ?
Как я объяснил в этом ответе и на странице FAQ Bots на сайте телеграммы:
Как я могу сразу сообщить всем своим подписчикам бота?
К сожалению, на данный момент у нас нет методов отправки массовых сообщений, например уведомлений. Мы можем добавить что-то в этом направлении в будущем.
Чтобы избежать попадания в наши пределы при отправке массовых уведомлений, подумайте о распространении их на более длительные интервалы, например, 8-12 часов. API не будет разрешать более 30 сообщений для разных пользователей в секунду, если вы перейдете к этому, вы начнете получать 429 ошибок. Вы не можете отправить сообщение таким образом всем пользователям.
и решение на странице часто задаваемых вопросов:
Мой бот поражает пределы, как я могу избежать этого?
При отправке сообщений внутри определенного чата избегайте отправки более одного сообщения в секунду. Мы можем разрешить короткие всплески, которые превышают этот предел, но в итоге вы начнете получать 429 ошибок.
Если вы отправляете массовые уведомления нескольким пользователям, API не будет разрешать более 30 сообщений в секунду или около того. Рассмотрите возможность распространения уведомлений на большие интервалы в 8-12 часов для достижения наилучших результатов.
Также обратите внимание, что ваш бот не сможет отправлять более 20 сообщений в минуту в одну группу.