KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Как создать бота Вконтакте с кнопками (keyboard)

Статьи / PHP


В этой статье мы рассмотрим как просто и быстро создать кнопки для управления ботом. Кнопки упрощают использование бота и делают управление им удобнее, чем писать текстовые команды.
Требования:
PHP +5.6
VK API v5.126

Статья обновлена до последней версии API 5.126 на сегодняшний день.

Мы будем использовать библиотеку для работы с API VK, скачать ее можете ниже
simplevk-master.rar

Загружаем папку с файлами на сервер, туда же где будем создавать файл, для работы бота нужен будет сервер, для начала можете использовать бесплатный, на сайте есть статья как запустить вк бота на бесплатном хостинге

Создаем файл с названием bot.php в том же месте, где лежит наша библиотека и начинаем писать следующий код. 

<?php

require_once('simplevk-master/autoload.php');

use DigitalStar\vk_api\VK_api as vk_api; // Основной класс

const VK_KEY = "b48c23e7e4aa9c7c02f61a51aff85b90e59a4c52567f8604***74a9a82b2ccf8258f9b938095be8c5e9d";  // Токен сообщества
const ACCESS_KEY = "be20ea35";  // Тот самый ключ из сообщества 
const VERSION = "5.126"; // Версия API VK

$vk = vk_api::create(VK_KEY, VERSION)->setConfirm(ACCESS_KEY);
// ТУТ НАШИ КНОПКИ ===

$btn_1 = $vk->buttonText('Кнопка 1', 'green', ['command' => 'btn_1']);
$btn_2 = $vk->buttonText('Кнопка 2', 'blue', ['command' => 'btn_2']);
$btn_3 = $vk->buttonText('Кнопка 3', 'red', ['command' => 'btn_3']);
$btn_4 = $vk->buttonText('Кнопка 4', 'white', ['command' => 'btn_4']);

// ===================

$vk->initVars($peer_id, $message, $payload, $vk_id, $type, $data); // Инициализация переменных. Проще говоря библиотека сама создает нужные переменные, а в качестве примера ниже привели как бы пришлось писать переменные без инициализапции

// ====== Наши переменные ============
//$peer_id = $data->object->peer_id;// Узнаем ID пользователя, кто написал нам
//$message = $data->object->text; // Само сообщение от пользователя
// ====== *************** ============


Этот код мы писали ранее, в статье как создать простого бота вк, там же мы рассматривали как его подключать к сообществу. 

Теперь создаем переменные кнопок, в этой статье их будет всего 4, но по этим примерам, Вы с легкостью сможете добавить еще. В коде выше они уже есть

$btn_1 = $vk->buttonText('Кнопка 1', 'green', ['command' => 'btn_1']);
$btn_2 = $vk->buttonText('Кнопка 2', 'blue', ['command' => 'btn_2']);
$btn_3 = $vk->buttonText('Кнопка 3', 'red', ['command' => 'btn_3']);
$btn_4 = $vk->buttonText('Кнопка 4', 'white', ['command' => 'btn_4']);


Рассмотрим их подробнее. 
$btn_1 — Название переменной, далее вызываем функцию из библиотеки и пишем параметры = $vk->buttonText('Кнопка 1', 'green', ['command' => 'btn_1']); btn_1 название кнопки, «Кнопка 1» любой текст в кнопке, может повторятся, «green» цвет кнопки, всего доступно 4 варианта:
green — Зеленый
blue — Синий
red — Красный
white — Белый
Теперь давайте вызовем кнопки и посмотрим как они смотрятся. Создаем проверку события на новое сообщение:


if ($data->type == 'message_new') { // Создаем проверку на новое сообщение и вызываем кнопки

        $vk->sendButton($peer_id, "Вот список кнопок, выбирайте :-)", [[$btn_1, $btn_2, $btn_3, $btn_4]]);
    
        }


Проверим работу в Вконтакте


Кнопки появились, но если на них нажимать, бот снова их будет присылать, давайте привяжем их к определенному тексту, по умолчанию это кнопка Начать, это и будем использовать.

В код добавим переменную которая содержит текст сообщения и будем проверять, если это слово Начать, то покажем кнопки, все другое игнорируется.

