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

Callback-кнопки для бота ВК

Статьи / PHP

123Callback-кнопки позволяют отслеживать нажатие кнопки пользователем и выполнять какие-либо действий без отправки сообщения. Как ими пользоваться и как их сделать - разберем в этой статье. Плюсом добавим боту кнопки для отправки своего местоположения, перевода денег и link-кнопку.



Шаг 1: Скрипт

Обычно я начинаю с настройки группы, но сегодня отложу это на потом - на конец статьи.

Так-с, и для начала качаем последний бета-релиз библиотеки SimpleVK:

simplevk-testing.zip

Либо подключаем через composer:

composer require digitalstars/simplevk:dev-testing --ignore-platform-reqs


Теперь нужно создать файл php и написать несколько строк кода. Пока нам нужно подключить библиотеки, авторизоваться и инициализировать нужные нам переменные:

<?php

require_once __DIR__ . '/vendor/digitalstars/simplevk/autoload.php'; // Подключение библ



$vk = \DigitalStars\SimpleVK\SimpleVK::create( 'Токен сообщества, создадим на 2-м шаге', 'Версия VK API' ) // Авторизация через токен сообщества    ->setConfirm( 'Строка, которую должен вернуть сервер' ) // Подтверждение callback-сервера
    ->setUserLogError( 294485732 ) // Установка айди юзера ВК, которому будут отправляться уведы об ошибках
    ->initType( $type ) // Инициализация типа события
    ->initText( $text ) // Инициализация текста сообщения
    ->initPayload( $payload ); // Инициализация пэйлоулда

В предыдущих статьях мы инициализировали переменные методом initVars(), однако в текущей версии библиотеки появилась возможность "точечной" инициализации каждой переменной по отдельности. Мне пригодится тип события initType( $type ), тест сообщения initText( $text ) и payload initPayload( $payload ).

Тут можно заметить ещё один метод - метод setUserLogError( $id ). Используется для отправки уведомлений об ошибках конкретному человеку ($id - айди страницы ВКонтакте). Метод необязателен, поэтому можно оставить, а можно и убрать. Мне лично удобнее оставлять 🙂 


Далее создам команду '/кнопки' для отправки ботом клавиатуры пользователям:

if ( $type == 'message_new' )
{

    if ( $text == '/кнопки' )
    {
        // Тут продолжим писать код
    }

}

Чтобы инициализировать Callback-кнопку нужно воспользоваться методом buttonCallback( $text, $color, $payload ). Принимает 3 параметра - текст кнопки, её цвет, а также payload в виде ассоциативного массива:

$btn_callback = $vk->buttonCallback( 'Callback-кнопка', 'green', [ 'command' => 'btn_callback' ] );

Есть ещё несколько методов для создания кнопок, рассмотрим их тоже:

  • Метод buttonLocation( $payload ) — кнопка для отправки своего местоположения, в кач-ве параметра может принимать только payload;
  • Метод buttonOpenLink( $link, $label, $payload ) — кнопка-ссылка, в качестве параметров используется ссылка (обязательно с http или https), текст кнопки и payload;
  • Метод buttonPayToGroup( $group_id, $amount, $descriptionl, $datal, $payload ) — кнопка для перевода фиксированной суммы сообщетсву, в кач-ве параметров используется ID сообщества, сумма в ₽, комментарий к переводу, словарь с произвольными параметрами и payload;
  • Метод buttonPayToUser( $user_id, $amount, $description, $payload ) — кнопка для перевода фиксированной суммы пользователю, в качестве параметров указывается ID юзера, сумма в рублях, комментарий к платежу и payload;
  • Метод buttonDonateToGroup( $group_id, $payload ) — кнопка для перевода денег сообществу, в параметрах указывается ID группы и payload;
  • Метод buttonDonateToUser( $user_id, $payload ) — кнопка для перевода денег юзеру, метод принимает на вход айди пользователя и payload;
  • Метод buttonApp( $text, $app_id, $owner_id, $hash, $payload ) — кнопка VK Apps, принимает на вход текст кнопки, айди приложения, айди группы, хэш и payload.


Я же много кнопок клепать не буду, сделаю только 4:

$btn_callback = $vk->buttonCallback( 'Callback-кнопка', 'green', [ 'command' => 'btn_callback' ] );
$btn_donate = $vk->buttonDonateToUser( 123 );
$btn_location = $vk->buttonLocation();
$btn_link = $vk->buttonOpenLink( 'https://kotoff.net', 'Перейти' );

Ну, и осталось отправить клавиатуру пользователю:

$vk->msg( 'Твои кнопки:' )->kbd( [ [ $btn_callback ], [ $btn_donate ], [ $btn_location ], [ $btn_link ] ] )->send();

С помощью метода msg() формируем текст сообщения, метод kbd() создаёт "сетку" с кнопками, а метод send() отправляет всё это дело юзеру. Кстати для метода kbd( $keyboard = array(), $inline = false, $one_time = false ) в данном случае можно указать ещё и второй параметр ($inline = true), чтобы кнопки отправились в inline-формате.


При нажатии на кнопку будем отправлять пользователю всплывающие уведомление с помощью метода eventAnswerSnackbar( $text ). Чтобы отследить нажатие на кнопку создадим через elseif (после проверки на message_new) такую же проверку, но уже не на входящее, а на действие с сообщением (message_event). Также делаю проверку по payload (напомню, у нас он такой: [ 'command' => 'btn_callback' ]):

else if ( $type == 'message_event' )
{

    if ( $payload['command'] == 'btn_callback' )
    {
        $vk->eventAnswerSnackbar( 'Привет!' );
    }

}


