چرا سکان آکادمی؟
ساخت ربات telegram - قسمت پنجم - ساخت ربات آینه (فایلی)

ساخت ربات telegram - قسمت پنجم - ساخت ربات آینه (فایلی)

ساخت ربات آینه (فایل) 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) را آموزش می دهیم ، موفق باشید

پایان قسمت پنجم