To integrate Sinch SMS into your Go application, start by signing up for a free Sinch account to get your API token, Service Plan ID, and a virtual number for testing. developers.sinch
Setup Steps
Sinch lacks an official Go SDK, so use the REST API with Go’s standard net/http package or a client like github.com/go-resty/resty/v2. github
- Sign up at the Sinch Build Dashboard and navigate to SMS > APIs to copy your Service Plan ID (e.g., “SP123abc”) and API token. developers.sinch
- Install resty:
go get github.com/go-resty/resty/v2. - Ensure your app handles international phone formats (e.g., “+1234567890”).
Sending SMS Example
Use this Go code to send a batch SMS. Replace placeholders with your credentials.
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/go-resty/resty/v2"
)
type BatchRequest struct {
From string `json:"from"`
To []string `json:"to"`
Body string `json:"body"`
}
func main() {
client := resty.New()
servicePlanID := "YOUR_SERVICE_PLAN_ID" // e.g., SP123abc
token := "YOUR_API_TOKEN"
url := fmt.Sprintf("https://us.sms.api.sinch.com/xms/v1/%s/batches", servicePlanID) // Use 'eu' for Europe
reqBody := BatchRequest{
From: "YOUR_SINCH_NUMBER", // e.g., "+15551234567"
To: []string{"+RECIPIENT_NUMBER"}, // e.g., "+1234567890"
Body: "Hello from Go via Sinch!",
}
resp, err := client.R().
SetHeader("Authorization", "Bearer "+token).
SetHeader("Content-Type", "application/json").
SetBody(reqBody).
Post(url)
if err != nil {
log.Fatal(err)
}
var result map[string]interface{}
json.Unmarshal(resp.Body(), &result)
fmt.Printf("Batch ID: %v\n", result["id"])
}
This sends a message and returns a batch ID for tracking. developers.sinch
Key Considerations
Monitor delivery with GET /batches/{batchID} or webhooks for reports. developers.sinch
Test in the free sandbox first; scale by purchasing numbers and checking regional endpoints (US/EU). developers.sinch
For advanced features like groups or MMS, extend the API calls similarly. developers.sinch