Как написать бота для вк на php
Перейти к содержимому

Как написать бота для вк на php

  • автор:

Name already in use

Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Простое решение для создания бота ВКонтакте.

Чтобы начать создавать своего бота подключите библиотеку, укажите токен сообщества и используемую версию API

При первом подключении VK отправит подтверждение и бот отправит ключ CallBack:

1. Отправка сообщения

Чтобы отправить сообщение пользователю, выполните:

Вы также можете прикрепить к сообщению, например, фотографию:

Для отправки сообщения более чем одному человеку, используйте:

Где «6098838, 291457291, 390511105» — ID пользователей, которым необходимо отправить сообщение (максимальное количество ID — 100 штук). К сообщениям также можно прикрепить, например, фотографию.

Если Вы хотите отправить сообщения с клавитурой, то выполните:

Где $btn — кнопка, которую необходимо отправить (подробнее про кнопки ниже). После кнопок укажите true или false — параметр, который отвечает за показ inline кнопок. Если указано значение true, то кнопки будут отображаться прямо в сообщении. При значении false кнопки будут находиться под полем ввода.

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

[$btn, $btn1, $btn2] — Первый ряд кнопок (максиальное количество рядов: 10, а количество кнопок в ряду: 4). Каждый новый ряд указывается в квадратных скобках и отделяется от предыдущего запятой.

Сообщения с клавиатурой также поддерживают прикрепление документов (например, фотографий):

Для отправки сообщения с кнопкой и вложением (по желанию) сразу нескольким пользователям (до 100 человек), используйте:

Где $user_ids — список пользователей, которым необходимо отправить сообщения. Пример: 6098838, 291457291, 390511105

Библиотека поддерживает отправку клавиатуры. Поддерживаемые виды кнопок:

  • Text (обычная кнопка с действием или без)
  • Link (кнопка, которая открывает ссылку при нажатии)
  • Location (кнопка, при нажатии на которую пользователь отправляет свою геолокацию)
  • CallBack (кнопка, которая позволяет без отправки сообщения от пользователя получить уведомление о нажатии на кнопку и выполнить необходимое действие)

Где Payload — действие, которое будет совершено при нажатии на кнопку, green — цвет кнопки. Поддерживаемые цвета:

  • Red (negative, красный цвет)
  • Green (positive, зеленый цвет)
  • White (secondary, белый/серый цвет)
  • Blue (primary, синий цвет)

Кнопка открывает указанную ссылку при нажатии, однако она не способна совершать действия (payload’ы)

Кнопка открывает окно выбора геолокации и отправляет ее боту.

Где show_snackbar — тип действия, которое будет совершено при нажатии на кнопку. Доступные варианты:

  • show_snackbar — отображение уведомления (доступно с мобильных устройств)
  • open_link — открыть ссылку. При этом «text» => ‘Привет мир!’ необходимо заменить на «link» => ‘ссылка’
  • open_app — открыть VK Mini App. При этом «text» => ‘Привет мир!’ необходимо заменить на «app_id» => ‘id приложения’, «owner_id» => ‘id владельца’, «hash» => ‘хэш’

Благодаря Payload’ам кнопки не являются бесполезными. Они могут, например, открывать другие меню или выполнять другие команды. После нажатия на кнопку она отправляет запрос с данными, благодаря которым бот и понимает, что была нажата та или иная кнопка:

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

Реакции на действия пользователя в сообществе

Предположим, что пользователь поставил лайк на запись, а Вы хотите его отблагодарить (необходимо включить: Записи на стене -> Добавление лайка):

Реакция на репост записи (необходимо включить: Записи на стене -> Репост):

Если Вам важен ID поста, который репостнул человек, то он хранится в переменной $post_id. Таким образом можно добавить реакцию на конкретный пост:

Реакция на комментарий записи сообщества (необходимо включить: Записи на стене -> Добавление):

Создание бота Вк на языке PHP — уроки API Вк

Боты стали новой эпохой в соц сетях и мессенджерах. Мы расскажем как создать настоящего бота на PHP, используя API социальной сети Вконтакте.

