• Добро пожаловать в сообщество My.Net.Ru

    Мы очень рады, что Вы посетили наш форум WAP|WEB мастеров! Мы сможем помочь Вам с решением ваших вопросов. Пожалуйста, пройдите регистрацию, она занимает не более одной минуты и у вас появится возможность:
      Просматривать документации и техническую информацию
      Скачивать шаблоны и скрипты
      Задавать вопросы и получать на них ответы
      Предоставлять услуги или искать исполнителя
      Отключить назойливую рекламу

LARAVEL TELEGRAM BOT

anonymous

Создатель
Команда форума
Божество форума
Сообщения
635
Реакции
152
Баллы
63
Как же все таки создать своего telegram бота на Laravel?

Для создания нам понадобится:


  • Оффициальная документация по Laravel (я думаю что с установкой не будет проблем);
  • Регистрация нашего бота у @BotFather;
  • Установка библиотеки для работы с Telegram API из Github Репозитория;
  • Еще нам нужно доменное имя с SSL Сертификатом (https протокол), ибо телеграм без сертификата не будет слушать наш сервер через WebHook;
Ну что, начнем с регистрации нишего бота у @BotFather

Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» - @BotFather, чтобы получить токен (ключ) для работы с Telegram API.

  1. Открываете чат с @BotFather;
  2. Вводите или выбираете из списка команду /newbot;
  3. Отправляете желаемое название для бота;
  4. Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». Например, CmsToolsBot;
  5. По желанию можно сразу настроить полное или краткое описание, список команд и аватарку.
По итогу регистрации получаем наш токен — 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 (так же есть документация по роутерам):
PHP:
Route::group(['prefix' => 'bot', 'middleware' => 'web'], function () {
    Route::post('webhook', 'BotController@index');
});
И еще так как все post запросы в laravel проходят только с CSRF токеном, то для префикса bot нам нужно сделать исключение, идем в файл app\Http\Middleware\VerifyCsrfToken.php и добавляем исключение:
PHP:
/**
  * The URIs that should be excluded from CSRF verification.
  *
  * @var array
*/
protected $except = [
    //'api/*',
   'bot/*'
];
otController@index - данная строчка значит что мы обращаемся к контроллеру BotController и функции с названием index.

Ну а теперь и код контроллера:
PHP:
<?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, в нем реализованы все коды команд и даже больше и данная библиотека позволяет управлять телеграм каналами через бота, к примеру он может следить за чатом...
 
Последнее редактирование:

zonk

Новорег
Сообщения
5
Реакции
0
Баллы
1
Неужели на телегу бота сделали))
 

Тему смотрели (Всего: 3)


BodrTop.Ru - Топ рейтинг сайтов Top.Mail.Ru Statok.net
Верх