В данной статье мы рассмотрим пошаговую инструкцию от настройки сервера до включения бота в работу. Если некоторые шаги Вам известны, можете их пропустить.
3. Настройка бота в VK и Telegram
Первым делом нужно настроить сервер, на нашем сайте есть несколько статей на эту тему, но сейчас я расскажу еще раз в краце.
Покупаем сервер если нет — Я рекомендую FirstVds нам подойдет самый дешевый тариф, на данный момент это тариф Прогрев за 199р Или вы можете подыскать сервер с похожей конфигурацией.
Далее настраиваем сам сервер, для Telegram требуется SSL сертификат, иначе мы не сможем установить webhook (Обработчик), подробнее об этом есть в нашей статье [PHP] Создание простого Telegram-бота на простой библиотеке. Что бы все заработало вам понадобится домен. Купить его можно на REG.ru или любом другом агрегаторе доменных имен, стоимость домена на 1 год составляет от 100р в зависимости от выбранной вами зоны, ru, su, com, org и т. д.
Я всегда беру сервера с установленной панелью ISPManager, да, это стоит определенных денег, но в тоже время экономит ваше время, упрощает работу с сервером и много различных удобств, это идеально подходит как новичку, так и постоянному обывателю.
После успешного подключения домена нам понадобится файловый менеджер, я так же могу рекомендовать WinSCP один из лучших файловых менеджеров. открываем папку с нашим сайтом и для удобства создадим там еще одну папку под названием bot
Туда мы и будем загружать все наши файлы
Для работы нам понадобится 2 библиотеки, бот будет максимально простым, но если статья будет вам интересна и вам захочется дальнейшее развитие темы с подключением базы данных и расширение функционала, то пишите об этом в комментариях!
Библиотека для работы с ВК:
Библиотека для работы с Telegram
Скачиваем архивы и загружаем в ранее созданную папку bot на этом этапе мы закончили и приступаем к настройке наших будущих ботов
Для начала настроим наш бот Вконтакте. Для этого выбираем будущее сообщество под нашего бота и переходим в раздел настройки — Работа с API и создаем токен:
Копируем наш ключ доступа и сохраняем куда-нибудь, он нам пригодится в дальнейшем. Далее на этой же вкладки открываем Calback API и настраиваем
Тут нам нужно указать путь до файла с ботом, его предварительно нужно создать в корне папки bot с названием bot.php и добавить туда следующий код:
<?php
echo '320105f2';
echo '320105f2'; — это строка которую нужно вернуть на запрос от вк,
У вас будет другой код в строке, его и нужно туда вставлять. Далее нажимаем кнопку Подтвердить и должны получить следующее сообщение:
Значит мы все сделали правильно и теперь настраиваем бот в Telegram
Для этого нужно написать https://t.me/BotFather команду /newbot и следовать дальнейшим инструкциям, вот как это сделал я:
Здесь мы копируем токен который указан после Use this token to access the HTTP API: на него достаточно просто нажать один раз и он скопируется
Теперь в бразуере вставляем ссылку следующего вида (Заменив ВАШДОМЕН на свой) и заменить {ТОКЕН} на свой
https://api.telegram.org/bot{ТОКЕН}/setWebhook?url=https://ВАШДОМЕН/bot/bot.php
В бразуере должно отобразиться это:
{"ok":true,"result":true,"description":"Webhook was set"}
Значит мы все сделали правильно. Теперь начинаем писать код.
Подключаем наши библиотеки в код,
require_once 'telelibonphp-master/tgLib.php'; //Подключаем библиотеку TG
require_once "simplevk-master/autoload.php"; //Подключаем библиотеку VK
Далее нам нужно сделать проверку откуда именно приходит событие и как нам его обрабатывать:
$data = json_decode(file_get_contents('php://input'),true);
$group_id = $data['group_id'] ?? null;
if ($group_id !== null) {
$vk = vk_api::create('Ваш апи ключ из ВК', '5.131')->setConfirm('320105f2');
$vk->initVars($peer_id, $message, $payload, $user_id, $type, $data); // Инициализация переменных
} else {
$vk = new tgBot('ВАШ ТОКЕН из telegram');
$message = $data['callback_query']['message']['text'] ?? $data['message']['text'] ?? null;
$peer_id = $data['callback_query']['message']['chat']['id'] ?? $data['message']['chat']['id'] ?? null;
$user_id = $data['callback_query']['message']['from']['id'] ?? $data['message']['from']['id'] ?? null;
}
Здесь мы проверяем с помощью GROUP_ID откуда приходит событие, так как в Telegram нет такого поля, то соответственно оно будет пустым
Далее нам остается добавить несколько команд и классический ответ если ни одна из команд не будет указана:
$command = explode(' ', mb_strtolower($message));
// Обработка команд
if ($command[0] == 'время') {
$date = date('d.m.y H:i:s');
$vk->sendMessage($peer_id, "Серверное время: $date");
exit;
}
if ($command[0] == 'инфо') {
$vk->sendMessage($peer_id, "Я бот и я умею работать в ВК и Телеграмм");
exit;
}
// Класичиский ответ
$vk->sendMessage($peer_id, "Приветик :)");
Итоговый код получается следующий:
<?php
require_once 'telelibonphp-master/tgLib.php'; //Подключаем библиотеку TG
require_once "simplevk-master/autoload.php"; //Подключаем библиотеку VK
use DigitalStar\vk_api\vk_api;
$data = json_decode(file_get_contents('php://input'),true);
$group_id = $data['group_id'] ?? null;
if ($group_id !== null) {
$vk = vk_api::create('Ваш апи ключ из ВК', '5.131')->setConfirm('320105f2');
$vk->initVars($peer_id, $message, $payload, $user_id, $type, $data); // Инициализация переменных
} else {
$vk = new tgBot('ВАШ ТОКЕН из telegram');
$message = $data['callback_query']['message']['text'] ?? $data['message']['text'] ?? null;
$peer_id = $data['callback_query']['message']['chat']['id'] ?? $data['message']['chat']['id'] ?? null;
$user_id = $data['callback_query']['message']['from']['id'] ?? $data['message']['from']['id'] ?? null;
}
$command = explode(' ', mb_strtolower($message));
// Обработка команд
if ($command[0] == 'время') {
$date = date('d.m.y H:i:s');
$vk->sendMessage($peer_id, "Серверное время: $date");
exit;
}
if ($command[0] == 'инфо') {
$vk->sendMessage($peer_id, "Я бот и я умею работать в ВК и Телеграмм");
exit;
}
// Класичиский ответ
$vk->sendMessage($peer_id, "Приветик :)");
Теперь давайте проверим наших ботов в деле (Слева Telegram, справа Вконтакте):
Преимущество в этом примере что Вы пишите 1 код, а он сразу работает в обоих мессенджерах, это очень удобно. Это лишь малая часть что можно сделать используя такую конструкцию, но не стоит забывать что некоторые функции отличаются, например кнопки, тут нужно учитывать что они имеют разный тип. Давайте добавим команду с 1 кнопкой, но так, что бы она работала в обоих мессенджерах
Добавляем команду:
if ($command[0] == 'кнопка') {
if ($platform == 'vk'){ // Если событие из вк
// Кнопка ВК
$started = $vk->buttonText('Нажми меня', 'green', ['command' => 'play']);
$kbd = [[$started]];
} else { // Иначе вставляем кнопку для телеги
// Кнопка TG
$kbd = [
'inline_keyboard' => [
[['text' => 'Нажми меня', 'callback_data' => 'play']]
]
];
}
$vk->sendButton($peer_id, "Держи кнопку, но знай, она отличается от выбраного месенджера", $kbd);
exit;
}
У нас появились новые переменные, их так же нужно добавить в код выше, вот так:
<?php
require_once 'telelibonphp-master/tgLib.php'; //Подключаем библиотеку TG
require_once "simplevk-master/autoload.php"; //Подключаем библиотеку VK
use DigitalStar\vk_api\vk_api;
$data = json_decode(file_get_contents('php://input'),true);
$group_id = $data['group_id'] ?? null;
$platform = '';
if ($group_id !== null) {
$vk = vk_api::create('Ваш апи ключ из ВК', '5.131')->setConfirm('320105f2');
$vk->initVars($peer_id, $message, $payload, $user_id, $type, $data); // Инициализация переменных
$payload = $payload['command'];
$platform = 'vk';
} else {
$vk = new tgBot('ВАШ ТОКЕН из telegram');
$message = $data['callback_query']['message']['text'] ?? $data['message']['text'] ?? null;
$peer_id = $data['callback_query']['message']['chat']['id'] ?? $data['message']['chat']['id'] ?? null;
$user_id = $data['callback_query']['message']['from']['id'] ?? $data['message']['from']['id'] ?? null;
$payload = $data['callback_query']['data'];
$platform = 'tg';
}
Весь код нашего бота:
<?php
require_once 'telelibonphp-master/tgLib.php'; //Подключаем библиотеку TG
require_once "simplevk-master/autoload.php"; //Подключаем библиотеку VK
use DigitalStar\vk_api\vk_api;
$data = json_decode(file_get_contents('php://input'),true);
$group_id = $data['group_id'] ?? null;
$platform = '';
if ($group_id !== null) {
$vk = vk_api::create('Ваш апи ключ из ВК', '5.131')->setConfirm('320105f2');
$vk->initVars($peer_id, $message, $payload, $user_id, $type, $data); // Инициализация переменных
$payload = $payload['command'];
$platform = 'vk';
} else {
$vk = new tgBot('ВАШ ТОКЕН из telegram');
$message = $data['callback_query']['message']['text'] ?? $data['message']['text'] ?? null;
$peer_id = $data['callback_query']['message']['chat']['id'] ?? $data['message']['chat']['id'] ?? null;
$user_id = $data['callback_query']['message']['from']['id'] ?? $data['message']['from']['id'] ?? null;
$payload = $data['callback_query']['data'];
$platform = 'tg';
}
$command = explode(' ', mb_strtolower($message));
// Обработка команд
if ($command[0] == 'время') {
$date = date('d.m.y H:i:s');
$vk->sendMessage($peer_id, "Серверное время: $date");
exit;
}
if ($command[0] == 'инфо') {
$vk->sendMessage($peer_id, "Я бот и я умею работать в ВК и Телеграмм");
exit;
}
if ($command[0] == 'кнопка') {
if ($platform == 'vk'){ // Если событие из вк
// Кнопка ВК
$started = $vk->buttonText('Нажми меня', 'green', ['command' => 'play']);
$kbd = [[$started]];
} else { // Иначе вставляем кнопку для телеги
// Кнопка TG
$kbd = [
'inline_keyboard' => [
[['text' => 'Нажми меня', 'callback_data' => 'play']]
]
];
}
$vk->sendButton($peer_id, "Держи кнопку, но знай, она отличается от выбраного месенджера", $kbd);
exit;
}
// Класичиский ответ
$vk->sendMessage($peer_id, "Приветик :)");
И вот так это выглядит:
Для обработки нажатия кнопок достаточно добавить следующее:
if ($payload == 'play'){
$vk->sendMessage($peer_id, "Ты нажал кнопку и я выполяю на это какое-то событие...");
exit;
}
Результат:
Архив с исходником и всеми библиотеками:
Подведем итоги. Можно сделать выводы что написать бот для ВК и одновременно для Телеграмм не такая сложная задача как может показаться на первый взгляд. Пробуйте и творите своих ботов, ведь это своего рода искусство, где каждый создает что-то интересное.
Если углубляться в работу библиотек то вполне реально сделать их совмещеными, где даже не придется определять откуда приходит запрос, но для начального изучения я рекомендую использовать именно 2 разные библиотеки ведь в телеграме намного больше возможностей для создания ботов, в следующей статье я расскажу о некоторых прикольных фишках для ботов В Telegram.
Ваш KotOFF.net
Перед публикацией, советую ознакомится с правилами!
Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter