Go یا Golang یک زبان برنامه نویسی متن بازو کامپایل شده است که توسط شرکت گوگل توسعه داده شده است. این زبان برنامه نویسی ، برای توسعه نرم افزار های بزرگ و پیچیده طراحی شده است.
حال اگر شما برنامه نویس زبان Go هستید و یا صاحب نرم افزاری هستید که با زبان Golang توسعه داده شده است و میخواهید با آن پیامک ارسال کنید، این مطلب برای شما مفید است.
در این مقاله دستورالعملی برای استفاده از وبسرویس پیامکی پیام رسان در زبان برنامه نویسی Go را برایتان ارائه دادیم . همچنین در وبسرویس پیامکی پیام رسان با ارائه متد های ارسال پیامک ، دریافت پیامک ، وضعیت پیامک و … می توانید امکانات مختلفی را در نرم افزار خود پیاده کنید.
چگونه از وب سرویس پیامکی پیام رسان استفاده کنیم؟
همانطور که در ویدیو بالا مشاهده می کنید، داکیومنت و Swagger مربوطه به وب سرویس پیامکی پیام رسان برای شما در پنل پیامکی قرار گرفته است . همچنین تیم پشتیبانی فنی در صورت نیاز می توانند شما را در ارسال پیامک با Golang راهنمایی کنید.
حال اگر تصمیم خود را گرفته اید، می توانید از طریق فرم زیر ثبت نام کنید . پس از ثبت نام یک خط هدیه و چند صد پیامک تست در اختیار شما قرار می گیرد تا تست های نرم افزاری خود را به عمل بیاورید.
مراحل ارسال پیامک با GO