if ($data->type == 'message_new') { // Создаем проверку на новое сообщение и вызываем кнопки

    if ($message == 'Начать') {
        $vk->sendButton($peer_id, "Вот список кнопок, выбирайте :-)", [[$btn_1, $btn_2, $btn_3, $btn_4]]);
    }

        }



Теперь для каждой кнопки сделаем свои ответы, так как сейчас они не работают. Для этого нужно получить payload и сделать проверку на выбранную кнопку 


if ($data->type == 'message_new') { // Создаем проверку на новое сообщение и вызываем кнопки


    if ($message == 'Начать') {
        $vk->sendButton($peer_id, "Вот список кнопок, выбирайте :-)", [[$btn_1, $btn_2, $btn_3, $btn_4]]);
    }



    if (isset($data->object->payload)) {  //получаем payload
        $payload = json_decode($data->object->payload, True);
    } else {
        $payload = null;
    }
    $payload = $payload['command'];




// Теперь пишем действия с кнопками
    if ($payload == 'btn_1')
        $vk->sendMessage($peer_id, "Вы выбрали первую кнопку, любой ответ на это событие");
    if ($payload == 'btn_2')
        $vk->sendMessage($peer_id, "Вы выбрали вторую кнопку, любой ответ на это событие");
    if ($payload == 'btn_3')
        $vk->sendMessage($peer_id, "Вы выбрали третью кнопку, любой ответ на это событие");
    if ($payload == 'btn_4')
        $vk->sendMessage($peer_id, "Вы выбрали четвертую кнопку, любой ответ на это событие");

    if ($message == 'Отключить')
        $vk->sendButton($peer_id, "Кнопки скрыты, снова вызвать их, отправьте Начать, Ваш ID $vk_id", [[]]);


        }




Сразу же сделали и скрытие кнопок по команде Отключить, кнопок может быть сколько угодно, отображать на странице за раз можно 10 кнопок, используя кнопки можно сделать переход в разные разделы и быстрое обращение к боту, исходник с библиотекой можете скачать в самом низу. 
Для того что бы выставить кнопки столбцом, а не в ряд, нужно:
Заменить:
$vk->sendButton($peer_id, "Вот список кнопок, выбирайте :-)", [[$btn_1, $btn_2, $btn_3, $btn_4]]);
на
$vk->sendButton($peer_id, "Вот список кнопок, выбирайте :-)", [[$btn_1], [$btn_2], [$btn_3], [$btn_4]]);
Получаем вот такой вариант:

Вид кнопок может быть разным, что бы разместить 1 кнопку в столбец, 2 и 3 в строку, а 4 тоже в столбец, нужно взять в квадратные скобки 2 и 3 кнопки

$vk->sendButton($peer_id, "Вот список кнопок, выбирайте :-)", [[$btn_1, [$btn_2, $btn_3], $btn_4]]);



Я думаю с этим все понятно, дальше быстро пробежимся по запуску бота, не смотря на то, что на сайте уже есть статья на эту тему. 
Созданные файлы мы загружаем на хостинг, советую выделить для этого 100 рублей, цена 1 пачки сигарет, ну или 2 шоколадки :) покупаем готовый хостинг, если не нужна база данных в будущем, то стоимость падает в 2 раза, до 40 рублей
hostline
Это стоимость на HostLine.ru

Переходим в ISPManager прямо из личного кабинета

Далее выбираем наш сайт, HostLine создает автоматически домен 3 уровня, и переходим в каталог 

И закачиваем наши 2 файла 


Теперь перейдя по нашему домену, в моем случае это http://vh328199.hostline.su/bot.php, если домен не отвечает, нужно немного подождать, пока ваш провайдер не начнет его видеть, обычно это занимает не более 24 часов.


Теперь эту ссылку вставляем в настройки VK API самой группы

И не забывайте включить Тип событий на входящие сообщения 


