Laravel Telegram bot как

Приветсвую всех.
Недавно я решил попробовать создать своего бота в телеграме , в интернете много инструкций по созданию потов в конструкторах, и в некоторых действительно можно создать ботов с большим функционалом на выбор, но передвигать блоки не интересно, да и если захочется сделать что то уникальное , чего нет?
Банальный пример.. Я хотел сделать своего бота в телеграм многоязычным , что бы пользователь мог менять язык и получать разные ответы, в конструкторах я такого к сожалению не нашел, а значит придется выкручиваться самому)

Кому подойдут эти уроки?

Конечно по хорошему вы должны понимать как работают сайты , иметь хотя бы небольшой опыт разработки на PHP , базами данных MySQL , в целом иметь хотя бы базовый уровень знаний в веб-разработке.

В идеале знать что такое composer , Laravel , т.к. использовать я буду именно его.

Однако я постараюсь расписать все на столько подробно, на сколько это возможно, так что если вы совсем новичок и только начинаете свой путь — это не будет проблемой , как минимум у вас точно получится запустить своего бота, но скорее всего узнать и понять много нового)

Telegram bot Laravel 8 за 5 минут и 64 секунды

Если вы уже опытный разработчик буду рад видеть ваши рекомендации в комментариях, я сам не так давно устроился работать Junior PHP разработчиком.

