Selamat datang! Saya, sebagai pengembang tumpukan penuh junior, menemui banyak masalah ketika mencoba menulis bot menggunakan laravel dan botman. Pertama, saya tidak tahu banyak bahasa Inggris, tetapi ada sangat sedikit artikel tentang hal ini dalam bahasa Rusia, dan mereka yang tidak membantu saya memecahkan masalah saya. Artikel ini akan memberi tahu dan menunjukkan cara mengembangkan chatbot di laravel + botman untuk telegram. Saya sendiri mengembangkan bot (komersial) untuk viber dan telegram. Sebagai pengembang telegram, saya paling suka.

Saya tidak akan menunjukkan cara menginstal laravel dan mengkonfigurasi server agar berfungsi. Jika Anda belum pernah melakukan ini, maka akan lebih mudah untuk menginstal openserver, komposer (manajer paket untuk php) dibangun ke dalamnya dan server lokal untuk laravel sudah dikonfigurasi. Anda hanya perlu menulis beberapa kode dalam .htaccess. Itulah tepatnya yang saya kerjakan di rumah. Dalam artikel ini saya akan menunjukkan salah satu cara untuk mengembangkan bot obrolan, mengkonfigurasi bot untuk bekerja di telegram, dan juga, pada akhirnya, saya akan meninggalkan tautan ke artikel yang bermanfaat tentang laravel'e dan botman'e.
Desain / Persiapan
Saya mengusulkan pengembangan bot, seperti semua pengembang normal, dengan mendesain, menetapkan tugas, dan menjelaskan cara kerja laravel. Sebelum itu saya akan mengatakan bahwa saya menulis kode di phpStrom. Anda dapat menulis di IDE lain, tetapi saya menggunakannya.
Laravel mengimplementasikan pola MVC (Model View Controller). Ini tidak berarti bahwa Anda hanya perlu menulis di bawah MVC, Anda dapat menulis apa pun, tetapi lebih baik menggunakan kelebihan yang disediakan kerangka kerja. Jika Anda terbiasa dengan MVC, tetapi belum menggunakannya seperti saya, maka pengembangan dengan laravel adalah cara terbaik untuk mengkonsolidasikan pengetahuan.
Apa yang harus dilakukan bot kami:
- Minta nama pengguna untuk pengguna
- Tanyakan apakah pengguna menyukai cuaca atau tidak.
- Juga tuliskan jawabannya di database
- Ucapkan selamat tinggal dan kirim gambar
Sedikit tentang MVC. Saat mengakses perangkat lunak kami, melalui perintah (url URL), kami harus menerima perintah dan proses ini, memahami apa yang dibutuhkan pengguna. Ada rute untuk ini, yang disebut rute. Rute menentukan Pengontrol mana yang harus digunakan, pada gilirannya pengontrol, jika perlu, mengakses database melalui model. Model menghubungi basis data dan mengembalikan hasil yang kita butuhkan. Di bot, tampilan tidak diperlukan, karena semua pekerjaan melewati antarmuka messenger. Jadi, setelah menerima data dari model, pengontrol memberikan data tampilan ini, dalam kasus kami ini adalah templat blade (digunakan oleh laravel). Data dapat dikirim ke halaman php biasa, tetapi lebih baik melakukannya melalui templat blade. Kami menggunakan antarmuka messenger, maka kami akan segera mengirim data ke sana.
Pengembangan
Untuk membuat proyek, cukup masukkan perintah berikut ke konsol
composer create-project --prefer-dist botman/studio botelegram
Titik masuk akan menjadi "/ mulai". Ada beberapa implementasi rute di botman. Karena kita akan mengakses rute melalui bot di telegram, maka kita perlu "botman.php".

Di dalamnya kita perlu menulis baris berikutnya
$botman->hears('/start', function ( $bot ) { $bot->startConversation ( new mainConversation ); } );
Telegram itu sendiri menawarkan untuk mulai bekerja dengan bot melalui perintah "mulai", dan jika demikian, kita dapat memfasilitasi interaksi dengan bot dengan menetapkan titik masuk awal sebagai "/ mulai" dan segera mulai bekerja dengannya.
Menggunakan $ bot-> startConversation (mainConversation baru); kami menunjukkan controller mana yang akan bertanggung jawab atas pekerjaan tersebut. Selain itu, kami akan mendaftarkan penggunaan controller kami, untuk ini kami perlu menambahkan kode ini di file path:
use App\Conversations\mainConversation;
Mari kita lanjutkan. Kita perlu membuat database dan pengontrolnya sendiri. Maksud saya Anda menggunakan openserver. Basis data dapat dibuat melalui konsol atau menggunakan phpMyAdmin, yang dibangun ke dalam openserver.
Sekarang beberapa konfigurasi. Kita perlu memasukkan data database ke file konfigurasi laravel. Itu terletak di direktori root proyek dan disebut .env

Temukan garis yang terkait dengan database
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=botelegram DB_USERNAME=root DB_PASSWORD=
Di sini kami hanya tertarik pada nama basis data, nama pengguna dan kata sandi. Jika Anda menggunakan openserver, Anda dapat menulis dengan nama root, dan membiarkan kata sandi kosong, nama basis data tergantung pada Anda.
Sekarang aplikasi kita memiliki akses ke database. Hal selanjutnya yang perlu kita lakukan adalah membuat model dan migrasi. Kami menulis di konsol:
php artisan make:model messengerUser -m
Bendera -m akan membuat migrasi untuk database dan mengaitkannya dengan model kami. Mari siapkan migrasi kami segera agar tidak kembali lagi.
Lebih baik tidak melakukan ini, tetapi agar tidak membuat banyak file, kami menulis semua data dalam satu tabel.
Kami membutuhkan:
- id obrolan
- Nama pengguna
- Cuaca bagus atau tidak
Ini cukup untuk menunjukkan kemampuan dasar botman. Buka migrasi yang baru dibuat, yang terletak di basis data / migrasi / creation_create_messanger_users_table.php

