Чат бот вк php

Чат бот вк php

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

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

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

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

Если ранее Вы не работали с 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, в мобильной и веб-версии);
  • используют приложения от сторонних разработчиков. Например, клавиатура ботов может быть недоступна в старой версии официального приложения ВКонтакте.
Читайте также:  После того как все приглашенные расположились

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

Начиная с версии 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 используемого языка.

Продолжение


По началу покажется что это не возможно, но поверьте, Вам стоит только начать и все получится. Так как бота мы будем делать на сообществе, нам нужно его создать или использовать уже созданное


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

Далее переходим: Настройки -> Работа с API -> Ключи доступа и создаем ключ со следующими параметрами:
Этого будет достаточно, так как мы будем работать с сообщениями, получаем вот такой большой код (токен)

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

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

Бота мы будем писать на PHP.

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

Создаем файл с расширением .php, например bot.php
Открываем любым редактором и начинаем писать код.
Вместе с исходником, я положу библиотеку, без нее бот работать не будет, библиотека является публичной, ее можно найти на просторах интернета, создана она очень хорошим человеком, скачать ее можно будет только после регистрации на сайте, требую мало, но оно того стоит
Библиотека упрощает работу с кодом и методами API VK.

Подключаем библиотеку:

Теперь создаем константы, они нужны для удобства


Их нужно заполнить. в кавычках вставляем тот самый длинный код (токен), вторую константу мы пока пропускаем, а в 3 пишем версию API, которую мы будем использовать. Давайте возьмем 5.81. Нам так же нужно указать и ACCESS_KEY его мы берем в сообществе.

В моем случае это: be20ea35 у Вас будет другой, копируем и вставляем во вторую константу. У Вас должно получится вот так:

Продолжаем. Теперь нам нужно создать экземпляр класса работы с api, получить и декодировать JSON пришедший из VK и сообщить VK что мы приняли callback, все это кажется сложным, но на деле все очень просто и понятно.

Получаем следующий код:


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

Теперь можно создать первую команду! Наша команда будет !бот, давайте напишем ее:

Этот код работать не будет, так как мы не создали переменные $id и $message давайте создадим их. Переменные создаем выше строки
if ($data->type == ‘message_new’) <

У нас получается следующий код:

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

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

Допустим Вы разобрались с хостингом и готовы установить туда сам скрипт. Заходим на сервер и загружаем туда наш скрипт с ботом VK и библиотеку. Саму библиотеку скачать можно только после регистрации!

Скачиваем архив, туда я так же положил и скрипт, в нем нужно будет заменить лишь токен и строку, которую скрипт возвращает VK и дописать 2 команду при желании, если она Вам будет нужна.

Читайте также:  Посоветуйте планшет для ребенка


Теперь нужно получить прямую ссылку к скрипту, в моем случае скрипт залит в корень сайта и ссылка выглядит так:

копируем ссылку, у вас будет другая, возможно состоящая даже из IP адреса, если используете игровой сервер или хостинг без домена. Возвращаемся к настройкам бота в сообществе и вставляем ссылку:

Выбираем версию API 5.81, указываем ссылку и подтверждаем, если все сделали правильно, VK сообщит нам об этом

Если сейчас написать боту, он не ответит, так как нам нужно включить тип событий:


Этого будет достаточно, что бы бот начал функционировать и отвечать нам. Давайте это проверим:


Если бот ответил, значит Вы сделали все правильно, если нет, проверьте код еще раз и убедитесь что скрипт работает, проверить можно просто перейдя по ссылке к самому скрипту

Если Вы допустили в коде ошибку, то у Вас появится Ошибка 500, это означает что Вы допустили ошибку в самом коде скрипта:

Данный бот будет работать только с хостингом, запустить с ПК скрипт не получится
(Получится, но это требует особых навыков )

Теперь наш бот отлично функционирует, а значит можно добавлять новые команды, давайте сделаем команду !дата

Создаем переменную $date и записываем в нее текущую дату и время, с помощью PHP функции date(); получаем следующий код

Теперь нам нужно создать саму команду:

Весь исходный код выглядит так:

У нас получилось всего 45 строк кода

