Telegram

Wat zijn Telegram-botcommando's, en waarom wordt mijn lijst niet bijgewerkt?

Een Telegram-botcommando is een van de slash-trefwoorden die een bot publiceert zodat mensen kunnen zien wat hij doet. Ze verschijnen in het menu naast het berichtveld, en Telegrams eigen definitie is de eenvoudige: "A command is a simple /keyword that tells the bot what to do."

Wat een pagina waard is, is niet wat ze zijn maar welke een bepaald persoon ziet, want dat wordt bepaald door een voorrangsregel in plaats van door één enkele lijst, en het is de gebruikelijke reden waarom een wijziging niet lijkt te zijn doorgevoerd.

Hoe kan een commando eruitzien?

Telegrams formaatregels zijn streng en kort. Commando's "must always start with the / symbol and contain up to 32 characters. They can use Latin letters, numbers and underscores, though simple lowercase text is recommended for a cleaner look."

Dus geen spaties, geen koppeltekens, geen letters met accenten, en niets langer dan 32 tekens inclusief het trefwoord na de slash. Een commando buiten die regels is geen korter commando; het is geen commando.

Drie worden van iedereen verwacht. Telegram vraagt alle ontwikkelaars om /start, /help en /settings te ondersteunen waar van toepassing, zodat mensen een consistente set tegenkomen ongeacht welke bot ze openen. Die drie als gereserveerd behandelen is een goede gewoonte, ook als je bot iets anders doet met hetzelfde woord.

Hoe stel je commando's in?

Op twee manieren, en het is dezelfde onderliggende lijst.

Je kunt ze via een gesprek instellen via Telegrams eigen @BotFather, wat de gebruikelijke route is tijdens het bouwen. Of je kunt ze vanuit code instellen met de Bot API-methode setMyCommands, die de lijst als array accepteert, maximaal 100 commando's toestaat en een optionele scope accepteert die "Defaults to BotCommandScopeDefault".

De API-route is de route die je moet gebruiken zodra iets aan je commando's afhangt van state, omdat je hem kunt aanroepen wanneer die state verandert in plaats van alleen wanneer een mens eraan denkt.

Waarom verandert mijn commandolijst niet?

Omdat scopes niet worden samengevoegd, en een smallere lijst die je eerder hebt ingesteld nog steeds wint.

Telegrams model is dat een bot "is able to show different commands to different users and groups", beheerd door scopes, waarvan er zeven zijn:

  • BotCommandScopeDefault
  • BotCommandScopeAllPrivateChats
  • BotCommandScopeAllGroupChats
  • BotCommandScopeAllChatAdministrators
  • BotCommandScopeChat
  • BotCommandScopeChatAdministrators
  • BotCommandScopeChatMember

En de resolutieregel is één zin in Telegrams documentatie, onder "Determining list of commands": "The first list of commands which is set is returned."

Dat is het volledige antwoord op de meest voorkomende klacht. De lijsten worden niet gecombineerd. Telegram doorloopt een geordende reeks van de meest specifieke scope naar de minst specifieke en stopt bij de eerste die is ingesteld.

In een privéchat met de bot doorloopt Telegram de volgorde: botCommandScopeChat met een overeenkomende language_code, dan botCommandScopeChat, dan botCommandScopeAllPrivateChats met een taalcode, dan botCommandScopeAllPrivateChats, dan botCommandScopeDefault met een taalcode, dan botCommandScopeDefault.

In groepen en supergroepen is de reeks langer, lopend van botCommandScopeChatMember via de scopes die alleen voor beheerders gelden en botCommandScopeAllGroupChats voordat de standaard wordt bereikt.

Eén ding keert om tussen de twee, en dat is de valkuil. In een privéchat is botCommandScopeChat de meest specifieke scope die er is. In een groep niet: zowel botCommandScopeChatAdministrators als de taalvariant daarvan staan erboven, dus een beheerderslijst die je één keer hebt ingesteld wint van de per-chatlijst voor die mensen, op de ene plek waar je zou verwachten dat per-chat wint.

Als je dus een per-chatlijst instelt tijdens het testen en later de standaard wijzigt, blijft die ene chat voor altijd de oude lijst tonen. De oplossing is de smallere scope wissen in plaats van de bredere te blijven bewerken, en hetzelfde geldt voor een language_code-variant, die boven zijn eigen scope staat in de volgorde.

Wat moet ik eigenlijk doen?

Drie gewoonten volgen uit de voorrangsregel.

  1. Stel de standaardscope het eerst in en wijzig hem het laatst. Het is de fallback die iedereen bereikt wanneer er niets smallers bestaat, dus het is de lijst die de meeste van je gebruikers zien.
  2. Gebruik een smalle scope bewust, niet voor het gemak. Alles wat je op chat- of lidniveau instelt is daarna onzichtbaar voor je tenzij je er specifiek naar zoekt, en het overschrijft stilletjes alles wat breder is.
  3. Als een lijst verouderd lijkt, doorloop dan de scopes in plaats van de scope die je hebt bewerkt opnieuw in te stellen. De scope die wint is meestal niet de scope die je hebt aangepast.

Ondersteunt Bird Telegram?

Voor verificatiecodes wel, en voor niets wat op deze pagina wordt beschreven.

Bird Verify levert eenmalige verificatiecodes af via Telegram naast e-mail, SMS en WhatsApp, met behulp van Telegrams eigen geverifieerde notificatie-account in plaats van een bot die je zelf beheert. Dat is een ander mechanisme dan een bot met een commandomenu: er is geen bot om te registreren, geen commando's om te publiceren, en niets op deze pagina is erop van toepassing. Als het afleveren van verificatiecodes je hierheen bracht, behandelt Bird Verify de kanalen en hoe ze terugvallen.

Alles hierboven is Telegrams eigen platformgedrag. Hun gids over botfuncties en de Bot API-referentie zijn de bron en de plek om op wijzigingen te controleren.

Kort gezegd

  1. Een commando is een slash-trefwoord dat de bot aanbiedt.

    Het begint met een slash, is maximaal 32 tekens lang en gebruikt alleen Latijnse letters, cijfers en underscores.

  2. Drie commando's worden van elke bot verwacht.

    Telegram vraagt ontwikkelaars om /start, /help en /settings te ondersteunen waar van toepassing, zodat mensen overal dezelfde drie tegenkomen.

  3. Scopes bepalen wie welke lijst ziet.

    Er zijn er zeven, van een globale standaard tot één specifiek lid van één specifieke chat.

  4. De eerste scope die is ingesteld wint zonder meer.

    Lijsten worden niet samengevoegd. Een smalle scope die één keer is ingesteld verbergt de bredere lijst voor dat publiek totdat je hem wist.

Bouw op hetzelfde netwerk.

Een test-API-key is direct beschikbaar. Productietoegang wordt ontgrendeld zodra u een betaalmethode toevoegt en een afzender verifieert.

Jouw volgende idee.
Klaar om te verbinden.