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

Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры

Статьи / PHP



На днях вышла новая версия API VK 5.103, а с ней и пришли inline кнопки, это те же самые кнопки, но которые прикрепляются к сообщению, пример ниже:



Если Вы использовали версию ниже 5.103, то после смены, на версию 5.103 и выше, ваш бот перестанет отвечать на сообщения в 100% случаях, все потому, что был добавлен новый объект client_info

Json версии 5.102 и ниже:
Ответ с версии 5.103



Если раньше мы писали что бы получить ID беседы так:
$peer_id = $data->object->peer_id;
То теперь нужно делать так:
$peer_id = $data->object->message->peer_id;

А в объекте client_info теперь храниться информация какой тип клавиатуры поддерживается и поддерживается ли она вообще

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

simplevk-master.rar

Загружаем содержимое на сервер и создаем рядом с папкой simplevk файл с любым названием, пусть это будет bot.php

Пишем в файл следующий код (Использую Sublime Text):
<?php

require_once('simplevk-master/autoload.php'); // Подключение библиотеки


use DigitalStar\vk_api\VK_api as vk_api; // Основной класс
use DigitalStar\vk_api\VkApiException; // Обработка ошибок



const VK_KEY = "ВАШ ТОКЕН СООБЩЕСТВА";  // Токен сообщества
const CONFIRM_STR = "df0d1eb6";  // Тот самый ключ из сообщества
const VERSION = "5.103"; // Версия API VK

$vk = vk_api::create(VK_KEY, VERSION)->setConfirm(CONFIRM_STR);

$data = json_decode(file_get_contents('php://input')); //Получает и декодирует JSON пришедший из ВК

$vk->sendOK(); //Говорим vk, что мы приняли callback


$peer_id = $data->object->message->peer_id;

$vk->sendMessage($peer_id, "Работаю!");


Для тех кто впервые на нашем сайте, токен можно получить в настройках сообщества:

Не забудьте сразу включить сообщения и возможности бота

Обычно на этом шаге проблем ни у кого не возникало, теперь самое главное, внимательно!

Нужно подключить к нашему сообществу обработчик (Наш скрипт) который будет принимать CallBack. Делается это очень просто. Нужно указать полный путь к файлу bot.php 


Что бы убедится что Вы указываете правильный путь, можно просто вставить ее в бразуер и перейти, вы увидите надпись ok, если совсем ничего не получилось, пишите в комментарии, поможем!

Пишем нашему боту что бы убедиться что все работает:

Все работает. Теперь давайте допишем код и добавим кнопки к сообщению. Используя библиотеку, используем функцию sendButton ()

$text1 = $vk->buttonText('Название 1', 'red', ['command' => 'btn_1']);
$text2 = $vk->buttonText('Название 2', 'green', ['command' => 'btn_2']);
$text3 = $vk->buttonText('Название 3', 'blue', ['command' => 'btn_3']);

$vk->sendButton($peer_id, "Работаю!", [[$text1, $text2, $text3]]);

Пишем нашему боту:

Кнопки появились, это хорошо, давайте сделаем теперь их inline кнопками, для этого достаточно передать 1 параметр в функцию  sendButton ()

$vk->sendButton($peer_id, "Работаю!", [[$text1, $text2, $text3]], true);

 
Inline кнопки поддерживаются только в мобильном приложении (на сегодняшний день) заходим с телефона и отправляем любое сообщение:
Как видим кнопки прикрепляются за сообщением, что с этим делать решать только Вам. Ниже можно скачать архив с исходным кодом. А у меня на этом все :-)

А как работать с кнопками, мы писали в другой статье

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


Остались вопросы? Пиши в комментарии!

lesson_kotoff_net.rar
  • Сергей Котов
  • 02.11.2019
  • 23 859
  • 38
