آرش هنرور | طراحی سایت در شیراز | آموزش برنامه نویسی

برنامه نویسی ربات تلگرام – قسمت ۳ – برنامه نویسی

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

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

نرم افزارهای مورد نیاز

شاید براتون سوال باشه واسه برنامه نویسی ربات تلگرام به چه نرم افزارهایی نیاز هست؟ شما برای کدنویسی PHP میتونید از نرم افزار ++Notepad و برای اجرای کدهای شما نیاز هست که نرم افزار XAMPP رو نصب کنید.

ارتباط با ربات تلگرام

شما برای اینکه بتونید ربات خودتون رو باز کنید کافیه نام کاربری که براش توی اولین قسمت آموزشمون گذاشتید رو توی قسمت جستجوی تلگرام وارد کنید و ربات شما نمایش داده میشه روی اون کلیک کنید. حالا شما زمانی که ربات خودتون رو برای اولین بار باز میکنید باید دکمه START رو بزنید. دلیل این کار چی هست ؟ دلیلش اینه که ربات ها خودشون نمیتونن شروع کننده باشن و اون شما هستید که باید اولین پیام رو به ربات ارسال کنید و زدن این دکمه به منزله اولین پیام شما به ربات هست و بعد از اون ربات میدونه که باید به چه کسی پیام بده.

الان شما هرچی پیغام به ربات خودتون بدید جوابی رو دریافت نمیکنید. دلیل این اتفاق این هست که ما هنوز به ربات نگفتیم که به کاربر های ما چی جواب بده و کلن هنوز اصلا منطق اون رو تعریف نکردیم . شما باید بتونید پیغام های ارسالی کاربرها به ربات هاتون رو دریافت کنید و بعدش پاسخ مناسب رو به کاربر بدید.

۲ راه برای این کار و ارتباط با ربات های تلگرام وجود داره روش های getUpdates و setWebhook .

نکته مهم

اولین و مهم ترین نکته ای که شما برای شروع باید بدونید اینه که هر کاربر در تلگرام یک ID منحصر به فرد داره و حتی هر پیغام و هر عملی که شما توی تلگرام انجام میدید یک ID منحصر به فرد دریافت میکنه که شما به وسیله این ID میتونید اون عمل رو بازبینی کنید و یا مشخصات کاربر رو ببینید.

getUpdates

توی این روش تلگرام تمامی پیام های ارسالی کاربران به ربات شما رو توی یک آدرس مشخص ذخیره میکنه و شما باید درخواست مناسب رو به ربات خودتون بزنید و آخرین پیام هارو دریافت کنید. اگر لینکی که برای این قسمت در بالا قرار دادم رو باز کنید میبینید که این متد در تلگرام ۴ تا پارامتر دریافت میکنه. اولین پارامتر offset هست که شما میتونید بگید از پیغام یا عمل به ID شماره x به بعد رو برای من نمایش بده. دومین پارامتر limit هست شما به وسیله این پارامتر مشخص میکنید که تعداد x تا از پیغام ها و عمل ها رو بهم نشون بده. پارامتر سوم timeout هست که شما میتونید مشخص کنید به مدت x ثانیه آپدیت هارو برای شما ذخیره کنه برای کمک به اینکه فشار زیادی روی سرور ایجاد نشه و اخرین پارامتر allowed_updates هست که به وسیله اون شما میتونید بگید که چه نوعی از اطلاعات که ربات دریافت کرده رو میخواید ببینید. همونطور هم که میبینید تمامی این پارامتر ها اختیاری هست و شما میتونید هیچکدوم رو وارد نکنید. برای شروع کار کافیه دستور زیر رو توی مرورگر خودتون اجرا کنید :

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

شما وقتی این دستور رو اجرا کنید، ok برابر با true هست که یعنی دستور درست اجرا شده و در result نتیجه خاصی مشاهده نمیشه. حالا شما یک پیغام رو برای ربات خود بفرستید و این دستور رو مجددا در مرورگر اجرا کنید نتیجه زیر مشاهده میشه :

{"ok":true,"result":[{"update_id":183825335,
"message":{"message_id":1,"from":{"id":154800408,"is_bot":false,"first_name":"Arash","username":"Arassshhhh","language_code":"en"},"chat":{"id":154800408,"first_name":"Arash","username":"Arassshhhh","type":"private"},"date":1513271723,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}},{"update_id":183825336,
"message":{"message_id":2,"from":{"id":154800408,"is_bot":false,"first_name":"Arash","username":"Arassshhhh","language_code":"en"},"chat":{"id":154800408,"first_name":"Arash","username":"Arassshhhh","type":"private"},"date":1513273254,"text":"salam"}},{"update_id":183825337,
"message":{"message_id":3,"from":{"id":154800408,"is_bot":false,"first_name":"Arash","username":"Arassshhhh","language_code":"en"},"chat":{"id":154800408,"first_name":"Arash","username":"Arassshhhh","type":"private"},"date":1513329666,"text":"\u0633\u0644\u0627\u0645 \u0622\u0631\u0634"}}]}

