إرسال الرسائل النصية القصيرة (SMS) باستخدام Go (Golang): مكتبات API golang-sms

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إرسال الرسائل النصية القصيرة (SMS) باستخدام Go (Golang): مكتبات API للعمل مع بوابات SMS



في تطوير الويب الحديث، لا يزال إرسال رسائل SMS وظيفة مطلوبة: المصادقة الثنائية، الإشعارات، الحملات التسويقية. لغة Go (Golang) بفضل أدائها وبساطتها مثالية لإنشاء الخدمات المصغرة المسؤولة عن إرسال الرسائل. في هذه المقالة، سنشرح كيفية الاتصال ببوابة SMS عبر API باستخدام المكتبة القياسية net/http والحزم الشائعة للعمل مع طلبات HTTP.



اختيار النهج: المكتبة القياسية مقابل الأطر (Frameworks)



توفر Go مكتبة قياسية قوية تكفي للعمل مع أي REST API. لإرسال SMS، لا حاجة لتثبيت أطر ثقيلة — فقط الحزمة المدمجة net/http تكفي. ومع ذلك، للراحة، سننظر أيضًا في استخدام مكتبة resty التي تبسط إنشاء الطلبات.



الهيكل الأساسي لطلب HTTP بلغة Go



أي بوابة SMS تستقبل طلب POST مع نص JSON. لنلق نظرة على مثال لإرسال رسالة عبر خدمة افتراضية 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("+79123456789", "رسالة اختبارية", "your-api-key-123") if err != nil { fmt.Printf("خطأ: %v", err) return } fmt.Printf("الحالة: %s, الرسالة: %s", resp.Status, resp.Message)}


استخدام مكتبة resty لتبسيط الكود



مكتبة go-resty/resty/v2 تقلل بشكل كبير من حجم الكود التكراري (boilerplate). التثبيت:



go get github.com/go-resty/resty/v2


مثال لإرسال SMS باستخدام resty:



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("+79123456789", "مرحباً من Go!", "my-secret-key") if err != nil { fmt.Prin

توصيات