Envio de SMS em Go (Golang): integração com API de biblioteca

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

Envio de SMS em Go (Golang): integração com API de biblioteca



No mundo moderno, o envio de mensagens SMS continua sendo uma função essencial para verificação de usuários, notificações e campanhas de marketing. Em Go (Golang), isso é implementado de forma fácil e eficiente graças às ferramentas integradas para trabalhar com HTTP e JSON. Neste artigo, vamos abordar como escrever sua própria biblioteca para enviar SMS via REST API usando Go. O exemplo será baseado em um provedor abstrato, mas o código pode ser facilmente adaptado para qualquer serviço (Twilio, SMS.ru, Vonage, etc.).



Arquitetura da biblioteca

Nossa biblioteca será composta pelos seguintes componentes:

  • Cliente para requisições HTTP com suporte a timeouts e tentativas repetidas
  • Estruturas para requisição (número, texto, remetente) e resposta (status, ID da mensagem, erro)
  • Função de inicialização com chave de API e URL base
  • Método SendSMS para enviar uma única mensagem


Instalação e preparação

Para funcionar, você só precisa da biblioteca padrão do Go (net/http, encoding/json). Nenhuma dependência externa é necessária. Crie um arquivo sms.go e importe o pacote:

package smsclient

import ( "bytes" "encoding/json" "fmt" "net/http" "time")


Estruturas de dados

Vamos definir os tipos para requisição e resposta:

// SMSRequest representa o corpo da requisição para a APItype SMSRequest struct {    To      string `json:"to"`      // Número do destinatário no formato internacional    Text    string `json:"text"`    // Texto da mensagem    Sender  string `json:"sender"`  // Nome do remetente (alfa-nome)}

// SMSResponse contém o resultado do enviotype SMSResponse struct { Success bool `json:"success"` MessageID string `json:"message_id,omitempty"` Error string `json:"error,omitempty"`}


Cliente para trabalhar com a API

Vamos criar a estrutura do cliente com configuração:

// Client gerencia o envio de SMS via APItype Client struct {    apiKey    string    baseURL   string    httpClient *http.Client}

// NewClient cria uma nova instância do clientefunc NewClient(apiKey, baseURL string) *Client { return &Client{ apiKey: apiKey, baseURL: baseURL, httpClient: &http.Client{ Timeout: 10 * time.Second, }, }}


Método de envio de SMS

Vamos implementar a lógica principal — envio de uma requisição POST com corpo JSON:

// SendSMS envia um SMS e retorna a resposta da APIfunc (c *Client) SendSMS(req SMSRequest) (*SMSResponse, error) {    // 1. Serializa a requisição em JSON    body, err := json.Marshal(req)    if err != nil {        return nil, fmt.Errorf("erro ao serializar requisição: %w", err)    }

// 2. Cria a requisição HTTP httpReq, err := http.NewRequest("POST", c.baseURL+"/sms/send", bytes.NewBuffer(body)) if err != nil { return nil, fmt.Errorf("erro ao criar requisição: %w", err) }

// 3. Define os cabeçalhos httpReq.Header.Set("Content-Type", "application/json") httpReq.Header.Set("Authorization", "Bearer "+c.apiKey)

// 4. Executa a requisição resp, err := c.httpClient.Do(httpReq) if err != nil { return nil, fmt.Errorf("erro ao executar requisição: %w", err) } defer resp.Body.Close()

// 5. Decodifica a resposta var smsResp SMSResponse if err := json.NewDecoder(resp.Body).Decode(&smsResp); err != nil { return nil, fmt.Errorf("erro ao decodificar resposta: %w", err) }

// 6. Verifica o código de status HTTP if resp.StatusCode != http.StatusOK { return &smsResp, fmt.Errorf("API retornou código %d: %s", resp.StatusCode, smsResp.Error) }

return &smsResp, nil}


Exemplo de uso

Agora vamos mostrar como aplicar a biblioteca em código real:

package main

impo

Recommendations