Поэтому опыт с Laravel у меня небольшой, ну а telegram bot `а буду делать второй раз, специально для серии этих статей.
Своего первого бота к слову делать я начал неделю назад , понял что информации в интернете крайней мало, поэтому и решил собрать все в одном месте, думаю кому-нибудь точно пригодится, да и мне полезно, а то я точно все забуду..

Что планируется реализовать?

  • Установим PHP
  • Установим Composer
  • Установим IDE программу для разработки и необходимые плагины
  • Установим и настроим OpenServer для локальной разработки
  • Создадим свой проект на GitHub и будем пушить туда все правки
  • Установим Laravel и необходимые пакеты
  • Создадим нового бота в BotFather
  • Подключим бота в проект
  • Создадим и подключим второго бота , который будет присылать в наш телеграм канал ошибки и другую полезную информацию
  • Настроим работу с базой данных
  • Научися принимать и обрабатывать вебхуки от телеграма к себе в локальный проект
  • Напишем сам функционал бота
  • Ну и загрузим проект на хостинг , что бы бот работал 24/7

Какой функионал будет у бота?

Идей у меня на самом деле не много, поэтому можете предлагать свои в комментариях и если я смогу — я их реализую))

Как минимум бот будем уметь делать следующее:

  • Сохранять пользователей в БД
  • Предлагать выбрать язык и менять его у пользователя в БД
  • Обрабатывать команды типо /start /help
  • Обрабатывать простой текст
  • Возвращать информацию о пользователе
  • Принимать контакт и сохранять в БД
  • Принимать геопозицию, сохранять в БД, возвращать информацию о погоде, мб даже строить карту с метками и датами, по сохраненным данным
  • Отображать клавиатуру Keyboard
  • Отображать клавиатуру inline_keyboard (кнопки в сообщении чата)
  • Обрабатывать ответ с нажатия inline_keyboard и динамически менять текст и саму клавиатуру

Отлично! Что дальше?

В конце каждого урока я буду оставлять ссылку на следующий урок, как только он будет готов и опубликован.

Telegram бот на Laravel основы за час — Полный курс

  • / Следующий урок ->
  • Ссылка на GitHub проект
  • Какой я использую хостинг?
  • Поддержать мои старания
  • Моя страничка ВК

Источник: dzen.ru

Разработка чат-бота (laravel+botman)

Welcome! Я, как junior full stack разработчик, при попытке написать бота с использованием laravel и botman’а столкнулся с многими проблемами. Во-первых, я плохо знаю английский, а на русском статей очень мало на эту тему, а те, что есть не помогли мне решить мои проблемы. В статье будет рассказано и показано, как разработать чат-бота на laravel+botman для telegram.

Сам я разрабатывал ботов(коммерческих) под viber и telegram. Как разработчику telegram мне нравится больше всего.

image

Я не буду показывать как установить laravel и настроить сервер для его работы. Если вы никогда этого не делали, то проще будет установить openserver, в него встроен composer(пакетный менеджер для php) и уже настроен локальный сервер для laravel’a. Вам останется лишь прописать немного кода в .htaccess. Дома я именно так и работаю. В статье покажу один из способов разработки чат-бота, настроим бота для работы в телеграм, а так же, в конце, оставлю ссылки на полезные статьи о laravel’e и botman’e.

Еще по теме:  Как посмотреть недавние действия в Телеграм канале на Айфоне

Проектирование/подготовка

Разработку бота предлагаю, как и все нормальные разработчики, начать с проектирования, постановки задачи и объяснения как работает laravel. Перед этим скажу, что я пишу код в phpStrom. Можно писать в любом другом IDE, но я пользуюсь именно им.

В laravel реализован паттерн MVC(Model View Controller). Это не значит, что нужно писать только под mvc, можно и говнокодить, но лучше пользоваться теми преимуществами, которые предоставляет фреймворк. Если вы знакомы с mvc, но не применяли его, как я, то разработка с помощью laravel’a это лучший способ закрепить знания.

Что должен делать наш бот:

  • Спрашивать у пользователя его имя
  • Поинтересоваться, нравится пользователю погода или нет
  • Также записать ответ в БД
  • Попрощаться и отправить картинку

Немного о MVC. При обращение к нашему ПО, посредством команд(url адреса), мы должны принять эти команды и обработать, понять, что требуется пользователю. Для этого есть пути, так называемые routes. Routes определяет какой Controller нужно использовать, в свою очередь controller, если это требуется, обращается к БД через model. Model связывается с базой данных и возвращает нужный нам результат.

В боте view не нужен, т.к. вся работа идет через интерфейс мессенджера. Тем самым, после получения данных от model’и, controller отдает эти данные view, в нашем случае это blade шаблон (именно его использует laravel). Данные можно отдать и обычной php странице, но лучше это делать через blade шаблоны. Мы используем интерфейс мессенджера, то отправлять данные будем сразу в него.

Разработка

Чтобы создать проект, достаточно ввести в консоль следующую команду

composer create-project —prefer-dist botman/studio botelegram

Входной точкой будет rout «/start». В botman’e есть несколько реализаций routes. Т.к. мы будем обращаться к routes через бота в телеграме, то нам нужен «botman.php».

image

В нем нам нужно записать следующую строчку

$botman->hears(‘/start’, function ( $bot ) < $bot->startConversation ( new mainConversation ); > );

telegram сам предлагает начинать работу с ботом через команду «start», а раз так, то мы можем облегчить взаимодействие с ботом, задав начальную точку входа как «/start» и сразу перейти к работе с ним.

С помощью $bot->startConversation ( new mainConversation ); мы указываем какой контроллер будет отвечать за работу. Так же, пропишем использование нашего контроллера, для этого нам нужно в файле с путями добавить этот код:

use AppConversationsmainConversation;

Продолжим. Нам нужно создать базу данных и сам контроллер. Я подразумеваю, что вы используете openserver. БД можно создать через консоль или с помощью phpMyAdmin, который встроен в openserver.

Теперь немного конфигураций. Нам нужно внести данные БД в конфигурационный файл laravel. Он лежит в корневом каталоге проекта и называется .env

image

Найдите строчки связанные с БД

DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=botelegram DB_USERNAME=root DB_PASSWORD=

Здесь нас интересует лишь название базы, имя юзера и пароль. Если вы используете openserver, то можно написать в имя-root, а пароль оставить пустым, название БД зависит уже от вас.

Теперь наше приложение имеет доступ к БД. Следующее, что нам потребуется, это создать model и migration. Прописываем в консоле:

php artisan make:model messengerUser -m

Флаг -m создаст миграцию для БД и свяжет ее с нашей моделью. Давайте сразу и настроим нашу миграцию, чтобы больше к ней не возвращаться.

Лучше так не делать, но чтобы не создавать кучу файлов, запишем все данные в одну таблицу.
Нам нужно:

  • id чата
  • Имя пользователя
  • Хорошая погода или нет

Этого достаточно, чтобы продемонстрировать основные возможности botman’a. Откройте только что созданную миграцию, которая находится в database/migrations/дата_создания_create_messanger_users_table.php

image

Дополните метод up в данной миграции, она должна иметь следующий вид:

public function up() < Schema::create(‘messenger_users’, function (Blueprint $table) < $table->increments(‘id’); $table->string(«id_chat»); $table->string(«name»); $table->string(‘response’); $table->timestamps(); >); >

Теперь нам нужно запустить миграцию, чтобы наша таблица существовала в БД. В консоли нужно прописать:

php artisan migrate

Подсказка: если в процессе разработки вам потребуется изменить поля в таблице, а в таблице есть данные, и если вам они не нужны, то с помощью команды php artisan migrate:refresh можно обновить таблицы.

image

laravel провел 3 миграции, но нас интересует лишь 3-я миграция т.к. именно туда мы будем записывать наши данные.

Настало время создать controller, подключить к нему нашу model и написать логику.

Вообще, лучше все файлы создавать через консоль, но так как мы пользуемся botman’ом, да и я уже так привык, создадим controller вручную. В botman контроллер носит название conversation, возможно, между ними есть существенные отличия, но в этом я не разбирался — не было нужды. В папке app/Conversations создаем файл с именем mainConversation.php .

На экране вы видите минимальную комплектацию conversation’а

namespace AppConversations; use BotManBotManMessagesConversationsConversation; class mainConversation extends conversation < public function run () < >>

В вашем классе обязательно должен быть публичный метод run, он является входной точкой для controller’а.

Подключим нашу модель к котроллеру:

use appmessengerUser;
Пропишем начальную логику. Метод run будет запускать приватный метод, который спросит, как зовут пользователя, запишет его id и имя в id_chat и name нашей таблицы.

Еще по теме:  В одном Телеграмме из телефона и ноутбука

Для начала пропишем:

use AppmessengerUser as database; use BotManBotManMessagesAttachmentsImage; use BotManBotManMessagesConversationsConversation; use BotManBotManMessagesIncomingAnswer as BotManAnswer; use BotManBotManMessagesOutgoingActionsButton; use BotManBotManMessagesOutgoingOutgoingMessage; use BotManBotManMessagesOutgoingQuestion as BotManQuestion;

что позволит нам использовать методы botman’a

А теперь внесем изменения в наш контроллер:

class mainConversation extends conversation < public $response = []; public function run () < $this->setName(); > private function setName() < $question = BotManQuestion::create(«Привет! Как тебя зовут?»); $this->ask( $question, function ( BotManAnswer $answer ) < if( $answer->getText () != » )< array_push ($this->response, $answer->getText()); $this->askWeather (); > >); > >

run() запускает нужный нам метод, это setName(). Уже в setName() мы спрашивает имя пользователя, записываем имя в массив, после запускаем следующий метод, который спросит пользователя о погоде.

private function askWeather () < $question = BotManQuestion::create(«Тебе нравится погода на улице?»); $question->addButtons( [ Button::create(‘Да’)->value(1), Button::create(‘Нет’)->value(2) ]); $this->ask($question, function (BotManAnswer $answer) < // здесь можно указать какие либо условия, но нам это не нужно сейчас array_push ($this->response, $answer); $this->exit(); >); >

askWeather() имеет схожую структуру, но здесь мы используем кнопки чтобы ограничить выбор пользователя и облегчить себе жизнь т.к. кнопки убирают очень много ошибок, которые может создать пользователь. Здесь мы также создаем вопрос, с помощью addButtons() привязываем к вопросу кнопки, а позже вызываем данный вопрос и обрабатываем ответ, а также переходим к последнему методу.

Метод exit() будет записывать все данные в БД(можно вынести в отдельный метод), прощаться с пользователем, а также отправит ему картинку.

private function exit() < $db = new database(); $db->id_chat = $this->bot->getUser()->getId(); $db->name = $this->response[0]; $db->response = $this->response[1]; $db->save(); $attachment = new Image(‘https://gykov.ru/projects/botelegram.png’); $message = OutgoingMessage::create(‘До новых встреч!’) ->withAttachment($attachment); $this->bot->reply($message); return true; >

С помощью OutgoingMessage::create(‘До новых встреч!’)->withAttachment($attachment) мы создаем новое сообщение и привязываем к нему картинку. Вообще, все публичные файлы, которые должен видеть пользователь, размещаются в папке public, но в последнем моем боте с этим случилась проблема и мне пришлось разместить их в отдельной папке на сервере(не связанной с проектом). Здесь я сделал тоже самое.

Логика нашего бота готова. Чтобы протестировать его достаточно открыть сайт через openserver, но перед этим, нужно создать файл .htiaccess со следующим содержимым

RewriteEngine On RewriteRule ^(.*)$ public/$1 [L]

Файл должен находиться в корне сайта. Теперь все запросы будут передаваться в папку public. Так работает laravel. Открываем сайт и тестируем бота, не забываем, что для начала нужно ввести «/start».

Теперь нужно поставить в наш проект драйвер для совместной работы нашей логики и телеграм бота. Делается это всего лишь одной командой в консоли:

composer require botman/driver-telegram

Также потребуется зарегистрировать бота в laravel.

php artisan botman:telegram:register

Нам будет предложено ввести адрес по которому будет доступен наш бот.

image

Если вы разрабатываете бота на сервере, то достаточно добавить https://url_site/botman после этого бота можно протестировать и в самом мессенджере. Но знайте, для laravel’а нужны особые настройки сервера и вам, скорей всего, придется самим его настраивать. Ссылку о том, как настроить сервер я оставлю в конце статьи.

Пожалуй, на этом все. Если вы дочитали до конца, то поздравляю, теперь вы можете разрабатывать чат-ботов под laravel с использованием botman. Если есть вопросы, то с радостью отвечу в комментариях, а также обещанные ссылки:

Источник: habr.com

Создание Telegram-бота c Laravel и BotMan

Материал является вольным переводом статьи Build A Telegram Bot with Laravel and BotMan с сайта scotch.io.

В данном материале для создания Telegram-бота мы используем известную библиотеку BotMan (botman.io).

На рисунке вы можете видеть результат работы созданного по этому материалу Telegram-бота. Здесь по команде /random бот вернул ссылку на случайную картинку собаки:

Естественно, кроме этой команды, бот будет понимать и другие.

В первую очередь установим Botman Studio. Если вы не знаете, что это, то знайте, Botman Studio ­– это стандартное Laravel-приложение с уже включенной в него библиотекой Botman. Так что если вы уже работали с Laravel ранее, то большинство действий из этого материала будет для вас знакомо.

А теперь продолжим, и создадим новый проект командой:

composer create-project —prefer-dist botman/studio ilovedogs

После того, как все установится проверьте работает ли оно.

Для этого наберите в браузере: [адрес вашего сайта]/botman/tinker (например, у меня было так: site1.com/botman/tinker), и в результате вы должны увидеть следующую страницу: Здесь нас интересует первая ссылка Tinker. Перейдя по ней, вы увидите поле ввода, через которое можно «пообщаться» с ботом. Например, если ввести слово «Hi», в ответ вы получите «Hello!». Проверили, что все работает, можем продолжить.

В этом проекте нам нужно, чтобы бот отвечал на следующие типы команд:

  • запрос ссылки на случайную картинку из всех пород собак (команда /random)
  • запрос ссылки на случайную картинку с указанием породы (например, /b dachshund)
  • запрос ссылки на случайную картинку с указанием породы и подпороды (например, /s hound:afghan)
Еще по теме:  Если пароль наТелеграмм забооуироыан

Также добавим простую возможность диалога, где можно выбрать желаемое действие из нескольких вариантов (команда Start conversation): Кроме возможности диалога, нужно еще предусмотреть вариант, когда человек будет вводить какие-то неизвестные команды: Это весь функционал, который нам предстоит реализовать. Читайте дальше, и вы узнаете, как это сделать.

Запрос ссылки на случайную картинку из всех пород собак (команда /random)

Для того, чтобы получить случайную картинку собаки из всех пород собак пользователю нужно будет ввести команду /random. Научим наш бот правильно реагировать на эту команду.

Откроем файл routes/botman.php и добавим туда новую строчку:

Далее создадим новый контроллер с помощью команды:

php artisan make:controller AllBreedsController

Его содержимое должно выглядеть следующим образом:

Здесь мы используем класс DogService (app/services/DogService.php), который будет отвечать за запросы к Dog API и возвращении полученной ссылки на картинку с собакой. Содержимое этого файла должно быть следующим:

Запрос ссылки на случайную картинку с указанием породы (например, /b dachshund)

Добавим новую строчку в файл routes/botman.php:

Далее откроем контроллер AllBreedsController, который мы создали ранее и добавим в него новый метод:

Определим используемый здесь метод byBreed() в сервисном классе DogService, который мы создали ранее:

Также не забудьте добавить константу с api-ссылкой для получения картинки по названию породы в начало класса DogService:

// The endpoint we will hit to get a random image by a given breed name. const BREED_ENDPOINT = ‘https://dog.ceo/api/breed/%s/images/random’;

Запрос ссылки на случайную картинку с указанием породы и подпороды (например, /s hound:afghan)

Добавим новую строчку в файл routes/botman.php:

Далее создадим новый контроллер с помощью команды:

php artisan make:controller SubBreedController

Его содержимое должно быть следующим:

Определим используемый здесь метод bySubBreed() в сервисном классе DogService, который мы создали ранее:

Также не забудьте добавить константу с api-ссылкой для получения картинки по названию породы и подпороды в начало DogService:

// The endpoint we will hit to get a random image by a given breed name and its sub-breed. const SUB_BREED_ENDPOINT = ‘https://dog.ceo/api/breed/%s/%s/images/random’;

Диалог с выбором желаемого действия (команда Start conversation)

Далее, с помощью artisan-команды создайте новый контроллер:

php artisan make:controller ConversationController

Его содержимое должно быть следующим:

Здесь мы используем класс DefaultConversation, файл для которого нужно создать в папке app/Conversations. Эта папка уже должна быть в структуре проекта, поэтому остается только создать в ней новый файл DefaultConversation.php. Его содержимое должно быть следующим:

Неизвестные команды

Осталось предусмотреть вариант, когда пользователь вводит какие-то неизвестные команды, которые бот не знает. Снова откроем файл routes/botman.php и добавим новую строчку:

Создадим новый контроллер командой:

php artisan make:controller FallbackController

Его содержимое должно быть следующим:

На этом программистская часть закончена, осталось создать новый бот в Telegram, и привязать его к нашему проекту.

Установка Telegram-драйвера

В первую очередь нужно установить Telegram-драйвер в проект:

composer require botman/driver-telegram

Создание нового Telegram-бота

Открываем Telegram и через поиск ищем BotFather. После чего пишем: /newbot. Далее выбираем имя для бота (name), я использовал имя BotmanTest.

Затем выбираем пользовательское имя (username), оно должно быть уникальным. После этого вы получите api-токен, который нужно указать в файле .env проекта, для этого добавьте следующую строчку в конец файла:

TELEGRAM_TOKEN=YOUR_TOKEN

И замените YOUR_TOKEN на полученный api-токен.

Открываем доступ извне к проекту с помощью ngrok

Чтобы не выкладывать свой тестовый проект на отдельный сервер в сети, воспользуемся утилитой ngrok. С помощью этой утилиты ваш проект на localhost станет доступен по отдельному адресу в Интернете. Если у вас еще не установлен ngrok, используйте официальную страницу (https://ngrok.com/download) для установки.

После того, как вы установите ngrok запустите Laravel-сервер:

php artisan serve

После чего перейдите в папку с ngrok и выполните команду:

./ngrok http 8000

Теперь ваш проект будет доступен из сети по адресам, которые указаны в строчках Forwarding: Для работы Telegram-бота нужен https-адрес, поэтому используйте его.

Связываем наш проект с Telegram

Для того, чтобы связать наш проект с Telegram, используйте Postman или CURL для выполнения следующей команды:

curl -X POST -F ‘url=https:///botman’ https://api.telegram.org/bot/setWebhook

YOU_URL – https-адрес из ngrok; TOKEN – это TELEGRAM_TOKEN, который вы указали ранее в файле .env.

Если вы все сделали правильно, то команда должна вернуть следующий результат:

< «ok»: true, «result»: true, «description»: «Webhook was set» >

На этом все, результат работы в Telegram приведен на картинке:

Post Views: 3 300

Как в Laravel создать подключение к БД в runtime Бывают ситуации, например, когда предопределённых в конфиге Laravel подключений к базам данных не достаточно и возникает потребность создавать подключения динамически…

Подтверждение регистрации и верификация email в Laravel 5.6 Как можно сделать очень простую систему подтверждения email адреса пользователя, после того, как он зарегистрируется на сайте? Очень многие книги,…

Почему стоит перейти с Drupal на Laravel Когда приходит понимание того, что технология, любимая многими, тебя настолько устарела, что ты готов к кардинальным изменениям. Многие разработчики крутили…

Источник: evilinside.ru

Рейтинг
( Пока оценок нет )
Загрузка ...