Весь код:

<?php

require_once __DIR__ . '/vendor/digitalstars/simplevk/autoload.php'; // Подключение библ



$vk = \DigitalStars\SimpleVK\SimpleVK::create( 'Токен сообщества', 'Версия API' ) // Авторизация через токен сообщества
    ->setConfirm( 'Строка, которую должен вернуть сервер' ) // Подтверждение callback-сервера
    ->setUserLogError( 294485732 ) // Установка айди юзера ВК, которому будут отправляться уведы об ошибках
    ->initType( $type ) // Инициализация типа события
    ->initText( $text ) // Инициализация текста сообщения
    ->initPayload( $payload ); // Инициализация пэйлоулда


if ( $type == 'message_new' )
{

    if ( $text == '/кнопки' )
    {
        $btn_callback = $vk->buttonCallback( 'Callback-кнопка', 'green', [ 'command' => 'btn_callback' ] );
        $btn_donate = $vk->buttonDonateToUser( 294485732 );
        $btn_location = $vk->buttonLocation();
        $btn_link = $vk->buttonOpenLink( 'https://kotoff.net', 'Перейти' );

        $vk->msg( 'Твои кнопки:' )->kbd( [ [ $btn_callback ], [ $btn_donate ], [ $btn_location ], [ $btn_link ] ] )->send();
    }

}
else if ( $type == 'message_event' )
{

    if ( $payload['command'] == 'btn_callback' )
    {
        $vk->eventAnswerSnackbar( 'Привет!' );
    }

}



Шаг 2: Настройки группы

1. Создаём токен, выставляем права доступа на сообщения сообщества и вставляем его в код:

123

2. Выбираем версию API, указываем ссылку на бота, копируем и вставляем в код строку, которую должен вернуть сервер. После сохранения скрипта у себя на сервере - жмём кнопку подтвердить:


3. Выбираем необходимые нам типы событий (входящие и действия с сбщ):


4. Не забываем включить сообщения сообщества и возможности для ботов:



Шаг 3: Заключение

Осталось протестировать:


btn.zip

  • 5id15
  • 22.07.2022
  • 4 550
  • 8
Как создать бота Вконтакте с кнопками (keyboard)
Как создать бота Вконтакте с кнопками (keyboard)
1-04-2019, 23:36, Статьи / PHP
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
Создание бота ВК на inline кнопках и обновление на версию API 5.103+ подробная инструкция и примеры
2-11-2019, 06:01, Статьи / PHP
  1. Анастасия

    Анастасия 23 июля 2022 23:00

    Спасибо за статью! Читаю все ваши статьи про создание ботов, мне было очень полезно! Странно, что тут нет комментариев 😡

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

      Сергей Котов@Сергей Котов 24 июля 2022 18:02

      Если есть предложения про что конкретно нужно написать статью, пишите)

      1. Гость Алексей

        Гость Алексей Гость 28 августа 2022 13:06

        Я читал про карусели и новую библиотеку, но как быть со старой? У вас на сайте есть старые статьи про создания кнопок, и старая библиотека simplevk. Я сижу на старой библиотеке, и переходить на новую это целая  проблема, весь код переписывать надо будет, а тас около 1000 строк кода, а статья ваша про карусели именно с новой библиотекой simlevk. Буду рад если напишите статью по созданию каруселей на старой библиотеке и желательно так, чтобы карусель свайпалась слева направа и нааоборот. Т.е. 3 картинки и под ними кнопки с описанием, я немогу понять как это сделать, СберКот такие кнопки присылал мне в личку в ВК, думаю многим будет интересно как это сделать. Статья по созданию кнопок и inline кнопок мне очень понятна и я смог сделать кнопки благодаря вашим статьям, они как раз на старой библиотеке simlevk, думаю многие сидят на этой библиотеке. Буду ждать статью по созданию каруселей на старой версии simplevk. 

        1. 5id15

          5id15@Константин Дорофеев 28 августа 2022 19:23

          На старых версиях simplevk, к сожалению, нет конструктора каруселей.

          На третьей же ветке, чтобы добавить несколько слайдов в карусель, достаточно продублировать код генерации нужное количество раз:

          $msg->carousel()
          ->title( 'Заголовок 1' )
          ->description( 'Описание 1' )
          ->kbd( [ $btn_link, $btn_donate ] )
          ->img( 'img1.jpg' );

          $msg->carousel()
          ->title( 'Заголовок 2' )
          ->description( 'Описание 2' )
          ->kbd( [ $btn_link, $btn_donate ] )
          ->img( 'img2.jpg' );


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

          Сергей Котов@Сергей Котов 28 августа 2022 22:59

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

          1. Гость Алексей

            Гость Алексей Гость 10 сентября 2022 14:56

            Спасибо большое, буду рад статье про карусели со старой библиотекой! С нетерпением жду. 

    2. Гость Алексей

      Гость Алексей Гость 28 августа 2022 13:10

      Потомучто статья написана недавно, вот и мало комментариев, и еще гугл и яндекс ее не ранжировал, обычно ищет все через гугл как и я наткнулся на статью по созданию бота. Думаю мало ключевых слов сделал Саша, вот и в поиске не продвигается статья. Саша молодец, спасибо ему большое.

      1. Вячеслав

        Вячеслав Гость 31 января 2023 13:09

        Прекрасные статьи. Думаю, я надолго на этом сайте. :)

        Полезность статьи хорошо на поведенческие факторы влияет, а значит со временем она станет выше.

{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
Создать аккаунт / Регистрация
Авторизация

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