Bienvenido! Yo, como desarrollador junior de pila completa, encontré muchos problemas al intentar escribir un bot usando laravel y botman. En primer lugar, no sé mucho inglés, pero hay muy pocos artículos sobre este tema en ruso, y los que no me ayudaron a resolver mis problemas. El artículo contará y mostrará cómo desarrollar un chatbot en laravel + botman para telegram. Yo mismo desarrollé bots (comerciales) para viber y telegram. Como desarrollador de telegramas, me gusta más.

No mostraré cómo instalar laravel y configurar el servidor para que funcione. Si nunca ha hecho esto antes, será más fácil instalar openserver, composer (administrador de paquetes para php) está integrado y el servidor local para laravel ya está configurado. Solo tiene que escribir un código en .htaccess. Eso es exactamente lo que trabajo en casa. En el artículo mostraré una de las formas de desarrollar un bot de chat, configurar el bot para que funcione en telegramas y, al final, dejaré enlaces a artículos útiles sobre laravel'e y botman'e.
Diseño / preparación
Propongo el desarrollo de un bot, como todos los desarrolladores normales, con diseño, configuración de una tarea y explicación de cómo funciona laravel. Antes de eso, diré que estoy escribiendo código en phpStrom. Puedes escribir en cualquier otro IDE, pero lo uso.
Laravel implementa el patrón MVC (Model View Controller). Esto no significa que solo necesite escribir bajo mvc, puede escribir mierda, pero es mejor usar las ventajas que proporciona el marco. Si está familiarizado con mvc, pero no lo ha utilizado como yo, entonces el desarrollo con laravel es la mejor manera de consolidar el conocimiento.
¿Qué debe hacer nuestro bot?
- Preguntar al usuario por su nombre de usuario
- Pregunte si al usuario le gusta el clima o no.
- También escriba la respuesta en la base de datos.
- Despídase y envíe una foto
Un poco sobre MVC. Al acceder a nuestro software, a través de comandos (URL url), debemos aceptar estos comandos y procesos, entender lo que el usuario necesita. Hay rutas para esto, las llamadas rutas. Las rutas determinan qué controlador debe usarse; a su vez, el controlador, si es necesario, accede a la base de datos a través del modelo. El modelo contacta con la base de datos y devuelve el resultado que necesitamos. En el bot, la vista no es necesaria, porque todo el trabajo pasa por la interfaz de mensajería. Por lo tanto, después de recibir datos del modelo, el controlador proporciona los datos de esta vista, en nuestro caso es una plantilla de hoja (es utilizada por laravel). Los datos se pueden enviar a una página php normal, pero es mejor hacerlo a través de plantillas de hoja. Usamos la interfaz de mensajería, luego le enviaremos datos de inmediato.
Desarrollo
Para crear un proyecto, simplemente ingrese el siguiente comando en la consola
composer create-project --prefer-dist botman/studio botelegram
El punto de entrada será la ruta "/ start". Hay varias implementaciones de ruta en botman. Porque accederemos a las rutas a través de un bot en un telegrama, luego necesitamos "botman.php".

En ella necesitamos escribir la siguiente línea
$botman->hears('/start', function ( $bot ) { $bot->startConversation ( new mainConversation ); } );
Telegram en sí ofrece comenzar a trabajar con el bot a través del comando "start", y si es así, podemos facilitar la interacción con el bot configurando el punto de entrada inicial como "/ start" e inmediatamente trabajar con él.
Usando $ bot-> startConversation (nueva mainConversation); indicamos qué controlador será responsable del trabajo. Además, registraremos el uso de nuestro controlador, para esto necesitamos agregar este código en el archivo de ruta:
use App\Conversations\mainConversation;
Vamos a continuar Necesitamos crear una base de datos y el controlador en sí. Quiero decir que estás usando openserver. La base de datos se puede crear a través de la consola o usando phpMyAdmin, que está integrado en el servidor abierto.
Ahora algunas configuraciones. Necesitamos ingresar los datos de la base de datos en el archivo de configuración de laravel. Se encuentra en el directorio raíz del proyecto y se llama .env

Encuentra las líneas asociadas con la base de datos
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=botelegram DB_USERNAME=root DB_PASSWORD=
Aquí solo nos interesa el nombre de la base de datos, el nombre de usuario y la contraseña. Si usa openserver, puede escribir el nombre raíz y dejar la contraseña vacía, el nombre de la base de datos depende de usted.
Ahora nuestra aplicación tiene acceso a la base de datos. Lo siguiente que debemos hacer es crear un modelo y una migración. Escribimos en la consola:
php artisan make:model messengerUser -m
El indicador -m creará una migración para la base de datos y la asociará con nuestro modelo. Configuremos nuestra migración de inmediato para no volver más.
Es mejor no hacer esto, pero para no crear un montón de archivos, escribimos todos los datos en una tabla.
Necesitamos:
- ID de chat
- Nombre de usuario
- Buen clima o no
Esto es suficiente para demostrar las capacidades básicas de botman. Abra la migración recién creada, que se encuentra en la base de datos / migrations / creation_create_messanger_users_table.php

