آموزش ساخت ربات تلگرام با PHP

آموزش ساخت ربات تلگرام با PHP

فرقی نمی‌کند بگوییم بات، روبات یا ربات زیرا مهم کاربرد این کانسپت است که امروزه به بخش لاینفکی از کسب‌وکارهای فناورانه مبدل شده و بسیاری از کارشناسان بر این باورند که روز به روز وابستگی به ربات‌ها به مراتب بیشتر هم خواهد شد که در همین راستا در ادامه قصد داریم نحوهٔ ساخت یک ربات تلگرام را آموزش داده سپس ببینیم که به چه شکل می‌توانیم با استفاده از زبان برنامه‌نویسی PHP با ربات خود ارتباط برقرار سازیم.

معرفی Telegram Bot
پس از سال ۲۰۱۶، ربات‌ها به یک تِرِند در دنیای فناوری تبدیل شدند و به نظر هم می‌رسد که روز به روز به میزان محبوبیت آن‌ها افزوده خواهد شد؛ اما آنچه مسلم است اینکه ربات‌ها صرفاً در صنعت هوش مصنوعی کاربرد ندارند بلکه به سادگی می‌توان از آن‌ها به منظور توسعهٔ قابلیت‌های وب‌سایت خود استفاده نموده و یا به عنوان یک سرویس مجزا و بدون هزینه کردن برای سرور و دیگر مسائل مربوطه، آن را برای تعامل با جامعهٔ هدف خود مورد استفاده قرار داد.

به طور خلاصه، Telegram Bot یک اپلیکیشن به اصطلاح Third-party است که بر بستر تلگرام اجرا می‌شود که برای کسب اطلاعات بیشتر، توصیه می‌کنیم به مستندات رسمی بات تلگرام مراجعه نمایید. از جمله مزایای ربات‌ها می‌توان به هزینه‌ٔ پایین توسعه و نگهداری آن‌ها از یکسو و همچنین کاربرد آن‌ها روی هر نوع دیوایسی، از لپ‌تاپ گرفته تا موبایل و تبلت، از سوی دیگر اشاره کرد اما روی هم رفته از جمله‌ قابلیت‌های ربات‌ها می‌توان به موارد زیر اشاره کرد:

- ارسال اخبار و نوتیفیکیشن: ربات‌ها می‌توانند به عنوان یک خبرسان هوشمند عمل کرده و کاربران وب‌سایت شما را به محض پابلیش شدن یک خبر، مقاله یا پست جدید مطلع سازند (به عنوان مثال می‌توان به ربات خبرنامهٔ تِک‌کرانچ اشاره کرد.)

- امکان تعامل با دیگر سرویس‌ها: ربات‌های تلگرام این امکان را در اختیار دولوپرها قرار می‌دهند تا با دیگر بات‌ها مثل Gmail Bot یا Github Bot ارتباط برقرار سازند.

- فروشگاه آنلاین: یک ربات تلگرام می‌تواند به عنوان یک سرویس تجارت الکترونیک برای فروش خدمات و محصولات به کار گرفته شود (ای‌پی‌آی تلگرام از سرویس‌های پرداخت Android Pay و Apple Pay پشتیبانی می‌کند.)

- ساخت اپلیکیشن: بات‌های تلگرام این امکان را در اختیار دولوپرها می‌گذارند تا بدون هزینه کردن برای اجارهٔ سرور و غیره، اقدام به طراحی و عرضهٔ اپلیکیشن‌های مختلفی همچون سرویس ترجمه، نظرسنجی، تست آنلاین و غیره کنند.

- طراحی گیم: با استفاده از ربات‌های تلگرام می‌توان با بهره‌گیری از قابلیت‌های HTML5 اقدام به طراحی بازی‌های آنلاین کرد.

- ساخت شبکه‌های اجتماعی: یک ربات تلگرام را می‌توان به عنوان یک شبکهٔ اجتماعی که کاربران بر بستر آن می‌توانند به تعامل با یکدیگر بپردازند نیز مورد استفاده قرار داد.

