رفتن به مطلب

پست های پیشنهاد شده

اساس ربات های تلگرام – آموزش برنامه نویسی ربات تلگرام

برای داشتن یک ربات ،‌ابتدا باید رباتمان را در @botFather ثبت نام بکنیم . توجه کنید که ما فقط ثبت نام انجام  میدیم و اطلاعات ظاهری ربات رو تغییر میدیم و بات فادر درباره ی هسته ی ربات کاری انجام نمی دهد . در پایان ثبت نام botfather به ما یک tokenn می دهد .

این توکن بسیار مهم هست و نباید گم شود . ما از طریق این توکن به تمام اطلاعات ربات دسترسی داریم و هر کاری میتوانیم انجام دهیم !

خوب حالا باید ببینیم یک ربات تلگرامی چطور کار میکند ؟

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

خوب اساس کار ربات های تلگرام چنین است اما برای دریافت اطلاعات جدید ما ۲ راه حل داریم .

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

راه حل دوم به اصطلاح Long Polling می باشد . در این روش تلگرام اطلاعات را برای ما ارسال نمی کند بلکه ما مثلا هر ۵ ثانیه با استفاده از cUrl ، اطلاعات جدید را دریافت میکنیم . خوبی این روش این است که ما حتی روی لوکال هاست هم میتوانیم یک ربات داشته باشیم و بدی این کار این است که ما مثلا اگر هر ۵ ثانیه یک درخواست بفرستیم ، احتمال اینکه در خیلی از درخواست ها ،‌آپدیت جدیدی وجود نداشته باشد بسیار است و این درخواست ها اضافه اند و فقط سرور را آزار میدهند !

آشنایی با داکیومنت های BOT API تلگرام

تلگرام یک داکیومنت برای Api ها دارد که خیلی از آن استفاده خواهیم کرد .

برای مشاهده ی این داکیومنت در سایت رسمی تلگرام کلیک نمایید .

بهتر است با یک مثال شروع کنیم . فرض کنید میخواهیم با یک درخواست تمام آپدیت های جدید را دریافت کنیم .

آپدیت ها در تلگرام شامل تمام رویداد های جدید می باشد . برای مثال پیام جدید ، کاربر حذف شذه از گروه‌، فایل جدید و …

ما در این آموزش از روش long Polling استفاده می کنیم . ابتدا باید ربات خود را در botfather بسازیم سپس اطلاعات Token را ذخیره کنیم .

برای دریافت اطلاعات جدید ما باید یک از متد getUpdates استفاده کنیم . اما بهتر است اول با متد ها آشنا شویم .

‌آشنایی با متد ها در ربات تلگرام

در ربات های تلگرام متد های متعددی وجود دارد .

برای مثال متد getMe .همانطور که در داکیومنت ها می بینید این متد هیچ ورودی ایی ندارد و فقط با دریافت  اطلاعات صفحه مد نظر ،‌به ما مشخصات رباتمان را می دهد .

برای صدا زدن یک متد و دریافت اطلاعات باید اطلاعات صفحه ایی را با الگویhttps://api.telegram.org/bot/METHOD_NAME  دریافت نماییم .

در اینجا <token> همان توکن ایی است که botFather به ما داده است و METHOD_NAME نام متد ایی است که میخواهیم صدا بزنیم . من برای اینکه قشنگ متوجه شوید یک نمونه آدرس با یک توکن واقعی آماده میکنم که البته در پایان آموزش توکن را تغییر میدهم .

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

شما حتما توکن را مانند مثال بالا وارد کنید سپس در آخر هم جای METHOD_NAME عبارت getMe را قرار دهید چون ما میخواهیم این متد را صدا بزنیم .

همین لینک را اگر باز کنید عبارتی مانند عبارت زیر دریافت خواهید کرد :

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

همانطور که می بینید ما یک JSON داریم . در اصل تمام دریافتی های ما از تلگرام JSON می باشد .

خوب در لوکال هاست خود یک فایل به نام bot.php بسازید و اطلاعات زیر را در آن قرار بدهید :

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

همانطور که می بینید ما ابتدا اطلاعات را با استفاده از file_get_contents دریافت کردیم و json_decode کردیم .

