Ein Telegram-Bot-Befehl ist eines der Slash-Schlüsselwörter, die ein Bot veröffentlicht, damit Nutzer sehen können, was er tut. Sie erscheinen im Menü neben dem Eingabefeld, und Telegrams eigene Definition ist die einfache: "A command is a simple /keyword that tells the bot what to do."
Der Teil, der eine eigene Seite verdient, ist nicht, was Befehle sind, sondern welche eine bestimmte Person sieht, denn das wird durch eine Vorrangregel statt durch eine einzelne Liste entschieden, und genau das ist der übliche Grund, warum eine Änderung scheinbar nicht wirkt.
Wie kann ein Befehl aussehen?
Telegrams Formatregeln sind streng und kurz. Befehle "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."
Also keine Leerzeichen, keine Bindestriche, keine Sonderzeichen mit Akzent und nichts, was länger als 32 Zeichen ist, einschließlich des Slash-Schlüsselworts. Ein Befehl außerhalb dieser Regeln ist kein kürzerer Befehl; er ist kein Befehl.
Drei werden von allen erwartet. Telegram bittet alle Entwickler, /start, /help und /settings zu unterstützen, wo es sinnvoll ist, damit Nutzer in jedem Bot ein einheitliches Set vorfinden. Diese drei als reserviert zu behandeln ist eine gute Gewohnheit, selbst wenn Ihr Bot mit demselben Wort etwas anderes tut.
Wie werden Befehle gesetzt?
Auf zwei Wegen, und es ist dieselbe zugrunde liegende Liste.
Sie können sie im Gespräch über Telegrams eigenen @BotFather setzen, was der übliche Weg beim Entwickeln ist. Oder Sie können sie per Code mit der Bot-API-Methode setMyCommands setzen, die die Liste als Array entgegennimmt, maximal 100 Befehle akzeptiert und einen optionalen Scope annimmt, der "Defaults to BotCommandScopeDefault".
Der API-Weg ist der richtige, sobald irgendetwas an Ihren Befehlen von einem Zustand abhängt, weil er bei jeder Zustandsänderung aufgerufen werden kann statt nur dann, wenn ein Mensch daran denkt.
Warum ändert sich meine Befehlsliste nicht?
Weil Scopes nicht zusammengeführt werden und eine engere Liste, die Sie vorher gesetzt haben, immer noch gewinnt.
Telegrams Modell ist, dass ein Bot "is able to show different commands to different users and groups", gesteuert durch Scopes, von denen es sieben gibt:
BotCommandScopeDefaultBotCommandScopeAllPrivateChatsBotCommandScopeAllGroupChatsBotCommandScopeAllChatAdministratorsBotCommandScopeChatBotCommandScopeChatAdministratorsBotCommandScopeChatMember
Und die Auflösungsregel ist ein einziger Satz in Telegrams Dokumentation, unter "Determining list of commands": "The first list of commands which is set is returned."
Das ist die vollständige Antwort auf die häufigste Beschwerde. Die Listen werden nicht kombiniert. Telegram durchläuft eine geordnete Abfolge vom spezifischsten Scope zum allgemeinsten und hält beim ersten an, der gesetzt ist.
In einem privaten Chat mit dem Bot ist die Reihenfolge, die Telegram durchläuft: botCommandScopeChat mit passendem language_code, dann botCommandScopeChat, dann botCommandScopeAllPrivateChats mit einem Sprachcode, dann botCommandScopeAllPrivateChats, dann botCommandScopeDefault mit einem Sprachcode, dann botCommandScopeDefault.
In Gruppen und Supergruppen ist die Abfolge länger und reicht von botCommandScopeChatMember über die Administrator-Scopes und botCommandScopeAllGroupChats, bevor sie den Standard erreicht.
Zwischen den beiden kehrt sich eine Sache um, und das ist die Falle. In einem privaten Chat ist botCommandScopeChat der spezifischste vorhandene Scope. In einer Gruppe nicht: Sowohl botCommandScopeChatAdministrators als auch dessen Sprachvariante stehen darüber, sodass eine einmal gesetzte Administratoren-Liste die Pro-Chat-Liste für diese Personen schlägt, genau dort, wo Sie erwarten würden, dass Pro-Chat gewinnt.
Wenn Sie also während des Testens eine Pro-Chat-Liste gesetzt und später den Standard geändert haben, zeigt dieser eine Chat für immer die alte Liste. Die Lösung ist, den engeren Scope zu löschen statt den breiteren weiter zu bearbeiten, und dasselbe gilt für eine language_code-Variante, die in der Reihenfolge über ihrem eigenen Scope steht.
Was sollte ich konkret tun?
Drei Gewohnheiten ergeben sich aus der Vorrangregel.
- Setzen Sie den Standard-Scope zuerst und ändern Sie ihn zuletzt. Er ist der Fallback, den alle erreichen, wenn nichts Engeres existiert, also die Liste, die die meisten Ihrer Nutzer sehen.
- Verwenden Sie einen engen Scope bewusst, nicht aus Bequemlichkeit. Alles, was Sie auf Chat- oder Mitgliedsebene setzen, ist danach für Sie unsichtbar, wenn Sie nicht gezielt nachsehen, und überschreibt stillschweigend alles Breitere.
- Wenn eine Liste veraltet aussieht, prüfen Sie die Scopes, statt den bereits bearbeiteten erneut zu setzen. Der Scope, der gewinnt, ist in der Regel nicht der, den Sie geändert haben.
Unterstützt Bird Telegram?
Für Bestätigungscodes ja, und für nichts, was auf dieser Seite beschrieben wird.
Bird Verify liefert Einmal-Bestätigungscodes über Telegram neben E-Mail, SMS und WhatsApp, wobei Telegrams eigener verifizierter Benachrichtigungsaccount genutzt wird statt eines Bots, den Sie selbst betreiben. Das ist ein anderer Mechanismus als ein Bot mit Befehlsmenü: Es gibt keinen Bot zu registrieren, keine Befehle zu veröffentlichen, und nichts auf dieser Seite trifft darauf zu. Falls Sie wegen der Zustellung von Bestätigungscodes hier gelandet sind, deckt Bird Verify die Kanäle und deren Fallback-Verhalten ab.
Alles oben Genannte ist Telegrams eigenes Plattformverhalten. Ihr Leitfaden zu Bot-Funktionen und die Bot-API-Referenz sind die Quelle und der Ort, um Änderungen nachzuschlagen.
Kurz gesagt
Ein Befehl ist ein Slash-Schlüsselwort, das der Bot veröffentlicht.
Er beginnt mit einem Slash, umfasst höchstens 32 Zeichen und verwendet nur lateinische Buchstaben, Ziffern und Unterstriche.
Drei Befehle werden von jedem Bot erwartet.
Telegram bittet Entwickler,
/start,/helpund/settingszu unterstützen, wo es sinnvoll ist, damit Nutzer überall dieselben drei vorfinden.Scopes bestimmen, wer welche Liste sieht.
Es gibt sieben, von einem globalen Standard bis hinunter zu einem bestimmten Mitglied in einem bestimmten Chat.
Der erste gesetzte Scope gewinnt ausnahmslos.
Listen werden nicht zusammengeführt. Ein einmal gesetzter engerer Scope verbirgt die breitere Liste vor diesem Publikum, bis Sie ihn löschen.