تفاوت ربات‌های تلگرام با کاربران عادی
به طور کلی، ربات‌های تلگرام دارای یکسری تفاوت‌ عمده و محدودیت‌هایی نسبت به کاربران عادی تلگرام هستند. به طور مثال، ربات‌های تلگرامی از فضای ابری محدودتری نسبت به کاربران عادی برخوردارند. علاوه بر این، یک ربات نمی‌تواند با یک کاربر عادی شروع به چت کند بلکه این کاربران عادی هستند که مکالمه با یک ربات را می‌توانند شروع کرده و ربات هم پاسخ ایشان را خواهد داد. همچنین به خاطر داشته باشید که همچون Github_bot@، نام‌کاربری ربات‌های تلگرام همواره به کلمهٔ bot ختم می‌شود.

آشنایی با BotFather
BotFather رباتی است که توسط تلگرام توسعه داده شده تا با استفاده از آن بتوان اقدام به ایجاد و مدیریت دیگر ربات‌ها کرد. برای شروع، BotFather را در قسمت جست‌وجوی اپلیکیشن تلگرام خود وارد کرده و روی آن کلیک کنید (برای اینکه مطمئن شوید BotFather اصلی را انتخاب کرده‌اید، می‌توانید به علامت تیک آبی رنگ که در کنار لوگوی BotFather است توجه کنید که نشان از معتبر بودن این ربات دارد. همچنین برای سهولت کار، می‌توانید روی لینک t.me/botfather کلیک نمایید که شما را به این ربات هدایت می‌کند.) پس از کلیک کردن، وارد این ربات شده و با چیزی همچون پیام زیر مواجه خواهید شد:

What can this bot do?
BotFather is the one bot to rule them all. Use it to create new bot accounts and manage your existing bots.
About Telegram bots:
https://core.telegram.org/bots
Bot API manual:
https://core.telegram.org/bots/api
Contact @BotSupport if you have questions about Bot API.

برای شروع ساخت یک ربات تلگرامی، باید روی دکمهٔ START کلیک نمایید و به محض کلیک کردن روی این دکمه، با پیام زیر مواجه خواهید شد:

I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots).

You can control me by sending these commands:

/newbot - create a new bot
/mybots - edit your bots [beta]
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]

Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot

Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups

Games
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game

همان‌طور که ملاحظه می‌شود، کلیهٔ دستوراتی که برای ساخت یک ربات جدید و یا مدیریت ربات‌های قبلی مورد نیاز هستند در معرض دیدمان قرار گرفته‌اند که برای دسترسی به کامندهای فوق، در صورت لزوم می‌توان کامند help/ را وارد کرد. به طور مثال، برای ساخت یک ربات جدید تلگرام باید روی دستور newbot/ کلیک کرده و یا این دستور را در فیلد پیام اپلیکیشن تلگرام وارد کرده و اینتر کنیم (به علامت / توجه کنید که حتماً باید وارد شود):

/newbot

به محض اجرای کامند فوق، با پیام زیر مواجه خواهیم شد:

Alright, a new bot. How are we going to call it? Please choose a name for your bot.

در واقع، در این مرحله از کار باید نامی برای ربات خود در نظر بگیریم که به طور مثال در این آموزش نامی همچون My Tmp Telegram Bot را در نظر گرفته‌ایم. اگر انتخاب نام بدون هیچ مشکلی صورت گیرد، پیام زیر را دریافت خواهیم کرد:

Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot.

همان‌طور که مشاهده می‌شود، حال باید یک یوزرنیم (نام‌کاربری) برای ربات خود انتخاب کنیم. نکتهٔ مهمی که در انتخاب نام‌کاربری برای ربات‌های تلگرام وجود دارد این است که نام‌کاربری مد نظر حتماً باید به کلمهٔ bot یا Bot ختم شود مضاف بر اینکه مجاز به استفاده از اسپیس (فاصله) یا علائم خاص در نام‌کاربری ربات خود نیستیم و در نهایت این نام‌کاربری باید منحصربه‌فرد باشد بدین صورت که کاربر دیگری قبلاً آن را استفاده نکرده باشد.

