Пишу бота для вк. Для отправки сообщений, клавиатур и прочих функций использую библиотеку vk_api. Сами функции рабочие и по отдельности работают без нареканий. Однако возникает проблема когда пытаюсь в одном кейсе вызвать поочерёдно две функции. Срабатывает только та, что идёт первой, а последующая игнорируется. В чём может быть проблема? Вот сам код бота PHP: <?php include "vk_api.php"; include "buttons.php"; const VK_KEY = "Тут токен"; // Токен сообщества const ACCESS_KEY = "Тут ключ"; //ключ из сообщества const VERSION = "5.102"; // Версия API VK $vk = new vk_api(VK_KEY, VERSION); $data = json_decode(file_get_contents('php://input')); // ====== Наши переменные ============ $peer_id = $data->object->peer_id;// Узнаем ID пользователя, кто написал нам $message = $data->object->text; // Само сообщение от пользователя $random_id = rand(0,9999); // ================== switch ($data->type) { case 'confirmation': exit(ACCESS_KEY); break; case 'message_new': switch (mb_strtolower($message)){ case 'привет': $vk->sendButton($peer_id, "Вот список кнопок, выбирайте :-)", [[BTN_BACK], [BTN_HIDE]], $random_id); // вызов кнопок $vk->sendMessage($peer_id, "Вы выбрали кнопку, любой ответ на это событие", $random_id); break; case 'пока': $vk->sendButton($peer_id, "Вот список кнопок2, выбирайте :-)", [[BTN_NAVIGATE, BTN_QA], [BTN_3], [BTN_HIDE]], $random_id); // вызов кнопок break; } echo('ok'); break; } ?> Описание двух использованных функций: Функция sendMessage PHP: public function sendMessage($sendID,$msg,$random_id){ if ($sendID != 0 and $sendID != '0') { return $this->request('messages.send',array('message'=>$msg, 'peer_id'=>$sendID, 'random_id'=>$random_id)); } else { return true; } Функция sendButton PHP: public function sendButton($sendID, $message, $gl_massiv = [],$random_id, $one_time = False) { $buttons = []; $i = 0; foreach ($gl_massiv as $button_str) { $j = 0; foreach ($button_str as $button) { $color = $this->replaceColor($button[2]); $buttons[$i][$j]["action"]["type"] = "text"; if ($button[0] != null) $buttons[$i][$j]["action"]["payload"] = json_encode($button[0], JSON_UNESCAPED_UNICODE); $buttons[$i][$j]["action"]["label"] = $button[1]; $buttons[$i][$j]["color"] = $color; $j++; } $i++; } $buttons = array( "one_time" => $one_time, "buttons" => $buttons); $buttons = json_encode($buttons, JSON_UNESCAPED_UNICODE); //echo $buttons; return $this->request('messages.send',array('message'=>$message, 'peer_id'=>$sendID, 'keyboard'=>$buttons,'random_id'=>$random_id)); } Ну и сам ответ бота, где видно только то, что он присылает кнопки, но последующего сообщения нет
Какие? Может их нужно в одну объединить. Лучше глянуть в документацию от vk по боту на счёт твоего случая
Вот эти две, sendButton и sendMessage Не представляю как их можно объединить в одну, а по поводу таких ситуаций в документации ничего нет, по крайней мере я не видел PHP: case 'привет': $vk->sendButton($peer_id, "Вот список кнопок, выбирайте :-)", [[BTN_BACK], [BTN_HIDE]], $random_id); // вызов кнопок $vk->sendMessage($peer_id, "Вы выбрали кнопку, любой ответ на это событие", $random_id); break;
Попробуй сформировать правильный запрос сам и отправить через Postman например, чтобы проследить реакцию. Те команды которые не отрабатывают, ответ от vk на них какой?
Те что не отрабатывают, на них нет никакого ответа. В Callback приходит json от выполненного запроса, однако тот, что идёт следом, он просто пропускает, будто просто выходит из этого case. Через If else также, вот пробовал, не вышло
Окей, проблема найдена, оказывается всё решалось достаточно легко. Ошибка в том, что в каждом методе использовался один и тот же random_id, от