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

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

LARAVEL TELEGRAM BOT

anonymous

Создатель
Команда форума
администратор
Сообщения
1 010
Реакции
300
Баллы
103
Как же все таки создать своего 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', '[email protected]');
});
И еще так как все 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/*'
];
[email protected] - данная строчка значит что мы обращаемся к контроллеру 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

Участник
Сообщения
25
Реакции
5
Баллы
23
Неужели на телегу бота сделали))
 

Amney

Резидент
Сообщения
373
Реакции
250
Баллы
83
Отличный мануал, спасибо
 

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

Тема долгое время не просматривалась.

bodr.pp.ua Бодрый топ рейтинг мобильных WAP сайтов KatStat.ru - Топ рейтинг сайтов
Топ рейтинг сайтов! Статистика посещаемости сайтов Stata.Me Top.Mail.Ru GiStaT.RU - Рейтинг мобильных сайтов Mobiseo.RU - Рейтинг мобильных сайтов faphub.top Добавить сайт в интернете для рекламы
Верх