مقدمه
واژه ربات فقط مختص به هوش مصنوعی نیست. یک ربات می تواند ابزاری در پیام رسان با یک رابط چت ساده باشد و می تواند برای گسترش عملکرد سایت ها یا خدمات متنوعی استفاده شود یا حتی می تواند یک برنامه مستقل باشد. توسعه و نصب رباتها ارزان و آسان است.
یکی دیگر از ویژگیهای بخصوص ربات ها این است که میتوان از پیامرسانها در هر نوع دستگاهی مانند لپتاپ، تلفنهای هوشمند و تبلت استفاده کرد. به همین دلیل است که روز به روز به استفاده کنندگان و بخصوص سفارش دهندگان ربات های تلگرام افزوده می شود.
در این مقاله آموزشی قرار است یک ربات تلگرام ساده برای ساخت کیبورد ربات تلگرام php ایجاد کنیم. در این آموزش به شما نشان خواهیم داد که چگونه ربات تلگرام خود را ایجاد کنید، با آن ارتباط برقرار کنید، کدنویسی انجام دهید و در نهایت ربات خود را به یک کیبورد سفارشی مجهز کنید. برای یادگیری کامل زبان برنامه نویسی PHP بهتر است به مجموعه آموزش PHP فرادرس مراجعه کنید.
ساخت ربات با BotFather
قبل از آموزش ساخت کیبورد ربات تلگرام php لازم است مقدمه ای خلاصه وار در مورد ساخت ربات در تلگرام بدهیم. البته اگر در این مورد مشکلی ندارید می توانید این بخش را رد کنید. این بخش بستر برای مبتدیان در نظر گرفته شده است. اولین قدم برای ایجاد یک ربات، ثبت اکانت ربات در تلگرام است. برای این منظور BotFather@ را جستجو کنید و پس از جستجو مانند تصویر زیر روی BotFather کلیک کنید تا مراحل کار را ادامه مشاهده کنید.
بر روی گزینه START در پایین صفحه کلیک کنید تا مانند لیست دستورات BotFather را ببینید. گزینههای مختلفی را لیست مشاهده خواهید کرد که هر کدام از آنها دارای کاربردهای مختلفی هستند. یک بات Bot جدید را ایجاد کنید.
برای ایجاد Bot جدید می توان برروی newbot کلیک کرد یا عبارت newbot/ را تایپ کرد. یک نام کاربری را به دلخواه خودتان وارد کنید و در آخر نام کاربری عبارت bot را اضافه کنید. به عنوان مثال pstoreprograming_bot نام کاربری ما در این آموزش است.
در تصویر بالا مشاهده می کنید که توکن API ربات تلگرام بصورت کدی از حروف و اعداد است. بهتر است بدانید API مخفف عبارت Application Programming Interface یعنی “واسط برنامه نویسی کاربردی” است و توکن API هم یک شناسه منحصربه فرد برای ارتباط یک اپلیکشن با زبان برنامه نویسی است.
میتوانید برای ربات خود description یا تصویر دلخواهی اضافه کنید کافیست در خط فرمان های setdescription/ و setuserpic/ موارد خواسته شده را تکمیل کنید. ما این مراحل را بصورت تصویر زیر، انجام داده ایم.
می توانید لیست دستورات یا Commandهای تلگرام را نیز ایجاد کنید و با نشان دادن Commandها که بصورت علامت / نشان داده می شوند به ربات خود امکاناتی اضافه کنید. برای این کار نیز می توانید از فرمان setcommands استفاده کنید.
ایجاد و ثبت SSL Webhook
بطور کلی در تلگرام دو راه برای دریافت پیام از کاربران وجود دارد:
- روش long polling
- روش Webhook
با long polling باید از API پیام های جدیدی درخواست کنید و با وب هوک ها یک callback تنظیم می کنید که در صورت دریافت پیام جدید از طرف کاربر، API تلگرام با آن call می شود. در آموزش ساخت کیبورد ربات تلگرام php ترجیح دادیم از webhooks استفاده کنیم چون به نظر می رسد ارتباطات در این روش بصورت بلادرنگ است، اکنون باید یک URL بازگشت را برای وب هوک خود انتخاب کنیم، که باید تحت پروتکل HTTPS به آن دسترسی پیدا کنیم، و باید آن را واقعاً ایمن تنظیم کنیم، بنابراین همانطور که در مستندات تلگرام گفته شده است، بایستی اسکریپت خود را در یک مسیر مخفی، پنهان کنید:
مستندات: اگر میخواهید مطمئن شوید که درخواست Webhook از تلگرام میآید، توصیه میکنیم از یک مسیر مخفی در URL استفاده کنید، به عنوان مثال: <https://www.example.com/ <token از آنجایی که هیچ کس دیگری رمز ربات شما را نمی داند، می توانید مطمئن باشید که این توکن از طرف خودمان است.
اگر گواهی SSL شما قابل اعتماد است، تنها کاری که باید انجام دهید این است که این URL را در مرورگر خود باز کنید:
https://api.telegram.org/bot{my_bot_token}/setWebhook?url={url_to_send_updates_to}
my_bot_token رمزی است که هنگام ایجاد ربات خود از BotFather دریافت کردید و url_to_send_updates_to آدرس کدی است که برای پیاده سازی رفتار ربات خود نوشته اید (برای تنظیم Webhook به سروری با HTTPS نیاز دارید).برای مثال:
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/setWebhook?url=https://www.example.com/my-telegram-bot.php
پس از اجرای این آدرس در آدرس بار باید خروجی شبیه به خروجی زیر را مشاهده کنید:
{ "ok":true, "result": { "url":"https://www.example.com/my-telegram-bot.php", "has_custom_certificate":false, "pending_update_count":0, "max_connections":40 } }
برنامه نویسی ربات تلگرام با PHP
در این بخش از آموزش ساخت کیبورد ربات تلگرام php نحوه توسعه فایل PHP ربات تلگرام را توضیح خواهیم داد. با استفاده از یک ویرایشگر PHP مانند VScode یک فایل my-telegram-bot.php با محتوای زیر ایجاد کنید:
<?php $botToken = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"; $botAPI = "https://api.telegram.org/bot" . $botToken; $update = file_get_contents('php://input'); $update = json_decode($update, TRUE); if (!$update) { exit; } $message = isset($update['message']) ? $update['message'] : "";
همانطور که در کد بالا مشاهده می کنید یک سری دستورات ساده ای در زبان PHP نوشته شده است. در این دستورات:
- botToken$: متغیر توکن رباتی است که توسط BotFather برای ربات تولید شده و برای ثبت ربات در سرویس Webhook استفاده می شود.
- botAPI URL$: متغیر مورد استفاده برای ارسال دستورات به API تلگرام است.
- file_get_contents (‘php: // input’): تماس های دریافتی از سرور تلگرام را مدیریت می کند.
- json_decode ($ update، TRUE): پیام ارتباطی را در ساختار JSON رمزگشایی می کند.
- if (!$update): اگر یک دستور JSON معتبر نباشد، با دستور exit از اسکریپت خارج می شود.
- message$: متغیری است که اگر یک دستور دارای اعتبار باشد باشد، پیام ارسال شده را می توان با آن تنظیم کرد.
دریافت پیام از ربات تلگرام در PHP
قبل از آموزش ساخت کیبورد ربات تلگرام php بهتر است در مورد نحوه دریافت پیام از ربات تلگرام در PHP بیشتر بدانیم. اسکریپت نوشته شده در بالا را می توانید از طریق URL اجرا کنید اما فعلاً این اسکریپت هیچ عملی را انجام نمی دهد ولی بدون خطا کار خواهد کرد. حالا بیایید چند خط کد به این فایل اضافه کنیم تا داده های مفیدی را از پیام دریافتی استخراج کنیم:
$messageId = isset($message['message_id']) ? $message['message_id'] : ""; $messageText = isset($message['text']) ? $message['text'] : ""; $messageText = trim($messageText); $messageText = strtolower($messageText); $date = isset($message['date']) ? $message['date'] : ""; $chatId = isset($message['chat']['id']) ? $message['chat']['id'] : ""; $username = isset($message['chat']['username']) ? $message['chat']['username'] : ""; $firstname = isset($message['chat']['first_name']) ? $message['chat']['first_name'] : ""; $lastname = isset($message['chat']['last_name']) ? $message['chat']['last_name'] : "";
در کدهای اضافه شده:
- $messId$: شماره شناسایی منحصر به فرد پیام چت است.
- messageText$: یک پیام متنی است، متن موجود در پیام ارسال شده را نشان می دهد.
- $date: تاریخ ارسال پیام است.
- chatId$: شناسه منحصر به فرد کاربری است که پیام را ارسال کرده است.
- username$: نام کاربری، کاربری است که پیام را ارسال کرده است.
- firstname$: نام، کاربری است که پیام را ارسال کرده است.
- lastname$: نام خانوادگی کاربری است که پیام را ارسال کرده است.
message لزوما یک پیام متن نیست، می توان نوع پیام دریافتی را با کدهای زیر مدیریت کرد:
if (isset($message['text'])) { $response = "Received a text message: " . $message['text']; } elseif (isset($message['audio'])) { $response = "Received an audio message"; } elseif (isset($message['document'])) { $response = "Received a document message"; } elseif (isset($message['photo'])) { $response = "Received a photo message"; } elseif (isset($message['sticker'])) { $response = "Received a sticker message"; } elseif (isset($message['video'])) { $response = "Received a video message"; } elseif (isset($message['voice'])) { $response = "Received a voice message"; } elseif (isset($message['contact'])) { $response = "Received a contact message"; } elseif (isset($message['location'])) { $response = "Received a location message"; } elseif (isset($message['venue'])) { $response = "Received a venue message"; } else { $response = "I received a message?"; }
هنگامی که تصویری برای ربات ارسال می شود، می توانید فایل و اطلاعات آن را از API تلگرام بازیابی کنید برای این منظور می توان از کدهای زیر استفاده کرد:
if (isset($message['photo'])) { $fileAPI = "https://api.telegram.org/file/bot" . $botToken; $url = $GLOBALS[botAPI] . '/getFile?file_id=' . $message['photo'][0]['file_id']; $fileinfo = file_get_contents($url); $fileinfo = json_decode($fileinfo, TRUE); $filePath = $fileinfo['result']['file_path']; $url = $GLOBALS[fileAPI] . '/' . $filePath; $imgData = "File size: " . $message['photo'][0]['file_size'] . "byte" . chr(10) . "Width: " . $message['photo'][0]['width'] . "px" . chr(10) . "Height: " . $message['photo'][0]['height'] . "px" . chr(10) . "URL: " . $url); }
در این کدها:
- fileAPI$ آدرسی است که برای بازیابی اطلاعات فایل از API تلگرام استفاده می شود.
- fileinfo$ اسکریپت یک تماس HTTP GET برای دریافت اطلاعات فایل در قالب JSON انجام می دهد.
- filePath$ اسکریپت مسیر URL فایل را دریافت می کند.
- message [‘photo’] [0] [‘file_size’]$ اندازه اولین فایل در بایت است.
- message [‘photo’] [0] [‘width’]$ و message [‘photo’] [0] [‘height’]$ ابعاد اولین فایل بر حسب پیکسل هستند.
ارسال پیام به ربات در PHP
ربات تلگرامی می تواند چندین نوع پیام را به چت ارسال کند این پیام ها می توانند انواع مختلفی داشته باشند که در ادامه آموزش ساخت کیبورد ربات تلگرام php به آن ها می پردازیم:
- پیام های متنی Text messages
- پیام های تصویری Photo messages
- پیام های موقعیتی Text messages
- پیام های نمایش صفحه کلید display keyboards messages
پیام های متنی، تصویری و موقعیتی نمونه های خیلی ساده ای از ارسال پیام هستند که مثال هایی را برای هر نوع در ادامه آورده ایم ولی پیام های نمایش صفحه کلید یا display keyboards messages اصلی ترین قسمت در آموزش ساخت کیبورد ربات تلگرام php است که در یک بخش مجزا توضیح خواهیم داد.
اگر بخواهیم پیامی را بصورت متنی به ربات تلگرامی خودمان ارسال کنیم باید بصورت زیر عمل کرد:
$url = $GLOBALS[botAPI] . '/sendMessage?chat_id=' . $chatId . '&text=' . urlencode($message); file_get_contents($url);
در صورتی که بخواهیم پیامی را بصورت تصویر برای ربات تلگرام ارسال کنیم می توان یک تصویر موجود در URL را بصورت زیر ارسال کرد:
$url = $GLOBALS[botAPI] . '/sendPhoto?chat_id=' . $chatId . '&photo=' . urlencode("https://webnoos.altervista.org/noos.jpeg"); file_get_contents($url);
برای ارسال اطلاعات Location نیز می توان طبق کد زیر عمل کرد.
$url = $GLOBALS[botAPI] . '/sendLocation?chat_id=' . $chatId . '&latitude=' . urlencode("45.1") . '&longitude=' . urlencode("11.3"); file_get_contents($url);
ساخت کیبورد ربات تلگرام php
به بحث اصلی در این پست یعنی آموزش ساخت کیبورد ربات تلگرام php می رسیم. تلگرام دارای قابلیت نمایش صفحه کلید مختلفی در ربات های خود می باشد برای اینکه بتوانیم در ربات خود صفحه کلید داشته باشیم باید یک پیام یا همان message از نوع پیام های نمایش صفحه کلید display keyboards messages به ربات خود ارسال کنیم. در مثال زیر یک کیبورد معمولی را به ربات ارسال کرده ایم:
header("Content-Type: application/json"); $parameters = array('chat_id' => $chatId, "text" => $messageText); $parameters["method"] = "sendMessage"; $parameters["reply_markup"] = '{ "keyboard": [["uno", "due"], ["tre"], ["quattro", "5", "6"]], "one_time_keyboard": false}'; echo json_encode($parameters);
با استفاده از کدهای زیر نیز می توان صفحه کلید فعلی را از این طریق از چت حذف کرد:
header("Content-Type: application/json"); $parameters = array('chat_id' => $chatId, "text" => $messageText); $parameters["method"] = "sendMessage"; $parameters["reply_markup"] = '{ "remove_keyboard" : true}'; echo json_encode($parameters);
برای استفاده صفحه کلید درون خطی یا inline keyboard نیز می توان بصورت زیر در PHP کدنویسی کرد:
header("Content-Type: application/json"); $parameters = array('chat_id' => $chatId, "text" => $messageText); $parameters["method"] = "sendMessage"; $keyboard = ['inline_keyboard' => [[ ['text' => 'Vai su Google', 'url' => 'https://www.google.com'], ['text' => 'Vai su Microsoft', 'url' => 'https://www.microsoft.com'] ]]]; $parameters["reply_markup"] = json_encode($keyboard, true); echo json_encode($parameters);
در نهایت، می توانید با استفاده از پیام های ارسال شده و دریافت شده به ربات می توانید ربات خودتان را مدیریت کرده و در ربات خود دستوراتی را قرار دهید تا یک سری از کارها را بصورت برنامه ریزی شده با دستورات شرط انجام دهد. مثال گفته شده را می توانید با یک دستور switch انجام دهید:
switch ($messageText) { case "/hi": // TODO break; default: // TODO }
اگر می خواهید با جزئیات بیشتری نحوه ساخت ربات تلگرام با php را آموزش ببینید بهتر است از لینک زیر را از فرادرس تهیه و مطالعه کنید.
سخن آخر در مورد آموزش ساخت کیبورد ربات تلگرام php
در این پست از مجموعه آموزش های پی استور نحوه ساخت کیبورد ربات تلگرام php توضیح داده شد. قبل از توضیح در مورد ساخت کیبورد نیز مراحل کاملی از چگونگی کار با ربات تلگرام ارائه گردید.
بدیهی است این پست یک نوشته آموزشی هست و برای افزایش مهارت کدنویسی خود باید تمرین و تکرار زیادی را انجام دهید. در پایان پیشنهاد می کنیم در فرصتی مناسب مقالات آموزشی ما را برای کسب درآمد از طریق فروش فایل را نیز مطالعه کنید. حتماً منتظر نظرات و پیشنهادات سازنده شما عزیزان هستیم. موفق و پیروز باشید.
یک پاسخ
آقا دسستون درد نکه چرا از اول این روش رو نگفتن. همه چیز ۱۰۰%%% درست