لاراول و ربات تلگرام 1 - روش آپدیت

با درودارتباط لاراول با تلگرام یکی از مواردی هست که در اون تخصص خوبی کسب کرده ام و این متن راهنمایی هست برای برنامه نویسانی که میخواهند با تلگرام تبادل نمایند.من مهدی شیرین زاده اهل تبریز هستم و حسابدار سابق و برنامه نویس لاراول و ربات های تلگرامی در حال حاضر هستم.با تلگرام و لاراول چه کارهایی قبلا انجام داده ام:- من قبلا ربات اتاق معاملات آبشده با لاراول و تلگرام نوشتم.- آگهی های یک سایت را هر یک دقیقه یک بار به تلگرام و برای یک کانال فرستادم.- ربات قیمت دلار و طلا در تلگرام نوشتم.- ربات حسابداری و گزارشگری مالی برای تلگرام درست کردم.- ربات ثبت نام درست کردم.- کیف پول ارزهای دیجیتال و سرمایه گذاری در تلگرام ساختم.- نمودار رمز ارزها و .... ساختم و به تلگرام فرستادم.- منوهای داینامیک در تلگرام ساختم و منوی شیشه ای استفاده کردم و ...-------------------------------------------------------------برای ارتباط با تلگرام دو روش کلی وجود دارد. روش آپدیت و روش وب هوکدر این مقاله قصد دارم روش آپدیت و دریافت پیام های تلگرامی با این روش رو توضیح بدم.-------------------------------------------------------------در این مقاله من از پکیچ زیر برای ارتباط با تلگرام و لاراول 7 استفاده کرده ام: "irazasyed/telegram-bot-sdk": "3.1",این پکیج را در گیت هاب پیدا کنید و اون رو نصب کنید.telegram-bot-sdk-------------------------------------------------------------تنظیمات اولیه:اگر فقط از یک ربات تلگرام میخواهید استفاده کنید که توکن ربات را در فایل env قرار دهید و تنظیمات اولیه را در پوشه config انجام دهید.TELEGRAM_BOT_TOKEN=2111111111111111111:111111111111اگر میخواهید از چند ربات استفاده کنید که برای هر ربات یک کنترلر بسازید و کدهای هر ربات را جدا کنید و در اول هر کد صراحتا توکن ربات را به پکیج معرفی نمایید:$telegramA = new Api(2111111111111111111:111111111111); $this->Telegram = $telegramA;در اینجا متغییر Telegram یک متغیر سراسری در کنترلر هست که یک بار مقدار میگیره و بارها در فایل استفاده میشه و در ابتدا اینگونه تعریف شده:class TelegramBot1Controller extends Controller { public $update = ''; public $chat_id = ''; public $userInfo = ''; public $Telegram = '';-------------------------------------------------------------برای اینکه بتونیم پیام هایی که در ربات ما کاربران وارد کردند رو بخونیم نیاز به یک سرور در خارج از کشور داریم که معمولا یک هاست ارزان آلمان کار ما رو راه میندازه.-------------------------------------------------------------حالا میخواهیم که یک تابع درست کنیم که بتونیم پیام های کاربران رو بگیریم. این تابع رو در کنترلر ربات خودمون قرار میدیم: public function getUpdates() { $offset = Cache::get('getUpdates_offset'); $time = time(); while (time() - $time < 58) { $updates = Telegram::getUpdates(['offset' => $offset, 'limit' => 40]); if (count($updates) > 0) { $offset = end($updates)->update_id + 1; foreach ($updates as $update) { $this->update = $update; try { $this->index(); } catch (\Exception $exception) { echo 'err'; } } } sleep(1); } Cache::put('getUpdates_offset', $offset); }در فایل routes ما این تابع یه این گونه مسیریابی شده:Route::any('/getUpdates', 'Api\TelegramBot1Controller@getUpdates');یک کرون جاب در سیپنل ایجاد کنید که هر یک دقیقه یک بار اجرا میشه و این تابع رو در اون فراخوانی کنید:wget -q -O - http://yoursite.ir/getUpdates>/dev/null 2>&1خوب حالا میتونیم در تابع index به پیام های کاربران جواب بدیم:public function index() {$this->update = json_decode(json_encode($this->update));if ($this->chat_id < 0) return true;// Keyboard bottom response $message = $this->update->message->text ?? null; if (!is_null($message)) { 'chat_id' => $this->chat_id, 'text' => $message, ]); switch ($this->update->message->text) { case '/start': case 'start': case 'شروع': if ($this->UserCheck() != 0) $this->mainMenu(&quotمنو اصلی?&quot); //$this->mainMenu(&quotمنو اصلی?&quot); return true; break; case '❌' . 'بازگشت به منو اصلی': Cache::put($this->chat_id, ['step' => 'start', 'login' => 'true']); $this->mainMenu(&quotمنو اصلی?&quot); return true; break; case '⚱️' . 'ثبت نام' : $this->wallet(); return true; break; case '⚱️' . 'ورود کاربر' :......................... {کد ایجاد منوی اصلی در تلگرام برای مثال:$keyboard = [[ 'عضویت', 'ورود'], [ 'سایت شرکت ما'], ['کانال ما در تلگرام'],]; $reply_markup = Keyboard::make([ 'keyboard' => $keyboard, 'resize_keyboard' => true, 'one_time_keyboard' => true ]); $res = Telegram::sendMessage([ 'chat_id' => $this->chat_id, 'text' => ' یکی از گزینه های منو را انتخاب نمایید', 'reply_markup' => $reply_markup ]); return true;------------------------------------------------------------------------در تابع index ما برای کاربر یک منوی تلگرامی را ایجاد میکنیم و به گزینه های آن جواب میدهیم و ....-------------------------------------------------------------احتمال میدهم که کاربرانی که تازه کار هستند از این توضیحات من شاید چیز زیادی سردرنیاورند ولی کسانی که مجبور هستند منوهایی را در تلگرام ایجاد نمایند و به کاربران ربات پاسخ دهند، کدها و سرنخ های سریعی را در این نوشته ها پیدا خواهند کرد. برای همین فعلا به این مقدار توضیحات بسنده میکنم و توضیحات تکمیلی تر و روش های دیگر مورد استفاده در تلگرام را در مقالات دیگر ذکر خواهم کرد.-------------------------------------------------------------موفق و پیروز باشید