- Підготовка серверної частини до підключення
- Налаштування спільноти ВКонтакте
- Налаштування callback API
- Налаштування типів подій
- Налаштування backend бота ВКонтакте
- Реалізація вітання при вступі до спільноти ВКонтакте
- Реалізація прощання з учасником після того, як він покинув співтовариство
Наша взаимовыгодная связь https://banwar.org/
На поточний момент більшість великих спільнот ВКонтакте вже мають ботів, актуальність цієї теми обумовлюється величезним попитом на цілодобову роботу додатка, оповіщення при вступі до спільноти і виході з нього, розсилку інформаційних повідомлень, саме бот спільноти ВКонтакте може вирішити ці завдання. У статті ми розглянемо рішення основних завдань, які часто виникають в будь-якому великому співтоваристві.
Підготовка серверної частини до підключення
Інструкція по підключенню докладно описана в чудовій документації для розробників ВКонтакте.
Розберемо її докладніше, для розміщення скрипта чат-бота ми повинні мати функціонуючий веб-сервер.
Для роботи з callback API ВКонтакте рекомендує використовувати протокол https, інструкцію з безоплатного отримання сертифіката cloudflare і настройки сервера ви зможете знайти в статті, яку можна знайти в пошуковій системі Google за запитом Безкоштовний SSL сертифікат CloudFlare.
Після закінчення настройки сервера ви повинні мати робочий web-сервер, на який ми завантажимо скрипт нашого бота.
Налаштування спільноти ВКонтакте
Генерація ключа доступу
Важливим моментом в роботі бота спільноти є відповіді на призначені для користувача повідомлення і різні події, для того, щоб ми могли взаємодіяти з користувачем від імені спільноти, нам необхідно створити спеціальний ключ. Для цього перейдемо у вкладку "Управління співтовариством".
Далі спустимося в розділ "Робота з API" -> "Ключі доступу".
Для створення ключа необхідно натиснути "Створити ключ" і вибрати необхідні права, які ми надамо нашому боту.
У нашому випадку нам вистачить доступу до повідомлень співтовариства.
Збережемо даний ключ, він нам знадобиться під час налаштування backend.
Налаштування callback API
Тепер ми повинні пов'язати наш сервер і співтовариство, для цього ми повинні вказати дані нашого сервера і створити секретний ключ. Для цього нам необхідно перейти в розділ управління спільноти і спуститися у вкладку "Робота з API".
Далі настає дуже важливий момент, нам необхідно ввести адресу нашого сервера і придумати секретний ключ, як ключ виступає будь-який рядок, а в якості адреси, відповідно, адреса до php скрипту на сервері.
Введемо секретний ключ і натискаємо «Зберегти», після ми повинні отримати відповідне повідомлення про успішну установку ключа. Кнопку «Підтвердити» навпроти поля з адресою серверу не натискаємо.
Заданий Вами секретний ключ буде передаватися з кожним повідомленням від сервера в окремому полі secret. Це дозволить Вам достовірно визначати, що повідомлення прийшло саме від нашого сервера.

