Get Mystery Box with random crypto!

Telegram botlar qanday ishlashini tushunish uchun polling, web | Mabrur - IT Blog

Telegram botlar qanday ishlashini tushunish uchun polling, webhook nima,
ular nega kerak kabi savollarga javob topsak.

User telegramda botga biror buyruq yuborganda, unga javob qaytishi uchun bu buyruq biz yozgan kodimiz turgan servergacha yetib kelishi kerak va server unga javob qaytarishi kerak. User yuborgan buyruqlar telegramning serveriga borib tushadi. Endi o'sha serverga kelgan buyruqlarni bizning serverimizga yetkazish kerak. Lekin telegram aynan o'sha bot uchun yozilgan bizning kodimiz qayerda turganini qanday biladi?

Telegram botlar uchun HTTP protocolidan foydalanadi. Muammo shundaki, HTTP bir tomonlama ishlaydi(push/promisedan tashqari). Ya'ni faqat bir tomon(client) request yuboradi, ikkinchi taraf(server) uni qabul qilib, response qaytaradi.
Bu degani, server xohlagan paytida clientga response yubora olmaydi. Faqatgina client request yuborgandan keyingina response yuborish mumkin.

Bizning server bilan telegram server orasida ma'lumot almashishning ikki yo'li bor:
1. Bizning server HTTP client, telegram serveri esa HTTP server vazifasini bajaradi.
2. Telegram serveri HTTP client, bizning server esa HTTP server vazifasini bajaradi.


1. Deylik, user telegram botga biror buyruq yubordi. Telegram serveri bu buyruqni to'g'ridan to'g'ri bizning serverga yubora olmaydi. Sababi, yuqorida kelishganimizdek, faqat client birinchi bo'lib ma'lumot yubora oladi. Telegram server esa hozir HTTP server rolini o'ynayapti. Plus, telegram biz qaysi bot haqida so'rayotganimizni ham bilmaydi. Demak, avval client so'rov yuborishi kerak.
Lekin client qachon so'rov yuborish kerakligini(telegramga yangi buyruq kelganini) qanday biladi?
Javob — hech qanday. Shunchaki ma'lum vaqt oraligi bilan telegram serveriga to'xtovsiz request yuborib turadi. Botga yangi buyruq kelsa, telegram keyingi safar bizning serverdan request kelganda uni response qilib yuboradi. Bu taxminan mana bunday bo'ladi:

Client: Falonchi bot uchun yangi buyruq bormi?
Telegram: Yo'q
*ozgina vaqt o'tgach*
C: Bormi?
T: Yo'q
C: Bormi?
T: Ha, mana, ol. *Buyruqni yuboradi*
C: *Buyruqqa javob qaytarib, request shaklida yuboradi*
T: Oldim.
C: Bormi?
T: Yo'q
...

Mana shu usul, ya'ni bizning server ma'lum vaqt oralig'i bilan to'xtovsiz telegramdan so'rab turishi polling deyiladi.


2. Endi bizning server HTTP server vazifasini bajarib, Telegram serveri HTTP client rolini o'ynab beradi. Endi telegram client sifatida buyruqlarni to'g'ridan-to'g'ri bizga yubora oladi. Lekin buning uchun ikkita shart bajarilishi kerak:
1. Telegram bizning serverning manzilini bilishi.
2. Bizning server web server sifatida ishlashi, ya'ni requestlarni qabul qilishi kerak.

Buning uchun boshda Pashka akaning serverlariga "Falonchi botga kelgan buyruqlarning hammasini falonchi adressdagi serverga request qilib yubor" degan ma'noda xabar berib qo'yamiz. O'zimizning serverimizni esa web serverga aylantiramiz.

Endi faqat yangi buyruq kelgandagina telegram bizning serverimizga request yuboradi:

Telegram: Uka, botingga yangi buyruq keldi. Ma, ol.
Bizning server: *qayta ishlab, natijani yuboradi*.
*keyingi safar buyruq kelganda*
Telegram: Yangi buyruq. Ma, ol.
...

Mana bu usul, yani telegram bizning serverga request yuborishi esa webhook deyiladi.