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
  • 3 096
  • 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

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

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

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

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

    3. 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' );


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

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

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

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

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

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

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

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

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

    7. Вячеслав

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

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

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

{login}

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

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

Рекламный блок
  • Новости
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
      • Игровые
    • Модули
    • Хаки
  • Магазин
Комментарии
Авторизация на сайте через ВК с занесением пользователя в базу данных (PHP)
В статье используется библиотека для работы с MySQLi, которая исключает SQL инъекции при
Авторизация на сайте через ВК с занесением пользователя в базу данных (PHP)
Когда будет гайд про защиту от sql injection?
Скрипт исключения из беседы VK и не только, написанный на PHP
Совсем забыл, что адекватное использование addChatUser отключили. Метод вызывается только ключом
Cкрипт добавление возможных друзей Вконтакте, законная накрутка друзей без блокировок!
Скрипт всего лишь имитирует нажатие кнопки для добавления в друзья. Само собой у Вк есть алгоритмы
Cкрипт добавление возможных друзей Вконтакте, законная накрутка друзей без блокировок!
Баны летят только так. Крутил 10 аккаунтов с помощью этого скрипта и использова хорошие прокси. 9
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 79
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 867
Добавлено за сутки: +0
Пользователей: 3904
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

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

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

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

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

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

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