أهلا وسهلا بك! واجهت ، بصفتي مطورًا صغيرًا مكدسًا كاملًا ، العديد من المشكلات عند محاولة كتابة روبوت باستخدام laravel و botman. أولاً ، أنا لا أعرف الكثير من الإنجليزية ، ولكن هناك عدد قليل جدًا من المقالات حول هذا الموضوع باللغة الروسية ، وتلك التي لم تساعدني في حل مشاكلي. ستخبرك المقالة وتوضح كيفية تطوير chatbot على laravel + botman للبرقي. أنا نفسي وضعت السير (التجارية) لفايبر والبرق. كمطور برقية ، أحب أكثر.

لن أظهر كيفية تثبيت laravel وتكوين الخادم حتى يعمل. إذا لم تكن قد قمت بذلك من قبل ، فسيكون من الأسهل تثبيت openerver ، حيث تم تضمين الملحن (مدير الحزم لـ php) فيه وتم تكوين الخادم المحلي لـ laravel بالفعل. عليك فقط كتابة بعض الكود في htaccess. هذا هو بالضبط ما أعمل في المنزل. في المقالة ، سأعرض إحدى الطرق لتطوير برنامج الدردشة ، وتكوين الروبوت للعمل في البرقيات ، وفي النهاية ، سأترك روابط لمقالات مفيدة حول laravel'e و botman'e.
التصميم / التحضير
أقترح تطوير روبوت ، مثل كل المطورين العاديين ، مع تصميم وتحديد مهمة وشرح كيفية عمل لارافيل. قبل ذلك سأقول أنني أكتب الكود في phpStrom. يمكنك الكتابة في أي بيئة تطوير متكاملة أخرى ، لكنني أستخدمها.
تنفذ Laravel نموذج MVC (وحدة تحكم عرض النموذج). هذا لا يعني أنك تحتاج فقط للكتابة تحت mvc ، يمكنك كتابة القرف ، ولكن من الأفضل استخدام المزايا التي يوفرها الإطار. إذا كنت معتادًا على استخدام mvc ، لكنك لم تستخدمه مثلي ، فإن التطوير باستخدام laravel هو أفضل طريقة لتعزيز المعرفة.
ماذا يجب أن تفعل الروبوت لدينا:
- اطلب من المستخدم اسم المستخدم
- اسأل إذا كان المستخدم يحب الطقس أم لا.
- اكتب أيضًا الإجابة في قاعدة البيانات
- قل وداعًا وأرسل صورة
قليلا عن MVC. عند الوصول إلى برنامجنا ، من خلال الأوامر (عنوان URL) ، يجب أن نقبل هذه الأوامر ونعالج ما يحتاجه المستخدم. هناك طرق لهذا ، ما يسمى الطرق. تحدد الطرق التي يجب استخدام وحدة التحكم ، في حين تقوم وحدة التحكم بدورها ، إذا لزم الأمر ، بالوصول إلى قاعدة البيانات من خلال النموذج. يتصل النموذج بقاعدة البيانات ويعيد النتيجة التي نحتاجها. في الروبوت ، ليست هناك حاجة عرض ، ل كل العمل يمر عبر واجهة messenger. وبالتالي ، بعد تلقي البيانات من النموذج ، تعطي وحدة التحكم بيانات العرض هذه ، في حالتنا هي قالب نصل (يتم استخدامه بواسطة laravel). يمكن إرسال البيانات إلى صفحة php عادية ، لكن من الأفضل القيام بذلك من خلال قوالب الشفرة. نستخدم واجهة المراسلة ، ثم سنرسل البيانات على الفور إليها.
تصميم
لإنشاء مشروع ، فقط أدخل الأمر التالي في وحدة التحكم
composer create-project --prefer-dist botman/studio botelegram
ستكون نقطة الدخول هي المسار "/ start". هناك العديد من تطبيقات الطريق في botman. لأن سنصل إلى الطرق عبر روبوت في برقية ، ثم نحتاج إلى "botman.php".

في ذلك نحتاج إلى كتابة السطر التالي
$botman->hears('/start', function ( $bot ) { $bot->startConversation ( new mainConversation ); } );
يعرض telegram نفسه بدء العمل مع bot من خلال أمر "start" ، وإذا كان الأمر كذلك ، يمكننا تسهيل التفاعل مع bot من خلال تعيين نقطة الدخول الأولية كـ "/ start" والانتقال إلى العمل معها على الفور.
باستخدام $ bot-> startConv Conversation (محادثة رئيسية جديدة) ؛ نشير إلى وحدة التحكم التي ستكون مسؤولة عن العمل. أيضًا ، سنقوم بتسجيل استخدام وحدة التحكم الخاصة بنا ، لهذا نحتاج إلى إضافة هذا الرمز في ملف المسار:
use App\Conversations\mainConversation;
دعنا نستمر. نحن بحاجة إلى إنشاء قاعدة بيانات ووحدة التحكم نفسها. أعني أنك تستخدم openerver. يمكن إنشاء قاعدة البيانات من خلال وحدة التحكم أو باستخدام phpMyAdmin ، والتي بنيت في openerver.
الآن بعض التكوينات. نحتاج إلى إدخال بيانات قاعدة البيانات في ملف تكوين laravel. يكمن في الدليل الجذر للمشروع ويسمى .env

