¿Por qué Swift es una excelente opción para un chatbot?
\nCuando se trata de crear chatbots, muchos piensan inmediatamente en Python o JavaScript. Y tiene sentido: hay montones de bibliotecas listas y ejemplos. Pero, ¿qué pasa si tu stack es el ecosistema de Apple? ¿O quieres hacer un bot que funcione directamente en el servidor Vapor? ¿O tal vez solo tienes curiosidad por probar Swift fuera del desarrollo de iOS?
\nSwift no solo es sintaxis elegante y seguridad de tipos. También es velocidad ultrarrápida, excelente trabajo con redes y potentes herramientas para el parseo de datos. En este artículo no escribiremos otro bot de "hola mundo". Construiremos paso a paso un bot de Telegram completo en Swift, capaz de responder a comandos, procesar mensajes de texto y parsear JSON. ¡Vamos allá!
\n\n¿Qué necesitamos?
\nAntes de sumergirnos en el código, revisemos las herramientas. Para nuestro proyecto usaremos:
\n- \n
- Swift 5.9+ — la última versión estable. \n
- Foundation — biblioteca integrada para trabajar con redes y JSON. \n
- Telegram Bot API — la API REST que necesitaremos consultar. \n
- Biblioteca SwiftBot — un envoltorio ligero para trabajar con Telegram (o escribiremos nuestro propio cliente mínimo). \n
Si quieres seguir el camino del máximo control, usaremos solo las herramientas estándar de Foundation. Sin dependencias externas — solo Swift puro.
\n\nPaso 1: Registramos el bot con BotFather
\nEste es el paso más sencillo. Abrimos Telegram, buscamos a BotFather, escribimos /newbot y seguimos las instrucciones. Al final obtendrás un token — una cadena larga como 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Guárdalo en una variable de entorno o en un archivo de configuración. Nunca incrustes el token directamente en el código si planeas subir el proyecto a GitHub.
El token es la clave de acceso a tu bot. A través de él enviaremos solicitudes a la API de Telegram.
\n\nPaso 2: Creamos la estructura para trabajar con la API
\nPara empezar, necesitamos escribir un cliente HTTP simple. La API de Telegram funciona mediante solicitudes GET y POST. Usaremos URLSession — la herramienta estándar de Swift para trabajar con redes.
Creamos la clase base BotClient
\nimport Foundation\n\nclass BotClient {\n private let token: String\n private let baseURL = "https://api.telegram.org/bot"\n \n init(token: String) {\n self.token = token\n }\n \n // Método para enviar solicitudes\n private func sendRequest(method: String, parameters: [String: Any] = [:], completion: @escaping (Data?, Error?) -> Void) {\n let urlString = "\\(baseURL)\\(token)/\\(method)"\n guard let url = URL(string: urlString) else {\n completion(nil, NSError(domain: "Invalid URL", code: -1))\n return\n }\n \n var request = URLRequest(url: url)\n request.httpMethod = "POST"\n request.setValue("application/json", forHTTPHeaderField: "Content-Type")\n \n if !parameters.isEmpty {\n request.httpBody = try? JSONSerialization.data(withJSONObject: parameters)\n }\n \n let task = URLSession.shared.dataTask(with: request) { data, response, error in\n completion(data, error)\n }\n task.resume()\n }\n \n // Obtenemos actualizaciones (nuevos mensajes)\n func getUpdates(offset: Int? = nil, completion: @escaping ([Update]?) -> Void) {\n var params: [String: Any] = [:]\n if let offset = offset {\n params["offset"] = offset\n }\n \n sendRequest(method: "getUpdates", parameters: params) { data, error in\n guard let data = data else {\n completion(nil)\n return\n }\n \n do {\n let response = try JSONDecoder().decode(TelegramRespons