Une commande de bot Telegram est l'un des mots-clés précédés d'un slash qu'un bot publie pour que les gens puissent voir ce qu'il fait. Elles apparaissent dans le menu à côté de la zone de saisie, et la propre définition de Telegram est la plus simple : "A command is a simple /keyword that tells the bot what to do."
Ce qui mérite une page n'est pas ce que sont les commandes, mais lesquelles une personne donnée voit, car cela dépend d'une règle de priorité plutôt que d'une liste unique, et c'est la raison habituelle pour laquelle un changement semble ne pas avoir pris effet.
À quoi peut ressembler une commande ?
Les règles de format de Telegram sont strictes et courtes. Les commandes "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."
Donc pas d'espaces, pas de tirets, pas de caractères accentués, et rien de plus long que 32 caractères, slash compris. Une commande hors de ces règles n'est pas une commande plus courte ; ce n'est pas une commande.
Trois sont attendues de tous. Telegram demande à tous les développeurs de prendre en charge /start, /help et /settings le cas échéant, pour que les gens retrouvent un ensemble cohérent quel que soit le bot qu'ils ouvrent. Considérer ces trois commandes comme réservées est une bonne habitude, même si votre bot fait quelque chose de différent avec le même mot.
Comment définit-on les commandes ?
De deux façons, et c'est la même liste sous-jacente.
Vous pouvez les définir de manière conversationnelle via le @BotFather de Telegram, qui est la méthode habituelle pendant le développement. Ou vous pouvez les définir depuis le code avec la méthode API du Bot setMyCommands, qui prend la liste sous forme de tableau, accepte au maximum 100 commandes et prend une portée optionnelle qui "Defaults to BotCommandScopeDefault".
La voie API est celle à utiliser dès que quoi que ce soit dans vos commandes dépend d'un état, car elle peut être appelée chaque fois que cet état change plutôt que seulement quand un humain y pense.
Pourquoi ma liste de commandes ne change-t-elle pas ?
Parce que les portées ne fusionnent pas, et qu'une liste plus étroite que vous avez définie auparavant l'emporte toujours.
Le modèle de Telegram est qu'un bot "is able to show different commands to different users and groups", contrôlées par des portées, dont il existe sept :
BotCommandScopeDefaultBotCommandScopeAllPrivateChatsBotCommandScopeAllGroupChatsBotCommandScopeAllChatAdministratorsBotCommandScopeChatBotCommandScopeChatAdministratorsBotCommandScopeChatMember
Et la règle de résolution tient en une seule phrase dans la documentation de Telegram, sous "Determining list of commands" : "The first list of commands which is set is returned."
C'est la réponse complète à la plainte la plus courante. Les listes ne sont pas combinées. Telegram parcourt une séquence ordonnée de la portée la plus spécifique à la moins spécifique, et s'arrête à la première qui est définie.
Dans un chat privé avec le bot, l'ordre que Telegram parcourt est : botCommandScopeChat avec un language_code correspondant, puis botCommandScopeChat, puis botCommandScopeAllPrivateChats avec un code de langue, puis botCommandScopeAllPrivateChats, puis botCommandScopeDefault avec un code de langue, puis botCommandScopeDefault.
Dans les groupes et supergroupes, la séquence est plus longue, allant de botCommandScopeChatMember en passant par les portées réservées aux administrateurs et botCommandScopeAllGroupChats avant d'atteindre la valeur par défaut.
Une chose s'inverse entre les deux, et c'est le piège. Dans un chat privé, botCommandScopeChat est la portée la plus spécifique qui existe. Dans un groupe, ce n'est pas le cas : botCommandScopeChatAdministrators et sa variante linguistique se trouvent au-dessus, donc une liste d'administrateurs définie une seule fois l'emporte sur la liste par chat pour ces personnes, précisément là où vous attendriez que la portée par chat gagne.
Donc si vous définissez une liste par chat pendant les tests et changez ensuite la valeur par défaut, ce chat continue d'afficher l'ancienne liste indéfiniment. La solution est de supprimer la portée plus étroite plutôt que de continuer à modifier la plus large, et il en va de même pour une variante language_code, qui se situe au-dessus de sa propre portée dans l'ordre.
Que dois-je faire concrètement ?
Trois habitudes découlent de la règle de priorité.
- Définissez la portée par défaut en premier et modifiez-la en dernier. C'est la valeur de repli que tout le monde atteint quand rien de plus étroit n'existe, donc c'est la liste que la plupart de vos utilisateurs voient.
- Utilisez une portée étroite délibérément, pas par commodité. Tout ce que vous définissez au niveau d'un chat ou d'un membre vous est invisible ensuite à moins d'aller vérifier, et cela écrase silencieusement tout ce qui est plus large.
- Quand une liste semble obsolète, énumérez les portées au lieu de redéfinir celle que vous avez modifiée. Celle qui l'emporte n'est généralement pas celle que vous avez modifiée.
Bird prend-il en charge Telegram ?
Pour les codes de vérification, oui, et pour rien de ce qui est décrit sur cette page.
Bird Verify envoie des codes de vérification à usage unique via Telegram en plus de l'e-mail, du SMS et du WhatsApp, en utilisant le propre compte de notification vérifié de Telegram plutôt qu'un bot que vous gérez. C'est un mécanisme différent d'un bot avec un menu de commandes : il n'y a pas de bot à enregistrer, pas de commandes à publier, et rien sur cette page ne s'y applique. Si c'est l'envoi de codes de vérification qui vous a amené ici, Bird Verify couvre les canaux et leur mécanisme de repli.
Tout ce qui précède relève du comportement propre à la plateforme Telegram. Leur guide des fonctionnalités bot et la référence Bot API sont la source et l'endroit où vérifier les changements.
En bref
Une commande est un mot-clé précédé d'un slash que le bot publie.
Elle commence par un slash, fait au maximum 32 caractères et n'utilise que des lettres latines, des chiffres et des tirets bas.
Trois commandes sont attendues de chaque bot.
Telegram demande aux développeurs de prendre en charge
/start,/helpet/settingsle cas échéant, pour que les gens retrouvent les trois mêmes partout.Les portées décident qui voit quelle liste.
Il y en a sept, d'une valeur par défaut globale jusqu'à un membre précis d'un chat précis.
La première portée définie l'emporte sans appel.
Les listes ne fusionnent pas. Une portée étroite définie une seule fois masque la liste plus large pour cette audience jusqu'à ce que vous la supprimiez.