← Вернуться к списку тем

Рассылка

Отправка сообщений всем пользователям в боте, данные берутся из бд, если в базе находятся человек допустим 500, то при созданий рассылки, возникает неопределенная ошибка и бот начинает примерно со с 100 отправленных сообщений запускать цикл заново, опять же идет отправка этого же сообщения с 1 пользователя, код выглядит обычно, вот:

$users = R::findAll('users');
foreach($users as $users_a){
    $this->sendMessage($users_a['chat_id'], "сообщение рассылки");
}

Какие варианты рассылки еще есть, чтобы обойти данную ошибку.

Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.

  • iMakeBots [1 год назад]

    Рассылку запускаете с бота?

  • Андрей Разработчик [1 год назад → iMakeBots]

    да

  • iMakeBots [1 год назад → Андрей Разработчик]

    Тогда:
    1. скрипт падает по лимиту времени или памяти (что редко)
    2. телеграм получает ошибку и делает повторный запрос на скрипт

    Решение:
    1. выставьте лимиты для скрипта больше текущих в идеале безлимит по времени (set_time_limit(0))
    2. перед запуском рассылки уведомите телеграм что нажатие кнопки отработано (answerCallbackQuery)

  • Андрей Разработчик [1 год назад → iMakeBots]

    спасибо, буду пробывать)

  • Андрей Разработчик [1 год назад → iMakeBots]

    По пробывал, все также, на 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");
    }
  • iMakeBots [1 год назад → Андрей Разработчик]

    Посмотрите логи, на чем падает скрипт