Скрипт бота для группы вк

Чат-бот — это скрипт на Вашем сервере, который получает уведомления о новых событиях из ВКонтакте и обрабатывает их. Например, определяет текстовую команду в сообщении от пользователя и присылает в ответ какое-нибудь изображение.

Для создания бота Вам потребуются:

  • Сообщество, от имени которого Ваш бот будет общаться с пользователями ВКонтакте.
  • Сервер, который будет принимать уведомления о событиях.
  • Логика самого бота — скрипт, который определяет, как бот реагирует на то или иное событие.

В первую очередь Вам нужно продумать функциональность чат-бота. Составьте список возможных текстовых команд или событий, на которые бот должен реагировать, и соответствующие им ответные действия бота. Стоит помнить, что люди могут ошибаться, набирая команды, и присылать боту текст, который отличается от всех учтённых Вами вариантов — важно предусмотреть действие по умолчанию (можно в таком случае присылать пользователю список всех поддерживаемых команд).

Если ранее Вы не работали с API ВКонтакте, перед началом работы мы рекомендуем Вам прочитать это руководство.

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

Первым делом нужно указать, что в вашем сообществе будет работать бот. Для этого перейдите в "Управление сообществом" →"Сообщения" →"Настройки для бота" и включите пункт "Возможности ботов".

Сообщество — это точка входа для пользователей, которые будут общаться с Вашим ботом. Стоит позаботиться о том, чтобы оно выглядело привлекательно и содержало описание Вашего бота, иначе его действия могут стать сюрпризом для пользователей. Не забудьте включить сообщения в Вашем сообществе («Управление сообществом» → «Сообщения»), когда бот будет готов к использованию, чтобы ему можно было написать.

Итак, если Вы выбрали сообщество, можно приступать к настройке уведомлений.

Ключ доступа потребуется Вам для получения обновлений (в Long Poll), а также для работы с API.

Откройте раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), выберите вкладку «Работа с API» и нажмите «Создать ключ доступа».

Отметьте необходимые права доступа и подтвердите свой выбор.


Вы можете создать несколько ключей с разными правами доступа. Ключи нельзя размещать публично — узнав его, третье лицо может обращаться к API ВКонтакте от имени Вашего сообщества. Если ключ был скомпрометирован, необходимо удалить его из списка — после этого он станет недействителен.

Также Вы можете получить ключ доступа с помощью OAuth. Используйте схему авторизации Authorization Code Flow.

Чтобы пользователи смогли добавлять бота в беседы, необходимо включить эту возможность в настройках. Перейдите в «Управление сообществом» →«Сообщения» →«Настройки для бота» и поставьте галочку в пункте «Разрешать добавлять сообщество в беседы». После этого в сообществе появится кнопка «Пригласить в беседу», открывающая модальное окно со списком бесед.

Читайте также:  Прикольные значки для текста

Сейчас у бота в беседе есть три уровня доступа:

Важное замечание: для получения событий из беседы версия API у callback-сервера должна быть не ниже 5.80.

Чтобы реагировать на какие-либо события, Ваш скрипт должен о них узнать. Для этого существуют два подхода — Callback API и Long Poll.

Callback API присылает уведомления на Ваш сервер, как только в сообществе происходит нужное событие. Событие может быть каким угодно: комментарий к фотографии, новая запись на стене, вступление в сообщество, отправка сообщения, и многое другое. Посмотреть полный список доступных событий, а также прочитать подробнее о настройке Вы можете в документации Callback API.

Для подключения Callback API в сообществе нужно указать адрес скрипта на Вашем сервере и выбрать события, которые Вы хотите получать. Например, если Ваш бот должен распознавать текстовые команды, отметьте событие «Входящее сообщение».

Уведомления от Callback API выглядят как JSON с основной информацией о событии:

В этом примере пользователь с id 123456 отправил сообществу сообщение с текстом "start".

Для каждого события Callback API отправляет отдельный запрос на Ваш сервер. Ваш скрипт должен подтверждать получение каждого запроса, отправляя в ответ строку "ok".

function api($method, $params) <
$params[‘access_token’] = VK_API_ACCESS_TOKEN;
$params[‘v’] = VK_API_VERSION;
$query = http_build_query($params);
$url = VK_API_ENDPOINT . $method . ‘?’ . $query;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($curl);
$error = curl_error($curl);
if ($error) <
error_log($error);
throw new Exception("Failed <$method>request");
>
curl_close($curl);
$response = json_decode($json, true);
if (!$response || !isset($response[‘response’])) <
error_log($json);
throw new Exception("Invalid response for <$method>request");
>
return $response[‘response’];
>

Второй способ получения обновлений — это подключение к Bots Long Poll API. Прочитать подробнее о работе с Bots Long Poll API Вы можете на этой странице.

Когда произойдет новое событие или истечет время ожидания, сервер вернет Вам ответ в формате JSON:

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

  • переходят на новые версии официальных приложений ВКонтакте постепенно;
  • открывают ВКонтакте на разных платформах (iOS, Android, в мобильной и веб-версии);
  • используют приложения от сторонних разработчиков. Например, клавиатура ботов может быть недоступна в старой версии официального приложения ВКонтакте.