Для создание ботов в социальной сети Вконтакте нужно несколько вещей:

  1. Специальный standalone token ;
  2. Токен вашей группы;
  3. Сам скрипт с ботом;
  4. Группа с подключенным сервером и API.

Получение токена

Первым делом необходимо получить standalone token вместе с токеном вашей группы. Для этого переходим в раздел для разработчиков и в » Мои приложения «. Здесь создаем новое приложение. Название приложения можете выбрать любым, главное чтобы оно было Standalone-приложение.

Включите Open API после создания приложения. В него пропишите сайт, с которым будет связано ваше приложение, а также базовый домен. В нашем случае это itProger.com .

После этого необходимо перейти по этой ссылке . Также вы её видите ниже:

Единственное, вам необходимо изменить client_id и установить чтобы оно было равным ID вашего приложения.

Далее вы нажимаете на кнопку Разрешить и после этого получаете токен, который будет записан в ссылке. Копируете токен от знака равенства ( = ) и до амперсанда ( & ).

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

Создание самого бота

Для создания бота нам понадобиться три файла:

  • config — файл служащий исключительно для нас. В нем мы запишем различные настройки и данные, которые сможем в дальнейшем использовать в других файлах;
  • photos — файл для обработки альбома. В этом файле мы будем обрабатывать альбом, получать из него все изображение и записывать их в новый txt файл в специальном формате, который в дальнейшем будем передавать в качестве прикрепленного изображения к сообщению;
  • bot — основной файл с ботом. Здесь мы прописываем обработку данных от пользователя, а также передачу сообщений от бота к пользователю Вконтакте.

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

Детальное описание создания бота на языке PHP под систему Вконтакте:

Последнее что необходимо будет сделать, так это прописать URL адрес скрипта bot.php в группе, в настройках API:

После этого можете написать сообщение в группу и бот будет вам отвечать. Напишите «Фото в студио» и бот пришлет вам случайную фотографию из альбома.

Больше интересных новостей

Какую программу выбрать для создания игры?Какую программу выбрать для создания игры?
Google отказался от работы над полностью автономной машинойGoogle отказался от работы над полностью автономной машиной
Что такое язык Elm? Основные характеристикиЧто такое язык Elm? Основные характеристики
Устаревшие языки, которые уже не стоит изучатьУстаревшие языки, которые уже не стоит изучать

КАК СОЗДАТЬ БОТ ВК НА PHP (ИНСТРУКЦИЯ)

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

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

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

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

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

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

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

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

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

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

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

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

  1. confirmationToken
  2. token
  3. secretKey

Теперь можно приступить к написанию 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 автора сообщения
$userId = $data->object->user_id;
// через users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents(«https://api.vk.com/method/users.get?user_ids=<$userId>&v=5.0″));
// Вытаскиваем имя отправителя
$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 автора сообщения
$userId = $data->object->user_id;
// через users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents(«https://api.vk.com/method/users.get?user_ids=<$userId>&v=5.0″));
// Вытаскиваем имя отправителя
$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 автора сообщения
$userId = $data->object->user_id;
// через users.get получаем данные об авторе
$userInfo = json_decode(file_get_contents(«https://api.vk.com/method/users.get?user_ids=<$userId>&v=5.0″));
// Вытаскиваем имя отправителя
$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 для вк-ботов. Если у вас остались вопросы — задавайте в комментах. И не забываем репостить и лайкать эту статью)

Читайте также

Бывают ситуации, например, когда предопределённых в конфиге Laravel подключений к базам данных не достаточно и возникает потребность создавать подключения динамически…

Казалось бы http_build_query — простая функция, однако, имеет некоторые особенности. Нельзя однозначно сказать что это баг, скорее просто недокументированная фича,…

Стандартные библиотеки PHP умеют генерировать только целые случайные числа. Однако, возникают задачи где нужно не целое рандомное число с максимально…

Первый бот на PHP для ВКонтакте

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

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

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

image

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

image

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

image

Мы будем писать код на языке 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).

image

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

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

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

image

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

image

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

Добавить комментарий

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