Envío de SMS en Go (Golang): integración con API de biblioteca

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Envío de SMS en Go (Golang): integración con API de biblioteca



En el mundo moderno, el envío de mensajes SMS sigue siendo una función demandada para la verificación de usuarios, notificaciones y campañas de marketing. En Go (Golang) esto se implementa de manera fácil y eficiente gracias a las herramientas integradas para trabajar con HTTP y JSON. En este artículo, analizaremos cómo escribir una biblioteca propia para enviar SMS a través de una API REST, usando Go. El ejemplo se basará en un proveedor abstracto, pero el código se adapta fácilmente a cualquier servicio (Twilio, SMS.ru, Vonage, etc.).



Arquitectura de la biblioteca

Nuestra biblioteca constará de los siguientes componentes:

  • Cliente para solicitudes HTTP con soporte de tiempos de espera y reintentos
  • Estructuras para la solicitud (número, texto, remitente) y la respuesta (estado, ID del mensaje, error)
  • Función de inicialización con clave API y URL base
  • Método SendSMS para enviar un solo mensaje


Instalación y preparación

Para trabajar solo se necesita la biblioteca estándar de Go (net/http, encoding/json). No se requieren dependencias externas. Cree un archivo sms.go e incluya el paquete:

package smsclient

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


Estructuras de datos

Definamos los tipos para la solicitud y la respuesta:

// SMSRequest representa el cuerpo de la solicitud a la APItype SMSRequest struct {    To      string `json:"to"`      // Número del destinatario en formato internacional    Text    string `json:"text"`    // Texto del mensaje    Sender  string `json:"sender"`  // Nombre del remitente (nombre alfa)}

// SMSResponse contiene el resultado del envíotype SMSResponse struct { Success bool `json:"success"` MessageID string `json:"message_id,omitempty"` Error string `json:"error,omitempty"`}


Cliente para trabajar con la API

Creemos la estructura del cliente con configuración:

// Client gestiona el envío de SMS a través de la APItype Client struct {    apiKey    string    baseURL   string    httpClient *http.Client}

// NewClient crea una nueva instancia del clientefunc NewClient(apiKey, baseURL string) *Client { return &Client{ apiKey: apiKey, baseURL: baseURL, httpClient: &http.Client{ Timeout: 10 * time.Second, }, }}


Método de envío de SMS

Implementemos la lógica principal: enviar una solicitud POST con cuerpo JSON:

// SendSMS envía un SMS y devuelve la respuesta de la APIfunc (c *Client) SendSMS(req SMSRequest) (*SMSResponse, error) {    // 1. Serializamos la solicitud a JSON    body, err := json.Marshal(req)    if err != nil {        return nil, fmt.Errorf("error de marshaling de la solicitud: %w", err)    }

// 2. Creamos la solicitud HTTP httpReq, err := http.NewRequest("POST", c.baseURL+"/sms/send", bytes.NewBuffer(body)) if err != nil { return nil, fmt.Errorf("error al crear la solicitud: %w", err) }

// 3. Establecemos los encabezados httpReq.Header.Set("Content-Type", "application/json") httpReq.Header.Set("Authorization", "Bearer "+c.apiKey)

// 4. Ejecutamos la solicitud resp, err := c.httpClient.Do(httpReq) if err != nil { return nil, fmt.Errorf("error al ejecutar la solicitud: %w", err) } defer resp.Body.Close()

// 5. Decodificamos la respuesta var smsResp SMSResponse if err := json.NewDecoder(resp.Body).Decode(&smsResp); err != nil { return nil, fmt.Errorf("error al decodificar la respuesta: %w", err) }

// 6. Verificamos el código de estado HTTP if resp.StatusCode != http.StatusOK { return &smsResp, fmt.Errorf("la API devolvió el código %d: %s", resp.StatusCode, smsResp.Error) }

return &smsResp, nil}


Ejemplo de uso

Ahora mostremos cómo aplicar la biblioteca en código real:

package main

impo

Recommendations