Go (Golang) में SMS भेजना: SMS गेटवे के लिए API लाइब्रेरी
आधुनिक वेब डेवलपमेंट में SMS भेजना एक ज़रूरी फीचर है: टू-फ़ैक्टर ऑथेंटिकेशन, नोटिफिकेशन, मार्केटिंग कैंपेन। Go (Golang) अपनी परफॉरमेंस और सादगी के कारण मैसेज भेजने वाले माइक्रोसर्विसेज बनाने के लिए परफेक्ट है। इस आर्टिकल में हम सीखेंगे कि स्टैंडर्ड net/http लाइब्रेरी और लोकप्रिय HTTP पैकेज का उपयोग करके SMS गेटवे से कैसे जुड़ें।
सही तरीका चुनें: स्टैंडर्ड लाइब्रेरी बनाम फ्रेमवर्क
Go की स्टैंडर्ड लाइब्रेरी इतनी पावरफुल है कि किसी भी REST API के साथ काम करने के लिए काफी है। SMS भेजने के लिए भारी फ्रेमवर्क इंस्टॉल करने की ज़रूरत नहीं — बिल्ट-इन net/http पैकेज ही काफी है। हालांकि, सुविधा के लिए हम resty लाइब्रेरी का भी उपयोग करेंगे, जो रिक्वेस्ट बनाने को आसान बनाती है।
Go में HTTP रिक्वेस्ट की बेसिक स्ट्रक्चर
कोई भी SMS गेटवे JSON बॉडी के साथ POST रिक्वेस्ट स्वीकार करता है। आइए एक काल्पनिक sms-provider.com सर्विस के माध्यम से मैसेज भेजने का उदाहरण देखें:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
)
type SMSRequest struct {
Phone string `json:"phone"`
Message string `json:"message"`
APIKey string `json:"api_key"`
}
type SMSResponse struct {
Status string `json:"status"`
Message string `json:"message"`
}
func sendSMS(phone, message, apiKey string) (*SMSResponse, error) {
url := "https://api.sms-provider.com/v1/send"
reqBody := SMSRequest{
Phone: phone,
Message: message,
APIKey: apiKey,
}
jsonData, err := json.Marshal(reqBody)
if err != nil {
return nil, fmt.Errorf("JSON सीरियलाइज़ेशन में त्रुटि: %w", err)
}
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Post(url, "application/json", bytes.NewBuffer(jsonData))
if err != nil {
return nil, fmt.Errorf("HTTP रिक्वेस्ट में त्रुटि: %w", err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("रिस्पॉन्स पढ़ने में त्रुटि: %w", err)
}
var smsResp SMSResponse
if err := json.Unmarshal(body, &smsResp); err != nil {
return nil, fmt.Errorf("रिस्पॉन्स पार्स करने में त्रुटि: %w", err)
}
return &smsResp, nil
}
func main() {
resp, err := sendSMS("+919123456789", "टेस्ट मैसेज", "your-api-key-123")
if err != nil {
fmt.Printf("त्रुटि: %v\n", err)
return
}
fmt.Printf("स्थिति: %s, संदेश: %s\n", resp.Status, resp.Message)
}
resty लाइब्रेरी से कोड को आसान बनाएं
go-resty/resty/v2 लाइब्रेरी boilerplate कोड को काफी कम कर देती है। इंस्टॉलेशन:
go get github.com/go-resty/resty/v2
resty के साथ SMS भेजने का उदाहरण:
package main
import (
"fmt"
"github.com/go-resty/resty/v2"
)
type SMSResponse struct {
Status string `json:"status"`
Message string `json:"message"`
}
func sendSMSResty(phone, message, apiKey string) (*SMSResponse, error) {
client := resty.New()
resp, err := client.R().
SetHeader("Content-Type", "application/json").
SetBody(map[string]interface{}{
"phone": phone,
"message": message,
"api_key": apiKey,
}).
SetResult(&SMSResponse{}).
Post("https://api.sms-provider.com/v1/send")
if err != nil {
return nil, fmt.Errorf("रिक्वेस्ट में त्रुटि: %w", err)
}
return resp.Result().(*SMSResponse), nil
}
func main() {
resp, err := sendSMSResty("+919123456789", "Go से नमस्ते!", "my-secret-key")
if err != nil {
fmt.Printf("त्रुटि: %v\n", err)
return
}
fmt.Printf("जवाब: %+v\n", resp)
}