به عبارت دیگر، نامی همچون My Tmp Telegram Bot که به عنوان نام ربات خود انتخاب کردیم را نمی‌توانیم به عنوان یورزنیم استفاده کنیم. برای این منظور، نام انتخابی را کمی تغییر داده، کلیهٔ اسپیس‌ها را با آندراِسکور جایگزین می‌کنیم و نامی همچون My_Tmp_Telegram_Bot را وارد کرده و اینتر می‌کنیم و چنانچه نام انتخابی بدون مشکل باشد و یا قبلاً کسی آن را استفاده نکرده باشد، پیام زیر را دریافت خواهیم کرد:

Done! Congratulations on your new bot. You will find it at t.me/My_Tmp_Telegram_Bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API:
489256710:AAEVCOOZOZ7ZGW5M25whB60vlWugmYp_jKE

For a description of the Bot API, see this page: https://core.telegram.org/bots/api

می‌بینیم که با موفقیت توانستیم ربات تلگرامی خود را بسازیم و این در حالی است که پیام فوق حاوی اطلاعات مهمی همچون Token و URL اختصاصی ربات ما است. در واقع، این توکن چیزی است که از آن طریق می‌توانیم با استفاده از RESTful API تلگرام به ربات خود دستور دهیم و از همین روی محرمانه نگاه داشتن این توکن ضروری است.

همان‌طور که پیش از این دیدیم، یکی از کامند‌های BotFather کامندی است تحت عنوان mybots/ که در صورت اجرای آن، به لیست کلیهٔ ربات‌هایی که تاکنون با اکانت کاربری خود ساخته‌ایم دست خواهیم یافت. سپس با انتخاب ربات مد نظر، قادر خواهیم بود تا آن را ویرایش یا حذف کرده و همچنین می‌توانیم دیگر تنظیمات آن را آپدیت کنیم.

آشنایی با Long Polling و Webhook
در تلگرام به دو روش مختلف می‌توان به تعامل با ربات‌ها پرداخت که اصطلاحاً عبارتند از Long Polling و Webhook. اگر بخواهیم خیلی ساده تفاوت این دو رویکرد را توضیح دهیم، باید بگوییم که در Long Polling ما به طور مستقیم با API تلگرام تعامل برقرار می‌سازیم اما این در حالی است که در Webhook ما به یک اصطلاحاً Callback نیاز داریم که ای‌پی‌آی تلگرام در صورتی که پیام جدیدی از سمت کاربران ایجاد شود، آن را فراخوانی (Call) خواهد کرد.

در استفاده از Webhook همواره به خاطر داشته باشیم که نیاز به گواهینامهٔ SSL داریم (به عبارت دیگر، یوآرال ما حتماً باید با https شروع شود.) از آنجا که ممکن است برخی مخاطبین این آموزش وب‌سایتی که حاوی سرتیفیکیت SSL باشد نداشته باشند، در ادامه رویکرد اول را مورد استفاده قرار خواهیم داد.

ارسال ریکوئست برای API تلگرام
با مراجعه به لینک Telegram Bot API، به مستندات جامعی در مورد ای‌پی‌آی تلگرام دست خواهید یافت. به طور کلی، به منظور ارسال هرگونه ریکوئست یا درخواستی برای ای‌پی‌آی تلگرام، باید از لینک زیر استفاده کنیم:

https://api.telegram.org/bot<token>/METHOD_NAME

همان‌طور که ملاحظه می‌شود، در لینک فوق <token> و METHOD_NAME باید جایگزین شوند تا یک ریکوئست به اصطلاح Valid (صحیح) داشته باشیم. به عنوان مثال، لینک زیر را در مرورگر وارد می‌کنیم (البته به خاطر داشته باشید که توکن اختصاصی خود را جایگزین نمایید):

https://api.telegram.org/bot489256710:AAEVCOOZOZ7ZGW5M25whB60vlWugmYp_jKE/

پیش از اجرای لینک فوق، به خاطر داشته باشید توکنی که پس از ساخت ربات در اختیار ما قرار داده شد را باید به کلمهٔ bot ضمیمه کرده سپس بعد از آدرس https://api.telegram.org قرار دهیم. چنانچه لینک فوق را در مرورگر اجرا کنیم، با یک پیام جیسون به صورت زیر مواجه خواهیم شد:

{  
   "ok":false,
   "error_code":404,
   "description":"Not Found: method not found"
}

همان‌طور که ملاحظه می‌شود، پیام خطایی در معرض دیدمان قرار می‌گیرد با این مضمون که «هیچ متدی یافت نشد» که برای رفع این مشکل هم می‌توان برای تست، از یکی از متدهای رایج ای‌پی‌آی تلگرام تحت عنوان getme استفاده نموده و لینک فوق را به صورت زیر ریفکتور کنیم:

https://api.telegram.org/bot489256710:AAEVCOOZOZ7ZGW5M25whB60vlWugmYp_jKE/getme

حال با اجرای لینک فوق در مرورگر، با پیام موفقیت‌آمیز زیر مواجه خواهیم شد:

{  
   "ok":true,
   "result":{  
      "id":489256710,
      "is_bot":true,
      "first_name":"My Tmp Telegram Bot",
      "username":"My_Tmp_Telegram_Bot"
   }
}

در واقع، کاری که متد getme انجام می‌دهد این است که اطلاعات ربات مد نظر را از سرور تلگرام دریافت می‌کند که حاوی نام، نام‌کاربری و شناسهٔ ربات است. تا اینجای کار، ربات تلگرامی ما هیچ کار خاصی نمی‌تواند انجام دهد بلکه صرفاً به منزلهٔ اکانتی است که در آینده می‌توانیم آن را برنامه‌ریزی کنیم تا تَسک مد نظرمان را انجام دهد.

آشنایی با متد getupdates
برای اینکه بتوانیم از آخرین وضعیت ربات خود مطلع شویم، هم‌ می‌توانیم از متد getupdates استفاده نماییم و هم وب‌هوک سِت کنیم که پیش از این به معرفی آن پرداختیم (به خاطر داشته باشید که آخرین آپدیت‌ها نهایتاً ۲۴ ساعت در سرورهای تلگرام ذخیره می‌شوند.) از هر روشی که استفاده کنیم، نتیجه یک آبجکت جیسون است. به عنوان مثال داریم:

https://api.telegram.org/bot489256710:AAEVCOOZOZ7ZGW5M25whB60vlWugmYp_jKE/getupdates

اگر لینک فوق را در مرورگر اجرا کنیم، با خروجی زیر مواجه خواهیم شد:

{  
   "ok":true,
   "result":[  

   ]
}

می‌بینیم که پاسخ جیسون کاملاً درست است اما حاوی آبجکتی خالی است چرا که ما به تازگی ربات خود را ساخته‌ایم و حاوی هیچ‌گونه آپدیتی نیست. برای اینکه اقدام به ایجاد دیتای آپدیت برای ربات خود کنیم، وارد اپلیکیشن تلگرام شده و با کلیک روی یوآر‌ال ربات خود، وارد ربات شده و دکمهٔ START را کلیک می‌کنیم و یک پیام تستی را وارد کرده و اینتر می‌کنیم. حال اگر مجدد متد getupdates را به همان صورتی که در بالا آموزش داده شد اجرا کنیم، با آبجکت جیسون زیر مواجه خواهیم شد:

{  
   "ok":true,
   "result":[  
      {  
         "update_id":146336949,
         "message":{  
            "message_id":1,
            "from":{  
               "id":115619944,
               "is_bot":false,
               "first_name":"\u0628\u0647\u0632\u0627\u062f",
               "last_name":"\u0645\u0631\u0627\u062f\u06cc",
               "username":"xxx",
               "language_code":"en"
            },
            "chat":{  
               "id":115619944,
               "first_name":"\u0628\u0647\u0632\u0627\u062f",
               "last_name":"\u0645\u0631\u0627\u062f\u06cc",
               "username":"xxx",
               "type":"private"
            },
            "date":1512453507,
            "text":"/start",
            "entities":[  
               {  
                  "offset":0,
                  "length":6,
                  "type":"bot_command"
               }
            ]
         }
      },
      {  
         "update_id":146336950,
         "message":{  
            "message_id":2,
            "from":{  
               "id":115619944,
               "is_bot":false,
               "first_name":"\u0628\u0647\u0632\u0627\u062f",
               "last_name":"\u0645\u0631\u0627\u062f\u06cc",
               "username":"xxx",
               "language_code":"en"
            },
            "chat":{  
               "id":115619944,
               "first_name":"\u0628\u0647\u0632\u0627\u062f",
               "last_name":"\u0645\u0631\u0627\u062f\u06cc",
               "username":"xxx",
               "type":"private"
            },
            "date":1512453582,
            "text":"In The Name of The Most High"
         }
      }
   ]
}

می‌بینیم که مکالمه با ربات خود را شروع کرده‌ایم و در کلیدی تحت عنوان text و مقدار In The Name of The Most High، پیام ارسالی برای ربات‌مان را مشاهده می‌کنیم (دلیل اینکه پیش از این تأکید کردیم توکنی که در اختیار ما قرار می‌گیرد محرمانه می‌باشد، همین مسئله است که هر کاربری که توکن ما را داشته باشد، به سادگی قادر خواهد بود تا اطلاعات کامل و جامعی از ربات ما به دست آورد!) 

آبجکت جیسون فوق حاوی اطلاعات خوبی است که برای کدنویسی ربات خود با زبان PHP یا هر زبان برنامه‌نویسی دیگری می‌توانیم از آن‌ها استفاده کنیم. به طور مثال، این آبجکت حاوی کلیدی تحت عنوان chat است که یکی از کلید‌های آن id است که به منزلهٔ شناسهٔ همان کاربری است که با ربات ارتباط برقرار ساخته است. اطلاعات دیگری همچون زبان، تاریخ، نام، نام‌خانوادگی و ... نیز در این آبجکت وجود دارند که در صورت لزوم می‌توان از آن‌ها استفاده کرد. حال در ادامه خواهیم دید که به چه شکل می‌توان برای ربات خود پیام ارسال کرد.

آشنایی با متد sendmessage
به منظور ارسال پیام برای ربات خود، علاوه بر توکن که در حین ساخت ربات در اختیارمان قرار گرفت، ما به Chat ID هم نیاز خواهیم داشت که این شناسه قبلاً در آبجکت جیسونی که در اختیارمان قرار گرفت در قالب کلید id وجود دارد. همچنین به پیامی نیاز داریم که قرار است در اختیار ربات قرار گیرد. برای این منظور، لینک زیر را مد نظر قرار می‌دهیم:

https://api.telegram.org/bot489256710:AAEVCOOZOZ7ZGW5M25whB60vlWugmYp_jKE/sendmessage?text=Hello%20Telegram&chat_id=115619944

به محض اجرای لینک فوق در مرورگر، چنانچه هیچ مشکلی وجود نداشته باشد، یک پیام در باکس پیام‌های ربات‌مان ارسال خواهد شد. همان‌طور که در لینک فوق مشاهده می‌شود، از متدی تحت عنوان sendmessage استفاده کرده‌ایم که حداقل حاوی دو پارامتر ورودی است که عبارتند از text و chat_id (به خاطر داشته باشید که برای مجزاسازی پارامترها، باید از علامت & استفاده کرد.) در مثال فوق، برای text از پیامی همچون Hello Telegram استفاده نموده‌ایم و شناسهٔ چت هم همان شناسه‌ای است که در آبجکت جیسون پس از اجرای متد getupdates به دست آمد. به محض اجرای لینک فوق، پیامی از جنس جیسون به عنوان خروجی در اختیارمان قرار می‌گیرد که به شکل زیر خواهد بود:

{  
   "ok":true,
   "result":{  
      "message_id":3,
      "from":{  
         "id":489256710,
         "is_bot":true,
         "first_name":"My Tmp Telegram Bot",
         "username":"My_Tmp_Telegram_Bot"
      },
      "chat":{  
         "id":115619944,
         "first_name":"\u0628\u0647\u0632\u0627\u062f",
         "last_name":"\u0645\u0631\u0627\u062f\u06cc",
         "username":"xxx",
         "type":"private"
      },
      "date":1512454649,
      "text":"Hello Telegram"
   }
}

تا این مرحله از آموزش، اصول ساخت یک ربات تلگرام تکمیل شده است و در ادامه قصد داریم ببینیم که به چه شکل می‌توانیم به مدیریت ربات تلگرام خود بپردازیم که از زبان PHP برای این کار استفاده کرده‌ایم.

مدیریت ربات تلگرام با زبان PHP
به عنوان گام اول، فایلی با نامی دلخواه مثلاً MyTmpTelegramBot.php می‌سازیم و کدهای زیر را وارد می‌کنیم:

<?php
class MyTmpTelegramBot
{
    const BOT_TOKEN = "489256710:AAEVCOOZOZ7ZGW5M25whB60vlWugmYp_jKE";
    const TELEGRAM_API_URL = "https://api.telegram.org/bot";

    public $url;

    public function __construct()
    {
        $this->url = SELF::TELEGRAM_API_URL . SELF::BOT_TOKEN;
    }

    private function runScript($method)
    {
        return file_get_contents($this->url . '/'. $method);
    }

    public function getUpdates()
    {
        return $this->runScript('getupdates');
    }

    public function sendMessage($chatId, $text)
    {
        $url = "sendmessage?text=$text&chat_id=$chatId";
        return $this->runScript($url);
    }
}

$obj = new MyTmpTelegramBot();
$updatesJson = $obj->getUpdates();
$updatesJson2Array = json_decode($updatesJson, true);
$chatId = $updatesJson2Array['result'][0]['message']['chat']['id'];
$obj->sendMessage($chatId, 'Hi');

با کپی کردن اسکریپت فوق، جایگزین کردن توکن اختصاصی ربات خود و اجرای آن در لوکال‌هاست، خواهید دید که پیامی تحت عنوان Hi برای ربات ارسال خواهد شد. برای روشن‌تر شدن نحوهٔ عملکرد این اسکریپت، در ادامه به تفسیر خط به خط آن می‌پردازیم.

به طور کلی، می‌شد بدون استفاده از قابلیت شییٔ‌گرایی این اسکریپت را به مراتب ساده‌تر نوشت اما به منظور ارتقاء مهارت‌های کدنویسی OOP، این مثال را به صورت شییٔ‌گرا نوشتیم (برای آشنایی بیشتر با مبحث OOP، به مقالهٔ Inheritance (وراثت) در زبان PHP چیست؟ مراجعه نمایید.) در همین راستا، کلاسی ایجاد کرده‌ایم تحت عنوان MyTmpTelegramBot که حاوی دو کانستند تحت عناوین BOT_TOKEN و TELEGRAM_API_URL و همچنین یک پراپرتی با نام url$ است.

در خط نهم، یک کانستراکتور نوشته‌ایم که این وظیفه را دارا است تا به محض ساخت یک آبجکت از روی کلاس مد نظر فراخوانی شده و پراپرتی url$ را مقداردهی کند و نیاز به توضیح نیست که برای دستیابی به یک پراپرتی در دیگر بخش‌های یک کلاس، از دستور <-this$ استفاده می‌کنیم (برای آشنایی بیشتر با مفهوم کانستراکتور در زبان PHP، به مقالهٔ آشنایی با مفاهیم Constructor و Destructor در PHP به زبان ساده مراجعه نمایید.)

همان‌طور که در خط یازدهم مشاهده می‌شود، به منظور دستیابی به کانستندها، ابتدا کلیدواژهٔ SELF را نوشته و علائم :: را قرار داده سپس نام کانستنت را آورده‌ایم به طوری که از این پس ما لینکی صحیح به منظور ارتباط برقرار کردن با ای‌پی‌آی تلگرام در اختیار داریم.

در خط چهاردهم هم فانکشنی نوشته‌ایم تحت عنوان ()runScript که یک پارامتر ورودی تحت عنوان method$ می‌گیرد. کاری که این فانکشن انجام می‌دهد این است که متد از پیش تعریف شده در زبان PHP تحت عنوان ()file_get_contents را فراخوانی می‌کند که این وظیفه را دارا است تا لینک مد نظر ما را اجرا کند. به عنوان پارامتر ورودی این فانکشن هم پراپرتی url$ را به متد ورودی مد نظر متصل می‌کنیم و در نهایت خروجی این تابع را ریترن می‌کنیم (با توجه به اینکه فانکشن ()runscript قرار است تا فقط و فقط از داخل این کلاس فراخوانی شد، تایپ آن را برابر با private قرار داده‌ایم.)

در خط نوزدهم فانکشن دیگری نوشته‌ایم تحت عنوان ()getUpdates که این وظیفه را دارا است تا متد getupdates گنجانده شده در ای‌پی‌آی تلگرام را فراخوانی کند که برای این منظور فانکشن ()runScript را فراخوانی کرده و به عنوان پارامتر ورودی هم استرینگ getupdates را به آن پاس می‌دهیم (توجه داشته باشیم چنانچه بخواهیم یک فانکشن را داخل بدنهٔ کلاس در فانکشن دیگری صدا بزنیم، باید از دستور <-this$  استفاده کرد.)

در خط بیست‌وچهارم فانکشن دیگری نوشته‌ایم تحت عنوان ()sendMessage که این وظیفه را دارا است تا پیامی را برای ربات‌مان ارسال کند که این فانشکن دو پارامتر ورودی می‌گیرد که یکی chatId$ و دیگری text$ است. داخل این فانکشن ابتدا متغیری تحت عنوان url$ ساخته‌ایم که حاوی متد sendmessage گنجانده شده در API تلگرام است که حاوی دو پارامتر وروردی تحت عناوین text و chat_id است که مقادیر آن‌ها را برابر با پارامترهای ورودی این فانکشن قرار داده‌ایم. در نهایت هم متغیر url$ را عنوان پارامتر ورودی فانکشن ()runScript در نظر گرفته و خروجی آن را ریترن کرده‌ایم.

تا این مرحله از کار، کدهای کلاس ما تکمیل شده‌اند. حال جهت تست اسکریپت فوق، خارج از بدنهٔ کلاس و در خط سی‌ویکم آبجکتی از روی کلاس مذکور تحت عنوان obj$ می‌سازیم و در خط بعد هم ابتدا فانکشن ()getUpdates را فراخوانی کرده و آن را داخل متغیری تحت عنوان updatesJson$ ذخیره می‌سازیم.

با توجه به اینکه خروجی این فانکشن یک آبجکت جیسون است، نیاز داریم تا آن را به یک آرایه تبدیل کنیم تا به سادگی به کلیدهای آن دسترسی داشته باشیم که برای این منظور متغیر دیگری در خط سی‌‌و‌سوم می‌سازیم تحت عنوان updatesJson2Array$ و مقدار آن را برابر با متد از پیش نوشته شده در زبان PHP تحت عنوان ()json_encode قرار می‌دهیم و به عنوان پارامتر اول هم متغیر updatesJson$ را گذاشته و به عنوان پارامتر دوم هم مقدار true را در نظر می‌گیریم تا خروجی، یک آرایهٔ پی‌اچ‌پی باشد.

حال برای آنکه بتوانیم برای این ربات یک پیام ارسال کنیم، ابتدا باید به شناسهٔ چت دسترسی پیدا کنیم؛ برای این منظور، متغیری تحت عنوان chatId$ ساخته و کلید id از کلید chat که در کلید message قرار دارد را در آن ذخیره می‌سازیم.

در خط آخر هم به سادگی فانکشن ()sendMessage را فراخوانی کرده و به عنوان شناسهٔ چت متغیر chatId$ و به عنوان پیام هم استرینگ Hi را به آن پاس داده‌ایم. حال اگر اسکریپت فوق را در مرورگر اجرا کنیم و چنانچه ارور خاصی وجود نداشته باشد، یک پیام تحت عنوان Hi برای ربات‌ تلگرامی ما ارسال خواهد شد (لازم به ذکر است رباتی که در این آموزش ساخته شد حذف گردیده است؛ لذا برای پیشروی با این آموزش، حتماً نیاز است تا یک ربات اختصاصی به همان ترتیبی که توضیح داده شد و با استفاده از BotFather ساخته شود.)



بهزاد مرادی