vps

ساختن یک ربات تلگرام با Laravel و BotMan

مقدمه
ربات های خودکار راهی برای ارائه داده های سفارشی بر اساس درخواست های کاربران است. چارچوب Laravel و Botman ابزارهایی را برای ایجاد رباتهای مفید ارائه می دهند. در این آموزش با استفاده از Dog API یک ربات تلگرام برای دوستداران سگ ایجاد خواهید کرد و این ربات اینگونه خواهد بود:

نصب Laravel و Botman
اولین قدمی که ما برای ایجاد این ربات برمیداریم ، نصب Laravel و Botman است. اما قبل از انجام این کار ابتدا اجازه دهید نگاهی سریعی بیندازیم که Botman چیست و چگونه کار می کند:
BotMan یک چارچوب کتابخانه PHP است که به منظور ساده سازی کار ایجاد ربات های نوآورانه برای سیستم عامل های مختلف پیام رسانی از جمله Slack ، Telegram ، Microsoft Bot Framework ، Nexmo ، HipChat ، Facebook Messenger و WeChat طراحی شده است.
$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 ارزان – 


https://vpsgol.net/product/vps-germany/

https://vpsgol.net/product/vps-usa/

https://vpsgol.net/product/vps-france/

https://vpsgol.net/product/vps-canada/

https://vpsgol.net/product/vps-poland/

https://vpsgol.net/product/vps-netherlands/

https://vpsgol.net/product/vps-england/