ساخت ربات آینه (فایل) Telegram با استفاده از زبان php :
- تا این مرحله با فرآیند کار ربات های تلگرام به خوبی آشنا شدیم ، وقت آن است که ربات را به سیستم دریافت و ارسال فایل مجهز کنیم ، در راهنمای استفاده از بات های تلگرام نوشته شده است برای ارسال فایلی مانند عکس ، فیلم ، صدا و ... باید یا آدرسی از این فایل داشته باشیم یا یک پارامتری به نام فایل file_id که یک ای دی منحصر به فردی است که مربوط به هر فایل آپلود شده در داخل سرور تلگرام است ، لازم به ذکر است این file_id قابل استفاده برای تمام ربات ها نمی باشد ، به عنوان مثال شما با چت کردن با یک ربات فایلی را ارسال و به طریقی file_id آن فایل را بدست آورده اید ، تلگرام به شما اجازه نمی دهد که این file_id را از ربات دیگری برای شخصی دیگری ارسال کنید ، توجه داشته باشید شما زمانی می توانید از آن file_id در بات دلخواه خود استفاده کنید و آن را با استفاده از ربات برای فرده دیگری بفرستید که حداقال یکبار آن فایل را برای ربات ارسال کرده باشید !
- در این قسمت نحوه ساخت ربات آینه (فایلی) را آموزش و برای شروع کار ابتدا خروجی جیسون دریافت عکس را قرار میدهیم و سپس به توضیح آن می پردازیم (برای جلوگیری از توضیحات اضافی فقط متد ارسال عکس را توضیح میدهیم ، بقیه موارد مشابه می باشند) :
{
"ok": true,
"result": [
{
"update_id": 282474996,
"message": {
"message_id": 20,
"from": {
"id": 116589236,
"is_bot": false,
"first_name": "Mohammad",
"last_name": "Zarchi",
"language_code": "en-US"
},
"chat": {
"id": 116589236,
"first_name": "Mohammad",
"last_name": "Zarchi",
"type": "private"
},
"date": 1536948245,
"photo": [
{
"file_id": "AgADBAAD7K4xGynH4FBsRPxLppPb9_ZAnRoABBbfbHXoNifPaqsEAAEC",
"file_size": 1573,
"width": 75,
"height": 90
},
{
"file_id": "AgADBAAD7K4xGynH4FBsRPxLppPb9_ZAnRoABIa1OQY2JSyfa6sEAAEC",
"file_size": 26362,
"width": 266,
"height": 320
},
{
"file_id": "AgADBAAD7K4xGynH4FBsRPxLppPb9_ZAnRoABJ8uPReoaDzubKsEAAEC",
"file_size": 129949,
"width": 666,
"height": 800
},
{
"file_id": "AgADBAAD7K4xGynH4FBsRPxLppPb9_ZAnRoABIOVaVqhR9b4basEAAEC",
"file_size": 270240,
"width": 1066,
"height": 1280
}
]
}
}
]
}
- همانطور که مشاهده میکنید جیسون دریافتی از تلگرام برای تنها یک عکس بسیار مفصل می باشد ، خب اولین مرحله این است که ما باید چک کنیم که آیا در پیام دریافتی از سوی کاربر عکسی وجود دارد یا نه ؟ برای این منظور یک تابع در زبان php وجود دارد که isset می باشد ، اما چگونه از این تابع استفاده کنیم ؟! اگر به دقت به جیسون خروجی از تلگرام توجه کنید متوجه خواهید شد که یک آرایه بنام photo وجود دارد ، کافی است که ما از وجود این آرایه آگاه شویم ، به کد زیر دقت کنید :
if (isset($update->message->photo)) {
// Somethings
}
با این شرط مطمئن می شویم که اگر عکسی از سوی کاربر فرستاده شده ، دستورات داخل شرط اجرا می شوند ، حال وقت آن رسیده که بتوانیم file_id عکس مورد نظر را دریافت کنیم (به دلیل اینکه فایل توسط کاربر ارسال شده نیاز به داشتن لینک برای ارسال آن به همان کاربر و یا کاربر دیگری نمی باشیم و صرفا file_id کافی است).
- دوباره به خروجی جیسون بر میگردیم ، همان طور که ملاحظه می کنید برای عکس ، تلگرام 4 عدد file_id در نظر گرفته است این تعداد بنا به کیفیت تصویر متغییر است و کمترین آن 1 است ، به دلیل اینکه برنامه ما باید هر عکس با هر کیفیتی را به کاربر بر گرداند ، file_id ای را قرار می دهیم که همواره وجود دارد منظور همان اولین file_id است بعبارتی اندیس صفرم آرایه photo ، به کد زیر دقت کنید :
if (isset($update->message->photo)) {
$fileId = $update->message->photo[0];
}
- همانطور که در ابتدای بحث گفته شد ، برای ارسال عکس دو پارامتر ضروری می باشد که به ترتیب file_id و chat_id است و با استفاده از این دو پارامتر و متد sendPhoto می توان عکس را برای کاربر مورد نظر ارسال کرد ، شرط بالا را مانند زیر کامل تر می کنیم :
if (isset($update->message->photo)) {
$chatId = $update->message->from->id;
$fileId = $update->message->photo[0];
$sendPhoto = $baseUrl . "/sendPhoto?";
$sendPhoto .= "chat_id=" . $chatId;
$sendPhoto .= "&photo=" . $fileId;
file_get_contents($sendPhoto);
}
- با کمی دقت به کد بالا ، با متد sendPhoto و نحوه ارسال پارامترهایش آشنا خواهید شد ، کد بالا قسمتی از کد ربات است که در زیر کد کامل را قرار داده ایم ؛ نمونه کد اجرا شده این مقاله در ربات SokanAcademy_bot در تلگرام قابل استفاده می باشد ، نحوه دریافت و ارسال بقیه فایل ها هم مانند ارسال عکس است با این تفاوت که هر کدام متد خاص خود را دارند.
<?php
$token = "<-BotToken->";
$baseUrl = "https://api.telegram.org/bot" . $token;
$offset = 0;
while (true) {
$url = $baseUrl . "/getUpdates?offset=" . $offset;
$fileContents = file_get_contents($url);
$arrayResult = json_decode($fileContents);
foreach ($arrayResult['result'] as $update) {
if (isset($update->message->photo)) {
$chatId = $update->message->from->id;
$fileId = $update->message->photo[0];
$sendPhoto = $baseUrl . "/sendPhoto?";
$sendPhoto .= "chat_id=" . $chatId;
$sendPhoto .= "&photo=" . $fileId;
file_get_contents($sendPhoto);
}
$uId = $update['update_id'];
$offset = $uId + 1;
}
}
در قسمت بعدی نحوه تنظیم وب هوک (WebHook) را آموزش می دهیم ، موفق باشید
پایان قسمت پنجم