Как создать чат-бота ВКонтакте
10 августа 2021 PHP
В этом руководстве создадим чат-бота ВКонтакте, которого можно добавить не только в сообщения группы, но и в групповую беседу. Бот может прослушивать все сообщения в беседе, и если в каком-то из них будет содержаться определенное слово, фраза или часть текста, бот будет отвечать на него. Сообщения бота, так же как и обычного пользователя, могут содержать не только текст, но и например, изображения или видеоролик.
Сфера применения бота ограничивается только вашей фантазией, с ним можно не только общаться, но и например, научить его присылать заказы из интернет-магазина в беседу с сотрудниками. Так же бот может отслеживать не только новые сообщения, но и множество других событий, например, когда сообщение редактируется, кто именно его написал, содержится ли в нем медиа и т.д.
Создание сообщества
Боты ВКонтакте работают от имени сообществ, поэтому если у вас нет группы, регистрируем ее в разделе Сообщества → Создать сообщество.
Укажите тип сообщества, например «Группа по интересам».
Укажите название и тематику сообщества.
Создание ключей доступа
После того, как сообщество будет создано, перейдите в его настройки по ссылке «Управление» с его главной страницы. Здесь есть iphone
Выберите меню «Работа с API» и создайте новый ключ.
Пока что для бота нам хватит отслеживать только сообщения, поэтому отметьте галочкой этот пункт.
Созданный ключ можно увидеть на вкладке «Ключи доступа».
Перейдите на вкладку CallBack API. Выберите версию 5.89. Вы можете выбрать и самую последнюю, но учтите, что передаваемые параметры там будут несколько другие, чем в приведенном ниже коде. Поле адрес пока оставьте пустым. Придумайте любой секретный ключ. Так же вам понадобится код из поля «Строка, которую должен вернуть сервер».
На вкладке типы событий отметьте входящие сообщения.
Дли того, чтобы боту можно было написать в группе, включите функцию сообщений.
Разрешите добавлять бота в беседы.
После добавления бота в беседу, он может принимать сообщения, которые адресованы только ему. Чтобы бот смог отслеживать все сообщения устанавливаем опцию в настройках участников. Сделать это может только администратор беседы.
Итак, после всех манипуляций вы должны получить 3 секретных ключа:
- Ключ доступа
- Секретный ключ
- Строка, которую должен вернуть сервер
PHP-код чат-бота
Замените в коде строки с ключами на полученные и сохраните его на вашем хостинге, например по адресу http://site.ru/bot.php
Затем укажите этот адрес в настройках бота на вкладке Callback API (то, что пропустили на предыдущем шаге настроек).
<?php $confirmationToken = '<Строка, которую должен вернуть сервер>'; $secretKey = '<Секретный ключ>'; // Функция отправляющая сообщения function vk_msg_send($peer_id, $text){ $request_params = array( 'message' => $text, 'attachment' => $attachment, 'peer_id' => $peer_id, 'access_token' => '<Ключ доступа>', 'v' => '5.89' ); $get_params = http_build_query($request_params); file_get_contents('https://api.vk.com/method/messages.send?' . $get_params); } $data = json_decode(file_get_contents('php://input')); // Получаем данные с ВК if(strcmp($data->secret, $secretKey) !== 0 && strcmp($data->type, 'confirmation') !== 0) { return; } switch ($data->type) { case 'confirmation': echo $confirmationToken; // Если ВК запрашивает подтверждение, то выводим код подтверждения break; case 'message_new': // Если событие нового сообщения, то получаем его текст $message_text = $data->object->text; $peer_id = $data->object->peer_id; $message_text = mb_strtolower($message_text, 'UTF-8'); // Переводим текст к нижнему регистру // Если сообщение содержит подстроку привет, отправляем сообщение if(strpos($message_text, "привет") !== false){ vk_msg_send($peer_id, "Привет"); } echo 'ok'; // Обязательно уведомляем сервер, что сообщение получено, текстом ok break; } ?>
Бот так же может отправлять медиафайлы. Для этого в переменную $attachment
передаем код файла. Получить его можно из адресной строки, например так:
Ваш бот не работает к сожалению(
Работает. Делайте все по инструкции.
Добрый день.
Переменная $attachment откуда берется?
Изначально она пустая. Но в нее можно передать ссылку на медиафайл. Читайте в конце статьи.
Запрос возвращает ошибку 500 (Internal Server Error)
А все, я понял. У меня протокол HTTP, а надо протокол HTTPS.