Что бы Вы понимали, бот KotOFF и Conference Kot содержит 1761 строку кода! Хотя функционал не самый большой на данный момент.

Давайте проверим работу команды:

Отлично! Все работает. Если данная статья будет интересна, я напишу продолжение и там мы будем создавать новые команды для нашего бота, а пока только вводный курс о создании собственного бота с удобной и очень классной библиотекой, которая помогает упросить код и облегчить работу с методами API. Вместе с Вами учусь и я, ведь я не являюсь программистом и делюсь с вами личным опытом, который я получил совсем недавно.

UPD: Что бы бот отвечал и в беседах нужно заменить частично код, инструкция ниже

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

На этом у меня все, со временем буду корректировать статью и дополнять ее.

Данный бот отлично подойдет как автоответчик или инструкция (FAQ) для вашего сообщества.

Скачать архив с ботом и библиотекой можно после регистрации на сайте! Регистрация доступна через социальные сети 🙂

Продолжаем цикл статей посвященный написанию чат-ботов для социальных сетей на php. Прошлый раз мы создавали бота для Телеграм, а в этот раз я расскажу как сделать аналогичного бота для ВКонтакте. Забегая вперед скажу, что сегодня мы не будем использовать ВКшный PHP SDK и наш бот будет состоять лишь из одного файла (про SDK поговорим в другой раз).

Также, как и в случае с Телеграмм ботом нам потребуются минимальные навыки программирования на php, хостинг и ssl сертификат. Готовы? Приступим!

Что будет уметь наш бот?

Возможности бота ограничены лишь фантазией программиста (благо api вк многое позволяет), поэтому для примера наш бот будет уметь лишь самое простое, а именно:

  1. Отправлять уведомления при вступлении в сообщество;
  2. Отвечать в случае если пользователь отправил ЛС в чат группы;
  3. Отправлять уведомление в момент когда пользователь покидает группу.

Начинаем создавать бота

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

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

Далее нам предложат подтвердить действие через мобильное уведомления в приложении ВК или по СМС. Я выбрал второе. Получил код по СМС и ввел его.

Далее ВКонтакте генерирует для нас длинный проверочный ключ (token). Запишем его куда-нибудь (например в блокнот). В дальнейшем он нам понадобится для написания кода.