Отправляйте сообщения в нужном формате, исходя из возможностей, которые доступны пользователю. Если он не может воспользоваться клавиатурой, предложите варианты ответов и пронумеруйте их — чтобы можно было ответить цифрой. И наоборот: если пользователь может взаимодействовать с ботом с помощью клавиатуры — не нужно отправлять ему варианты ответа в тексте сообщения.

Читайте также:  Самсунг ноут 3 перепрошить

Начиная с версии API 5.103 информация о доступных функциях будет приходить вместе с событием message_new в Callback API и Bots Long Poll API. Она будет находиться в объекте client_info:

По мере появления новых возможностей в объекте client_info и массиве button_actions могут появляться новые сущности.

Поля объекта:

  • button_actions — массив кнопок, которые поддерживает клиент. Возможные значения смотрите в разделе «Клавиатуры для ботов» → «Структура данных»;
  • keyboard (bool) — поддерживается ли клавиатура ботов клиентом;
  • inline_keyboard (bool) — поддерживается ли inline-клавиатура ботов клиентом;
  • carousel (bool) — поддерживаются ли карусели клиентом;
  • lang_id — id используемого языка.

Продолжение

Пример простого бота для ВКонтакте на PHP. Обработка событий с использованием Callback API, голосовые сообщения с помощью Яндекс SpeechKit.

Сообщество бота: https://vk.com/botexample. Бот отправляет в ответ на любое сообщение картинку и голосовое сообщение с именем собеседника.

Подготовка к использованию

Укажите свои данные в config.php. Ключ доступа к API и код подтверждения для Callback API Вы можете получить в настройках сообщества. Подробнее о получении ключа доступа для Яндекс SpeechKit можно прочитать здесь.

Обработка событий Callback API. В нашем примере обрабатываются два события:

  • confirmation — уведомление для подтверждения адреса сервера;
  • new_message — уведомление о входящем сообщении.

Подробную информацию о типах событий и формате уведомлений Вы найдёте в документации ВК API.

Отправка сообщений с вложениями.

Функции для работы с методами API ВКонтакте

Функции для работы с API Яндекс SpeechKit для генерация голосовых сообщений.

Здравствуйте, хабровчане. В этой публикации я напишу о том, как сделать своего первого чат-бота для ВКонтакте. Думаю, что опытным программистам это будет не интересно, а вот тем, кто только начинает свой путь, будет интересно, так как я ещё и сам не очень далеко ушёл и понимаю проблемы начинающих. И предупреждаю сразу, что большинство скриншотов будет на английском языке.

Сперва нам нужно создать сообщество. Думаю, с этим справится каждый.

Затем мы заходим в настройки сообщества и выбираем пункт «API usage» и нажимаем на кнопку «Create token».

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

И вот мы получили заветный токен. Его, кстати, нужно сохранить в надёжное место и никому не показывать. Теперь можно приступать к коду.

Мы будем писать код на языке PHP, поэтому можно скачать Visual Studio code или PHPStorm. В принципе, код можно писать и в блокноте, только это будет не удобно. После кода мы перейдём к дальнейшей настройке группы.

Читайте также:  Разрешение экрана не на весь монитор

Итак, для начала нам нужно получить информацию о входящем сообщении и перевести её из формата JSON в понятный для PHP.

В переменной data теперь к нас находится массив с сообщением, ID пользователя и ID чата.
«А что за „json_decode(file_get_contents(‘php://input’))“, — спросите вы.

Начнём с этого момента:

Выражаясь, простым языком, мы спрашиваем у скрипта что у нас пришло на вход, то есть какой запрос отправил ВК. Ниже приведу пример такого запроса.

Думаю, легко понять что написано в запросе, если иметь минимальные знания в английском языке.

Ну а „json_decode()“ — функция, которая переводит вышеприведённый JSON в массив, с которым может работать PHP.

Теперь напишем код, который смотрит какое событие произошло, и если к нам пришло новое сообщение, то сравнивает сообщение, с теми, на которые у нас есть ответ и смотрит ID чата.

Теперь нам нужно как-то отвечать на эти сообщения. Для этого напишем простую функцию.

Что же тут происходит? Здесь мы строим запрос к API VK (документацию рекомендую почитать) с текстом сообщения, ID чата и токеном, который мы создали ранее, и отправляем его на сервер ВК.

Теперь соединим эти куски кода и напишем реакции бота на то или иное сообщение.

«Хорошо, а зачем нам писать ‘ok’ после отправки сообщения?»

Так как мы будем использовать метод получения обновлений с названием Call Back API, то есть сам ВКонтакте нам будет говорить о новых сообщениях, то нам нужно сказать, что мы его услышали, иначе он будет нам повторять несколько раз.

Теперь перейдём к настройке группы.

Заходим в настройки и выбираем версию API 5.87 (можно, конечно, и более новые версии, но лучше иметь единство версий API).

Из этого же раздела берём строку, которую должен вернуть сервер, и подставляем её в переменную confirmation_token.

После этого заполняем адрес сервера. Для этого нужно иметь домен и хостинг. По адресу, который Вы укажите, должен быть как раз файл с ботом. Надеюсь, с этим читатель справится сам.

Потом выбираем о каких событиях в сообществе нам будет сообщать ВКонтакте. Нам нужны только входящие сообщения.

Далее подтверждаем адрес сервера, и наш первый бот готов к использованию.

Так как это моя первая публикация на Хабре, я хочу получить замечания по статье и дальше только совершенствоваться.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>