- Сообщения
- 1 831
- Реакции
- 388
- Баллы
- 103
Как же все таки создать своего telegram бота на Laravel?
Для создания нам понадобится:
Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» - @BotFather, чтобы получить токен (ключ) для работы с Telegram API.
Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @BotFather, нажав на кнопку «Revoke current token» в разделе «API Token».
Создадим нашего бота
Писать код бота будем на Laravel, но чтобы ничего не изобретать, воспользуемся уже готовой и очень удобной Библиотекой.
Первое что нам понадобится, так это привязать через метод SetWebhook бота к нашему файлу-обработчику. Сделать это можно при помощи библиотеки, но есть вариант быстрее и проще – это построить вот такую ссылку: https:// api. telegram. org/bot375466075:AAEARK0r2nXjB67JiB35JCXXhKEyT42Px8s/setWebhook?url=https:// site.ru/bot/webhook,
где:
Ну а теперь самое интерестное, мы уже установили наш Laravel Framework, теперь нам нужно установить библиотеку и создать обработчик, который будет доступен по ссылке https:// site.ru/bot/webhook.
Для установки библиотеки, нам понадобится composer (если у Вас не работает композер, то в гугле можно найти много мануалов по использованию и настройке).
Ядро composer и vendor папки с установленными библиотеками у laravel находится в корневой папке, так что заходим туда и через терминал (командную строку) пишем команду установки библиотеки:
В той же корневой папке через терминал вводим команду для создания нашего контроллера: php artisan make:controller BotController, данная команда автоматически создаст app\Http\Controllers\BotController.php (можно ознакомится с офф документацией по контроллерам), и сразу же создадим роутер чтобы наша ссылка получила формат https:// site.ru/bot/webhook.
Нам нужно добавить код routes в файл routes\web.php (так же есть документация по роутерам):
И еще так как все post запросы в laravel проходят только с CSRF токеном, то для префикса bot нам нужно сделать исключение, идем в файл app\Http\Middleware\VerifyCsrfToken.php и добавляем исключение:
otController@index - данная строчка значит что мы обращаемся к контроллеру BotController и функции с названием index.
Ну а теперь и код контроллера:
Таким образом можно создать telegram бота любой сложности, от простого новостного бота, до онлайн игр методом команд, примеров таких ботов полно.
Работоспособность всех кнопок и команд можно посмотреть на примере одного из моих ботов @InstaSunriseBot, в нем реализованы все коды команд и даже больше и данная библиотека позволяет управлять телеграм каналами через бота, к примеру он может следить за чатом...
Для создания нам понадобится:
- Оффициальная документация по Laravel (я думаю что с установкой не будет проблем);
- Регистрация нашего бота у @BotFather;
- Установка библиотеки для работы с Telegram API из Github Репозитория;
- Еще нам нужно доменное имя с SSL Сертификатом (https протокол), ибо телеграм без сертификата не будет слушать наш сервер через WebHook;
Прежде чем начать писать код, нового бота нужно зарегистрировать у «папы всех ботов» - @BotFather, чтобы получить токен (ключ) для работы с Telegram API.
- Открываете чат с @BotFather;
- Вводите или выбираете из списка команду /newbot;
- Отправляете желаемое название для бота;
- Пишете юзернейм бота, по которому его будут находить через поиск. Обязательно на конце вашего юзернейма должно быть слово «bot» или «_bot». Например, CmsToolsBot;
- По желанию можно сразу настроить полное или краткое описание, список команд и аватарку.
Будьте осторожны: никогда и никому не показывайте токен, иначе ваш бот может быть скомпрометирован. Если по несчастливой случайности кто-то нехороший все-таки узнал ваш токен, то заменить его можно всё в том же @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 - ссылка на файл-обработчик на нашем сайте;
Ну а теперь самое интерестное, мы уже установили наш Laravel Framework, теперь нам нужно установить библиотеку и создать обработчик, который будет доступен по ссылке https:// site.ru/bot/webhook.
Для установки библиотеки, нам понадобится composer (если у Вас не работает композер, то в гугле можно найти много мануалов по использованию и настройке).
Ядро composer и vendor папки с установленными библиотеками у laravel находится в корневой папке, так что заходим туда и через терминал (командную строку) пишем команду установки библиотеки:
Теперь у нас все готово к написанию обработчика который будет слушать telegram через WebHook. Нам нужно прежде всего создать контроллер, в котором и будет наша функция связи с телеграм.composer require telegram-bot/api
В той же корневой папке через терминал вводим команду для создания нашего контроллера: 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');
});
PHP:
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//'api/*',
'bot/*'
];
Ну а теперь и код контроллера:
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) {
// можно добавить функцию уведомления администратора о возможных ошибках
}
}
}
}
?>
Работоспособность всех кнопок и команд можно посмотреть на примере одного из моих ботов @InstaSunriseBot, в нем реализованы все коды команд и даже больше и данная библиотека позволяет управлять телеграм каналами через бота, к примеру он может следить за чатом...
Последнее редактирование: