Летом я писал статью по созданию каруселей для бота ВК, использовав при этом последнюю (третью) ветку SimpleVK. Сегодня же сделаем то же самое, но только на старой версии библиотеки. В особенности это может быть полезно тем, кто не имеет возможности переделывать своих старых ботов под новый релиз SimpleVK.
Для каруселей нам понадобится токен с доступом к сообщениям. В прошлой статье мы также ставили доступ к фотографиям, однако сейчас этого делать не придётся. Почему - потому что в текущей версии библиотеки, к сожалению, нет встроенной возможности для загрузки изображений. Да, это можно сделать самостоятельно, но сегодня не об этом. Я вручную залью фотки в группу, а далее скопирую их айди (из адресной строки):
Да, и библиотеку мне всё же пришлось немного доработать, ведь в дефолтной версии каруселей в ней не было. Это ни коем образом не повлияет на её функционал и принцип работы. Кастомную версию прикрепляю сразу, также полный архив будет в конце статьи:
Итак, теперь переходим к делу. Создаём php-файл, в котором сразу подключаем библиотечку и прописываем три константы:
<?php
require_once 'simplevk-master/autoload.php';
const TOKEN = 'токен';
const API_VERSION = '5.131';
const CONFIRM_KEY = 'ключ подтверждения callback-сервера';
Создаём экземпляр класса vk_api, инициализируем переменные:
$vk = \DigitalStar\vk_api\vk_api::create( TOKEN, API_VERSION )->setConfirm( CONFIRM_KEY );
$vk->initVars( $peer_id, $message, $payload, $user_id, $type, $data );
Добавляем конструкцию для обработки команды:
if ( $type == 'message_new' )
{
if ( $message == '/' )
{
// Тут продолжим делать карусели
}
}
В класс vk_api я добавил метод carousel() для инициализации нового элемента карусели, который возвращает экземпляр также добавленного класса Carousel:
public function carousel()
{
$config = [];
$this->config['carousel'][] = &$config;
return Carousel::create( $config );
}
А вот класс Carousel переехал из третьей ветки без существенных изменений, поэтому дальше структура кода будет такой же, как и в прошлый раз. В качестве образца сделаю карусель с некими товарами. Например, с телефонами. Выглядеть это будет +/- так:
$vk->carousel()
// ->action( 'https://yandex.ru' ) // Ссылка, на которую перекинет пользователя при клике
->title( 'iPhone 14 Pro Max 114.999 ₽' ) // Заголовок элемента карусели
->description( 'Три камеры, экран диагональю 6,7 дюйма, <...>, с Dynamic Island' ) // Описание элемента карусели
->img( '-214118756_457239032' ) // Изображение
->kbd( [ $vk->buttonOpenLink( 'https://kotoff.net', 'Купить' ) ] ); // Кнопка/кнопки
Чтобы добавить в карусель ещё несколько элементов - дублируем этот кусок кода нужное количество раз:
$vk->carousel()
// ->action( 'https://yandex.ru' )
->title( 'iPhone 14 Pro 109.999 ₽' )
->description( 'Три камеры, экран диагональю 6,1 дюйма, <...>, с Dynamic Island' )
->img( '-214118756_457239031' )
->kbd( [ $vk->buttonOpenLink( 'https://kotoff.net', 'Купить' ) ] );
$vk->carousel()
// ->action( 'https://yandex.ru' )
->title( 'iPhone 14 Plus 94.999 ₽' )
->description( 'Две камеры, экран диагональю 6,7 дюйма, <...>, без Dynamic Island' )
->img( '-214118756_457239030' )
->kbd( [ $vk->buttonOpenLink( 'https://kotoff.net', 'Купить' ) ] );
$vk->carousel()
// ->action( 'https://yandex.ru' )
->title( 'iPhone 14 84.999 ₽' )
->description( 'Две камеры, экран диагональю 6,1 дюйма, <...> без Dynamic Island' )
->img( '-214118756_457239029' )
->kbd( [ $vk->buttonOpenLink( 'https://kotoff.net', 'Купить' ) ] );
Осталось только отправить карусель пользователю. Для этого используем добавленный метод sendCarousel():
$vk->sendCarousel( $peer_id, 'Карусель' );
Выглядит метод, кстати, вот так:
public function sendCarousel( $peer_id, $message, $params = [] )
{
$carousel = $this->generateCarousel();
return $this->request( 'messages.send',
[ 'message' => $message, 'peer_id' => $peer_id, 'template' => $carousel ] + $params );
}
Теперь проверим, как работает наш мини-бот:
Весь код:
<?php
require_once 'simplevk-master/autoload.php';
const TOKEN = 'токен';
const API_VERSION = '5.131';
const CONFIRM_KEY = 'ключ подтверждения callback-сервера';
$vk = \DigitalStar\vk_api\vk_api::create( TOKEN, API_VERSION )->setConfirm( CONFIRM_KEY );
$vk->initVars( $peer_id, $message, $payload, $user_id, $type, $data );
if ( $type == 'message_new' )
{
if ( $message == '/' )
{
$vk->carousel()
// ->action( 'https://yandex.ru' ) // Ссылка, на которую перекинет пользователя при клике
->title( 'iPhone 14 Pro Max 114.999 ₽' ) // Заголовок жлемента карусели
->description( 'Три камеры, экран диагональю 6,7 дюйма, <...>, с Dynamic Island' ) // Описание элемента карусели
->img( '-214118756_457239032' ) // Изоюражение
->kbd( [ $vk->buttonOpenLink( 'https://kotoff.net', 'Купить' ) ] ); // Кнопка/кнопки
$vk->carousel()
// ->action( 'https://yandex.ru' )
->title( 'iPhone 14 Pro 109.999 ₽' )
->description( 'Три камеры, экран диагональю 6,1 дюйма, <...>, с Dynamic Island' )
->img( '-214118756_457239031' )
->kbd( [ $vk->buttonOpenLink( 'https://kotoff.net', 'Купить' ) ] );
$vk->carousel()
// ->action( 'https://yandex.ru' )
->title( 'iPhone 14 Plus 94.999 ₽' )
->description( 'Две камеры, экран диагональю 6,7 дюйма, <...>, без Dynamic Island' )
->img( '-214118756_457239030' )
->kbd( [ $vk->buttonOpenLink( 'https://kotoff.net', 'Купить' ) ] );
$vk->carousel()
// ->action( 'https://yandex.ru' )
->title( 'iPhone 14 84.999 ₽' )
->description( 'Две камеры, экран диагональю 6,1 дюйма, <...> без Dynamic Island' )
->img( '-214118756_457239029' )
->kbd( [ $vk->buttonOpenLink( 'https://kotoff.net', 'Купить' ) ] );
$vk->sendCarousel( $peer_id, 'Карусель' );
}
}
Надеюсь, было полезно 😏
Архив с исходниками:
Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter