Отправка сообщений всем пользователям в боте, данные берутся из бд, если в базе находятся человек допустим 500, то при созданий рассылки, возникает неопределенная ошибка и бот начинает примерно со с 100 отправленных сообщений запускать цикл заново, опять же идет отправка этого же сообщения с 1 пользователя, код выглядит обычно, вот:
$users = R::findAll('users');
foreach($users as $users_a){
$this->sendMessage($users_a['chat_id'], "сообщение рассылки");
}
Какие варианты рассылки еще есть, чтобы обойти данную ошибку.
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.
Рассылку запускаете с бота?
да
Тогда:
1. скрипт падает по лимиту времени или памяти (что редко)
2. телеграм получает ошибку и делает повторный запрос на скрипт
Решение:
1. выставьте лимиты для скрипта больше текущих в идеале безлимит по времени (
set_time_limit(0)
)2. перед запуском рассылки уведомите телеграм что нажатие кнопки отработано (
answerCallbackQuery
)спасибо, буду пробывать)
По пробывал, все также, на 154 передачи сообщения, начинается новый цикл отправки, но и старый не останавливается, скрипт еще раз запустился, вот кусок кода и функция answerCallbackQuery
А также установил ini_set('set_time_limit', 0);
// ... if($atext[0] == "/email"){ $buttons[] = [ $this->buildInlineKeyBoardButton("Отправить", "/start_activ"), ]; $this->sendMessage($chat_id, "Нажмите для отправки", $buttons); return; } if($atext[0] == "/start_activ"){ $this->answerCallbackQuery($callback_query_id, "Началась рассылка"); $users = R::findAll('users'); foreach($users as $users_a){ $this->sendMessage($users_a['chat_id'], "Текст"); } } return; } function answerCallbackQuery($callback_query_id, $text) { $content = [ 'callback_query_id' => $callback_query_id, 'text' => $text, 'show_alert' => true, ]; // отправляем запрос $this->requestToTelegram($content, "answerCallbackQuery"); }
Посмотрите логи, на чем падает скрипт