Також ми повинні запам'ятати код, який повинен повернути сервер, запишіть його, він нам знадобиться під час налаштування backend.
Налаштування типів подій
Важливим моментом в роботі бота спільноти, є відповіді на призначені для користувача повідомлення і різні події, для того, щоб ми могли взаємодіяти з користувачем від імені спільноти, нам необхідно вказати які саме події ми хочемо отримувати. Так як ми збираємося відслідковувати вхідні повідомлення, вступу в співтовариства і вихід з нього, то нам необхідно встановити відповідні галочки. Для цього перейдемо у вкладку "Управління співтовариством".
Далі спустимося в розділ "Робота з API" -> "Типи подій".
Встановіть необхідні пункти в даному розділі.
Налаштування backend бота ВКонтакте
Наступним етапом ми повинні створити спеціальний скрипт, який будемо приймати запити від callback API вконтакте і певним чином реагувати на події. Створимо, наприклад, php-скрипт handler.php, адреса до цьому скрипту, після настройки backend, ми повинні вказати в настройках спільноти.
Зверніть увагу на значення наступних змінних:
$ ConfirmationToken $ token $ secretKey
У confirmationToken зберігається код, які сервер повинен повернути, в нашому випадку:
004eec27
token зберігає в собі ключ доступу, який ми генерували в розділі «Генерація ключа доступу»
secretKey ми задавали в розділі управління спільноти callback API. Підсумковий код виглядає наступним чином (handler.php):
<? Php if (! Isset ($ _ REQUEST)) {return; } // Рядок для підтвердження адреси сервера з налаштувань Callback API $ confirmationToken = '004eec27'; // Ключ доступу спільноти $ token = 'Ваш ключ'; // Secret key $ secretKey = 'testSecureKey'; // Отримуємо і декодуємо повідомлення $ data = json_decode (file_get_contents ( 'php: // input')); // перевіряємо secretKey if (strcmp ($ data-> secret, $ secretKey)! == 0 && strcmp ($ data-> type, 'confirmation')! == 0) return; // Перевіряємо, що знаходиться в полі "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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); break; // Якщо це повідомлення про вступ до групи 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' => "Ласкаво просимо в наше співтовариство МГТУ ім. Баумана ІУ5 2016, {$ 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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); break; }?>
Після того як ви завантажили код, ви повинні повернутися в розділ «Управління співтовариством» -> «Робота з API» -> «Callback API», ввести адресу до скрипта і натиснути «Підтвердити»
Після цього, конфігурація спільноти для роботи з ботом завершена, тепер, якщо ми відправимо повідомленням в співтовариство, ми отримаємо відповідь.
Реалізація вітання при вступі до спільноти ВКонтакте
На даному етапі ми вже маємо налаштований сервер і обробник бота, всі можливі події вказані в документації , Вона добре написана, рекомендую з нею ознайомитися.
Ми будемо відловлювати подія group_join, для цього в операторі switch створимо новий розділ. Ми не будемо розглядати join_type докладно, так як у нас відкрита група, але ви можете обробляти цей параметр на ваш розсуд.
// Якщо це повідомлення про вступ до групи 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' => "Ласкаво просимо в наше співтовариство МГТУ ім. Баумана ІУ5 2016, {$ 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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); break;
Повний код обробника бота ВКонтакте з функцією привітального повідомлення:
<? Php if (! Isset ($ _ REQUEST)) {return; } // Рядок для підтвердження адреси сервера з налаштувань Callback API $ confirmationToken = '004eec27'; // Ключ доступу спільноти $ token = 'Ваш ключ'; // Secret key $ secretKey = 'testSecureKey'; // Отримуємо і декодуємо повідомлення $ data = json_decode (file_get_contents ( 'php: // input')); // перевіряємо secretKey if (strcmp ($ data-> secret, $ secretKey)! == 0 && strcmp ($ data-> type, 'confirmation')! == 0) return; // Перевіряємо, що знаходиться в полі "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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); break; // Якщо це повідомлення про вступ до групи 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' => "Ласкаво просимо в наше співтовариство МГТУ ім. Баумана ІУ5 2016, {$ 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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); break; }?>
Реалізація прощання з учасником після того, як він покинув співтовариство
Реалізація ідентична, в конкретному випадку ми обробляємо group_leave
// Якщо це повідомлення про вихід з групи 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}, нам дуже шкода прощатися з вами & # 128532;". "Ми завжди будемо чекати Вас в нашій затишній компанії. "." Якщо виникли питання - зв'яжіться з адміністратором співтовариства "." Костянтин - https://vk.com/kulakovkostya ", '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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); break;
Повний лістинг коду:
<? Php if (! Isset ($ _ REQUEST)) {return; } // Рядок для підтвердження адреси сервера з налаштувань Callback API $ confirmationToken = '004eec27'; // Ключ доступу спільноти $ token = 'Ваш ключ'; // Secret key $ secretKey = 'testSecureKey'; // Отримуємо і декодуємо повідомлення $ data = json_decode (file_get_contents ( 'php: // input')); // перевіряємо secretKey if (strcmp ($ data-> secret, $ secretKey)! == 0 && strcmp ($ data-> type, 'confirmation')! == 0) return; // Перевіряємо, що знаходиться в полі "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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); break; // Якщо це повідомлення про вступ до групи 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' => "Ласкаво просимо в наше співтовариство МГТУ ім. Баумана ІУ5 2016, {$ 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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); 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}, нам дуже шкода прощатися з вами & # 128532;". "Ми завжди будемо чекати Вас в нашій затишній компанії. "." Якщо виникли питання - зв'яжіться з адміністратором співтовариства "." Костянтин - https://vk.com/kulakovkostya ", '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); // Повертаємо "ok" сервера Callback API echo ( 'ok'); break; }?>
джерело: Хабрахабр
Send?
Get?
Get?
Get?
Send?
Get?
Get?
Get?
Send?