حالت کلی تلگرام برای جواب های ما چنین هست . زمانی که decode انجام میدهیم باید از ok را چک کنیم که اگر true باشد یعنی درخواست ما درست بوده است .

سپس با توجه به نام متد ها اطلاعات را در result قرار می دهد .

میخواهید بدانید هر متد چه اطلاعاتی به ما میدهید‌؟ باید از داکیومنت متد مد نظر استفاده کنیم .

بیایید خواندن داکیومنت را با هم تمرین کنیم . لینک https://core.telegram.org/bots/api#getme را باز کنید  .

همانطور که می بینید این متد ورودی ایی ندارد و فقط اطلاعات ربات را در قالب User به ما بر میگرداند . خوب حالا میخواهیم ببینیم دقیقا چه اطلاعاتی به ما میدهد ؟

first_name ویا username چی هستند ؟

برای این کار ما با Type ها سروکار داریم .

Type – تایپ ها در ربات تلگرام

متد های تلگرام ، پاسخ های بدون نظمی ندارند بلکه در قالب Type ها ، ما میتوانیم پیش بینی کنیم هر متد ، چطور خروجی ایی به ما می دهد .

در مثال قبلی ما گفتیم که خروجی ما در قالب User هست پس باید درباره ی Type User اطلاعات بدست آوریم :

در توضیحات این تایپ آمده که “این تایپ به ما یک ربات یا یک کاربر را نمایش می دهد”

منطقی هست ، getMe نیز قرار است اطلاعات یک ربات را به ما بدهد . خوب حالا باید ببینیم دقیقا چه اطلاعاتی به ما میدهد . حال باید به Field ها توجه کنیم .

۱. id : طبق گقته ی تلگرام این داده از نوع Int می باشد . که ای دی منحصر به فرد کاربر یا ربات می باشد .

۲.first_name: طبق گفته ی تلگرام یک رشته می باشد که نام کوچک ربات یا کاربر را به ما می دهد .

توجه کنید از ۳ و ۴ در بخش توضیحاتشان عبارت Optional آمده است . یعنی امکان دارد یک کاربر ، یا یک ربات نام کاربری یا نام بزرگ را نداشته باشند ( همانطوری که ربات ما نام بزرگ را نداشت ) اما حتما کاربر/ربات ۲ ورودی اول را دارد.

۳.last_name: نام بزرگ کاربر که غیر ضروری هست .

۴.username: که شناسه کاربر می باشد و غیر ضروری است .

ارسال اطلاعات به متد های ربات تلگرام

خوب حالا درباره ی متد هایی میخواهیم صحبت کنیم که باید به آن ها ورودی بدهیم . لینک https://core.telegram.org/bots/api#getupdates را باز کنید.

همانطور که می بینید  متد getUpdates دارای ۳ ورودی است که با توجه به این که Optional هستند (‌ستون required ) اگر آن ها را وارد نکنیم باز تلگرام به ما خروجی می دهد .

یعنی اگر لینک زیر را باز کنیم ( توکن را به توکن رباتتان تغییر دهید ) خروجی را دریافت می کنید .

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

توجه که اگر result در خروجی بالا برای شما [] می باشد ، کافیست به رباتتان در تلگرام پیام جدیدی بدهید تا result شما خالی نباشد . به اضای هر پیام یک update جدید در result دریافت می شود .

اما فرض کنید می خواهیم به getUpdates ورودی limit را بدهیم . این ورودی طبق توضیحات تلگرام  تعداد آپدیت های دریافتی را محدود می کند .

ما برای این کار ها باید از متد POST استفاده نماییم . برای این کار از curl استفاده میکنیم . من از قبل برای این کار ها یک تابع نوشته ام که می توانید استفاده نمایید .

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

این متد ۳ ورودی دارد . ورودی اول api که همان توکن ربات است . ورودی دوم method که نام متد است و ورودی سوم datas که دیتاهای ورودی متد در قالب آرایه .

برای مثال  کد bot.php را به کد زیر تغییر دهید :

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

خوب حالا میخواهیم رباتی بسازیم که به هر پیام ما ، عبارت پیام شما دریافت شد را ارسال کند .

آشنایی با روش Long Polling

