Простое решение для создания бота ВКонтакте.
Чтобы начать создавать своего бота подключите библиотеку, укажите токен сообщества и используемую версию API
<?php require_once 'vk.php';
$vk = new VK('ТокенСДоступомКСообщениямСообщества', '5.131');
$data = json_decode(file_get_contents('php://input'));
При первом подключении VK отправит подтверждение и бот отправит ключ CallBack:
if ($data->type == 'confirmation') {
exit(Ключ CallBack);
}
Чтобы отправить сообщение пользователю, выполните:
// $peer_id - ID диалога с пользователем (можно использовать $from_id, однако если бот состоит в беседе, то нужно использовать $peer_id)
$vk->SendMessage($peer_id, "Текст сообщения");
Вы также можете прикрепить к сообщению, например, фотографию:
$vk->SendMessage($peer_id, "Текст сообщения", "photo-196997982_457239020");
Для отправки сообщения более чем одному человеку, используйте:
$vk->SendMessages("6098838, 291457291, 390511105", "Текст сообщения");
Где "6098838, 291457291, 390511105" - ID пользователей, которым необходимо отправить сообщение (максимальное количество ID - 100 штук). К сообщениям также можно прикрепить, например, фотографию.
Если Вы хотите отправить сообщения с клавитурой, то выполните:
$vk->SendButton($peer_id, "Текст сообщения", [[$btn]], true);
Где $btn - кнопка, которую необходимо отправить (подробнее про кнопки ниже). После кнопок укажите true или false - параметр, который отвечает за показ inline кнопок. Если указано значение true, то кнопки будут отображаться прямо в сообщении. При значении false кнопки будут находиться под полем ввода.
Для использований двух и более кнопок, используйте: Если Вы хотите отправить сообщения с клавитурой, то выполните:
$vk->SendButton($peer_id, "Текст сообщения", [[$btn, $btn1, $btn2], [$btn3, $btn4, $btn5]], true);
[$btn, $btn1, $btn2] - Первый ряд кнопок (максиальное количество рядов: 10, а количество кнопок в ряду: 4). Каждый новый ряд указывается в квадратных скобках и отделяется от предыдущего запятой.
Сообщения с клавиатурой также поддерживают прикрепление документов (например, фотографий):
$vk->SendButton($peer_id, "Текст сообщения", [[$btn]], true, "photo-196997982_457239020");
Для отправки сообщения с кнопкой и вложением (по желанию) сразу нескольким пользователям (до 100 человек), используйте:
$vk->SendUsersButton($user_ids, "Текст сообщения", [[$btn]], true, "photo-196997982_457239020");
Где $user_ids - список пользователей, которым необходимо отправить сообщения. Пример: 6098838, 291457291, 390511105
Библиотека поддерживает отправку клавиатуры. Поддерживаемые виды кнопок:
- Text (обычная кнопка с действием или без)
- Link (кнопка, которая открывает ссылку при нажатии)
- Location (кнопка, при нажатии на которую пользователь отправляет свою геолокацию)
- CallBack (кнопка, которая позволяет без отправки сообщения от пользователя получить уведомление о нажатии на кнопку и выполнить необходимое действие)
$button = ["text", ["payload" => "start"], "Текст кнопки", "green"];
Где Payload - действие, которое будет совершено при нажатии на кнопку, green - цвет кнопки. Поддерживаемые цвета:
- Red (negative, красный цвет)
- Green (positive, зеленый цвет)
- White (secondary, белый/серый цвет)
- Blue (primary, синий цвет)
$button = ["link", "Текст кнопки", "https://vk.com/"];
Кнопка открывает указанную ссылку при нажатии, однако она не способна совершать действия (payload'ы)
$button = ["location"];
Кнопка открывает окно выбора геолокации и отправляет ее боту.
$button = ["callback", ["type" => 'show_snackbar', "text" => 'Привет мир!'], "Текст кнопки", "green"];
Где show_snackbar - тип действия, которое будет совершено при нажатии на кнопку. Доступные варианты:
- show_snackbar - отображение уведомления (доступно с мобильных устройств)
- open_link - открыть ссылку. При этом "text" => 'Привет мир!' необходимо заменить на "link" => 'ссылка'
- open_app - открыть VK Mini App. При этом "text" => 'Привет мир!' необходимо заменить на "app_id" => 'id приложения', "owner_id" => 'id владельца', "hash" => 'хэш'
Благодаря Payload'ам кнопки не являются бесполезными. Они могут, например, открывать другие меню или выполнять другие команды. После нажатия на кнопку она отправляет запрос с данными, благодаря которым бот и понимает, что была нажата та или иная кнопка:
if (isset($data->object->message->payload)) {
$payload = json_decode($data->object->message->payload, true);
} else {
$payload = null;
}
$payload = $payload['command'];
Таким образом можно определить, что пользователь начал диалог по стартовой кнопке, например:
if ($payload == 'start') {
// code...
}
Предположим, что пользователь поставил лайк на запись, а Вы хотите его отблагодарить (необходимо включить: Записи на стене -> Добавление лайка):
if ($data->type == 'like_add') {
$vk->sendMessage($from_id, "$first_name, спасибо за лайк!");
}
Реакция на репост записи (необходимо включить: Записи на стене -> Репост):
if ($data->type == 'wall_repost') {
$vk->sendMessage($from_id, "$first_name, спасибо за репост!");
}
Если Вам важен ID поста, который репостнул человек, то он хранится в переменной $post_id. Таким образом можно добавить реакцию на конкретный пост:
if ($data->type == 'wall_repost' && $post_id == 'ID поста') {
$vk->sendMessage($from_id, "$first_name, спасибо за репост поста с конкурсом! Теперь ты принимаешь в нем участие!");
}
Реакция на комментарий записи сообщества (необходимо включить: Записи на стене -> Добавление):
if ($data->type == 'wall_reply_new') {
$vk->sendMessage($from_id, "$first_name, спасибо за комментарий!");
}