Telegram

¿Qué son los comandos de bot de Telegram y por qué no se actualiza mi lista?

Un comando de bot de Telegram es una de las palabras clave con barra que un bot publica para que la gente vea lo que hace. Aparecen en el menú junto al cuadro de mensaje, y la propia definición de Telegram es la más simple: "A command is a simple /keyword that tells the bot what to do."

Lo que merece una página no es qué son, sino cuáles ve una persona determinada, porque eso lo decide una regla de precedencia en lugar de una única lista, y es la razón habitual por la que un cambio parece no haber surtido efecto.

¿Cómo puede verse un comando?

Las reglas de formato de Telegram son estrictas y breves. Los comandos "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."

Nada de espacios, guiones, caracteres acentuados ni nada que supere los 32 caracteres contando la palabra clave de la barra. Un comando fuera de esas reglas no es un comando más corto; no es un comando.

Se esperan tres de todos los bots. Telegram pide que todos los desarrolladores admitan /start, /help y /settings cuando corresponda, para que la gente encuentre un conjunto consistente sin importar qué bot abra. Tratar esos tres como reservados es un buen hábito incluso cuando tu bot hace algo distinto con la misma palabra.

¿Cómo se establecen los comandos?

De dos formas, y ambas operan sobre la misma lista subyacente.

Puedes establecerlos de forma conversacional a través del propio @BotFather de Telegram, que es la ruta habitual durante el desarrollo. O puedes establecerlos desde código con el método API de Bot setMyCommands, que recibe la lista como un array, acepta como máximo 100 comandos y admite un scope opcional que "Defaults to BotCommandScopeDefault".

La ruta API es la indicada cuando cualquier aspecto de tus comandos depende de un estado, porque se puede llamar cada vez que ese estado cambie en lugar de solo cuando un humano se acuerde.

¿Por qué no cambia mi lista de comandos?

Porque los scopes no se combinan, y una lista más estrecha que estableciste antes sigue ganando.

El modelo de Telegram es que un bot "is able to show different commands to different users and groups", controlado por scopes, de los cuales hay siete:

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

Y la regla de resolución es una sola frase en la documentación de Telegram, bajo "Determining list of commands": "The first list of commands which is set is returned."

Esa es toda la respuesta a la queja más común. Las listas no se combinan. Telegram recorre una secuencia ordenada desde el scope más específico hasta el menos específico y se detiene en el primero que esté establecido.

En un chat privado con el bot, el orden que Telegram recorre es: botCommandScopeChat con un language_code que coincida, luego botCommandScopeChat, luego botCommandScopeAllPrivateChats con un código de idioma, luego botCommandScopeAllPrivateChats, luego botCommandScopeDefault con un código de idioma, luego botCommandScopeDefault.

En grupos y supergrupos la secuencia es más larga, y va desde botCommandScopeChatMember pasando por los scopes exclusivos de administradores y botCommandScopeAllGroupChats antes de llegar al predeterminado.

Una cosa se invierte entre los dos contextos, y es la trampa. En un chat privado botCommandScopeChat es el scope más específico que existe. En un grupo no lo es: tanto botCommandScopeChatAdministrators como su variante de idioma están por encima, así que una lista de administradores que estableciste una vez le gana a la lista por chat para esas personas, justo donde esperarías que la de por chat ganara.

Entonces, si estableces una lista por chat durante las pruebas y luego cambias el predeterminado, ese chat sigue mostrando la lista antigua para siempre. La solución es borrar el scope más estrecho en lugar de seguir editando el más amplio, y lo mismo aplica a una variante language_code, que está por encima de su propio scope en el orden.

¿Qué debería hacer en la práctica?

Tres hábitos se derivan de la regla de precedencia.

  1. Establece el scope predeterminado primero y cámbialo de último. Es el respaldo al que llegan todos cuando no existe nada más estrecho, así que es la lista que ve la mayoría de tus usuarios.
  2. Usa un scope estrecho de forma deliberada, no por comodidad. Todo lo que establezcas a nivel de chat o de miembro se vuelve invisible para ti a menos que vayas a buscarlo, y silenciosamente anula todo lo más amplio.
  3. Cuando una lista parezca desactualizada, enumera los scopes en lugar de volver a establecer el que editaste. El que está ganando normalmente no es el que has estado cambiando.

¿Bird es compatible con Telegram?

Para códigos de verificación, sí, y para nada de lo descrito en esta página.

Bird Verify envía códigos de verificación de un solo uso por Telegram junto con correo electrónico, SMS y WhatsApp, usando la propia cuenta de notificaciones verificada de Telegram en lugar de un bot que tú administres. Es un mecanismo distinto al de un bot con menú de comandos: no hay bot que registrar, no hay comandos que publicar, y nada de esta página aplica. Si la entrega de códigos de verificación es lo que te trajo aquí, Bird Verify cubre los canales y cómo hacen fallback.

Todo lo anterior es comportamiento propio de la plataforma de Telegram. Su guía de funciones de bot y la referencia de Bot API son la fuente y el lugar donde verificar cambios.

En resumen

  1. Un comando es una palabra clave con barra que el bot publica.

    Empieza con una barra, admite como máximo 32 caracteres y solo usa letras latinas, números y guiones bajos.

  2. Se esperan tres comandos de todos los bots.

    Telegram pide a los desarrolladores que admitan /start, /help y /settings cuando corresponda, para que la gente encuentre los mismos tres en todos lados.

  3. Los scopes deciden quién ve qué lista.

    Hay siete, desde un valor global por defecto hasta un miembro específico de un chat específico.

  4. El primer scope que se establece gana sin más.

    Las listas no se combinan. Un scope estrecho que se establece una vez oculta la lista más amplia para esa audiencia hasta que lo borres.

Construye sobre la misma red.

Obtén una clave API de prueba de inmediato. El acceso a producción se desbloquea cuando añades un método de pago y verificas un remitente.

Tu próxima idea.
Lista para conectar.