Criando um chatbot em Swift: da ideia ao primeiro diálogo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que Swift é uma excelente escolha para um chatbot?

\n

Quando 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?

\n

Swift 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\n

O que vamos precisar?

\n

Antes 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
\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\n

Passo 1: Registramos o bot no BotFather

\n

Este é 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.

\n

O token é a chave de acesso ao seu bot. Através dele, enviaremos requisições para a Telegram API.

\n\n

Passo 2: Criamos a estrutura para trabalhar com a API

\n

Para 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.

\n\n

Criamos a classe base BotClient

\n
import 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                

Blogs

Book Recommendations