ما نیاز داریم در هر ۵ ثانیه مثلا آپدیت های جدید را دریافت کنیم . برای این کار از روش زیر استفاده می کنیم .

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

در اصل ما یک interval ساختیم .

حالا باید آپدیت های جدید را دریافت کنیم . ما یک متغیر به نام last_updated_id می سازیم که ای دی هر آپدیت را بدست آوریم تا در هر دور حلقه ، آپدیت های قدیمی را تلگرام به ما ندهد .‌(‌ما از ورودی offset استفاده می کنیم .)

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

خوب حالا ما هر آپدیت را داریم و میتوانیم با استفاده از sendMessage به هر پیام reply انجام دهیم .

طبق توضیحات تلگرام sendMessage نیازمند  chat_id , text و برای reply کردنreply_to_message_id است .

توجه کنید که هر آپدیت ما Update می باشد .

من برای بدست آوردن chat id مسیر update->message->chat->id را در داکیومنت های تلگرام پیش گرفتم .

من برای بدست آوردنreply_to_message_id مسیر update->message->message_id را در داکیومنت های تلگرام پیش گرفتم .

پایان کار به شکل زیر است :‌

برای مشاهده ی این بخش لطفا وارد حساب کابری خود شوید یا اگر عضو نیستید از این قسمت عضو سایت شوید

حالا برای اجرا کردن کد اگر به php دسترسی دارید ( لینوکسی ها منظورم رو میدونند ! و اگر از xamp استفاده می کنید با استفاده از shell )

به آدرس فایل bot.php بروید ( با استفاده از cd ) سپس کامند php -f bot.php را اجرا کنید .

اگر دسترسی ندارید مثل یک صفحه ی عادی در لوکال هاست آن را باز کنید .

برای خاموش کردن ربات هم اگر فایل را در ترمینال اجرا کردید ctrl+c  و اگر مانند یک صفحه ی عادی باز کردید ، لوکال هاست خود را restart کنید .

با ارور max_execute_time مواجه شدید ؟

جون قرار است فایل php ما تا ابد اجرا شود نباید برای اجرا محدودیت داشته باشد و حتما باید از set_time_limit(0); در آغاز فایل phpp استفاده شود .

ادامه کار …

با متد ها و Type ها بیشتر کار کنید و سعی کنید با الگوریتم های زیادی آشنا شویم . روش Long Polling برای ربات های با کیفیت اصلا توصیه نمی شود.

بهتر است با روش WebHook آشنا شوید و با استفاده از OpenShift ، به صورت کاملا رایگان یک ربات با کیفیت بسازید .

پسند شده توسط DOCTOR ROBOT و ReZa CLONER

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

telegram channel   jazbe modir

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری


  • مطالب مشابه

    • توسط  DOCTOR ROBOT
      ربات تلگرام ابزاری است اهداف تجاری، خدماتی، امنیتی، تفریحی و آموزشی. در این سلسله آموزش علاوه بر آشنایی با ربات تلگرام یاد می‌گیریم چگونه با زبان قدرتمند php یک ربات هوشمند تلگرام راه اندازی کنیم.
      تفاوتی ندارد از چه زبان برنامه نویسی‌ای استفاده می‌کنید، اگر این آموزش را تا آخر دنبال کنید می‌توانید با هر زبان برنامه نویسی یک ربات هوشمند برای تلگرام خود بسازید.
      تلگرام برای کمک به برنامه نویسان یک API جامع و کاربردی آماده کرده است که به برنامه نویسان امکان توسعه نرم افزارهای مفید برای تلگرام را می‌دهد.
      ربات‌ها در ظاهر مانند تماس‌های ساده در تلگرام لیست می‌شوند ولی در باطن تفاوت‌های اساسی با تماس‌های متداول تلگرامی دارند. طبیعتا ربات‌های تلگرام بر عکس تماس‌های تلگرام آخرین زمان آنلاین شدن را نشان نمی‌دهند و در نهایت اسم خود واژه bot را شامل می‌شوند.
      همیشه مد نظر داشته باشید که ربات‌ها تنها با کسانی ارتباط برقرار می‌کنند که به آن‌ها اجازه فعالیت داده باشند.
  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×