Por que Swift é uma excelente escolha para um chatbot?
\nQuando se fala em criar chatbots, muitos pensam imediatamente em Python ou JavaScript. E isso é lógico: há toneladas de bibliotecas prontas e exemplos. Mas e se sua stack for o ecossistema Apple? Ou se você quiser fazer um bot que funcione diretamente no servidor Vapor? Ou talvez você só queira experimentar Swift fora do desenvolvimento iOS?
\nSwift não é apenas sintaxe bonita e segurança de tipos. É também velocidade relâmpago, excelente trabalho com rede e ferramentas poderosas para parsing de dados. Neste artigo, não vamos escrever mais um bot "olá-mundo". Vamos montar passo a passo um Telegram bot completo em Swift, que sabe responder a comandos, processar mensagens de texto e fazer parsing de JSON. Vamos nessa!
\n\nO que vamos precisar?
\nAntes de mergulhar no código, vamos entender as ferramentas. Para nosso projeto, usaremos:
\n- \n
- Swift 5.9+ — a versão estável mais recente. \n
- Foundation — biblioteca embutida para trabalhar com rede e JSON. \n
- Telegram Bot API — a REST API que precisaremos acessar. \n
- Biblioteca SwiftBot — um wrapper leve para trabalhar com Telegram (ou escreveremos nosso próprio cliente mínimo). \n
Se você quiser seguir pelo caminho do controle máximo, usaremos apenas os recursos padrão do Foundation. Nenhuma dependência de terceiros — apenas Swift puro.
\n\nPasso 1: Registramos o bot no BotFather
\nEste é o passo mais simples. Abra o Telegram, encontre o BotFather, digite /newbot e siga as instruções. No final, você receberá um token — uma string longa como 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Salve-o em uma variável de ambiente ou arquivo de configuração. Nunca coloque o token diretamente no código se planeja publicar o projeto no GitHub.
O token é a chave de acesso ao seu bot. Através dele, enviaremos requisições para a Telegram API.
\n\nPasso 2: Criamos a estrutura para trabalhar com a API
\nPara começar, precisamos escrever um cliente HTTP simples. A Telegram API funciona com requisições GET e POST. Usaremos URLSession — a ferramenta padrão do Swift para trabalhar com rede.
Criamos a classe 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 requisições\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 // Obtemos atualizações (novas mensagens)\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