A medida que el mundo se vuelve más y más agéntico, hay que estar donde están tus usuarios, y eso generalmente significa ofrecerles una UX pulida en las plataformas de comunicación que usan a diario:

  • WhatsApp
  • Email
  • Telegram
  • Discord
  • Slack

Agregar una experiencia de chatbot a interfaces de chat suele ser bastante sencillo. Elijo uno de los clientes LLM existentes, agrego mi API Key, un buen system prompt y dejo que los usuarios charlen. Sin embargo, las cosas se complican rápido si el agente necesita realmente hacercosas, sobre todo cuando necesita hacer cosas en nombre de mis usuarios. De repente, tengo que manejar no solo las interacciones con el LLM, sino también el tool calling y la autenticación y autorización de cada herramienta que los usuarios necesitan. Todo eso mientras pienso en las consideraciones de UX específicas de ese canal de comunicación. Escalar esto para estar donde sea que estén mis usuarios claramente no es fácil.

Por suerte, Arcade.dev ofrece un enfoque agentic-first que me permite delegar esa complejidad a la “capa agéntica” y enfocarme en pulir la UX.

Publiqué un video donde rediseño un bot de Telegram pensado para agendar eventos en Google Calendar a partir de lenguaje natural, usando el LLM rápido de Groq. La implementación original, aunque funcional, es un ejemplo claro de la complejidad de la arquitectura “tradicional” de agentes. Al integrar el cliente de Arcade reduje un poco las líneas de código (lo cual siempre se agradece), pero lo más importante es que eliminé la necesidad de mantener las integraciones de auth y Google API para el bot.

El “Antes”: Código pequeño pero con señales de complejidad creciente

La configuración inicial incluye:

  1. Framework del bot de Telegram: Manejo de mensajes entrantes e interacciones con el usuario.
  2. Llamadas a la API de Groq: Enviar el input del usuario al LLM para reconocimiento de intenciones y extracción de entidades (fechas, horas, títulos de eventos).
  3. API de Google Calendar: La verdadera bestia. Esto requería:
    • Implementar el flujo completo de OAuth 2.0 para obtener permiso del usuario.
    • Almacenar de forma segura los tokens de acceso y de actualización.
    • Manejar la expiración de tokens y la lógica de actualización.
    • Hacer llamadas cuidadosamente construidas a la API para listar calendarios, verificar disponibilidad y crear eventos.
    • Parsear las respuestas frecuentemente complejas de la API de Google.

Cada pieza es manejable por separado, pero conectarlas puede volverse frágil a medida que el sistema crece. El auth, en particular, puede ser una fuente constante de bugs y problemas de seguridad. Depurar implica rastrear llamadas en múltiples servicios. ¿Y adaptar todo esto para otra plataforma como Slack o WhatsApp? Ahí es donde escalar el producto se convierte en un problema.

Este es un código pequeño y ya la complejidad arquitectónica es alta, especialmente si planeamos soportar más plataformas en el futuro.

El “Después”: Arquitectura enfocada

A nivel superficial, los cambios no son muy dramáticos:

const authArcade = async (chatId: number): Promise<{ logged_in: boolean, url: string }> => {
    const authResponse = await arcade.auth.start(
        chatId.toString(),
        "google",
        {
            scopes: ["https://www.googleapis.com/auth/calendar.readonly", "https://www.googleapis.com/auth/userinfo.email"],
        }
    )
    if (authResponse.status !== "completed") {
        return { logged_in: false, url: authResponse.url || "ERROR: No URL returned" };
    }
    return { logged_in: true, url: "" };
}

(sí, eso es todo el auth)

Los resultados: Mucho más que menos líneas de código

Sí, la cantidad de líneas bajó, lo cual siempre es satisfactorio. Pero el verdadero logro fue la reducción de complejidad:

  1. Arquitectura simplificada: Toda la carga del OAuth y la interacción directa con la API de Google Calendar desapareció, abstraída por el cliente de Arcade.
  2. Mayor mantenibilidad: La lógica central del bot es ahora mucho más limpia y fácil de entender. Depurar es más simple porque la interacción con herramientas externas ocurre a través de una sola interfaz consistente. El mantenedor puede enfocarse únicamente en mejorar la UX de esta plataforma sin preocuparse por romper el auth o el tool calling del agente.
  3. Extensibilidad sin esfuerzo: Esto es enorme. ¿Quieres agregar soporte para Slack o WhatsApp? La lógica que interactúa con Groq y Google Calendar a través del cliente de Arcade no necesita cambiar. Solo hay que manejar el input/output de mensajes de la nueva plataforma. Arcade proporciona el puente estable hacia las herramientas, sin importar el frontend.

Conclusión: Enfócate en el valor, no en la fontanería

Al reemplazar el manejo complejo y personalizado de la API y la autenticación con el cliente de Arcade.dev, transformé el código original en algo más ágil y adaptable, menos propenso a la complejidad creciente. Me permitió enfocarme en el valor central del agente (entender las solicitudes del usuario e interactuar con su calendario) en lugar de perderme en la fontanería de las integraciones con servicios externos.

Puedes probar el bot tú mismo creando una cuenta en Arcade, y clonando el repositorio. ¡Buena suerte construyendo!