Existují dva způsoby, jak může váš bot přijímat zprávy ze serverů Telegramu (TG). Nazývají se long polling a webhooks. Každý (Xenforo, Wordpress atp) plugin podporuje obvykle oba tyto způsoby, přičemž long polling je výchozí. Tato část nejprve popisuje, co to vlastně long polling a webhooks jsou, a následně uvádí některé výhody a nevýhody použití jednoho nebo druhého způsobu nasazení. Bude se také zabývat tím, jak je používat se zásuvným modulem.
Obsah
Úvod do Telegram Webhook
Celou diskusi o webhooku vs. long pollingu můžete chápat jako otázku, jaký typ nasazení použít. Jinými slovy, existují dva zásadně odlišné způsoby, jak umístit svého bota (spustit ho na nějakém serveru), a liší se způsobem, jakým se zprávy dostanou k botovi a jak je může zpracovat plugin.
Na této volbě hodně záleží, když se musíte rozhodnout, kde svého bota hostovat. Například někteří poskytovatelé infrastruktury podporují pouze jeden ze dvou typů nasazení.
Váš bot je může buď přitahovat (dlouhé dotazování), nebo je servery TG mohou vašemu botovi posílat (webhooks).
Pokud již víte, jak tyto věci fungují, přejděte níže a podívejte se, jak používat long polling nebo webhooks s pluginem.
Jak funguje dlouhé dotazování (long polling)?
Představte si, že si ve své důvěryhodné zmrzlinárně dáváte kopeček zmrzliny. Přistoupíte k zaměstnanci a požádáte o svůj oblíbený druh zmrzliny. Bohužel vám oznámí, že není skladem.
Druhý den máte opět chuť na tu lahodnou zmrzlinu, a tak se vrátíte na stejné místo a požádáte o stejnou zmrzlinu. Dobrá zpráva! Přes noc doplnili zásoby, takže si slanou karamelovou zmrzlinu můžete vychutnat ještě dnes! Mňam.
Dotazování znamená, že modul plugin proaktivně odesílá požadavek do služby TG a žádá o nové aktualizace (rozuměj: zprávy). Pokud tam žádné zprávy nejsou, TG vrátí prázdný seznam, což znamená, že od posledního dotazu nebyly vašemu botovi odeslány žádné nové zprávy.
Když modul plugin odešle požadavek na TG a mezitím byly vašemu botovi odeslány nové zprávy, TG je vrátí jako pole až 100 objektů aktualizací.
_____________ _____________
| | | |
| | <--- existují zprávy? --- | |
| | --- ne. ---> | |
| | | |
| | <--- jsou tam zprávy? --- | |
| Telegram | --- ne. ---> | Bot |
| | | |
| | <--- jsou tam zprávy? --- | |
| | --- ano, tady to je ---> | |
| | | |
|____________| |_____________|
Je okamžitě zřejmé, že to má určité nevýhody. Váš bot dostává nové zprávy pouze pokaždé, když se zeptá, tj. přibližně každých několik sekund. Aby váš bot odpovídal rychleji, můžete prostě posílat více žádostí a nečekat mezi nimi tak dlouho. Mohli bychom například žádat o nové zprávy každou milisekundu! Co by se mohlo pokazit…
Místo toho, abychom se rozhodli spamovat servery TG, použijeme místo pravidelného (krátkého) dotazování dlouhé dotazování.
Dlouhé dotazování znamená, že zásuvný modul proaktivně posílá žádost na TG a žádá o nové aktualizace. Pokud tam žádné zprávy nejsou, Telegram ponechá spojení otevřené, dokud nepřijdou nové zprávy, a pak na požadavek odpoví těmito novými zprávami.
Zase je čas na zmrzlinu! Zaměstnanec vás již nyní pozdraví křestním jménem. Na dotaz ohledně zmrzliny vašeho oblíbeného druhu se na vás zaměstnanec usměje a zamrazí ho. Ve skutečnosti nedostanete vůbec žádnou odpověď. Rozhodnete se tedy počkat a pevně úsměv opětujete. A čekáte. A čekáte. Několik hodin před dalším východem slunce přijíždí nákladní auto místní rozvážkové společnosti a přiváží do skladu salonu několik velkých krabic. Zvenku je na nich napsáno zmrzlina. Zaměstnanec se konečně dá znovu do pohybu. „Samozřejmě že máme slaný karamel! Dva kopečky s posypem, jako obvykle?“ „Ano,“ řeknu. Jako by se nic nestalo, vychutnáváte si zmrzlinu a přitom opouštíte nejneskutečnější zmrzlinárnu na světě.
Srovnání
Hlavní výhodou dlouhého dotazování oproti webhookům je, že je jednodušší. Nepotřebujete doménu ani veřejnou adresu URL. V případě, že svého bota provozujete na VPS, nemusíte si lámat hlavu s nastavováním certifikátů SSL. Použijte funkci bot.start() a vše bude fungovat, není nutná žádná další konfigurace. Při zatížení máte naprostou kontrolu nad tím, kolik zpráv můžete zpracovat.
Mezi místa, kde dobře funguje dlouhé dotazování, patří např:
Při vývoji na lokálním počítači.
Na většině serverů.
Na hostovaných "backendových" instancích, tj. strojích, na kterých aktivně běží váš bot 24 hodin denně, 7 dní v týdnu.
Hlavní výhodou webhooků oproti long pollingu je, že jsou levnější. Ušetříte spoustu zbytečných požadavků. Nemusíte mít neustále otevřené síťové připojení. Můžete používat služby, které automaticky škálují infrastrukturu na nulu, když nepřicházejí žádné požadavky. Pokud chcete, můžete při odpovědi na požadavek Telegramu dokonce provést volání API, i když to má řadu nevýhod. Možnost konfigurace si prohlédněte zde
Mezi místa, kde webhooky dobře fungují, patří:
Na serverech s certifikáty SSL.
Na hostovaných "frontendových" instancích, které se škálují podle jejich zatížení.
Na platformách bez serverů, jako jsou cloudové funkce nebo programovatelné okrajové sítě.
Stále nevím, co použít
Pak se pusťte do dlouhého dotazování. Pokud nemáte dobrý důvod používat webhooky, pak vězte, že dlouhé dotazování nemá žádné zásadní nevýhody a podle našich zkušeností strávíte mnohem méně času opravami. Webové háčky mohou být čas od času trochu nepříjemné (viz níže).
Ať už se rozhodnete pro jakýkoli typ nasazení, pokud někdy narazíte na vážné problémy, nemělo by být příliš těžké dodatečně přejít na jiný typ nasazení. V případě zásuvného modulu se stačí dotknout jen několika řádků kódu. Nastavení vašeho middlewaru je stejné.
Volání
bot.start();
a spustíte bota s velmi jednoduchou formou dlouhého dotazování. Všechny aktualizace zpracovává postupně. Díky tomu se váš bot velmi snadno ladí a veškeré chování je velmi předvídatelné, protože není zapojena žádná souběžnost.
Pokud chcete, aby vaše zprávy zpracovával zásuvný modul souběžně, nebo se obáváte o propustnost, podívejte se do části o zásuvném modulu runner.
Jak používat webhook
Pokud chcete spustit plugin s webhooky, můžete svého bota integrovat do webového serveru. Očekáváme tedy, že budete schopni spustit jednoduchý webový server s frameworkem podle vašeho výběru.
Každý bot pluginu lze převést na middleware pro řadu webových frameworků, včetně Express, koa/oak a dalších. Můžete importovat funkci webhookCallback ze zásuvného modulu a převést tak svého bota na middleware pro příslušný framework.
Nezapomeňte si přečíst Marvinova úžasného průvodce všemi věcmi kolem Webhooků, napsaného týmem TG, pokud zvažujete spuštění svého bota na webhooky na VPS.
Webhook Reply
Po přijetí požadavku na webhook může váš bot v odpovědi zavolat až jednu metodu. Výhodou je, že díky tomu váš bot nemusí provádět až jeden požadavek HTTP na každou aktualizaci. Použití této funkce má však řadu nevýhod:
Nebudete moci zpracovat případné chyby příslušného volání API. To zahrnuje i chyby omezení rychlosti, takže vlastně nebudete mít zaručeno, že váš požadavek bude mít nějaký efekt.
A co je důležitější, nebudete mít také přístup k objektu odpovědi. Například volání sendMessage vám neposkytne přístup k odeslané zprávě.
Kromě toho není možné požadavek zrušit. Na signál AbortSignal nebude brán zřetel.
Všimněte si také, že typy v pluginu neodrážejí důsledky provedeného zpětného volání webhooku! Například uvádějí, že vždy obdržíte objekt odpovědi, takže je na vaší vlastní zodpovědnosti, abyste se ujistili, že při použití této drobné optimalizace výkonu nic nepokazíte.
Pokud chcete používat odpovědi webhooku, můžete zadat možnost canUseWebhookReply v klientské volbě svého BotConfig (odkaz na API). Předá funkci, která určuje, zda se pro daný požadavek identifikovaný metodou použije odpověď webhooku.
Užitečné
Návod změna zvuku ve Windows 11 Telegram
Domovská stránka Telegram Messenger