همونطور که مشاهده میکنید من ۳ پیغام به ربات ارسال کردم و به ازای هر پیغام یک update_id دارم که منحصرا مشخص کننده پیامی هست که بین کاربر و ربات رد و بدل شده. هر پیغام در قالب message در این خروجی قابل مشاهده هست که هر کدوم یک message_id دارن، توی قسمت from نشون میده که این پیغام از طرف کی بوده، که الان نام و نام کاربری و id من رو مشاهده میکنید. دلیل این قسمت from این هست که ما بدونیم باید جواب رو به کی ارسال کنیم/ همچنین توی قسمت chat مشخص شده که این رد و بدل شدن پیغام private بوده که یعنی این پیغام از شخص برای شما ارسال شده همچنین توی قسمت text متن او پیام کاربر رو مشاهده میکنید که اولینش طبیعتا همون start/ بوده. البته به این نکته توجه کنید که آخرین پیام من به فارسی بوده و متن پیام فارسی من به صورت کارکتر هایی به شکل \u0633\ پردازش شده. توی قسمت date هم تاریخ ارسال پیام رو مشاهده میکنید که توی زبان PHP قابل تبدیل هست. به این نکته توجه کنید که ربات های تلگرام که پیغام های شمارو تا ۲۴ ساعت ذخیره میکنن و بعد از اون همه پاک میشن و مجددا منتظر پیغام میمونه. حالا چند پیام جدید به ربات خود بفرستید و مجددا دستور رو در مرورگر اجرا کنید.

همونطور که مشاهده میکنید نه تنها پیغام های جدید نمایش داده میشه بلکه پیغام های قبلی رو هم میبینید. حالا مثلا شما این پیغام هارو خوندید میخواین باقی پیغام ها از اینجا به بعد رو ببینید کافیه از offset که در بالا توضیح دادم استفاده کنید برای این کار کافیه کد زیر رو اجرا کنید :

https://api.telegram.org/bot<token>/getUpdates?offset=<update_id>

همونطور که میبینید جای <token> باید توکن خودتون و جای <update_id> اخرین update_id که میخواین از اون به بعد پیغام هارو دریافت کنید مینویسید. با این روش میتونید اطلاعاتی که فقط مورد نیازتون هست رو دریافت کنید استفاده از ؟ و اینچنین کارها هم توی دادن پارامتر در PHP استفاده میشه که حتما توصیه میکنم مطالعه ای روی اون داشته باشید.

حالا شما میخواید بگید من میخوام از یکجا به بعد رو ببینم و فقط میخوام ۲ پیغام رو دریافت کنم، برای این کار باید کد زیر رو استفاده کنید :

https://api.telegram.org/bot<token>/getUpdates?offset=<update_id>&limit=2

در این قسمت ما علاوه بر پارامتر offset از پارامتر limit هم استفاده کردیم تا بگیم فقط ۲ تا پیغام رو به ما نمایش بده.

مشکل استفاده از روش getUpdates این هست که ما همیشه نمیدونیم چندتا کاربر به ما پیغام دادن و نمیدونیم چند بار باید این دستور رو اجرا کنیمف پس باید مرتب این درخواست رو بفرستیم و نتیجه رو بگیریم. این خود باعث فشار خیلی زیادی روی سرور ما میشه و بسیار هم کند عمل میکنه مثلا در زمان شب تا صبح که همه خواب هستن ما پیغامی دریافت نمیکنیم ولی سرور مرتب درخواست خودش رو میفرسته. پس این روش کلا روش خیلی مناسبی نیست. روشی که ما با اون ادامه درس رو پیش میبریم روش setWebhook هست که اون رو توی قسمت بعدی آموزش بهتون توضیح میدم.

منتظر قسمت بعدی آموزش برنامه نویسی ربات تلگرام با PHP باشید.

آرش هنرور

طراح و توسعه دهنده وب، از شیراز هستم. یک مهر ماهی عشق فوتبال که تفریحش فیلم دیدن و بازی های کامپیوتری هست. از سال 91 برنامه نویسی رو آغاز کردم و الان به عنوان برنامه نویس و طراح وب در شرکت پارسکدرز مشغولم.

اینستاگرام

Invalid username or token.

من رو دنبال کنید

سوالات، مشکلات، پیشنهادات و انتقادات خودتون رو با من درمیون بذارید

من رو دنبال کنید