ابحث عن الخطوط المرتبطة بقاعدة البيانات
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=botelegram DB_USERNAME=root DB_PASSWORD=
نحن هنا مهتمون فقط باسم قاعدة البيانات واسم المستخدم وكلمة المرور. إذا كنت تستخدم openerver ، فيمكنك كتابة اسم الجذر وترك كلمة المرور فارغة ، يعتمد اسم قاعدة البيانات عليك.
الآن تطبيقنا لديه حق الوصول إلى قاعدة البيانات. الشيء التالي الذي يتعين علينا القيام به هو إنشاء نموذج والهجرة. نكتب في وحدة التحكم:
php artisan make:model messengerUser -m
تقوم العلامة -m بإنشاء عملية ترحيل لقاعدة البيانات وربطها بنموذجنا. لنقم بإعداد الهجرة على الفور حتى لا نعود إليها بعد الآن.
من الأفضل عدم القيام بذلك ، ولكن حتى لا يتم إنشاء مجموعة من الملفات ، نكتب جميع البيانات في جدول واحد.
نحتاج:
- معرف الدردشة
- اسم المستخدم
- طقس جيد أم لا
هذا يكفي لإظهار القدرات الأساسية للبوتمان. افتح الترحيل الذي تم إنشاؤه حديثًا والموجود في قاعدة البيانات / migrations / creation_create_messanger_users_table.php

أكمل طريقة المتابعة في عملية الترحيل هذه ، يجب أن تبدو كما يلي:
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
.
النتيجة:

أجرى laravel 3 هجرات ، لكننا مهتمون فقط بالهجرة الثالثة منذ ذلك الحين هذا هو المكان الذي سنسجل فيه بياناتنا.
لقد حان الوقت لإنشاء وحدة تحكم ، وربط نموذجنا به وكتابة المنطق.
بشكل عام ، من الأفضل إنشاء جميع الملفات من خلال وحدة التحكم ، ولكن بما أننا نستخدم botman ، وكنت معتادًا على ذلك بالفعل ، فسنقوم بإنشاء وحدة تحكم يدويًا. في botman ، تسمى وحدة التحكم محادثة ، وربما هناك اختلافات كبيرة بينهما ، لكنني لم أفهم هذا - لم تكن هناك حاجة. في مجلد التطبيق / المحادثات ، قم بإنشاء ملف يسمى mainConversation.php.
على الشاشة ترى الحد الأدنى من تكوين المحادثة
namespace App\Conversations; use BotMan\BotMan\Messages\Conversations\Conversation; class mainConversation extends conversation { public function run () { } }
يجب أن يكون لدى صفك طريقة تشغيل عامة ، فهي نقطة الدخول لوحدة التحكم.
قم بتوصيل نموذجنا بوحدة التحكم:
use app\messengerUser;
دعنا نكتب المنطق الأولي. سيتم تشغيل طريقة التشغيل بطريقة خاصة تسأل عن اسم المستخدم ، وتكتب معرفه واسمه إلى id_chat واسم جدولنا.
للبدء ، اكتب:
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;
والتي سوف تسمح لنا باستخدام أساليب botman
والآن سنقوم بإجراء تغييرات على وحدة التحكم الخاصة بنا:
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) {
يحتوي 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 ('انظر مرة أخرى!') -> مع المرفقات (مرفق $) ، نقوم بإنشاء رسالة جديدة وإرفاق صورة بها. بشكل عام ، يتم وضع جميع الملفات العامة التي يجب على المستخدم رؤيتها في المجلد العمومي ، ولكن في روبوتي الأخير كانت هناك مشكلة في ذلك واضطررت إلى وضعها في مجلد منفصل على الخادم (غير مرتبط بالمشروع). أنا فعلت الشيء نفسه.
منطق الروبوت لدينا جاهز. لاختباره ، فقط افتح الموقع من خلال openerver ، ولكن قبل ذلك ، تحتاج إلى إنشاء ملف .htiaccess بالمحتويات التالية
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)$ public/$1 [L] </IfModule>
يجب أن يكون الملف في جذر الموقع. سيتم الآن نقل جميع الطلبات إلى المجلد العمومي. هذه هي الطريقة التي يعمل لارافيل. نحن نفتح الموقع ونختبر الروبوت ، ولا ننسى أنك تحتاج أولاً إلى إدخال "/ start".
بعد التأكد من أن كل شيء يعمل ، يمكنك إرفاقه بالبرقية. للقيام بذلك ، قم بإنشاء روبوت جديد فيbotfather ، انسخ مفتاح الروبوت إلى نهاية ملف .env. يبدو مثل هذا:
TELEGRAM_KEY=key_bot
نحتاج الآن إلى وضع برنامج تشغيل في مشروعنا للعمل المشترك لبوت المنطق والبرقية لدينا. يتم ذلك باستخدام أمر واحد فقط في وحدة التحكم:
composer require botman/driver-telegram
سوف تحتاج أيضا إلى تسجيل الروبوت في laravel.
php artisan botman:telegram:register
سيُطلب منا إدخال العنوان الذي سيكون به برنامج الروبوت الخاص بنا متاحًا.

إذا كنت تقوم بتطوير روبوت على الخادم ، فقم فقط بإضافة https: // url_site / botman بعد هذا الروبوت ، يمكنك اختباره في برنامج المراسلة نفسه. ولكن كن على علم ، فإن laravel يحتاج إلى إعدادات خادم خاصة ، وعلى الأرجح سيكون عليك تكوينه بنفسك. سأترك رابطًا عن كيفية تكوين الخادم في نهاية المقالة.
ربما هذا كل شيء. إذا قرأت حتى النهاية ، ثم تهانينا ، يمكنك الآن تطوير برامج الدردشة من أجل laravel باستخدام botman. إذا كانت لديك أسئلة ، سأكون سعيدًا بالإجابة في التعليقات ، بالإضافة إلى الروابط الموعودة:
المصادر على جيثب
وثائق بوتمان
إعداد الخادم
مقال قمت بإنشاء أول روبوت له
أون مقالة عن botman