Complete el método up en esta migración, debería verse así:
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(); }); }
Ahora necesitamos comenzar la migración para que nuestra tabla exista en la base de datos. En la consola necesitas registrarte:
php artisan migrate
Sugerencia: si durante el proceso de desarrollo necesita cambiar los campos en la tabla, pero hay datos en la tabla, y si no los necesita, puede actualizar las tablas usando el comando php artisan migrate:refresh
.
Resultado:

laravel realizó 3 migraciones, pero solo estamos interesados en la tercera migración desde Aquí es donde registraremos nuestros datos.
Es hora de crear un controlador, conectar nuestro modelo a él y escribir la lógica.
En general, es mejor crear todos los archivos a través de la consola, pero como usamos botman y ya estoy tan acostumbrado, crearemos un controlador manualmente. En botman, el controlador se llama conversación, quizás haya diferencias significativas entre ellos, pero no lo entendí, no era necesario. En la carpeta de aplicaciones / Conversaciones, cree un archivo llamado mainConversation.php.
En la pantalla ves una configuración mínima de conversación
namespace App\Conversations; use BotMan\BotMan\Messages\Conversations\Conversation; class mainConversation extends conversation { public function run () { } }
Su clase debe tener un método de ejecución pública, es el punto de entrada para el controlador.
Conecte nuestro modelo al controlador:
use app\messengerUser;
Escribamos la lógica inicial. El método de ejecución ejecutará un método privado que pregunta cuál es el nombre del usuario, escribe su id y nombre en id_chat y el nombre de nuestra tabla.
Para comenzar, escribe:
use App\messengerUser as database; use BotMan\BotMan\Messages\Attachments\Image; use BotMan\BotMan\Messages\Conversations\Conversation; use BotMan\BotMan\Messages\Incoming\Answer as BotManAnswer; use BotMan\BotMan\Messages\Outgoing\Actions\Button; use BotMan\BotMan\Messages\Outgoing\OutgoingMessage; use BotMan\BotMan\Messages\Outgoing\Question as BotManQuestion;
lo que nos permitirá usar los métodos de botman
Y ahora haremos cambios en nuestro controlador:
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 () inicia el método que necesitamos, es setName (). Ya en setName () pedimos el nombre de usuario, escribimos el nombre en la matriz, luego ejecutamos el siguiente método, que le preguntará al usuario sobre el clima.
private function askWeather () { $question = BotManQuestion::create(" ?"); $question->addButtons( [ Button::create('')->value(1), Button::create('')->value(2) ]); $this->ask($question, function (BotManAnswer $answer) {
askWeather () tiene una estructura similar, pero aquí usamos botones para limitar las opciones del usuario y hacernos la vida más fácil. Los botones eliminan muchos errores que un usuario puede crear. Aquí también creamos una pregunta, con la ayuda de addButtons () adjuntamos botones a la pregunta, y luego llamamos a esta pregunta y procesamos la respuesta, y también pasamos al último método.
El método exit () escribirá todos los datos en la base de datos (puede extraerse en un método separado), se despedirá del usuario y también le enviará una imagen.
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; }
Usando OutgoingMessage :: create ('¡Nos vemos de nuevo!') -> withAttachment ($ adjunto), creamos un nuevo mensaje y le adjuntamos una imagen. En general, todos los archivos públicos que el usuario debería ver se colocan en la carpeta pública, pero en mi último bot hubo un problema con esto y tuve que colocarlos en una carpeta separada en el servidor (no relacionada con el proyecto). Aquí hice lo mismo.
La lógica de nuestro bot está lista. Para probarlo, solo abra el sitio a través de openserver, pero antes de eso, debe crear un archivo .htiaccess con el siguiente contenido
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>
El archivo debe estar en la raíz del sitio. Ahora todas las solicitudes se transferirán a la carpeta pública. Así es como funciona laravel. Abrimos el sitio y probamos el bot, no olvides que primero debes ingresar "/ start".
Después de asegurarte de que todo funciona, puedes adjuntarlo a los telegramas. Para hacer esto, cree un nuevo bot en @botfather, copie la clave del bot al final del archivo .env. Se ve así:
TELEGRAM_KEY=key_bot
Ahora necesitamos poner en nuestro proyecto un controlador para el trabajo conjunto de nuestro robot de lógica y telegrama. Esto se hace con un solo comando en la consola:
composer require botman/driver-telegram
También deberá registrar el bot en laravel.
php artisan botman:telegram:register
Se nos pedirá que ingresemos la dirección en la que estará disponible nuestro bot.

Si está desarrollando un bot en el servidor, simplemente agregue https: // url_site / botman después de este bot, puede probarlo en el propio messenger. Pero tenga en cuenta que laravel necesita una configuración especial del servidor, y lo más probable es que tenga que configurarlo usted mismo. Dejaré un enlace sobre cómo configurar el servidor al final del artículo.
Quizás eso es todo. Si lees hasta el final, felicidades, ahora puedes desarrollar bots de chat para laravel usando botman. Si tiene preguntas, con gusto responderé en los comentarios, así como en los enlaces prometidos:
Fuentes en github
Documentación de Botman
Configuración del servidor
Un artículo en el que creé mi primer bot
En artículo sobre botman