Logotipo TelegramTelegram
Criação de Bots

É possível criar comandos personalizados com variáveis no Telegram Bot?

Por Telegram Equipe Técnica
criar bot no Telegram, configurar comandos personalizados, passo a passo Telegram bot, comandos do BotFather, bot não responde comandos, melhores práticas comandos, criar bot Telegram com API, solução de problemas bot Telegram, estruturar comandos Telegram, vantagens comandos personalizados

Comandos Personalizados com Variáveis no Telegram Bot: É Possível?

Muitos desenvolvedores e administradores de grupos no Telegram desejam criar comandos personalizados com variáveis, como /buscar <termo> ou /clima <cidade>. A resposta direta é: não existe suporte nativo para variáveis dentro da definição do comando no BotFather. Entretanto, é perfeitamente possível simular esse comportamento através do texto enviado junto ao comando, processando-o na lógica do bot. Neste artigo, exploramos as técnicas, limitações e melhores práticas para implementar essa funcionalidade, abrangendo desde configurações individuais até implantações empresariais. Ao final, você terá um roteiro claro para construir bots flexíveis e responsivos.

Comandos Personalizados com Variáveis no Telegram Bot: É Possível?
Comandos Personalizados com Variáveis no Telegram Bot: É Possível?

Como o Telegram interpreta comandos

No ecossistema do Telegram, um comando é uma palavra iniciada por barra (/) que deve ser registrada no BotFather. O BotFather aceita até 100 comandos diferentes por bot, cada um com nome e descrição. Nenhum desses comandos suporta espaços ou caracteres especiais além de letras simples; portanto, /clima cidade não é um comando válido – o cliente interpreta /clima como comando e cidade como parâmetro extra. Essa separação é a chave para atingir o efeito desejado: o comando funciona como um gatilho, enquanto o texto subsequente carrega os dados que o bot deve processar.

Simulando variáveis: O padrão comando + parâmetros

A abordagem mais comum é definir um comando fixo, como /buscar, e esperar que o usuário digite algo como /buscar inteligência artificial. O bot então recebe a mensagem completa e pode extrair a parte após o comando, tratando-a como uma variável. Isso é feito programaticamente dentro do método on_message ou no handler específico de comandos, garantindo que cada parâmetro seja processado de acordo com a lógica do bot.

Implementação prática com Python e python-telegram-bot

Suponha que você queira um comando /buscar que consulta um banco de dados. No código Python (usando a biblioteca python-telegram-bot versão 20.x), você faria:


from telegram.ext import Application, CommandHandler

async def buscar(update, context):
    # Extrair o texto após o comando
    args = context.args
    if not args:
        await update.message.reply_text('Uso: /buscar <termo>')
        return
    termo = ' '.join(args)
    # Realizar a busca (simulado)
    resultado = f"Resultados para '{termo}': ..."
    await update.message.reply_text(resultado)

app = Application.builder().token('SEU_TOKEN').build()
app.add_handler(CommandHandler('buscar', buscar))
app.run_polling()

Aqui, context.args fornece uma lista com as palavras após /buscar. Isso funciona como uma simples variável de entrada. O bot pode aceitar parâmetros opcionais ou obrigatórios, dependendo da lógica. Para comandos com múltiplos parâmetros, a extração pode ser ajustada com índices ou expressões regulares.

Considerações sobre plataforma

No Telegram Desktop, ao digitar /buscar e pressionar espaço, o cliente exibe sugestões de comandos, mas o campo de texto continua aceitando texto adicional. No mobile (Android/iOS), o comportamento é semelhante: o botão de comando só é acionado após o envio da mensagem. Não há diferença funcional entre as plataformas, pois a separação comando/parâmetros é feita pelo próprio servidor do Telegram antes de entregar a mensagem ao bot. Portanto, o mesmo código serve para todos os clientes – o que simplifica o desenvolvimento e o teste.

Exemplos reais de comandos com variáveis simuladas

A técnica de usar parâmetros textuais é amplamente empregada em bots populares. Abaixo, alguns casos comuns que ilustram a versatilidade desse padrão:

  • /clima São Paulo – O bot busca previsão do tempo para a cidade extraída do argumento.
  • /poll "Melhor cor?" "Azul" "Verde" "Vermelho" – Cria enquete com perguntas e opções passadas como parâmetros. Bots como @PollBot utilizam essa estratégia.
  • /calc 2 + 3 – Calculadora que interpreta a expressão matemática fornecida.
  • /traduzir en pt Hello – Traduz uma palavra ou frase com códigos de idioma como variáveis.

Nesses exemplos, o comando em si é fixo, mas o comportamento é dinâmico graças à extração de parâmetros. Isso atende à maioria dos cenários de usuário, combinando a previsibilidade de um comando conhecido com a flexibilidade de entradas variáveis.

Limitações e trade-offs

Limite de 100 comandos registráveis

O BotFather permite no máximo 100 comandos por bot. Se você precisa de muitas variações, talvez seja melhor usar um único comando com parâmetros (ex.: /comando acao) e interpretar a ação como variável. Entretanto, isso reduz a descoberta – o usuário não vê no menu de comandos o que é possível fazer. Uma solução híbrida é registrar comandos principais e documentar subcomandos via /help, equilibrando visibilidade e funcionalidade.

Experiência do usuário

Quando o usuário digita / no Telegram, o app exibe uma lista de comandos sugeridos. Se você tiver apenas /buscar, o usuário pode não saber que precisa digitar um termo após o comando. É essencial fornecer feedback claro: caso nenhum argumento seja enviado, o bot deve responder com uma mensagem de ajuda (como no exemplo acima). Além disso, o desenvolvedor pode usar Inline Queries para oferecer sugestões dinâmicas, embora isso não substitua completamente uma interface de comando. Pequenos toques, como indicar o formato esperado na descrição do comando no BotFather, já ajudam.

Privacidade e segurança

Parâmetros passados após o comando são enviados como parte da mensagem, visíveis para o servidor do Telegram e para o bot. Se o bot precisar de dados sensíveis, como senhas, não é recomendado passá-los como argumentos, pois permanecem no histórico de chat. Para informações confidenciais, prefira usar botões de callback ou formulários via mensagens separadas, que oferecem maior controle sobre o fluxo de dados.

Rate limits e processamento

O Telegram impõe limites de taxa para requisições de bots. Se um comando com variáveis desencadear um processamento pesado (ex.: consulta a APIs externas), muitos usuários poderão causar atrasos ou bloqueios. É recomendável implementar filas ou cache, e usar teclados inline para dividir longas operações em etapas gerenciáveis. Dessa forma, você mantém a responsividade mesmo sob carga moderada.

Alternativas para comportamentos dinâmicos

Inline Queries

As Inline Queries permitem que o usuário digite @seubot <texto> em qualquer chat e obtenha resultados instantâneos. Isso é ideal para bots de busca, tradução ou geração de stickers. Embora não sejam comandos estritamente, oferecem uma experiência de variáveis em tempo real sem a necessidade de um comando prefixado – o usuário interage diretamente com o conteúdo inline.

Callbacks e Menus

Botões inline com callback_data podem simular uma sequência de escolhas, onde cada etapa adiciona uma “variável” ao contexto do usuário. Por exemplo, um bot de encomendas pode perguntar “Qual produto?” e, após a resposta, perguntar “Quantidade?”. Isso é mais amigável para o usuário e evita a digitação de comandos complexos, além de reduzir erros de entrada.

Callbacks e Menus
Callbacks e Menus

Configuração em grupo e equipe

Quando o bot é usado em grupos ou canais, o comportamento dos comandos com variáveis permanece o mesmo. No entanto, é importante considerar que qualquer membro pode invocar o comando. Se o bot deve responder apenas a administradores, você precisa verificar permissões no código (ex.: update.effective_chat.get_member(update.effective_user.id).status). Essa verificação garante que ações sensíveis não sejam acionadas por usuários não autorizados.

Para ambientes empresariais, onde vários desenvolvedores mantêm o mesmo bot, é recomendável versionar o código e utilizar um ambiente de testes (outro token) antes de publicar alterações no bot principal. O BotFather permite criar múltiplos bots com tokens diferentes para desenvolvimento, homologação e produção. Essa separação evita que falhas em desenvolvimento impactem o bot em uso.

