PaZiTiF Опубликовано 4 августа, 2020 Жалоба Поделиться Опубликовано 4 августа, 2020 Как же все таки создать своего telegram бота на Laravel? Для создания нам понадобится: Оффициальная документация по Laravel (я думаю что с установкой не будет проблем); Регистрация нашего бота у @BotFather; Установка библиотеки для работы с Telegram API из Github Репозитория; Еще нам нужно доменное имя с SSL Сертификатом (https протокол), ибо телеграм без сертификата не будет слушать наш сервер через WebHook; Ну что, начнем с регистрации нишего бота у @BotFather Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» - @BotFather, чтобы получить токен (ключ) для работы с Telegram API. Открываете чат с @BotFather; Вводите или выбираете из списка команду /newbot; Отправляете желаемое название для бота; Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». Например, CmsToolsBot; По желанию можно сразу настроить полное или краткое описание, список команд и аватарку. По итогу регистрации получаем наш токен — 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s (данный токен не рабочий). Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @BotFather, нажав на кнопку «Revoke current token» в разделе «API Token». Создадим нашего бота Писать код бота будем на Laravel, но чтобы ничего не изобретать, воспользуемся уже готовой и очень удобной Библиотекой. Первое что нам понадобится, так это привязать через метод SetWebhook бота к нашему файлу-обработчику. Сделать это можно при помощи библиотеки, но есть вариант быстрее и проще – это построить вот такую ссылку: https:// api. telegram. org/bot375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s/setWebhook?url=https:// site.ru/bot/webhook, где: 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s — это наш токен; https:// site.ru/bot/webhook - ссылка на файл-обработчик на нашем сайте; Открыв в браузере эту ссылку, должен прийти JSON-ответ со значением «Webhook was set», что будет означать, что вебхук установлен, и теперь все запросы от пользователей будут присылаться по адресу файла-обработчика. Ну а теперь самое интерестное, мы уже установили наш Laravel Framework, теперь нам нужно установить библиотеку и создать обработчик, который будет доступен по ссылке https:// site.ru/bot/webhook. Для установки библиотеки, нам понадобится composer (если у Вас не работает композер, то в гугле можно найти много мануалов по использованию и настройке). Ядро composer и vendor папки с установленными библиотеками у laravel находится в корневой папке, так что заходим туда и через терминал (командную строку) пишем команду установки библиотеки: Цитата composer require telegram-bot/api Теперь у нас все готово к написанию обработчика который будет слушать telegram через WebHook. Нам нужно прежде всего создать контроллер, в котором и будет наша функция связи с телеграм. В той же корневой папке через терминал вводим команду для создания нашего контроллера: php artisan make:controller BotController, данная команда автоматически создаст app\Http\Controllers\BotController.php (можно ознакомится с офф документацией по контроллерам), и сразу же создадим роутер чтобы наша ссылка получила формат https:// site.ru/bot/webhook. Нам нужно добавить код routes в файл routes\web.php (так же есть документация по роутерам): Route::group(['prefix' => 'bot', 'middleware' => 'web'], function () { Route::post('webhook', 'BotController@index'); }); И еще так как все post запросы в laravel проходят только с CSRF токеном, то для префикса bot нам нужно сделать исключение, идем в файл app\Http\Middleware\VerifyCsrfToken.php и добавляем исключение: /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ //'api/*', 'bot/*' ]; BotController@index - данная строчка значит что мы обращаемся к контроллеру BotController и функции с названием index. Ну а теперь и код контроллера: <?php namespace App\Http\Controllers; use TelegramBot\Api\Client; // подключение библиотеки Telegram API use TelegramBot\Api\Types\ReplyKeyboardMarkup; // использование ReplyKeyboardMarkup (основное меню) use TelegramBot\Api\Types\Inline\InlineKeyboardMarkup; // использование InlineKeyboardMarkup (кнопки под сообщением) class BotController extends Controller { public function index() { // Подключение сайта к Telegram API // Пример token - 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s $bot = new \TelegramBot\Api\Client('token'); // Стандартная команда /start // Таким образом можно создать любую команду $bot->command('start', function ($message) use ($bot) { $answer = 'Добро пожаловать!'; $bot->sendMessage($message->getChat()->getId(), $answer); }); // Пример кнопок у сообщений - команда /keyboard $bot->command('keyboard', function ($message) use ($bot) { $answer = 'Предоставленные кнопки!'; $testKey = new InlineKeyboardMarkup( [ [ ['callback_data' => 'test', 'text' => 'Тестовая кнопка'] ] ] ); $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null, $testKey); }); // пример кнопок меню под строкой ввода /menu $bot->command('menu', function ($message) use ($bot) { $answer = 'Сообщение показывается и снизу появятся кнопки'; $StartKeyboard = new ReplyKeyboardMarkup( [ [ "Привет" ], [ "/start", "/keyboard" ] ], true, true ); $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null, $StartKeyboard); }); // Обработка кнопок у сообщений $bot->on(function ($Update) use ($bot) { $callback = $Update->getCallbackQuery(); $message = $callback->getMessage(); // получаем сообщение $cid = $callback->getFrom()->getId(); // уникальный идентификатор chat_id $data = $callback->getData(); // название команды переданный с кнопки у сообщения // пример обработки команды с кнопки if ($data == "test") { $answer = "Пример сообщения с кнопки :)"; // данная функция будет не отправлять сообщение, а редактировать предыдущее сообщение с кнопками $bot->editMessageText($message->getChat()->getId(), $message->getMessageId(), $answer, 'HTML'); $bot->answerCallbackQuery($callback->getId()); // убираем загрузку на кнопке //$bot->answerCallbackQuery($callback->getId(), 'Всплывающее сообщение'); // убирает загрузку на кнопке и показывает сообщение } // убираем вечное обновление (данная проблема только на Laravel, на чистом php вечного обновления нету) if (empty($data)) return true; else return false; }, function ($Update) { try { $callback = $Update->getCallbackQuery(); if (is_null($callback) || !strlen($callback->getData())) return false; return true; } catch (\Exception $e) { return false; } }); // Отлов любых сообщений + обработка reply-кнопок $bot->on(function ($Update) use ($bot) { $message = $Update->getMessage(); // получаем инфо о сообщениях $mtext = $message->getText(); // получаем текст отправленого сообщения пользователем $cid = $message->getChat()->getId(); // получаем chat_id (уникальный ид пользователя в телеграм) // Пример проверки сообщения if (mb_stripos($mtext, "Привет") !== false) { $answer = "Привет, " . $message->getChat()->getFirstName(); // будет отправлено сообщение в ответ "Привет, Konstantin" $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null); } }, function ($message) { return true; }); // Запуск бота if (!empty($bot->getRawBody())) { try { $bot->run(); } catch (\Exception $e) { // можно добавить функцию уведомления администратора о возможных ошибках } } } } ?> Таким образом можно создать telegram бота любой сложности, от простого новостного бота, до онлайн игр методом команд, примеров таких ботов полно. Работоспособность всех кнопок и команд можно посмотреть на примере одного из моих ботов @InstaSunriseBot, в нем реализованы все коды команд и даже больше и данная библиотека позволяет управлять телеграм каналами через бота, к примеру он может следить за чатом... Если будет интерестная тематика по ботам и различным приложениям на ларавел, могу еще пару статей выложить... Так же можно задать мне вопросы в телеграм @syfer_dev Всем спасибо за внимание 1 4 Ссылка на комментарий Поделиться на другие сайты Поделиться
Klaus Опубликовано 4 августа, 2020 Жалоба Поделиться Опубликовано 4 августа, 2020 2 часа назад, PaZiTiF сказал: Как же все таки создать своего telegram бота на Laravel? Для создания нам понадобится: Оффициальная документация по Laravel (я думаю что с установкой не будет проблем); Регистрация нашего бота у @BotFather; Установка библиотеки для работы с Telegram API из Github Репозитория; Еще нам нужно доменное имя с SSL Сертификатом (https протокол), ибо телеграм без сертификата не будет слушать наш сервер через WebHook; Ну что, начнем с регистрации нишего бота у @BotFather Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» - @BotFather, чтобы получить токен (ключ) для работы с Telegram API. Открываете чат с @BotFather; Вводите или выбираете из списка команду /newbot; Отправляете желаемое название для бота; Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». Например, CmsToolsBot; По желанию можно сразу настроить полное или краткое описание, список команд и аватарку. По итогу регистрации получаем наш токен — 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s (данный токен не рабочий). Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @BotFather, нажав на кнопку «Revoke current token» в разделе «API Token». Создадим нашего бота Писать код бота будем на Laravel, но чтобы ничего не изобретать, воспользуемся уже готовой и очень удобной Библиотекой. Первое что нам понадобится, так это привязать через метод SetWebhook бота к нашему файлу-обработчику. Сделать это можно при помощи библиотеки, но есть вариант быстрее и проще – это построить вот такую ссылку: https:// api. telegram. org/bot375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s/setWebhook?url=https:// site.ru/bot/webhook, где: 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s — это наш токен; https:// site.ru/bot/webhook - ссылка на файл-обработчик на нашем сайте; Открыв в браузере эту ссылку, должен прийти JSON-ответ со значением «Webhook was set», что будет означать, что вебхук установлен, и теперь все запросы от пользователей будут присылаться по адресу файла-обработчика. Ну а теперь самое интерестное, мы уже установили наш Laravel Framework, теперь нам нужно установить библиотеку и создать обработчик, который будет доступен по ссылке https:// site.ru/bot/webhook. Для установки библиотеки, нам понадобится composer (если у Вас не работает композер, то в гугле можно найти много мануалов по использованию и настройке). Ядро composer и vendor папки с установленными библиотеками у laravel находится в корневой папке, так что заходим туда и через терминал (командную строку) пишем команду установки библиотеки: Теперь у нас все готово к написанию обработчика который будет слушать telegram через WebHook. Нам нужно прежде всего создать контроллер, в котором и будет наша функция связи с телеграм. В той же корневой папке через терминал вводим команду для создания нашего контроллера: php artisan make:controller BotController, данная команда автоматически создаст app\Http\Controllers\BotController.php (можно ознакомится с офф документацией по контроллерам), и сразу же создадим роутер чтобы наша ссылка получила формат https:// site.ru/bot/webhook. Нам нужно добавить код routes в файл routes\web.php (так же есть документация по роутерам😞 Route::group(['prefix' => 'bot', 'middleware' => 'web'], function () { Route::post('webhook', 'BotController@index'); }); И еще так как все post запросы в laravel проходят только с CSRF токеном, то для префикса bot нам нужно сделать исключение, идем в файл app\Http\Middleware\VerifyCsrfToken.php и добавляем исключение: /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ //'api/*', 'bot/*' ]; BotController@index - данная строчка значит что мы обращаемся к контроллеру BotController и функции с названием index. Ну а теперь и код контроллера: <?php namespace App\Http\Controllers; use TelegramBot\Api\Client; // подключение библиотеки Telegram API use TelegramBot\Api\Types\ReplyKeyboardMarkup; // использование ReplyKeyboardMarkup (основное меню) use TelegramBot\Api\Types\Inline\InlineKeyboardMarkup; // использование InlineKeyboardMarkup (кнопки под сообщением) class BotController extends Controller { public function index() { // Подключение сайта к Telegram API // Пример token - 375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s $bot = new \TelegramBot\Api\Client('token'); // Стандартная команда /start // Таким образом можно создать любую команду $bot->command('start', function ($message) use ($bot) { $answer = 'Добро пожаловать!'; $bot->sendMessage($message->getChat()->getId(), $answer); }); // Пример кнопок у сообщений - команда /keyboard $bot->command('keyboard', function ($message) use ($bot) { $answer = 'Предоставленные кнопки!'; $testKey = new InlineKeyboardMarkup( [ [ ['callback_data' => 'test', 'text' => 'Тестовая кнопка'] ] ] ); $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null, $testKey); }); // пример кнопок меню под строкой ввода /menu $bot->command('menu', function ($message) use ($bot) { $answer = 'Сообщение показывается и снизу появятся кнопки'; $StartKeyboard = new ReplyKeyboardMarkup( [ [ "Привет" ], [ "/start", "/keyboard" ] ], true, true ); $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null, $StartKeyboard); }); // Обработка кнопок у сообщений $bot->on(function ($Update) use ($bot) { $callback = $Update->getCallbackQuery(); $message = $callback->getMessage(); // получаем сообщение $cid = $callback->getFrom()->getId(); // уникальный идентификатор chat_id $data = $callback->getData(); // название команды переданный с кнопки у сообщения // пример обработки команды с кнопки if ($data == "test") { $answer = "Пример сообщения с кнопки :)"; // данная функция будет не отправлять сообщение, а редактировать предыдущее сообщение с кнопками $bot->editMessageText($message->getChat()->getId(), $message->getMessageId(), $answer, 'HTML'); $bot->answerCallbackQuery($callback->getId()); // убираем загрузку на кнопке //$bot->answerCallbackQuery($callback->getId(), 'Всплывающее сообщение'); // убирает загрузку на кнопке и показывает сообщение } // убираем вечное обновление (данная проблема только на Laravel, на чистом php вечного обновления нету) if (empty($data)) return true; else return false; }, function ($Update) { try { $callback = $Update->getCallbackQuery(); if (is_null($callback) || !strlen($callback->getData())) return false; return true; } catch (\Exception $e) { return false; } }); // Отлов любых сообщений + обработка reply-кнопок $bot->on(function ($Update) use ($bot) { $message = $Update->getMessage(); // получаем инфо о сообщениях $mtext = $message->getText(); // получаем текст отправленого сообщения пользователем $cid = $message->getChat()->getId(); // получаем chat_id (уникальный ид пользователя в телеграм) // Пример проверки сообщения if (mb_stripos($mtext, "Привет") !== false) { $answer = "Привет, " . $message->getChat()->getFirstName(); // будет отправлено сообщение в ответ "Привет, Konstantin" $bot->sendMessage($message->getChat()->getId(), $answer, 'HTML', true, null); } }, function ($message) { return true; }); // Запуск бота if (!empty($bot->getRawBody())) { try { $bot->run(); } catch (\Exception $e) { // можно добавить функцию уведомления администратора о возможных ошибках } } } } ?> Таким образом можно создать telegram бота любой сложности, от простого новостного бота, до онлайн игр методом команд, примеров таких ботов полно. Работоспособность всех кнопок и команд можно посмотреть на примере одного из моих ботов @InstaSunriseBot, в нем реализованы все коды команд и даже больше и данная библиотека позволяет управлять телеграм каналами через бота, к примеру он может следить за чатом... Если будет интерестная тематика по ботам и различным приложениям на ларавел, могу еще пару статей выложить... Так же можно задать мне вопросы в телеграм @syfer_dev Всем спасибо за внимание Ну, неплохо Ссылка на комментарий Поделиться на другие сайты Поделиться
PaZiTiF Опубликовано 4 августа, 2020 Автор Жалоба Поделиться Опубликовано 4 августа, 2020 14 минут назад, Stark98 сказал: Ну, неплохо это только 1% того что можно сделать с данной статьи) Ссылка на комментарий Поделиться на другие сайты Поделиться
Klaus Опубликовано 4 августа, 2020 Жалоба Поделиться Опубликовано 4 августа, 2020 3 минуты назад, PaZiTiF сказал: это только 1% того что можно сделать с данной статьи) Согласен, я сейчас, кстати хочу выложить статью про установку Laravel часть 1. Ссылка на комментарий Поделиться на другие сайты Поделиться
PaZiTiF Опубликовано 4 августа, 2020 Автор Жалоба Поделиться Опубликовано 4 августа, 2020 1 минуту назад, Stark98 сказал: Согласен, я сейчас, кстати хочу выложить статью про установку Laravel часть 1. будет полезно, просто многие не понимают как устроин artisan в laravel и как работать с миграциями, моделями и контроллерами 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Klaus Опубликовано 4 августа, 2020 Жалоба Поделиться Опубликовано 4 августа, 2020 (изменено) 3 минуты назад, PaZiTiF сказал: будет полезно, просто многие не понимают как устроин artisan в laravel и как работать с миграциями, моделями и контроллерами В течении полугода, я завершу перевод и будет все, что надо для начала работы Изменено 4 августа, 2020 пользователем Stark98 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Print_control Опубликовано 4 августа, 2020 Жалоба Поделиться Опубликовано 4 августа, 2020 Спасиба Ссылка на комментарий Поделиться на другие сайты Поделиться
Семен Опубликовано 4 августа, 2020 Жалоба Поделиться Опубликовано 4 августа, 2020 1 час назад, PaZiTiF сказал: будет полезно, просто многие не понимают как устроин artisan в laravel и как работать с миграциями, моделями и контроллерами Сам по себе фреймворк сделали для такой аудитории, куда еще проще? Ссылка на комментарий Поделиться на другие сайты Поделиться
PaZiTiF Опубликовано 4 августа, 2020 Автор Жалоба Поделиться Опубликовано 4 августа, 2020 1 минуту назад, Семен сказал: Сам по себе фреймворк сделали для такой аудитории, куда еще проще? ну не скажите, некоторым трудно же прочесть документацию с офф сайта и воссоздать функции которые нужны им для работы, для некоторых это даже сложно! а фронтенд как использовать к примеру дефолтный vue или же даже взять выше и прикрутить angular через REST API, или ionic с angular или react на том же API так это вообще проблема для людей) Ссылка на комментарий Поделиться на другие сайты Поделиться
timbios Опубликовано 5 августа, 2020 Жалоба Поделиться Опубликовано 5 августа, 2020 Очень интересный и полезный мануал! Приятно видеть старые лица на форуме 😊 1 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
PaZiTiF Опубликовано 6 августа, 2020 Автор Жалоба Поделиться Опубликовано 6 августа, 2020 5 часов назад, timbios сказал: Очень интересный и полезный мануал! Приятно видеть старые лица на форуме 😊 спасибо) будет время, напишу еще дополнительный мануал к данному мануалу, как сделать регистрацию пользователя и все в этом роде) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения