مقدمه
ربات های خودکار راهی برای ارائه داده های سفارشی بر اساس درخواست های کاربران است. چارچوب Laravel و Botman ابزارهایی را برای ایجاد رباتهای مفید ارائه می دهند. در این آموزش با استفاده از Dog API یک ربات تلگرام برای دوستداران سگ ایجاد خواهید کرد و این ربات اینگونه خواهد بود:
نصب Laravel و Botman
اولین قدمی که ما برای ایجاد این ربات برمیداریم ، نصب Laravel و Botman است. اما قبل از انجام این کار ابتدا اجازه دهید نگاهی سریعی بیندازیم که Botman چیست و چگونه کار می کند:
BotMan یک چارچوب کتابخانه PHP است که به منظور ساده سازی کار ایجاد ربات های نوآورانه برای سیستم عامل های مختلف پیام رسانی از جمله Slack ، Telegram ، Microsoft Bot Framework ، Nexmo ، Hip******** ، Facebook Messenger و We******** طراحی شده است.
$botman->hears(‘Bot, What’s the best Web Development training website?’, function (BotMan $bot) {
$bot->reply(‘vpsgol for sure. Give me a harder question!!’);
});
نصب Botman Studio
مارسل پوسیوت ، خالق Botman ، در حال حاضر با ایجاد Botman Studio که یک برنامه کاربردی و به روز لاراول همراه با Botman و سایر ابزارهای آزمایش میباشد (بعداً معرفی میشوند) ، در وقت ما صرفه جویی کرده است.
پیش بروید و یک پروژه جدید ایجاد کنید:
composer create-project –prefer-dist botman/studio ilovedogs
Copy
اکنون که نصب جدیدی از Laravel و Botman داریم ، بررسی خواهیم کرد که آیا همه چیز خوب کار میکند یا خیر. پایانه خود را باز کنید و این دستور را اجرا کنید:
php artisan botman:tinker
Copy
اگر “Hi” را تایپ کردید و ربات با “Hello” پاسخ داد ، آماده پیشروی هستید.
ایجاد دستورات
ربات ما باید بتواند به انواع مختلف پیام پاسخ دهد و این لیستی از ویژگی هایی است که ما به اجرا در می آوریم ، اما مطمئناً همیشه می توانید هر دستور دیگری را که دوست دارید ربات شما به آن گوش دهد، اضافه کنید:
• ارسال تصادفی عکس سگ از همه نژادها.
•ارسال تصادفی عکس سگ به وسیله نژادش.
•ارسال تصادفی عکس سگ به وسیله نژادش و زیر نژاد آن.
• برقراری مکالمه و ارائه کمک.
•پاسخ به دستورات ناشناس.
بیایید فایل مسیر / botman.php را پاک کنیم و از ابتدا شروع کنیم.
ارسال یک عکس تصادفی سگ از همه نژادها
به منظور دریافت یک عکس تصادفی سگ از ربات باید /random را به آن ارسال کنید و به این صورت است که ما به آن می گوییم به آن دستور دقیق پاسخ دهد:
در فایل مسیر / botman.php شما:
<?php
use App\Conversations\StartConversation;
$botman = resolve(‘botman’);
$botman->hears(‘/random’, ‘App\Http\Controllers\AllBreedsController@random’);
پیش بروید و یک کنترلر ایجاد کنید:
php artisan make:controller AllBreedsController
Copy
باید به این شکل باشد:
<?php
namespace App\Http\Controllers;
use App\Services\DogService;
use App\Http\Controllers\Controller;
class AllBreedsController extends Controller
{
/**
* Controller constructor
*
* @return void
*/
public function __construct()
{
$this->photos = new DogService;
}
/**
* Return a random dog image from all breeds.
*
* @return void
*/
public function random($bot)
{
// $this->photos->random() is basically the photo URL returned from the service.
// $bot->reply is what we will use to send a message back to the user.
$bot->reply($this->photos->random());
}
}
ما برای اولین بار نمونه ای از DogService (app//services/DogService.php) خود را ایجاد کردیم که وظیفه برقراری تماس های API به نقاط انتهایی و واکشی تصویر را خواهد داشت ، و این همان شکلی است که به نظر می رسد:
<?php
namespace App\Services;
use Exception;
use GuzzleHttp\Client;
class DogService
{
// The endpoint we will be getting a random image from.
const RANDOM_ENDPOINT = ‘https://dog.ceo/api/breeds/image/random’;
/**
* Guzzle client.
*
* @var GuzzleHttp\Client
*/
protected $client;
/**
* DogService constructor
*
* @return void
*/
public function __construct()
{
$this->client = new Client;
}
/**
* Fetch and return a random image from all breeds.
*
* @return string
*/
public function random()
{
try {
// Decode the json response.
$response = json_decode(
// Make an API call an return the response body.
$this->client->get(self::RANDOM_ENDPOINT)->getBody()
);
// Return the image URL.
return $response->message;
} catch (Exception $e) {
// If anything goes wrong, we will be sending the user this error message.
return ‘An unexpected error occurred. Please try again later.’;
}
}
}
ارسال یک عکس تصادفی سگ به وسیله نژادش
برای این مورد ، ما از دستور / b {breed} استفاده می کنیم و همانند بالا ، فایل routes/botman.php را باز می کنیم و به ربات می گوییم که با اضافه کردن این خط ، آن دستور را گوش دهد:
$botman->hears(‘/b {breed}’, ‘App\Http\Controllers\AllBreedsController@byBreed’);
Copy
ما از همان کنترلر قبلی استفاده می کنیم. AllBreedsController را باز کنید و این روش را به آن اضافه کنید:
/**
* Return a random dog image from a given breed.
*
* @return void
*/
public function byBreed($bot, $name)
{
// Because we used a wildcard in the command definition, Botman will pass it to our method.
// Again, we let the service class handle the API call and we reply with the result we get back.
$bot->reply($this->photos->byBreed($name));
}
بیایید با باز کردن کلاس DogService و اضافه کردن این روش به آن ، در کلاس سرویس خود روش byBreed را تعریف کنیم:
/**
* Fetch and return a random image from a given breed.
*
* @param string $breed
* @return string
*/
public function byBreed($breed)
{
try {
// We replace %s in our endpoint with the given breed name.
$endpoint = sprintf(self::BREED_ENDPOINT, $breed);
$response = json_decode(
$this->client->get($endpoint)->getBody()
);
return $response->message;
} catch (Exception $e) {
return “Sorry I couldn\”t get you any photos from $breed. Please try with a different breed.”;
}
}
و فراموش نکنید که علامت انتهایی const مورد استفاده در بالا را به همان فایل اضافه کنید:
// 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 {breed}:{subBreed} استفاده کنیم :
$botman->hears(‘/s {breed}:{subBreed}’, ‘App\Http\Controllers\SubBreedController@random’);
Copy
کنترلر را ایجاد میکند:
php artisan make:controller SubBreedController
Copy
و روش random را به شکل زیر معرفی میکنیم:
<?php
namespace App\Conversations;
use App\Services\DogService;
use App\Http\Controllers\Controller;
class SubBreedController extends Controller
{
/**
* Controller constructor
*
* @return void
*/
public function __construct()
{
$this->photos = new DogService;
}
/**
* Return a random dog image from all breeds.
*
* @return void
*/
public function random($bot, $breed, $subBreed)
{
$bot->reply($this->photos->bySubBreed($breed, $subBreed));
}
}
و نقطه پایانی و روش مورد نیاز را به کلاس 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’;
/**
* Fetch and return a random image from a given breed and its sub-breed.
*
* @param string $breed
* @param string $subBreed
* @return string
*/
public function bySubBreed($breed, $subBreed)
{
try {
$endpoint = sprintf(self::SUB_BREED_ENDPOINT, $breed, $subBreed);
$response = json_decode(
$this->client->get($endpoint)->getBody()
);
return $response->message;
} catch (Exception $e) {
return “Sorry I couldn\”t get you any photos from $breed. Please try with a different breed.”;
}
}
برقراری مکالمه و ارائه کمک
مکالمه همان چیزی است که شما معمولاً هنگام ساختن رباتهای خود از آن استفاده می کنید و مطالب آن را اینوگنه توصیف می کند:
وقتی صحبت از ربات های ******** می شود ، احتمالاً نمی خواهید به کلمات کلیدی تکی واکنش نشان دهید ، بلکه در عوض ، ممکن است نیاز داشته باشید که با استفاده از مکالمه ، اطلاعات را از کاربر جمع آوری کنید. بیایید بگوییم که شما می خواهید ربات ******** شما یک تجربه جذاب را برای کاربران برنامه شما فراهم کند.
بیایید مکالمه خود را با اضافه کردن این خط به فایل routes/botman.php ایجاد کنیم:
$botman->hears(‘Start conversation’, ‘App\Http\Controllers\ConversationController@index’);
کنترلر ایجاد کنید:
php artisan make:controller ConversationController
Copy
و یک روش index را در داخل آن کلاس تعریف کنید:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Conversations\DefaultConversation;
class ConversationController extends Controller
{
/**
* Create a new conversation.
*
* @return void
*/
public function index($bot)
{
// We use the startConversation method provided by botman to start a new conversation and pass
// our conversation class as a param to it.
$bot->startConversation(new DefaultConversation);
}
}
اگر از Botman Studio استفاده می کنید ، باید قبلاً یک پوشه Conversations را در داخل پوشه برنامه قرار دهید ، بنابراین پیش بروید و یک کلاس جدید در داخل آن پوشه ایجاد کنید و آن را DefaultConversation.php بنامید:
<?php
namespace App\Conversations;
use BotMan\BotMan\Messages\Incoming\Answer;
use BotMan\BotMan\Messages\Outgoing\Question;
use BotMan\BotMan\Messages\Outgoing\Actions\Button;
use BotMan\BotMan\Messages\Conversations\Conversation;
class DefaultConversation extends Conversation
{
/**
* First question to start the conversation.
*
* @return void
*/
public function defaultQuestion()
{
// We first create our question and set the options and their values.
$question = Question::create(‘Huh – you woke me up. What do you need?’)
->addButtons([
Button::create(‘Random dog photo’)->value(‘random’),
Button::create(‘A photo by breed’)->value(‘breed’),
Button::create(‘A photo by sub-breed’)->value(‘sub-breed’),
]);
// We ask our user the question.
return $this->ask($question, function (Answer $answer) {
// Did the user click on an option or entered a text?
if ($answer->isInteractiveMessageReply()) {
// We compare the answer to our pre-defined ones and respond accordingly.
switch ($answer->getValue()) {
case ‘random’:
$this->say((new App\Services\DogService)->random());
break;
case ‘breed’:
$this->askForBreedName();
break;
case ‘sub-breed’:
$this->askForSubBreed();
break;
}
}
});
}
/**
* Ask for the breed name and send the image.
*
* @return void
*/
public function askForBreedName()
{
$this->ask(‘What\’s the breed name?’, function (Answer $answer) {
$name = $answer->getText();
$this->say((new App\Services\DogService)->byBreed($name));
});
}
/**
* Ask for the breed name and send the image.
*
* @return void
*/
public function askForSubBreed()
{
$this->ask(‘What\’s the breed and sub-breed names? ex:hound:afghan’, function (Answer $answer) {
$answer = explode(‘:’, $answer->getText());
$this->say((new App\Services\DogService)->bySubBreed($answer[0], $answer[1]));
});
}
/**
* Start the conversation
*
* @return void
*/
public function run()
{
// This is the boot method, it’s what will be excuted first.
$this->defaultQuestion();
}
}
پاسخ به دستورات ناشناس:
در آخر ، ما باید به کاربر اطلاع دهیم که وقتی پیامی را ارسال می کند ، ربات ما تشخیص نمی دهد و ما می توانیم با استفاده از روش fallback این کار را انجام دهیم . routes/botman.php و این خط را باز کنید:
$botman->fallback(‘App\Http\Controllers\FallbackController@index’);
Copy
کنترلر را ایجاد کنید:
php artisan make:controller FallbackController
Copy
و به سادگی پیامی را که می خواهیم کاربر ببیند برمی گردانیم:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class FallbackController extends Controller
{
/**
* Respond with a generic message.
*
* @param Botman $bot
* @return void
*/
public function index($bot)
{
$bot->reply(‘Sorry, I did not understand these commands. Try: \’Start Conversation\”);
}
}
تست ربات
• ارسال تصادفی عکس سگ از همه نژادها.
•ارسال تصادفی عکس سگ به وسیله نژادش.
•ارسال تصادفی عکس سگ به وسیله نژادش و زیر نژاد آن.
• برقراری مکالمه و ارائه کمک.
•پاسخ به دستورات ناشناس.
نصب درایور تلگرام
پس از ایجاد و تست موفقیت آمیز و دستورات اکنون زمان آن است که آن را با تلگرام ادغام کنیم. برای این کار باید درایور تلگرام را که توسط Botman تهیه شده است در اختیار بگیریم:
composer require botman/driver-telegram
Copy
ایجاد ربات تلگرام
ما ربات خود را با موفقیت ایجاد کردیم ، دستورات را تعریف کردیم و آن را آزمایش کردیم اکنون وقت آن رسیده که بات تلگرام را بسازیم. برنامه را باز کنید و BotFather را جستجو کنید، / newbot را تایپ کنید ، نام کاربری را برای ربات خود وارد کنید و پیش بروید.
این را به فایل .env خود اضافه کنید و YOUR_TOKEN را با نشانه ای که Telegram به شما داد ، جایگزین کنید:
TELEGRAM_TOKEN=YOUR_TOKEN
Copy
نصب و اجرای ngrok
از آنجا که Telegram برای راه اندازی webhooks و دریافت پیام از کاربران شما به یک URL معتبر و ایمن نیاز دارد ، ما از ngrok استفاده خواهیم کرد یا می توانید برنامه خود را روی یک سرور مجازی به کار بگیرید و یک گواهی SSL تنظیم کنید ، اما برای نسخه ی نمایشی ما از ngrok استفاده مینماییم. به صفحه دانلود آنها بروید و روی دکمه دانلود که با سیستم عامل شما مطابقت دارد کلیک کنید.
اکنون cd را در پوشه برنامه خود وارد کرده و php artisan service را اجرا کنید
اجرای ngrok را تایم بگیرید، در پوشه ای که ngrok در آن قرار دارد cd کنید و./ngrok http 8000 را اجرا نمایید.
ربات را به تلگرام وصل کنید
مرحله آخر ، پیوند دادن برنامه با Telegram Bot است که قبلاً ایجاد کرده ایم و برای انجام این کار ، یک درخواست POST را به این URL ارسال می کنیم و URL ngrok ایجاد می شده را میفرستیم :
https://api.telegram.org/bot{TOKEN}/setWebhook
Copy
با اجرای این دستور می توانید این کار را با Postman یا CURL انجام دهید:
curl -X POST -F ‘url=https://{YOU_URL}/botman’ https://api.telegram.org/bot{TOKEN}/setWebhook
اگر این کار را به درستی انجام داده باشید ، باید این پاسخ دقیق JSON را دریافت کنید:
{
“ok”: true,
“result”: true,
“description”: “Webhook was set”
}
آن را در تلگرام امتحان کنید
• ارسال تصادفی عکس سگ از همه نژادها.
•ارسال تصادفی عکس سگ به وسیله نژادش.
•ارسال تصادفی عکس سگ به وسیله نژادش و زیر نژاد آن.
• برقراری مکالمه و ارائه کمک.
•پاسخ به دستورات ناشناس.
نتیجه
امیدوارم اگر مطالب را دنبال کردید و ربات خود را ایجاد کرده اید این آموزش برایتان مفید بوده باشد.
از این لینک ها زیر می توانید آمورش های بیشتری برای لینوکس پیدا کنید :
استفاده از nsh برای دستورات از راه دور اوبونتو 18 – میزبانی وب سایت با Caddy اوبونتو 18
تنظیم سرور ذخیره سازی آبجکت با استفاده از Minio در اوبونتو 18 – ضبط و اشتراک گذاری ترمینال با Terminalizer اوبونتو
تنظیم مسیریابی شرطی و پاسخگو با React Router v4 – ایجاد یک URL کوتاه کننده با Django و GraphQL
یک برنامه ردیابی سلامت را با React ،GraphQL و Okta – ساخت برنامه ******** زمان حقیقی React و GraphQL
به روزرسانی فیلترهای مرتب سازی Angular (زاویه ای) – با استفاده از React ، Superagent و API اینستاگرام
نحوه ساختن یک برنامه جهانی با Nuxt.js و Django – دکمه دانلود با ریزتعاملات با CSS ، anime.js و segment.js
نحوه اضافه کردن عکسهای پیشرفته در Node و Express – با Vue ،GraphQL و Apollo Client یک وبلاگ ساخت
یک برنامه SSR با روتر Preact ، Unistore و Preact بسازید – ساخت برنامه های وب پیشرونده با Angular
اشکال زدایی JavaScript در تولید با نقشه های منبع – می توان با Koa برنامه “سلام جهانی” ساخت
ساختن یک برنامه با Node ، React ، Okta – مدیریت حالت فرم در React با Redux Form
نحوه تنظیم Laravel ، Nginx و MySQL – ارتقاء از AngularJS به Angular با ngUpgrade
استفاده از ویژوال استودیو از راه دور – احراز هویت API با JSON Web Tokens و Passport
راه اندازی یک پروژه React با Parcel – ایجاد Swiper مانند Netflix را در Vue
ساختن یک ربات تلگرام با Laravel و BotMan – استفاده از map، filter، و reduce در جاوااسکریپت
چگونه می توان موتور جستجوی زمان واقعی را با Vue – ساختن سیستم مستندات (Documentation) با Vue و VuePress
استفاده از اشتراک زنده با کد ویژوال استودیو – ساخت یک مقیاس اندازه گیری قدرت رمز عبور را در React
شروع عملی GraphQL با Node.js و Express – ساخت یک برنامه آب و هوا در Django
نحوه نصب Discourse روی Ubuntu 18 – تأیید رمز عبور با استفاده از درخواست فرم Laravel
نحوه نصب MySQL در CentOS 8 – استفاده از پسوند PDO PHP برای انجام تراکنش MySQL
نصب و پیکربندی SNMP Daemon و Client در Ubuntu 18 – نصب Linux، Nginx، MariaDB،PHP در Debian 10
کلمات کلیدی خرید سرور
خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا – خرید سرور مجازی ارزان هلند – vps – خرید vps هلند – خرید سرور مجازی آمریکا – خرید vps فرانسه – تست vps – سرور مجازی تست – سرور مجازی ویندوز – ارزانترین vps – خرید وی پی اس – vps ارزان –