إرسال SMS باستخدام Go (Golang): التكامل مع مكتبة API

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

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

ابدأ الدورة

إرسال SMS باستخدام Go (Golang): التكامل مع مكتبة API



في العالم الحديث، تظل وظيفة إرسال رسائل SMS مطلوبة للتحقق من المستخدمين والإشعارات والحملات التسويقية. باستخدام Go (Golang)، يمكن تحقيق ذلك بسهولة وكفاءة بفضل الأدوات المدمجة للعمل مع HTTP وJSON. في هذه المقالة، سنشرح كيفية كتابة مكتبة خاصة بك لإرسال SMS عبر REST API باستخدام Go. سيتم بناء المثال على مزود افتراضي، لكن الكود قابل للتكيف بسهولة مع أي خدمة (Twilio، SMS.ru، Vonage وغيرها).



هندسة المكتبة

ستتكون مكتبتنا من المكونات التالية:

  • عميل لطلبات HTTP مع دعم المهلات وإعادة المحاولة
  • هياكل للطلب (الرقم، النص، المرسل) والرد (الحالة، معرف الرسالة، الخطأ)
  • دالة تهيئة مع مفتاح API وعنوان URL أساسي
  • طريقة SendSMS لإرسال رسالة واحدة


التثبيت والتحضير

للعمل، ستحتاج فقط إلى المكتبة القياسية لـ Go (net/http, encoding/json). لا حاجة لأي تبعيات خارجية. قم بإنشاء ملف sms.go وأضف الحزمة:

package smsclient

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


هياكل البيانات

سنحدد الأنواع للطلب والرد:

// SMSRequest يمثل جسم الطلب إلى APItype SMSRequest struct {    To      string `json:"to"`      // رقم المستلم بالتنسيق الدولي    Text    string `json:"text"`    // نص الرسالة    Sender  string `json:"sender"`  // اسم المرسل (الاسم الأبجدي)}

// SMSResponse يحتوي على نتيجة الإرسالtype SMSResponse struct { Success bool `json:"success"` MessageID string `json:"message_id,omitempty"` Error string `json:"error,omitempty"`}


عميل للعمل مع API

سننشئ هيكل العميل مع التهيئة:

// Client يدير إرسال SMS عبر APItype Client struct {    apiKey    string    baseURL   string    httpClient *http.Client}

// NewClient ينشئ مثيلاً جديداً للعميلfunc NewClient(apiKey, baseURL string) *Client { return &Client{ apiKey: apiKey, baseURL: baseURL, httpClient: &http.Client{ Timeout: 10 * time.Second, }, }}


طريقة إرسال SMS

سننفذ المنطق الرئيسي — إرسال طلب POST مع جسم JSON:

// SendSMS يرسل SMS ويعيد الرد من APIfunc (c *Client) SendSMS(req SMSRequest) (*SMSResponse, error) {    // 1. تسلسل الطلب إلى JSON    body, err := json.Marshal(req)    if err != nil {        return nil, fmt.Errorf("خطأ في تسلسل الطلب: %w", err)    }

// 2. إنشاء طلب HTTP httpReq, err := http.NewRequest("POST", c.baseURL+"/sms/send", bytes.NewBuffer(body)) if err != nil { return nil, fmt.Errorf("خطأ في إنشاء الطلب: %w", err) }

// 3. تعيين الرؤوس httpReq.Header.Set("Content-Type", "application/json") httpReq.Header.Set("Authorization", "Bearer "+c.apiKey)

// 4. تنفيذ الطلب resp, err := c.httpClient.Do(httpReq) if err != nil { return nil, fmt.Errorf("خطأ في تنفيذ الطلب: %w", err) } defer resp.Body.Close()

// 5. فك تشفير الرد var smsResp SMSResponse if err := json.NewDecoder(resp.Body).Decode(&smsResp); err != nil { return nil, fmt.Errorf("خطأ في فك تشفير الرد: %w", err) }

// 6. التحقق من رمز حالة HTTP if resp.StatusCode != http.StatusOK { return &smsResp, fmt.Errorf("أعاد API الرمز %d: %s", resp.StatusCode, smsResp.Error) }

return &smsResp, nil}


مثال على الاستخدام

الآن سنعرض كيفية تطبيق المكتبة في كود حقيقي:

package main

impo

توصيات