На этом все, задавайте свои вопросы в комментарии, обязательно ответим на них.
keyboard_bot.rar
Новость отредактировал: Сергей Котов - 23-03-2021, 18:03
Причина: Статья обновлена до последней версии API 5.126 на момент редактирования.
  • Сергей Котов
  • 01.04.2019
  • 41 708
  • 49
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
2-11-2019, 06:01, Статьи / PHP
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
21-02-2019, 04:04, Статьи / PHP
Подключение к базе данных MySQL и работа с ней. Используем ее для ботов VK
Подключение к базе данных MySQL и работа с ней. Используем ее для ботов VK
5-04-2019, 20:16, Статьи / PHP
  1. Лев Бабаев

    Лев Бабаев@levqua 3 апреля 2019 14:09

    Спасибо, создал своего бота с кнопками, все доступно =)
  2. Дмитрий

    Дмитрий Гость 4 апреля 2019 00:20

    Сделайте пожалуйста урок по базам данных, как добавлять информацию в нее, и наоборот
  3. MrTNTminer

    MrTNTminer@MrTNTminer 23 апреля 2019 18:30

    Расскажите как решить проблему с ботом и клавиатурой в беседах. Если использовать клавиатуру то перед сообщением пишется по типу @bot {Команда} и бот не видит ее.

    https://yapx.ru/v/D9fJB
    1. Сергей Котов

      Сергей Котов@Сергей Котов 24 апреля 2019 21:18

      Проблема скорее всего в другом, проверьте, есть ли доступ в беседе у группы
      1. MrTNTminer

        MrTNTminer@MrTNTminer 24 апреля 2019 21:29

        Да, я выдавал ему админку. Без нее от вообще не отвечал на команды.
      2. MrTNTminer

        MrTNTminer@MrTNTminer 25 апреля 2019 22:54

        Что делать то? expressionless 
  4. Vanua3321

    Vanua3321 Гость 24 апреля 2019 13:03

    Я сделал все как написано, но мне вк пишет ошибка сервера, и там 1 лишний символ, почему, я же все правильно сделал
    1. MrTNTminer

      MrTNTminer@MrTNTminer 24 апреля 2019 15:47

      Поменяй кодировку на UTF - 8, если уже такая стоит то на UTF - 8 с BOM. В Notepad++ это делается в разделе "Кодировки" --> Преобразовать "Название кодировки".
  5. Ринат

    Ринат Гость 28 мая 2019 21:47

    Привет. А как добавить кнопки в ответ? Например:
    Группа :
    - Выбери кнопку
    Человек нажимает кнопку, к примеру «Магазин»
    Потом нажимает, и ему опять предлагаются кнопки.
  6. Дмитрий

    Дмитрий Гость 8 июня 2019 03:05

    Сергей, спасибо за простой и понятный туториал!
    У меня есть пара вопросов:
    1. Как сделать так, чтобы при нажатии на кнопку, выходили другие кнопки?
    2. Как сделать кнопку, которая будет возвращать тебя в начало диалога?  

    Буду очень благодарен за ответ.
    Спасибо.
  7. лолол

    лолол 18 июня 2019 17:03

    Сергей, скажите как сделать такую команду как пример. Типа человек пишет пример, бот генерирует два рандомных числа, потом генерирует рандомного оператора и отправляет сообщение. Затем человек отвечает правильно, и бот пишет типа правильный ответ.
  8. Ольга

    Ольга Гость 4 июля 2019 17:44

    Добрый день, у меня вопрос: как сделать так, чтобы в бот можно было ввести переменную валюту за ответы на вопросы?

    1. Сергей Котов

      Сергей Котов@Сергей Котов 5 июля 2019 21:04

      Для этого нужно подключить БД - Подключение к базе данных MySQL и работа с ней. Используем ее для ботов VK 
  9. Kpau Mupa

    Kpau Mupa@Kpau Mupa 15 августа 2019 22:52

    Боту дал доступ ко всей переписке, назначил администратором - все бестолку, при нажатии кнопки я все равно "упоминаю" бота. Как убрать это "упоминание" в начале сообщения? Это важно.
    https://drive.google.com/file/d/1-PLxajQuTdK2LgGAb6c7RGVOvmrGUUW_/view?usp=driv
    esdk

    Можно инструкцию о том, как сделать так, чтобы при нажатии на кнопку, например, "свод правил" выезжали ещё кнопки с указателями правил и ещё одна кнопка, возвращающая к предыдущему списку кнопок?
    1. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 19 августа 2019 12:45

      1. Нужен код
      2. Просто отправляет эти же кнопки и дописываем новые, которые вам нужны

  10. Ярослав Николенко

    Ярослав Николенко@Ярослав Николенко 12 сентября 2019 20:02

    Люди, здравствуйте! Помогите, у меня тут проблемка: 
    Пытался написать бота, сначала получалось, но когда начал добавлять больше команд у меня получалось это:
    Я пишу: !команды
    Бот: Лист команд:
    Бот: (Ну тамтипо лист команд)
    жду немного, снова бот пишет:
    Бот: Привет!
    Бот: Время... (бла-бла-бла)
    Прошу написать мне: https://vk.com/dasha_musaeva (не спрашивайте почему это бабская страница, мне лень пользоваться своей) или-же сами попробуйте бота: https://vk.com/public186453368 и напишите что там не так, пожалуйста) 
    1. アレクセイ サモシュキン

      アレクセイ サモシュキン@アレクセイ 13 сентября 2019 03:42

      Что по хостингу?
  11. Викторович

    Викторович Гость 8 ноября 2019 00:12

    С сервера прикрепляю я вот так:  $vk->sendImage($peer_id,  __DIR__ . DIRECTORY_SEPARATOR . 'images/vk.jpg');
    А как предложить из фотоальбома ВК или файл из документов? 
    Спасибо за помощь... 
    1. Сергей Котов

      Сергей Котов@Сергей Котов 13 ноября 2019 03:05

      прикрепить как аттач ссылку на документ или изображение
  12. Александр Воронов

    Александр Воронов@Александр Воронов 25 ноября 2019 17:27

    Как поменять название кнопок?Что бы заместо кнопка 1 было другое название
    1. Сергей Котов

      Сергей Котов@Сергей Котов 27 ноября 2019 22:22

      я наверно сейчас буду кэпом, но нужно просто переименовать Кнопка 1 в другой любой текст 
  13. Гость Никита

    Гость Никита Гость 11 января 2020 17:53

    1. как отправлять видео по  нажатии на кнопку из видеозаписей группы (сообщества)?
    1. Роман Мирный

      Роман Мирный@Роман Котов 4 июня 2020 22:55

      if($payload == 'название кнопки'){
      $vk->request('messages.send', ['peer_id' => $peer_id, 'message' => "СООБЩЕНИЕ", 'attachment' => "video-АЙДИГРУППЫ_АЙДИВИДЕО");
      }
  14. Костя Сиволоб

    Костя Сиволоб@Костя Сиволоб 19 января 2020 18:47

    Почему я пишу все по инструкции, но когда я загружаю бота в платформу. Потом перехожу в мой вк и обновляю список (где вводится ссылка на платформу) выдаёт ошибку что "ключ вернул обратный ответ" и написана "ошибка"
    И ещё 1 вопрос, я делаю все через андроид это влияет на производительность бота?
  15. bif399z

    bif399z@Владимир 21 января 2020 13:14

    Не совсем понял как сделать приветственное сообщение. Т.е не важно какое сообщение пользователь напишет бот ему ответит "Привет {name} "

    Не совсем понял как сделать приветственное сообщение. Т.е не важно какое сообщение пользователь напишет бот ему ответит "Привет {name} "
  16. Большой Змей

    Большой Змей@Бот Бикбая 20 февраля 2020 01:39

    Как использовать для последней версии? У меня не работает что та( $payload = $data->object->message->payload; ) Не получается. Как правильно. То есть я могу создать кнопки, но обработать их не могу. Чтобы было через кнопки, а не через сообщения от кнопки.
    Разобрался. Нужно было в конец кода добавить. После всех команд.
  17. Niko_Trol

    Niko_Trol@Niko_Trol 31 марта 2020 14:00

    А как на кнопки сделать ссылки ? Ну то есть я знаю как их создать , а вот куда их написать хз.
  18. Денис Никишин

    Денис Никишин@Денис Никишин 4 апреля 2020 00:49

    Заранее, наверное, оглашу вопрос, надеясь, что проблема все-таки решиться путем использования платного хостинга...
    То, что бота так колошматит (по несколько одних и тех же сообщений подряд), это проблема использования бесплатного хостинга (в частности из прошлой статьи)? Или же все-таки бывают и другие причины? Думаю, полезным будет об этом упомянуть... 
    Заранее спасибо. 
    Автору отдельное большое спасибо за доходчивую и полезную инструкцию по применению. =)

  19. Гость антон

    Гость антон Гость 29 апреля 2020 12:26

    var counter = 1000;
    var timer = 10000;
    (async () => {
        for (var i = 0; i < counter; i++) {
            document.getElementsByClassName("friends_find_user_add")[i].click();
            await delay();
        }
        console.log("KOTOFF.NET");
    })();

    function delay() {
        return new Promise((resolve, reject) => {
            setTimeout(resolve, timer);
        });
    }    

    как это авторизировать для групп?

    и под скрипт js для бота игрового 
  20. morgantio

    morgantio 1 июня 2020 23:58

    Подскажите как прикрепить изображение к ответу бота?

        {
            $vk->sendButton($peer_id, "текст!", [BTN_1, BTN_2], false, false, ['attachment' => 'photo-16108331_457264330']);
        }

    Этот код не прикрепляет картинку
    1. Роман Мирный

      Роман Мирный@Роман Котов 4 июня 2020 22:52

      morgantio, нужно использовать request, но тогда ты не сможешь использовать клавиатуру.
    2. Baresark

      Baresark 5 октября 2021 11:57

      Привет  этот код  работает $vk->sendButton($peer_id, "текст!", [BTN_1, BTN_2], false, false, ['attachment' => 'photo-16108331_457264330']);  

  21. Роман Мирный

    Роман Мирный@Роман Котов 4 июня 2020 22:44

    Возможно ли создать клавиатуру-ссылку на 5.81 версии API? 
  22. Dyec

    Dyec@Дмитрий Секретнов 17 декабря 2020 12:18

    эти коды не работают на версии 5.103 в чем проблема?
  23. Сергей Котов

    Сергей Котов@Сергей Котов 13 января 2021 19:52

    Статья обновлена до последней версии API 5.126 и библиотеки!
    1. Михаил Романов

      Михаил Романов@Михаил Романов 5 сентября 2021 15:43

      у меня вот проблема
      большая
      бот кучу раз отвечает на одно сообщение, что делать?

  24. Baresark

    Baresark 3 ноября 2021 20:29

    Если нет ответов-значит все мертвы!!!
    1. Сергей Котов

      Сергей Котов@Сергей Котов 8 ноября 2021 01:31

      Скорее всего ВК не получает ОК и нужные заголовки. Если хостинг бесплатный то такое может быть, лучше купить недорогой. И да, все живы здоровы)
      1. Baresark

        Baresark 8 ноября 2021 20:55

        ну славо богу - все живы- спасибо за ответ)
  25. Алексей Леонтьев_2

    Алексей Леонтьев_2@Алексей Леонтьев 14 ноября 2021 18:54

    спасибо вам большое за гайд. А то я думал, почему у меня в 2019 году бот работал, а сейчас перестал.

  26. Назар Моисеенко

    Назар Моисеенко@Назар Моисеенко 12 января 2022 19:24

    Как добавить тут кнопку-редирект?

  27. Roma TV

    Roma TV@Roma TV 19 января 2022 21:56

    кто нибудь поможет?

    я чет не вьезжаю.

    хочу занести сообщение в базу данных.

    не, как его занести в базу я знаю,

    а вот  типо бот задал вопрос,человек ответил и бот этот ответ в базу занес.

    кто нибудь поможет?

    1. WebDiez

      WebDiez Гость 21 мая 2022 21:05

      находите в ответе от сервера text и вносите в базу.

  28. Саша

    Саша Гость 28 февраля 2022 13:53

    Как карусели сделать?

  29. webdiez

    webdiez Гость 21 мая 2022 21:04

    Вы в примере не проверяете секретный ключ в ответе от сервера ВК... и зря...

    1. webdiez

      webdiez Гость 21 мая 2022 21:17

      if(strcmp($data->secret, vk_config::$secretKey) !== 0)
          return;


      //выше проверки сообщения на type

      PS при добавлении усастника, id его не находится в peer_id

      1. Сергей Котов

        Сергей Котов@Сергей Котов 23 мая 2022 19:16

        Находится, если диалог с ботом, а не в беседе

  30. Артем

    Артем Гость 27 мая 2022 23:35

    Столкнулся с проблемой в вашей библиотеке. Не увидел возможности вставлять ссылку в кнопку.

    1. Артем

      Артем Гость 27 мая 2022 23:47

      Сам Спросил.. сам нашел

      $button = $vk->buttonOpenLink("text", "https://vk.com");
      $vk->sendButton($peer_id, 'text', [[$button]]);

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Планируете ли вернуться к динамической обложке?
Скрипт для скачивания видео с YouTube на PHP
Уже не работает.
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 936
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2023. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль