Por qué Go es el lenguaje ideal para bots de Telegram
Si alguna vez has escrito bots en Python, sabes que todo funciona hasta que te topas con el rendimiento. Go resuelve este problema a nivel de arquitectura. Es rápido, liviano y no requiere un entorno virtual. Un bot de Telegram en Go no es solo un juguete, sino un servicio completo que soporta miles de solicitudes por segundo y consume muy poca memoria.
En este artículo crearemos desde cero un bot en Golang que responderá a comandos, procesará mensajes e incluso trabajará con una API externa. Sin teoría innecesaria, solo código que puedes ejecutar de inmediato.
Paso 1: Preparación del entorno
Antes de escribir un bot de Telegram en Go, asegúrate de tener instalado Go versión 1.20 o superior. Puedes verificarlo con el comando:
go versionSi Go no está instalado, descárgalo desde el sitio oficial. La instalación toma 2 minutos.
También necesitarás un token de bot. Entra en Telegram, busca a BotFather y ejecuta el comando:
/newbotIngresa el nombre y el nombre de usuario del bot. Después de la creación, BotFather te enviará un token: guárdalo, lo necesitarás para conectarte a la API de Telegram Bot.
Paso 2: Estructura del proyecto
Crea una carpeta para el proyecto e inicializa el módulo:
mkdir my-telegram-botcd my-telegram-botgo mod init my-telegram-botPara trabajar con Telegram usaremos la librería tgbotapi, que es la librería de Go para Telegram más popular. Instálala:
go get github.com/go-telegram-bot-api/telegram-bot-api/v5Ahora crea el archivo main.go. La estructura básica será la siguiente:
package main
import ( "log" "os" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5")
func main() { token := os.Getenv("TELEGRAM_BOT_TOKEN") bot, err := tgbotapi.NewBotAPI(token) if err != nil { log.Panic(err) }
bot.Debug = true log.Printf("Bot @%s iniciado", bot.Self.UserName)
u := tgbotapi.NewUpdate(0) u.Timeout = 60
updates := bot.GetUpdatesChan(u)
for update := range updates { if update.Message != nil { log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text) msg := tgbotapi.NewMessage(update.Message.Chat.ID, "¡Hola! ¡Estoy funcionando en Go!") bot.Send(msg) } }}Ejecuta el bot:
export TELEGRAM_BOT_TOKEN="tu_token"go run main.goEscríbele al bot en Telegram; debería responder. Si todo funciona, pasamos al siguiente paso.
Paso 3: Manejo de comandos
Simplemente responder "Hola" es aburrido. Agreguemos manejo de comandos para el bot de Telegram. Implementaremos los comandos /start y /help:
for update := range updates { if update.Message != nil { switch update.Message.Command() { case "start": msg := tgbotapi.NewMessage(update.Message.Chat.ID, "¡Bienvenido! Soy un bot en Go. Usa /help para la lista de comandos.") bot.Send(msg) case "help": msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Comandos disponibles:/start - saludo/help - ayuda/echo - repetir mensaje") bot.Send(msg) default: msg := tgbotapi.NewMessage(update.Message.Chat.ID, "Comando desconocido. Usa /help") bot.Send(msg) } }}Ahora el bot reacciona a los comandos. Pero esto es solo el comienzo. El verdadero poder de un bot de Telegram en Golang está en el rendimiento al trabajar con grandes cargas.
Paso 4: Trabajo con una API externa
Añadamos una función útil