Komenda bota Telegram to jedno ze słów kluczowych ze slashem, które bot publikuje, żeby ludzie widzieli, co potrafi. Komendy pojawiają się w menu obok pola wiadomości, a własna definicja Telegrama jest prosta: "A command is a simple /keyword that tells the bot what to do."
To, co zasługuje na osobną stronę, to nie czym są komendy, ale które z nich widzi dana osoba, bo o tym decyduje reguła pierwszeństwa, a nie pojedyncza lista, i to jest najczęstszy powód, dla którego zmiana wydaje się nie działać.
Jak może wyglądać komenda?
Reguły formatu Telegrama są ścisłe i krótkie. Komendy "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."
Czyli żadnych spacji, myślników, znaków diakrytycznych ani niczego dłuższego niż 32 znaki łącznie ze słowem kluczowym po slashu. Komenda poza tymi regułami nie jest krótszą komendą; nie jest komendą w ogóle.
Trzy komendy są oczekiwane od każdego bota. Telegram prosi wszystkich programistów o obsługę /start, /help i /settings tam, gdzie ma to zastosowanie, żeby ludzie spotykali spójny zestaw niezależnie od tego, jakiego bota otworzą. Traktowanie tych trzech jako zarezerwowanych to dobry nawyk, nawet jeśli twój bot robi z tym samym słowem coś niezwiązanego.
Jak ustawia się komendy?
Na dwa sposoby, a pod spodem to ta sama lista.
Możesz je ustawić konwersacyjnie przez telegramowego @BotFather, co jest typową drogą podczas budowy. Albo możesz ustawić je z kodu metodą Bot API setMyCommands, która przyjmuje listę jako tablicę, akceptuje maksymalnie 100 komend i przyjmuje opcjonalny zakres, który "Defaults to BotCommandScopeDefault".
Droga przez API to ta właściwa, gdy cokolwiek w twoich komendach zależy od stanu, bo można ją wywołać za każdym razem, gdy ten stan się zmieni, a nie tylko wtedy, gdy człowiek o tym pamięta.
Dlaczego moja lista komend się nie zmienia?
Ponieważ zakresy się nie łączą, a węższa lista ustawiona wcześniej wciąż wygrywa.
Model Telegrama zakłada, że bot "is able to show different commands to different users and groups", kontrolowany przez zakresy, których jest siedem:
BotCommandScopeDefaultBotCommandScopeAllPrivateChatsBotCommandScopeAllGroupChatsBotCommandScopeAllChatAdministratorsBotCommandScopeChatBotCommandScopeChatAdministratorsBotCommandScopeChatMember
A reguła rozstrzygania to jedno zdanie w dokumentacji Telegrama, pod "Determining list of commands": "The first list of commands which is set is returned."
To cała odpowiedź na najczęstszą skargę. Listy nie są łączone. Telegram przechodzi uporządkowaną sekwencję od najwęższego zakresu do najszerszego i zatrzymuje się na pierwszym, który jest ustawiony.
W prywatnym czacie z botem kolejność, którą Telegram przechodzi, to: botCommandScopeChat z pasującym language_code, potem botCommandScopeChat, potem botCommandScopeAllPrivateChats z kodem języka, potem botCommandScopeAllPrivateChats, potem botCommandScopeDefault z kodem języka, potem botCommandScopeDefault.
W grupach i supergrupach sekwencja jest dłuższa, biegnie od botCommandScopeChatMember przez zakresy tylko dla administratorów i botCommandScopeAllGroupChats, zanim dotrze do domyślnego.
Jedna rzecz odwraca się między tymi dwoma kontekstami i to jest pułapka. W prywatnym czacie botCommandScopeChat to najwęższy istniejący zakres. W grupie już nie: zarówno botCommandScopeChatAdministrators, jak i jego wariant językowy stoją wyżej, więc lista administratorów ustawiona raz wygrywa z listą per czat dla tych osób, dokładnie tam, gdzie spodziewałbyś się, że per czat zwycięży.
Jeśli więc ustawisz listę per czat podczas testów, a później zmienisz domyślną, ten jeden czat będzie wiecznie pokazywał starą listę. Rozwiązaniem jest wyczyszczenie węższego zakresu, a nie ciągłe edytowanie szerszego. To samo dotyczy wariantu language_code, który w kolejności stoi powyżej własnego zakresu.
Co właściwie powinienem zrobić?
Z reguły pierwszeństwa wynikają trzy nawyki.
- Ustaw domyślny zakres jako pierwszy i zmieniaj go jako ostatni. To fallback, do którego dociera każdy, gdy nic węższego nie istnieje, więc to lista, którą widzi większość twoich użytkowników.
- Używaj wąskiego zakresu celowo, nie dla wygody. Wszystko, co ustawisz na poziomie czatu lub członka, jest potem dla ciebie niewidoczne, dopóki nie poszukasz, i po cichu nadpisuje wszystko szersze.
- Gdy lista wygląda na nieaktualną, wylistuj zakresy zamiast ponownie ustawiać ten, który edytowałeś. Ten, który wygrywa, to zwykle nie ten, który zmieniałeś.
Czy Bird obsługuje Telegram?
Do kodów weryfikacyjnych tak, a do niczego opisanego na tej stronie nie.
Bird Verify dostarcza jednorazowe kody weryfikacyjne przez Telegram obok e-maila, SMS i WhatsApp, korzystając z własnego zweryfikowanego konta powiadomień Telegrama, a nie z bota, którego prowadzisz. To inny mechanizm niż bot z menu komend: nie ma bota do rejestracji, komend do publikowania i nic na tej stronie go nie dotyczy. Jeśli dostarczanie kodów weryfikacyjnych sprowadziło cię tutaj, Bird Verify opisuje kanały i sposób ich przełączania.
Wszystko powyżej to zachowanie własnej platformy Telegrama. Ich przewodnik po funkcjach botów i dokumentacja Bot API to źródło i miejsce, gdzie sprawdzisz zmiany.
W skrócie
Komenda to słowo kluczowe ze slashem, które bot udostępnia.
Zaczyna się od slasha, ma maksymalnie 32 znaki i może zawierać wyłącznie litery łacińskie, cyfry i podkreślenia.
Trzy komendy są oczekiwane od każdego bota.
Telegram prosi programistów o obsługę
/start,/helpi/settingstam, gdzie ma to zastosowanie, żeby ludzie wszędzie spotykali te same trzy.Zakresy decydują, kto widzi którą listę.
Jest ich siedem, od globalnego domyślnego po jednego konkretnego członka jednego konkretnego czatu.
Pierwszy ustawiony zakres wygrywa bezwarunkowo.
Listy się nie łączą. Węższy zakres ustawiony raz ukrywa szerszą listę przed daną grupą odbiorców, dopóki go nie wyczyścisz.