Chatbots en Rust: de la idea al bot listo en una noche

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Por qué Rust es un acierto para el «cerebro» de tu chatbot

\n\n

Si estás acostumbrado a escribir bots en Python y crees que no hay nada más rápido, no has probado Rust. Rust no solo ofrece velocidad, sino control sobre cada byte. Los chatbots en Rust funcionan a la velocidad del rayo, consumen muy poca memoria y no fallan con errores en tiempo de ejecución. En esta guía, construiremos un bot real de Telegram que procesa comandos, responde mensajes y lo hace con un rendimiento inalcanzable para los lenguajes interpretados.

\n\n

Escribiremos el bot desde cero, usando las crates teloxide y reqwest. Verás lo fácil que Rust asíncrono maneja miles de solicitudes y por qué crear un chatbot en Rust es una inversión en la estabilidad de tu proyecto.

\n\n

Configuración del entorno y primer inicio

\n\n

Antes de escribir código, asegúrate de tener Rust instalado. Si no es así, ejecuta:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Añade cargo al PATH y crea un nuevo proyecto:

\n\n
cargo new rust_tg_bot\ncd rust_tg_bot
\n\n

Ahora abre Cargo.toml y añade las dependencias:

\n\n
[dependencies]\nteloxide = { version = "0.12", features = ["macros"] }\nreqwest = { version = "0.11", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1.0", features = ["derive"] }
\n\n

Estas crates son la base de nuestro bot. teloxide es un potente framework para la API de Telegram, y reqwest nos permitirá hacer solicitudes HTTP (por ejemplo, a APIs externas).

\n\n

Obtenemos el token y escribimos el «esqueleto» del bot

\n\n

Ve a @BotFather, crea un nuevo bot y copia el token. Guárdalo en una variable de entorno:

\n\n
export TELOXIDE_TOKEN=tu_token_aqui
\n\n

Ahora escribamos la versión más simple del bot, que responde al comando /start:

\n\n
use teloxide::prelude::*;\n\n#[tokio::main]\nasync fn main() {\n    pretty_env_logger::init();\n    log::info!("Iniciando chatbot en Rust...");\n\n    let bot = Bot::from_env();\n\n    teloxide::repl(bot, |bot: Bot, msg: Message| async move {\n        if let Some(text) = msg.text() {\n            if text == "/start" {\n                bot.send_message(msg.chat.id, "¡Hola! Soy un bot en Rust 🦀")\n                    .await?;\n            }\n        }\n        Ok(())\n    })\n    .await;\n}
\n\n

Ejecuta cargo run y escribe al bot /start. Si todo está bien, recibirás un saludo. Observa: escribir un bot en Rust con teloxide requiere mínimo código, pero ofrece máximo rendimiento.

\n\n

¿Cómo funciona?

\n
    \n
  • Bot::from_env() — lee el token de la variable de entorno TELOXIDE_TOKEN.
  • \n
  • teloxide::repl — bucle infinito de procesamiento de mensajes.
  • \n
  • Cada mensaje se pasa a un closure, donde verificamos el texto y enviamos una respuesta.
  • \n
\n\n

Añadimos manejo de comandos y argumentos

\n\n

Una respuesta simple es aburrida. Hagamos un comando /echo que repita el texto del usuario. Para ello, usamos la anotación Command de teloxide:

\n\n
use teloxide::utils::command::BotCommand;\n\n#[derive(BotCommand)]\n#[command(rename = "lowercase", description = "Comandos disponibles:")]\nenum Command {\n    #[command(description = "Mostrar saludo.")]\n    Start,\n    #[command(description = "Repetir tu texto.")]\n    Echo(String),\n}\n\nasync fn answer(bot: Bot, msg: Message, cmd: Command) -> ResponseResult<()> {\n    match cmd {\n        Command::Start => {\n            bot.send_message(msg.chat.id, "¡Hola! Soy un bot eco en Rust.").await?;\n        }\n        Command::Echo(text) => {\n            bot.send_message(msg.chat.id                

Blogs

Book Recommendations