¡Hola a todos! Sigo compartiendo alguna experiencia, pensamiento u opinión sobre la tecnología en el campo de la ingeniería de software. Anteriormente, compartí cómo construir un simple Chatbot en Messenger usando Golang. Si quieres leerlo no dudes en acceder al artículo.
Sin embargo, en este artículo, quiero compartir cómo implementarlo en otra app de mensajería, por lo que en este caso voy a hablar de Telegram! Por supuesto, ¡todavía usando Golang para el backend!
Para dar un poco de contexto a lo que debemos hacer, aquí hay varios puntos que vamos a manejar:
- Tener una cuenta de Telegram o crear una nueva.
- Crear un Bot usando Bot Father.
- Configurar los ajustes del webhook en el Bot creado.
- Crear un servidor de webhooks.
Tabla de contenidos
Diseño de la arquitectura
Para recibir un mensaje enviado por el usuario final a Telegram, necesitamos proporcionar un servidor de Webhooks con REST API. El diseño de la arquitectura será como este diagrama:
Cuenta de Telegram
El requisito básico es tener una cuenta de Telegram. Para darse de alta en Telegram, hay que buscar la aplicación en Play Store / App Store o simplemente abrir este enlace: https://telegram.org/apps y elegir la aplicación móvil en función del dispositivo que estemos utilizando.
Nota: para darse de alta en telegram necesitamos un número de teléfono activo.
Crear un Bot con Bot Father
Después de terminar el registro de la cuenta, el siguiente paso es crear el Bot usando Bot Father. Podemos buscar el Bot desde la aplicación móvil o simplemente abrir este enlace: https://telegram.me/BotFather y luego abrirlo en la aplicación móvil o en la web.
Para conocer la lista de comandos, podemos enviar un mensaje /start al Padre Bot y nos responderá con un mensaje como el de la imagen anterior.
Crear un nuevo bot es muy sencillo. Sólo tienes que escribir /newbot y luego poner el nombre del bot. No olvides que para que el nombre sea válido, el nombre del bot debe terminar con «Bot». Cuando se haya creado con éxito, el BotFather enviará un mensaje con el token que se puede utilizar para acceder a la API de Telegram. Asegúrate de guardar este token en un lugar seguro.
Webhook
En la primera fase, podemos crear un simple Webhook para imprimir los datos de la solicitud y ver qué datos reales envía Telegram.
Debido a que usaremos Go para este tutorial, es mejor que conozcas esta plataforma con la información que te muestro en este enlace. El ejemplo del código Go lo puedes consultar en este enlace.
En realidad, necesitamos implementar el Webhook en vivo que puede recibir eventos de webhook desde la Plataforma Telegram. El código debe estar alojado en un servidor HTTPS público. Pero podemos hacerlo localmente y hacer un túnel desde la URL pública hasta nuestro localhost usando ngrok. Para instalar y usar ngrok, consulte este enlace.
Primero, ejecuta el servidor Webhook usando este comando:
go run .
El Webhook se ejecutará en el puerto 3000.
2022/09/05 17:53:20 http server listening at localhost:3000
Como ves, habilitar el túnel es muy fácil, solo tienes que ejecutar este comando:
ngrok http 3000
Si ngrok habilita con éxito el túnel, la salida se verá así:
Para probar este webhook, podemos establecer la URL de ngrok en la configuración del bot llamando a la API de Telegram. Aquí está el rizo para actualizar la URL de Webhook:
curl --location --request POST 'https://api.telegram.org/bot${BOT_TOKEN}/SetWebhook' \--header 'Content-Type: application/x-www-form-urlencoded' \--data-urlencode 'url=https://3391-126-117-109-73.ngrok.io'
Please change the ${BOT_TOKEN}
with the token that we get after creating a new Bot.
Si el Webhook se establece correctamente, debería devolver este JSON:
{ "ok": true, "result": true, "description": "Webhook was set" }
El siguiente paso es buscar el Bot que hemos creado, y simplemente hacer clic en el botón START para activar el mensaje.
Si la consola recibió este tipo de mensaje, significa que la configuración de Webhook es correcta y el código de webhook está funcionando.
Modificar Webhook
Para enviar un mensaje a un usuario concreto, solo tenemos que llamar a la API de Telegram con un token y especificar el id del usuario y el mensaje. Modificaremos el código para que siempre se envíe un mensaje de respuesta estático cuando enviemos algo. El código final tendrá este aspecto (asegúrate de sustituir la const ACCESS_TOKEN por el token real). Puedes ver el código aquí.
El código anterior es solo un simple Chatbot que siempre enviará mensajes de «Responder automáticamente 🙌🏻» sea cual sea el tipo de mensajes que se envíen por parte del usuario (texto, pegatina, emoji, gif, archivos). Aquí está el resultado del código final, ¡después de enviar el mensaje recibimos la respuesta! ¡Sí, está funcionando!
Token secreto de Webhook
Con la implementación actual, todos los que conozcan nuestra URL de Webhook pueden acceder a ella libremente. Para asegurar esto, Telegram tiene una nueva actualización aquí: https://core.telegram.org/bots/api#june-20-2022
Con secret_token como parámetro opcional, podemos elegir establecerlo o no en el método setWebhook. Cuando configuramos el secret_token, podemos verificar la solicitud entrante mirando el encabezado X-Telegram-Bot-Api-Secret-Token.
Final
Construir un chabot para la plataforma de Telegram es muy simple porque no hay un gran esfuerzo a partir de crear un bot y configurar la URL de Webhook. Además, no hay limitación para que creemos el bot para que podamos probar fácilmente nuestro Chatbot.
Aunque el alcance de este artículo se limita a responder al mensaje, hay muchas funciones de Telegram disponibles, ¡así que espero que puedas explorar más por ti mismo!
¡Gracias por leer! ¡Espero que este artículo sea útil para ti!