Envio de SMS em Go (Golang): visão geral das bibliotecas de API e exemplos de implementação
O envio de mensagens SMS é uma das funções-chave dos aplicativos web modernos: desde a autenticação de dois fatores até notificações de status de pedidos. No ecossistema Go (Golang), existem várias bibliotecas maduras que permitem integrar o envio de SMS através de gateways populares (Twilio, Vonage, Clickatell, provedores russos). Neste artigo, vamos detalhar como configurar o envio de SMS em Go, usando as melhores práticas e APIs oficiais.
Por que Go para envio de SMS?
Go é uma linguagem compilada com excelente suporte para concorrência, ideal para o envio assíncrono de um grande número de mensagens. Graças às goroutines e canais integrados, você pode processar milhares de solicitações SMS sem bloquear o fluxo principal. Além disso, a biblioteca padrão net/http permite trabalhar facilmente com APIs REST de qualquer provedor de SMS.
Principais bibliotecas para trabalhar com SMS em Go
- twilio-go — cliente oficial para Twilio (o serviço internacional mais popular). Suporta SMS, MMS, chamadas de voz.
- vonage-go (antigo Nexmo) — cliente para a API Vonage.
- go-sms — biblioteca universal com suporte para vários provedores (SMS.ru, Twilio, Clickatell).
- gosms — wrapper simples para requisições HTTP a qualquer gateway SMS.
Instalação da biblioteca
Como exemplo, usaremos o cliente oficial do Twilio. Instale o pacote via go get:
go get github.com/twilio/twilio-goPara o provedor russo SMS.ru, também existe uma biblioteca conveniente:
go get github.com/smsru/smsru-goExemplo básico: envio de SMS via Twilio
Antes de começar, obtenha o Account SID e o Auth Token no console do Twilio. Abaixo está o código mínimo funcional:
package main
import ( "fmt" "os"
"github.com/twilio/twilio-go" openapi "github.com/twilio/twilio-go/rest/api/v2010")
func main() { // Inicialização do cliente client := twilio.NewRestClientWithParams(twilio.ClientParams{ Username: os.Getenv("TWILIO_ACCOUNT_SID"), Password: os.Getenv("TWILIO_AUTH_TOKEN"), })
// Parâmetros da mensagem params := &openapi.CreateMessageParams{} params.SetTo("+1234567890") // número do destinatário params.SetFrom("+0987654321") // seu número Twilio params.SetBody("Olá! Este é um SMS de teste do Go!")
// Envio resp, err := client.Api.CreateMessage(params) if err != nil { fmt.Println("Erro ao enviar:", err) return }
fmt.Println("SMS enviado! SID:", *resp.Sid)}Envio de SMS via gateway russo (SMS.ru)
Para integração com SMS.ru, use a biblioteca smsru-go. O código será assim:
package main
import ( "fmt" "os"
"github.com/smsru/smsru-go")
func main() { // Criação do cliente com a chave da API client := smsru.NewClient(os.Getenv("SMSRU_API_KEY"))
// Envio de uma única mensagem result, err := client.SendSMS("+79991234567", "Olá! Este é um teste do Go!") if err != nil { fmt.Println("Erro:", err) return }
if result.Status == "OK" { fmt.Println("SMS enviado! ID:", result.SmsID) } else { fmt.Println("Erro:", result.StatusText) }}Envio assíncrono usando goroutines
Uma das principais vantagens do Go é a facilidade de enviar SMS em paralelo. Exemplo de envio em massa:
package main
import ( "fmt" "sync")
func sendSMSAsync(client *smsru.Client, phone, message string, wg *sync.WaitGroup) { defer wg.Done() resul