- قدم اول: انتخاب وب سرویس پیامکی ای که سرعت بالا ، امکانات زیاد ، خطوط خدماتی ، پشتیبانی فنی و .. داشته باشد که پیشنهاد ما سامانه ارسال پیامک پیام رسان است.
- قدم اول : ورود به سامانه پیامکی پیام رسان و دریافت APIKEY از وبسرویس پیام رسان
- قدم دوم : انتخاب متد پیامکی مورد نظر و استفاده از نمونه کد آماده
- قدم چهارم : تست و رفع خطا
نمونه کد های ارسال پیامک با Go
برای ارسال پیامک از طریق زبان Go و با استفاده از API ارسال پیامک پیام رسان، باید اطلاعات اولیه ای از جمله APIKEY و خط ارسال کننده و … داشته باشید. برای اینکار بهترین راهکار تعریف متغیر می باشد .( اطلاعات زیر نمایشی است و باید حتما از اطلاعات اختصاصی پنل اس ام اس خود استفاده نمایید.)
برای استفاده از این متغیرها در زبان Go، میتوانید به شکل زیر عمل کنید:
package main
import (
"fmt"
)
func main() {
// تعریف متغیرها
apiKey := "YOUR API KEY" // مقدار API Key شما
sender := "YOUR SMS SENDER NUMBER" // شماره فرستنده پیامک شما
baseUrl := "http://api.sms-webservice.com/api/V3/" // آدرس Base URL شما
// حالا میتوانید از این متغیرها در سایر بخشهای کدتان استفاده کنید
fmt.Println("API Key:", apiKey)
fmt.Println("Sender:", sender)
fmt.Println("Base URL:", baseUrl)
}
متد ارسال یک متن به یک یا چند شماره با متد Get (Send )
با این متد و نمونه کد زبان برنامهنویسی Go، میتوانید در یک فراخوانی تا 99 شماره را همزمان پیامک کنید. نیازی به فراخوانی جداگانه برای هر شماره نیست. کافی است شمارهها را به گروههای 99 تایی تقسیم کرده و هر گروه را بهصورت آرایه از طریق Go به وبسرویس پیامکی ارسال کنید.
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://api.sms-webservice.com/api/V3/Send?ApiKey=YourApiKey&Text=YourSMSText&Sender=5000&Recipients=09123456789"
// ارسال درخواست GET
resp, err := http.Get(url)
if err != nil {
fmt.Println("Error:", err)
return
}
defer resp.Body.Close()
// خواندن و نمایش پاسخ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
// بررسی وضعیت پاسخ
if resp.StatusCode == 200 {
fmt.Println("Response:", string(body)) // موفقیت: نمایش پاسخ
} else {
fmt.Println("Error: Status Code", resp.StatusCode) // خطا: نمایش کد وضعیت
}
}
متد ارسال یک متن به یک یا چند شماره با متد post (SendBulk )
کاربرد این متد مشابه متد قبلی است، با این تفاوت که نوع درخواست ارسال پیامک با Go متفاوت است. در متد اول، درخواست شما از نوع GET و در دومی از نوع POST است. درخواستهای POST به دلیل امنیت بالاتر و قابلیت ارسال حجم بیشتری از اطلاعات، انتخاب بهتری برای این منظور هستند.
package main
import (
"fmt"
"net/http"
"strings"
"io/ioutil"
)
func main() {
url := "https://api.sms-webservice.com/api/V3/SendBulk"
payload := "ApiKey=YourApiKey&Text=YourSMSText&Sender=5000&Recipients=09123456789"
// ساخت درخواست POST
req, err := http.NewRequest("POST", url, strings.NewReader(payload))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// تنظیم هدر Content-Type
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
// ارسال درخواست
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
// خواندن و نمایش پاسخ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
// بررسی وضعیت پاسخ
if resp.StatusCode == 200 {
fmt.Println("Response:", string(body)) // موفقیت: نمایش پاسخ
} else {
fmt.Println("Error: Status Code", resp.StatusCode) // خطا: نمایش کد وضعیت
}
}
در این متد یک متن یکسان برای 99 شماره ارسال می شود. اما در متد پایین متن های متفاوت را برای شماره های متفاوت بفرستید .
متد ارسال چند متن به چند گیرنده (SendMultiple)
اگر میخواهید با زبان Go برای هر گیرنده متن جداگانهای ارسال کنید، این متد و نمونه کد مناسب شماست. با استفاده از این متد، نیازی به ارسال درخواست جداگانه برای هر گیرنده نیست و میتوانید پیامکهای خود را در گروههای 100 تایی با یک درخواست به وبسرویس پیامکی ارسال کنید.
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.sms-webservice.com/api/V3/SendMultiple"
// ساختار دادهها برای بدنه JSON
payload := map[string]interface{}{
"ApiKey": "YourApiKey",
"Recipients": []map[string]interface{}{
{
"Sender": 5000,
"Text": "YourSMSText",
"Destination": "09123456789",
"UserTraceId": 0000,
},
},
}
// تبدیل دادهها به فرمت JSON
jsonData, err := json.Marshal(payload)
if err != nil {
fmt.Println("Error marshalling JSON:", err)
return
}
// ساخت درخواست POST
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// تنظیم هدر Content-Type به application/json
req.Header.Set("Content-Type", "application/json")
// ارسال درخواست
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
// خواندن و نمایش پاسخ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
// بررسی وضعیت پاسخ
if resp.StatusCode == 200 {
fmt.Println("Response:", string(body)) // موفقیت: نمایش پاسخ
} else {
fmt.Println("Error: Status Code", resp.StatusCode) // خطا: نمایش کد وضعیت
}
}
متد ارسال به یک شماره با استفاده از الگوی تعریف شده (SendTokenSingle)
اگر برنامهنویس حرفهای باشید، احتمالاً با قابلیت ارسال پیامک از طریق پترن آشنا هستید. این امکان به شما اجازه میدهد تا پیامکها را از سریعترین خط خدماتی ارسال کنید. این قابلیت مناسب پیامکهایی است که باید با سرعت بالا به تمام شمارهها، حتی شمارههای موجود در بلکلیست مخابراتی، ارسال شوند.
برای مثال، میتوانید از این روش برای ارسال پیامکهای کد تایید و احراز هویت کاربران استفاده کنید. با یک کد Go میتوانید از قابلیت پترن پیامرسان بهرهبرداری کنید. برای آشنایی بیشتر با پترن و قالب آن، به ویدیوی اول مقاله مراجعه کنید.
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.sms-webservice.com/api/V3/SendTokenSingle"
// ساخت درخواست GET
req, err := http.NewRequest("GET", url, nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// تنظیم هدرهای سفارشی
req.Header.Set("ApiKey", "YourApiKey")
req.Header.Set("TemplateKey", "YourPattern")
req.Header.Set("Destination", "09123456789")
req.Header.Set("P1", "Param1")
req.Header.Set("P2", "Param2")
req.Header.Set("P3", "Param3")
// ارسال درخواست
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
// خواندن و نمایش پاسخ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
// بررسی وضعیت پاسخ
if resp.StatusCode == 200 {
fmt.Println("Response:", string(body)) // موفقیت: نمایش پاسخ
} else {
fmt.Println("Error: Status Code", resp.StatusCode) // خطا: نمایش کد وضعیت
}
}
متد ارسال یک الگو با متن های مختلف به چند شماره (SendTokenMulti)
اگر میخواهید در برنامه یا وبسایت خود که با زبان Go توسعه دادهاید، از قابلیت پترن برای ارسال پیامکهای مختلف استفاده کنید، این متد مناسب شماست.
package main
import (
"fmt"
"net/http"
"strings"
"io/ioutil"
)
func main() {
url := "https://api.sms-webservice.com/api/V3/SendTokenMulti"
// دادههای فرم URL-encoded
payload := "ApiKey=YourApiKey&TemplateKey=YourPattern&Destination=09123456789&P1=Param1&P2=Param2&P3=Param3"
// ساخت درخواست POST
req, err := http.NewRequest("POST", url, strings.NewReader(payload))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// تنظیم هدر Content-Type
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
// ارسال درخواست
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
// خواندن و نمایش پاسخ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
// بررسی وضعیت پاسخ
if resp.StatusCode == 200 {
fmt.Println("Response:", string(body)) // موفقیت: نمایش پاسخ
} else {
fmt.Println("Error: Status Code", resp.StatusCode) // خطا: نمایش کد وضعیت
}
}
می توانید با یکبار درخواست برای چندین شماره از یک قالب، ارسال پیامک داشته باشید.
متد دریافت لیست الگوهای تعریف شده در پنل (TokenList)
در صورتیکه بخواهید لیست الگوهای تعریف شده در پنل را مشاهده نمایید، می توانید ازین متد استفاده نمایید.
package main
import (
"fmt"
"net/http"
"strings"
"io/ioutil"
)
func main() {
url := "https://api.sms-webservice.com/api/V3/TokenList"
// دادههای فرم URL-encoded
payload := "ApiKey=YourApiKey"
// ساخت درخواست POST
req, err := http.NewRequest("POST", url, strings.NewReader(payload))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// تنظیم هدر Content-Type برای درخواست POST
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
// ارسال درخواست
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
// خواندن و نمایش پاسخ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
// بررسی وضعیت پاسخ
if resp.StatusCode == 200 {
fmt.Println("Response:", string(body)) // موفقیت: نمایش پاسخ
} else {
fmt.Println("Error: Status Code", resp.StatusCode) // خطا: نمایش کد وضعیت
}
}
متد دریافت وضعیت پیام های ارسالی (StatusByTraceId)
زمانیکه بخواهیم پس از ارسال پیام، وضعیت پیام ارسالی را داشته باشیم، و شناسه های پیامک های ارسالی را در اختیار نداشته باشیم، می توانیم ازاین متد استفاده نماییم، در یک درخواست می توان از وضعیت بیش از یک پیام استعلام گرفت.
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.sms-webservice.com/api/V3/StatusByUserTraceId"
// دادههای JSON برای ارسال در درخواست
payload := map[string]interface{}{
"ApiKey": "YourApiKey",
"UserTraceIds": []int{0},
}
// تبدیل payload به JSON
jsonData, err := json.Marshal(payload)
if err != nil {
fmt.Println("Error marshaling JSON:", err)
return
}
// ساخت درخواست POST
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// تنظیم هدر Content-Type برای ارسال JSON
req.Header.Set("Content-Type", "application/json")
// ارسال درخواست
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
// خواندن و نمایش پاسخ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
// بررسی وضعیت پاسخ
if resp.StatusCode == 200 {
fmt.Println("Response:", string(body)) // موفقیت: نمایش پاسخ
} else {
fmt.Println("Error: Status Code", resp.StatusCode) // خطا: نمایش کد وضعیت
}
}
متد دریافت مقدار اعتبار و لیست خطوط ارسال کننده فعال در پنل (AccountInfo)
در صورتیکه بخواهید از مقدار اعتبار باقیمانده در پنل و یا لیست خطوط فعال در پنل خود گزارشی داشته باشید، ازین متد می توانید استفاده نمایید، برای فراخوانی این متد کافیست کد شناسه پنل خود را در بدنه متد ارسال نمایید.
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.sms-webservice.com/api/V3/AccountInfo"
// ساخت درخواست POST
req, err := http.NewRequest("POST", url, nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
// تنظیم هدرهای سفارشی
req.Header.Set("ApiKey", "YourApiKey")
// ارسال درخواست
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error sending request:", err)
return
}
defer resp.Body.Close()
// خواندن و نمایش پاسخ
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
// بررسی وضعیت پاسخ
if resp.StatusCode == 200 {
fmt.Println("Response:", string(body)) // موفقیت: نمایش پاسخ
} else {
fmt.Println("Error: Status Code", resp.StatusCode) // خطا: نمایش کد وضعیت
}
}