Теперь перейдем во вкладку Callback API->Настройки сервера. Здесь нас интересуют сразу 3 вещи: Адрес, Строка, которую должен вернуть сервер и Секретный ключ. Адрес пока пропустим (в целом вы можете сразу его заполнить если определились с тем, где будет лежать основной файл нашего php-бота, но поскольку сам файл еще не создан, то ВК будет ругаться, ибо сразу после ввода url соцсеть отправляет POST-запрос на проверку доступности бота по указанному адресу). Скопируем значение напротив “Строка, которую должен вернуть сервер” (confirmationToken). (в нашем случае это tt32e1. Придумает Секретный ключ (secretKey). Не забываем нажать “Сохранить”.

Читайте также:  Поменять висту на 7


Итак, на выходе у нас должны быть где-то записаны 3 вещи:

Теперь можно приступить к написанию php кода.

Как создать бота в ВК (кодинг на php)

Начинаем писать файл нашего бота ВКонтакте. Назовем его vk_bot.php. Напомню, что код необходимо писать в кодировке UTF-8 (без BOOM).

Определимся с константами:

if (!isset($_REQUEST))
// Строка, которую должен вернуть сервер (См. Callback API->Настройки сервера)
$confirmationToken = ‘tt32e1’;
// Ключ доступа сообщества (длинная строчка которую получили нажав "создать ключ")
$token = ‘тутбудетмногобуквицифр’;
// Секретный ключ. (Задаем в Callback API->Настройки сервера)
$secretKey = ‘testKeyMyBot’;

Теперь проверим поступившие данные:

// Получаем и декодируем уведомление
$data = json_decode(file_get_contents(‘php://input’));
// проверяем secretKey
if (strcmp($data->secret, $secretKey) !== 0 && strcmp($data->type, ‘confirmation’) !== 0)

Используя switch проверим, что находится в поле “type” (какое событие сработало и в зависимости от этого сформируем ответ).

// Проверяем, что находится в поле "type"
switch ($data->type) <
// Запрос для подтверждения адреса сервера (посылает ВК)
case ‘confirmation’:
echo $confirmationToken; // отправляем строку для подтверждения адреса
break;
// Если это уведомление о новом сообщении.
case ‘message_new’:
// получаем id автора сообщения
$user >object->user_id;
// через users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ > // Вытаскиваем имя отправителя
$user_name = $userInfo->response[0]->first_name;
// Через messages.send используя токен сообщества отправляем ответ
$request_params = array(
‘message’ => "<$user_name>, Ваше сообщение получено!
В ближайшее время админ группы на него ответит.",
‘user_id’ => $userId,
‘access_token’ => $token,
‘v’ => ‘5.0’
);
$get_params = http_build_query($request_params);
file_get_contents(‘https://api.vk.com/method/messages.send?’. $get_params);
echo(‘ok’); // Возвращаем "ok" серверу Callback API
break;
>

Небольшое пояснение:

Когда юзер отправляет сообщение в чат с группой срабатывает событие. Событие представляет собой JSON, имеющий следующую структуру:

В зависимости от того, что нам пришло в type, мы можем понять, какая структура будет у объекта object. Полный список возможных событий см. в официальной справке ВКонтакте.

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

Теперь можно закачать наш с вами файл на сервер и заполнить в настройках адрес (если не сделали этого ранее).

Кроме этого необходимо перейти во вкладку “Типы событий” и поставить галочку напротив “Входящие сообщения”.

Теперь можем проверить работу:

Как видим – все пашет. По сути у нас уже получилось сделать бота в вк. Давайте его немного прокачаем.

Добавим в конструкцию case еще 2 условия. Первое – отправит уведомлений в случае если человек вступил в нашу группу:

// Сработало событие — человек вступил в группу
case ‘group_join’:
// получаем id автора сообщения
$user >object->user_id;
// через users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ > // Вытаскиваем имя отправителя
$user_name = $userInfo->response[0]->first_name;
// Через messages.send используя токен сообщества отправляем ответ
$request_params = array(
‘message’ => "Добро пожаловать в группу, <$user_name>!",
‘user_id’ => $userId,
‘access_token’ => $token,
‘v’ => ‘5.0’
);
$get_params = http_build_query($request_params);
file_get_contents(‘https://api.vk.com/method/messages.send?’. $get_params);
echo(‘ok’); // Возвращаем "ok" серверу Callback API
break;

Второе – аналогичное уведомление, но только в момент, когда человек покинет сообщество:

// Сработало событие — человек покинул группу
case ‘group_leave’:
// получаем id автора сообщения
$user >object->user_id;
// через users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ > // Вытаскиваем имя отправителя
$user_name = $userInfo->response[0]->first_name;
// Через messages.send используя токен сообщества отправляем ответ
$request_params = array(
‘message’ => "<$user_name>, нам очень жаль, что вы покинули нашу группу!",
‘user_id’ => $userId,
‘access_token’ => $token,
‘v’ => ‘5.0’
);
$get_params = http_build_query($request_params);
file_get_contents(‘https://api.vk.com/method/messages.send?’. $get_params);
echo(‘ok’); // Возвращаем "ok" серверу Callback API
break;

Не забудем добавить соответсвтующие галочки напротив нужных нам событий в настройках группы:

Чего нельзя делать ботам

Не лишним будет процитировать один из разделов справки ВК:

Любой пользователь с базовыми навыками программирования может создать чат-бота ВКонтакте. Ботов можно написать для разных целей: от поиска рецептов до обработки фотографий. Их возможности ограничены только Вашей фантазией и правилами, которые мы разработали для того, чтобы боты использовались только в благих целях.

Прежде чем продолжить работу с бот-платформой, убедитесь, что все руководители сообщества ознакомлены с этими правилами. За их нарушение сообщество может быть заблокировано.

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

Теперь вы знаете как создавать своего бота в ВК. Исходники урока можно скачать тут. В следующий раз поговорим о работе с PHP SDK для вк-ботов. Если у вас остались вопросы – задавайте в комментах. И не забываем репостить и лайкать эту статью)

Ссылка на основную публикацию
Adblock detector