مقدمه
ربات های خودکار راهی برای ارائه داده های سفارشی بر اساس درخواست های کاربران است. چارچوب 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 ارزان –