Selesaikan metode dalam migrasi ini, seharusnya terlihat seperti ini:
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(); }); }
Sekarang kita perlu memulai migrasi agar tabel kita ada di database. Di konsol Anda harus mendaftar:
php artisan migrate
Petunjuk: jika selama proses pengembangan Anda perlu mengubah bidang dalam tabel, tetapi ada data dalam tabel, dan jika Anda tidak membutuhkannya, maka Anda dapat memperbarui tabel menggunakan php artisan migrate:refresh
command.
Hasil:

laravel melakukan 3 migrasi, tetapi kami hanya tertarik pada migrasi ke-3 sejak itu Di sinilah kami akan merekam data kami.
Saatnya membuat controller, hubungkan model kita ke sana dan tulis logikanya.
Secara umum, lebih baik membuat semua file melalui konsol, tetapi karena kami menggunakan botman, dan saya sudah terbiasa, kami akan membuat pengontrol secara manual. Dalam botman, pengontrol disebut percakapan, mungkin ada perbedaan yang signifikan di antara mereka, tetapi saya tidak mengerti ini - tidak perlu. Di folder aplikasi / Percakapan, buat file bernama mainConversation.php.
Di layar Anda melihat konfigurasi percakapan yang minimal
namespace App\Conversations; use BotMan\BotMan\Messages\Conversations\Conversation; class mainConversation extends conversation { public function run () { } }
Kelas Anda harus memiliki metode menjalankan publik, itu adalah titik masuk untuk controller.
Hubungkan model kami ke controller:
use app\messengerUser;
Mari kita menulis logika awal. Metode jalankan akan menjalankan metode pribadi yang menanyakan nama pengguna, menulis id dan namanya ke id_chat dan nama tabel kami.
Untuk memulai, tulis:
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;
yang akan memungkinkan kami untuk menggunakan metode botman
Dan sekarang kita akan membuat perubahan pada controller kita:
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 (); } }); } }
jalankan () mulai metode yang kita butuhkan, itu adalah setName (). Sudah di setName () kami meminta nama pengguna, menulis nama ke array, kemudian menjalankan metode berikutnya, yang akan menanyakan pengguna tentang cuaca.
private function askWeather () { $question = BotManQuestion::create(" ?"); $question->addButtons( [ Button::create('')->value(1), Button::create('')->value(2) ]); $this->ask($question, function (BotManAnswer $answer) {
askWeather () memiliki struktur yang serupa, tetapi di sini kami menggunakan tombol untuk membatasi pilihan pengguna dan membuat hidup kami lebih mudah. Tombol menghapus banyak kesalahan yang bisa dibuat pengguna. Di sini kami juga membuat pertanyaan, dengan bantuan addButtons () kami melampirkan tombol pada pertanyaan, dan kemudian kami memanggil pertanyaan ini dan memproses jawabannya, dan juga pergi ke metode terakhir.
Metode exit () akan menulis semua data ke database (dapat diambil dalam metode terpisah), mengucapkan selamat tinggal kepada pengguna, dan juga mengirimnya gambar.
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; }
Menggunakan OutgoingMessage :: create ('See you again!') -> withAttachment ($ attachment), kami membuat pesan baru dan melampirkan gambar padanya. Secara umum, semua file publik yang harus dilihat pengguna ditempatkan di folder publik, tetapi di bot terakhir saya ada masalah dengan ini dan saya harus meletakkannya di folder terpisah di server (tidak terkait dengan proyek). Di sini saya melakukan hal yang sama.
Logika bot kami sudah siap. Untuk mengujinya, cukup buka situs melalui openserver, tetapi sebelum itu, Anda perlu membuat file .htiaccess dengan konten berikut
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>
File tersebut harus di root situs. Sekarang semua permintaan akan ditransfer ke folder publik. Beginilah cara laravel bekerja. Kami membuka situs dan menguji bot, jangan lupa bahwa pertama Anda harus memasukkan "/ mulai".
Setelah memastikan bahwa semuanya berfungsi, Anda dapat melampirkannya ke telegram. Untuk melakukan ini, buat bot baru di @botfather, salin kunci bot ke akhir file .env. Ini terlihat seperti ini:
TELEGRAM_KEY=key_bot
Sekarang kita perlu memasukkan driver untuk proyek gabungan dari logika dan bot telegram kita. Ini dilakukan hanya dengan satu perintah di konsol:
composer require botman/driver-telegram
Anda juga harus mendaftarkan bot di laravel.
php artisan botman:telegram:register
Kami akan diminta untuk memasukkan alamat di mana bot kami akan tersedia.

Jika Anda mengembangkan bot di server, maka tambahkan saja https: // url_site / botman setelah bot ini, Anda dapat mengujinya di messenger itu sendiri. Tetapi berhati-hatilah, laravel membutuhkan pengaturan server khusus, dan kemungkinan besar Anda harus mengonfigurasinya sendiri. Saya akan meninggalkan tautan tentang cara mengkonfigurasi server di akhir artikel.
Mungkin itu saja. Jika Anda membaca sampai akhir, maka selamat, sekarang Anda dapat mengembangkan bot obrolan untuk laravel menggunakan botman. Jika Anda memiliki pertanyaan, dengan senang hati saya akan menjawab di komentar, serta tautan yang dijanjikan:
Sumber di github
Dokumentasi botman
Pengaturan server
Artikel yang saya buat bot pertama saya
En artikel tentang botman