Обновление бота VK Conference Kot до версии 3.1
Обновление бота VK Conference Kot до версии 3.1
24-01-2019, 02:53, Обновления
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
Обновление Conference Kot v4.0 Customization
Обновление Conference Kot v4.0 Customization
25-02-2019, 22:32, Обновления
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
  1. Гость Никита

    Гость Никита Гость 4 ноября 2019 09:09

    А как правильно отправить пользователю сообщение через 30 секунд после написания команды? Использовал sleep(30);, но ВК не дожидается ответа.
    1. Сергей Котов

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

      Можно использовать CRON, но там минимально можно выставить 1 минуту, sleep использовать не получится, ВК не получает ответа от севера OK. Можно попробовать перед sleep отправить Ok, может поможет  blush 
  2. skaen

    skaen@Alexander 4 ноября 2019 21:57

    А возможно ли как-то сделать очередь перед командой?
    Что-то вроде:
    - Команда отправлена. Бот ответил и ждем продолжение от пользователя. 
    По типу: 
    - Введите ваш ник?
    - *никнейм*
    - Никнейм принят.
    1. Нео Метал

      Нео Метал@Infinite 4 ноября 2019 22:38

      можно заморочаться с таблицами или файлами, если так уж надо. :^
       
    2. Сергей Котов

      Сергей Котов@Сергей Котов 5 ноября 2019 16:20

      Можно, но понадобиться какое нибудь хранилище (база данных)
      1. Дмитрий

        Дмитрий Гость 26 января 2022 02:06

        Жду статьи про карусели, как их создавать в примерах. Желательно на старой версии simple vk, на новой там куча папок и подпапок что голову простому сломаешь изучить как работает.

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

          Сергей Котов@Сергей Котов 28 января 2022 20:24

          На самом деле новая либа оч удобная. У нас есть старая либа с каруселями, напишем про нее статью тогда)

  3. Адик135

    Адик135 Гость 5 ноября 2019 13:29

    А чо произошло с апи... Не работает ничего (команды)


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

      Сергей Котов@Сергей Котов 5 ноября 2019 16:19

      Какие именно команды? Если Вы использовали версию API ниже 5.103 и перешли на 5.103 то нужно изменить структуру в коде, а именно обращение к полученным объектам, я писал в самом начале. Проще говоря во всем коде нужно дописать message после $data->object->(сюда)->
  4. 23ув

    23ув Гость 7 ноября 2019 17:06

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

    Кирилл Миновский Гость 11 ноября 2019 05:55

    Вижу ты времени зря не теряешь)
  6. Гость Никита

    Гость Никита Гость 11 ноября 2019 19:03

    Для тех, кто не понял, как формировать сами кнопки вк :
     Показать / Скрыть текст

    $pay_user = $vk->buttonPayToUser($id, 10, "Donate",['command' => 'pay']); // ботон доната юзера
    $vk->sendButton($peer_id, "Скидываемся, пацаны, на покушать пользователю $first_names $last_names", [[$pay_user]], true);
  7. Amadeus

    Amadeus@USA 28 ноября 2019 02:38

    А как это сделать без библиотеки? Допустим для такого кода: https://pastebin.com/LxLrN5s5. Если просто добавить message, то ничего не робит =(
  8. Александр Филин

    Александр Филин@Александр Филин 23 декабря 2019 22:14

    Появился вопрос, как реализовать кнопку с прилагающей ссылкой, понимаю что нужно обновить библиотеку, на этом и остановился :(
  9. Егор Флай

    Егор Флай@Егор Флай 24 декабря 2019 19:57

    Как проверить что человек подписан на определенную группу?
  10. Никита01

    Никита01@Никита Аргат 11 января 2020 17:58

    Необходимо сделать так, что б при нажатии на кнопку отправлялось видео, с примером.
    спасибо заранее
  11. 122432

    122432 Гость 26 января 2020 12:57

    привет! @Сергей Котов сделай плиз статью как через бота в вк авторизироваться на сайте и сохранять этот запрос (авторизацию) для парсинга инфы оттуда. пж
  12. s4elkovo

    s4elkovo@Инфо Щелково 1 февраля 2020 19:46

    Подскажите а как в одном сообщении отправить текст, аудиотрек, и кнопку
    1. TREiV

      TREiV@Дмитрий Котов 1 февраля 2020 19:51

      $vk->sendButton($peer_id, "текст!", [[$text1, $text2, $text3]], false, false, ['attachment' => 'photo-10990260_457239157']);
      1. s4elkovo

        s4elkovo@Инфо Щелково 2 февраля 2020 12:51

        Спасибо Дмитрий! Еще назрел такой вопрос! как в одном сообщении, прикрепить допустим 4 аудиофайла!?
        1. Сергей Котов

          Сергей Котов@Сергей Котов 2 февраля 2020 14:04

          Через запятую перечислить
  13. Макс Рожков

    Макс Рожков@Макс Рожков 3 февраля 2020 01:50

    Здравствуйте! Вот возник вопрос, очень долго думал над его решением, но так ничего и не придумал. 
    Нужно сделать кнопку оплаты, т.е. есть бот, к нему подключена база данных, нужно чтобы, когда человек нажал кнопку, ему показалось окно оплаты, в котором он платит 50 рублей(Допустим) и после оплаты, в базе данных изменилась переменная. 
    Тем самым я хочу осуществить платного бота(Пока человек не заплатит, он не сможет пользоваться ботом).
    Заранее спасибо! blush
    1. TREiV

      TREiV@Дмитрий Котов 3 февраля 2020 12:30

      Вам сюда​​​​
  14. s4elkovo

    s4elkovo@Инфо Щелково 7 февраля 2020 14:36

    Пытаюсь отправить голосовое сообщение документом:

    $vk->sendButton($peer_id, "Информационное сообщение", [[$text1]], true, false, ['attachment' => 'doc5615784_536233012']);

    почему то не прикрепляет, как отправить? 

    пробовал так 


    $vk->sendButton($peer_id, "Информационное сообщение", [[$text1]], true, false, ['attachment' => 'audio_message5615784_536233012']); тоже самое...
  15. Ftemce

    Ftemce@Максим Копачев 4 марта 2020 15:56

    Как в новой версии работать с $payload ?
    Можно пример?
    1. Роман Мирный

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

      Ftemce, вставляешь к другим переменным:
      if (isset($data->object->message->payload)) {
          $payload = json_decode($data->object->message->payload, True);
      } else {
          $payload = null;
      }
      $payload = $payload['command'];
  16. s4elkovo

    s4elkovo@Инфо Щелково 6 марта 2020 12:00

    $vk->sendButton($peer_id, "текст", [[$text1, $text2], [$text3, $text4], [$text5, $text6], [$butt_start]]);

    отправил клавиатуру и сообщение
    ---------------
    ------
    $vk->request('messages.send', ['peer_id' => $peer_id, 'message' => 'текст', 'attachment' => $attachment]);

    отправил вложение
    -------
    вопрос как в
    $vk->request('messages.send', ['peer_id' => $peer_id, 'message' => 'текст', 'attachment' => $attachment]);

    отправлять и клавиатуру сразу?
  17. Станислав Рождественский

    Станислав Рождественский@Станислав Рождественский 22 марта 2020 19:51

    Здравствуйте, у меня почему-то Бот отправляет несколько одинаковых ответов - как это побороть? Перелопатил много, но ничего не помогло 
    1. Артём Павлов

      Артём Павлов@Артём Павлов 27 апреля 2020 21:57

      попробуй писать так:
      $vk->sendOK(); //вернем ОК, что значит - что скрипт принял поток
      echo 'ok';

      Это из-за бесплатного хоста скорее всего
  18. ⎛⎝ ᘜᖇᓰᘿᖴᕲᘿᐺᓰᒪ ⎠⎞

    ⎛⎝ ᘜᖇᓰᘿᖴᕲᘿᐺᓰᒪ ⎠⎞@0000000 21 мая 2020 23:28

    $vk->sendButton($peer_id, "Работаю!", [[$text1, $text2, $text3]], true);

    что к этой строке добавить, чтобы бот отвечал по определенной команде, а не на любые сообщения.
    в другой статье, с другой версией  API понял, а в этой не работает
  19. Роман Мирный

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

    Пацаны, как сделать кнопку-ссылку?
  20. Dyec

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

    автор лучше расскажи как полностью перейти с версии 5.81 на  5.103, хотел кнопки добавить, но весь бот отказался работать, половина смог исправить, половина мозгов не хватило. Придуться на 5.81 сидеть(((

    нихрена не пашут эти библиотеки  говнокодом. во-первых нету ?> в autoload.php  а во-вторых сервер молчит после проверки кода выдало 417 - Expectation Failed какроче не перейти мне с 5.81 версии. 
    1. Сергей Котов

      Сергей Котов@Сергей Котов 17 декабря 2020 11:29

      Если вы используете библиотеку из статьи "Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут! " то там она старая, но даже она может работать на новых версиях. Для этого нужно открыть файл VK_API найти:
      public function sendMessage($sendID,$message){
      if ($sendID != 0 and $sendID != '0') {
      return $this->request('messages.send',array('message'=>$message, 'peer_id'=>$sendID));
      } else {
      return true;
      }
      }

      Заменить на:

      public function sendMessage($sendID,$message){
      if ($sendID != 0 and $sendID != '0') {
      return $this->request('messages.send',array('message'=>$message, 'peer_id'=>$sendID, 'random_id' => rand(-2147483648, 2147483647)));
      } else {
      return true;
      }
      }

      Нужно добавить новый параметр который работает от весрии 5.9х и выше, это 'random_id' но все же рекомендую использовать последнюю версию библиотеки. Это сделать тоже не сложно, нужно скачать с этой статьи архив simple-master распаковать папку в корень вашего бота где лежит сам файл bot.php и в этом файле вместо 
      include "vk_api.php"; 

      вставить 
      require_once('simplevk-master/autoload.php'); // Подключение библиотеки use DigitalStar\vk_api\VK_api as vk_api; // Основной класс use DigitalStar\vk_api\VkApiException; // Обработка ошибок

      а ниже вместо 
      $vk->sendOK();

      заменить на 
      $vk->initVars($peer_id, $message, $payload, $vk_id, $type, $data); 


      Этими переменными можно пользоваться. К слову, статью сегодня я обновил, теперь работает на версии АПИ 5.126
      1. Dyec

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

        спс все делал кроме sendOk, попробю потом, я уже переписал и перевел сам свои функции на версию 5.103, но у меня сразуже перестала работать клавиатура обычная, т.е. кнопки есть, но действия не работают, скопировал куок кода из новой версии vk_api.php, адоптировал, но все равно  что0то не понял почему когда даю переменную в payload бот флудить, но не реагирует на команды. пример: 
        const BTN_2  = $vk->buttonText('👥 Онлайн', 'green', ['command' => 'btn_2']);

        если if ($payload == 'btn_2') {//дейстие кнопки 2 - скрипт не реагирует
        а если if ($payload == $btn_2) {//дейстие кнопки 2 - начинает флудить, ну это понятное дело что переменная внутри скрипта, но почему он не реагирует на первый вариант? пробывал в константы заносить и без результата. новыц код и версия в отказа сломала все кнопки. вторые сутки трахаюсь с этими кнопками

        автор у тебя даже на скриншоте в статье видно что бот флудит реагируя на каждое сообщение, в предыдущей статье все работало с кнопками, но вот с этими нифига не работает. Хотябы пример привел как кнопку на команду повесить. В предыдущей статье был пример. Но, перейдя на новую версию апи та статья уже не подходит, т.к. команды не работают. 
  21. Сергей Котов

    Сергей Котов@Сергей Котов 17 декабря 2020 11:31

    Если совсем не понятно что нужно сделать что бы обновить своего бота до последних верcий, пишите в ВК https://vk.com/nuling
  22. Гость Алексей

    Гость Алексей Гость 28 февраля 2022 13:54

    а как карусели сдделать? автор напишу статью

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

    Сергей Котов@Сергей Котов 28 февраля 2022 21:56

    Гость Алексей, скоро напишем 
  24. Baresark

    Baresark 4 апреля 2023 18:08

    Всем привет, этот код для бота, и на платном хосте всё равно по не сколько раз присылает сообщения.

    А вот этот      Открыть страницу    работает ИДИАЛЬНО  на версии в vk 5.131 - без всяких повторных сообщений 💣


{login}

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

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

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
<Script>Alert("hello");</Script>
Генерация всевозможных комбинаций из набора символов — комбинаторика в Python (itertools)
Qwertyuiopasdfghjklzxcvbnm 1234567890
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 938
Добавлено за сутки: +0
Пользователей: 4125
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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