Troubleshooting: problemas comuns e soluções

Comando não aparece no menu

Após cadastrar o comando no BotFather, o cliente pode levar alguns segundos para atualizar. Peça ao usuário para reiniciar o app ou esperar. Além disso, verifique se o comando foi realmente registrado com /mybots > Seu Bot > Edit Bot > Edit Commands. Uma confirmação visual no próprio BotFather evita dúvidas.

Argumentos não são capturados

No python-telegram-bot, o parâmetro context.args contém as palavras separadas por espaço entre aspas. Se o usuário passar texto com aspas, como /buscar "termo composto", a biblioteca já trata isso corretamente. Caso contrário, você pode usar update.message.text.replace('/buscar ', '') como fallback. Sempre teste com diferentes formatos de entrada durante o desenvolvimento.

Erros de codificação em caracteres especiais

Como os parâmetros são texto UTF-8, não há problemas de acentuação ou emojis. No entanto, ao salvar em banco de dados, certifique-se de que a coluna suporte utf8mb4 no MySQL ou equivalente. Caracteres como emojis podem exigir configurações específicas de collation.

Lista de verificação de melhores práticas

  • Registre comandos genéricos e documente os parâmetros na descrição ou em /help.
  • Valide a presença de argumentos e forneça feedback imediato.
  • Implemente limite de caracteres para evitar sobrecarga (ex.: máximo 256 caracteres).
  • Use Inline Queries para ações que exigem sugestões em tempo real.
  • Para grupos, verifique permissões se o comando for restrito.
  • Empregue cache ou filas para operações lentas.
  • Teste em ambiente separado antes de implantar no bot público.

Seguir essa lista ajuda a evitar surpresas e garante uma experiência consistente para os usuários finais, independentemente do volume de uso.

Perguntas Frequentes

É possível criar um comando como /buscar<termo> sem espaço?

Não, o Telegram reconhece o comando apenas até o primeiro caractere não alfanumérico (com algumas exceções). Se você digitar /buscarX, o Telegram interpretará /buscarX como um comando inteiro, não como /buscar com argumento X. A solução é usar espaço: /buscar X.

Quantos parâmetros posso passar em um comando?

Não há limite técnico definido pelo Telegram, mas a mensagem completa tem limite de 4096 caracteres. Além disso, na prática, mais de 5-6 parâmetros tornam a experiência ruim. No python-telegram-bot, os argumentos são separados por espaço; aspas permitem agrupar palavras.

Posso usar variáveis dinâmicas em comandos inline?

Sim. Nas Inline Queries, o texto digitado pelo usuário (@seubot argumento) é passado como parâmetro diretamente para o bot, que pode processá-lo como variável. É uma alternativa mais flexível, mas exige que o bot implemente o handler de inline queries.

Meu bot não responde a comandos em grupos. O que fazer?

Verifique se o bot foi adicionado como administrador (se necessário) e se a privacidade do bot está definida como “desativada” no BotFather (Settings > Group Privacy > Disable). Caso contrário, o bot não vê mensagens que não comecem com / ou não mencionem o bot.

Conclusão

Criar comandos personalizados com variáveis no Telegram Bot não é suportado nativamente, mas a técnica de usar parâmetros textuais após o comando simula essa funcionalidade de maneira eficaz. Com uma implementação cuidadosa, é possível oferecer uma experiência rica e dinâmica aos usuários. Lembre-se de equilibrar usabilidade, segurança e desempenho, utilizando também recursos complementares como Inline Queries e botões de callback quando apropriado. Se você está começando, recomenda-se usar a biblioteca python-telegram-bot ou node-telegram-bot-api e testar em um grupo de desenvolvimento antes de liberar ao público. À medida que o Telegram evolui, é provável que novas APIs simplifiquem ainda mais esse padrão – por enquanto, dominar a extração de argumentos já cobre a maioria das necessidades.

#BotFather#API do Telegram#Comandos Personalizados#Configuração#Automação