@lucifer_jr

Когда шлю длинное сообщение в цикле средствами VK API, цикл ведет себя нелогично. Почему?

foreach ($arr_for_send as $value) {
sleep(10);
send($data->object->user_id, $value);
}
но бот заваливает меня сообщениями, пересылая одно и тоже десятками раз
  • Вопрос задан
  • 251 просмотр
Решения вопроса 1
erniesto77
@erniesto77
oop, rb, py, php, js
скорее всего функция send ничего не возвращает, надо всегда возвращать статус 200 ok

в конце функции send что-то вроде
public function send($user_id, $value) {

    ...

   return header("HTTP/1.1 200 OK");
}


UPDATE: значит проблема в том что при задержке в несколько секунд многие api расценивают это как неудачный ответ и пытаются получить ответ снова и снова.

Возможное решение:
Надо перед каждой задержкой в кеше ставить метку, что приложение заморожено и внутри функции send или после задержки размораживать приложение, удаляя эту метку. Пример
if (Cache::has('app_delayed')) {
    return 'ok';
}

foreach ($arr_for_send as $value) {

    Cache::put('app_delayed', true);
    sleep(10);
    Cache::forget('app_delayed');

    send($data->object->user_id, $value);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vkapi
@vkapi
Ответ на запрос сервер должен получать сразу. Если ответа долго нет, запрос считается неудачным и повторяется снова. Поэтому нужно либо сократить время выполнения скрипта, например с помощью execute, либо просто отвечать 'ok', записывать событие в базу, а затем уже другим скриптом обрабатывать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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