مقدمه و قراردادها
در این بخش مفاهیم و قراردادهای کلی مربوط به استفاده از وبسرویس SMS.ir شرح داده میشود. پیش از فراخوانی هر متد، آشنایی با هدرها، کدهای HTTP و مدل پاسخ یکپارچه توصیه میشود.
HTTP Request Header
برای انجام تنظیمات ضروری یا شخصیسازیشده، از هدرهای مشخصشده در جدول زیر استفاده کنید.
| کلید | مقدار | عملکرد |
|---|---|---|
|
ACCEPT
| application/json یا application/xml | دریافت خروجی با فرمت Json یا Xml |
|
X-API-KEY
| کلید تعریفشده در پنل | احراز هویت |
|
Content-Type
| application/json | الزامی برای درخواستهای POST با بدنه JSON |
HTTP Status Code
تمامی درخواستهای ارسالی دارای HTTP Status Codeهای بازگشتی مطابق جدول زیر هستند:
| کد وضعیت | توضیح |
|---|---|
| 200 | عملیات موفقیتآمیز |
| 400 | وقوع خطای منطقی |
| 401 | وجود خطا در فرآیند احراز هویت |
| 429 | تعداد درخواست غیرمجاز (Rate Limit) |
| 500 | خطای غیرمنتظره سمت سرور |
Unix Time
مدل بازگشتی (Global Response)
تمامی درخواستهای ارسالی دارای مدل بازگشتی یکپارچه با ساختار زیر میباشند:
| مشخصه | توضیح |
|---|---|
| status | کد وضعیت عملیات (مطابق جدول کدهای وضعیت) |
| message | توضیحات وضعیت درخواست |
| data | دیتای بازگشتی؛ نوع آن بسته به متد فراخوانیشده متفاوت است |
Authorization · احراز هویت
بهمنظور هویتسنجی در هنگام استفاده از وبسرویسهای SMS.ir، ملزم به ارسال کلید خصوصی در بخش هدر درخواست میباشید. کلیدهای خصوصی شما در پنل برنامهنویسان قابل مشاهده و مدیریت هستند.
محیط Sandbox
Sandbox محیطی برای تست یکپارچگی است. ساختار URL، هدرها و JSON دقیقاً مثل Production است، اما پیامک واقعی ارسال نمیشود. با این محیط میتوانید فرمت پاسخ و خطا را ببینید، بدون کسر اعتبار و بدون دریافت SMS.
ساخت کلید Sandbox
- وارد پنل کاربری SMS.ir شوید.
- از منوی برنامهنویسان گزینه لیست کلیدهای API را باز کنید.
- روی ایجاد کلید جدید کلیک کنید.
- نوع کلید را روی Sandbox قرار دهید و کلید را ذخیره کنید.
کلید Sandbox با کلید Production فرق دارد. در آزمایشگاه API یک کلید Sandbox از پیش در هدر X-API-KEY قرار دارد تا بدون paste دستی تست کنید.
Sandbox چیست؟
همان Base URL و ساختار Production، با کلید API جدا. پاسخ شبیهسازیشده برمیگردد و SMS واقعی ارسال نمیشود.
چرا پیامک نمیرسد؟
هیچ SMS ارسال نمیشود، گزارشی در پنل ثبت نمیشود و اعتبار کسر نمیشود.
Verify در Sandbox
در Sandbox، متد Verify فقط با templateId = 123456 و متن قالب کد تایید شما: #Code# پاسخ میدهد.
قالبهایی که در پنل Production ساختهاید با کلید Sandbox کار نمیکنند و خطای «قالب یافت نشد» برمیگردند.
آدرس پایه API
Sandbox و Production از یک Base URL استفاده میکنند. تفاوت فقط در X-API-KEY است.
هدرهای درخواست
| هدر | مقدار در Sandbox | توضیح |
|---|---|---|
|
X-API-KEY
| کلید Sandbox | در آزمایشگاه API از پیش تنظیم شده |
|
Accept
|
application/json
| پیشفرض اکثر endpointها |
|
Accept
|
text/plain
| فقط برای POST /send/verify |
|
Content-Type
|
application/json
| برای POST/DELETE با بدنه JSON |
پارامترهای Verify در Sandbox
| پارامتر | نوع | مقدار مجاز در Sandbox | توضیح |
|---|---|---|---|
mobile | String | هر شماره معتبر | فقط برای ساختار درخواست؛ SMS ارسال نمیشود |
templateId | Integer | 123456 فقط | سایر شناسهها خطای «قالب یافت نشد» میدهند |
parameters | Array | [{ "name": "Code", "value": "..." }] | name باید با متغیر قالب (#Code#) یکی باشد |
نمونه درخواست Verify (Sandbox)
نمونه پاسخ
آزمایشگاه API
اینجا میتوانید endpointها را با کلید Sandbox به https://api.sms.ir/v1 بفرستید و پاسخ سرور را ببینید.
preset انتخاب کنید، در صورت نیاز JSON را ویرایش کنید و ارسال بزنید.
data و زمان پاسخ.
اعتبار کسر نمیشود و گزارشی در پنل ثبت نمیشود.
ارسال گروهی (Bulk)
این متد برای ارسال یک متن پیامک به گروهی از شماره موبایلها مورد استفاده قرار میگیرد. با مقداردهی به پارامتر sendDateTime میتوانید از قابلیت ارسال زمانبندیشده استفاده کنید.
- حداکثر تعداد مجاز شمارههای مقصد: 100
- زمان معتبر برای ارسال زمانبندیشده، از یک ساعت آینده تا حداکثر 365 روز آینده است.
پارامترهای بدنه درخواست
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
|
lineNumber
| Long | اجباری | شماره خط ارسالی |
|
messageText
| String | اجباری | متن پیام کوتاه |
|
mobiles
| Array[String] | اجباری | شماره موبایلها |
|
sendDateTime
| UnixTime | اختیاری | زمان ارسال پیامک در آینده (خالی = ارسال در لحظه) |
نمونه کد یکپارچه
HttpClient + JsonContent.Create؛ هدر X-API-KEY را در DefaultRequestHeaders بگذار.
curl_setopt + CURLOPT_POSTFIELDS؛ آرایه mobiles را با json_encode بفرست.
fetch یا axios؛ headers['X-API-KEY'] و body: JSON.stringify(...).
requests.post؛ headers= و json=؛ کتابخانه خودش serialize میکند.
http.NewRequest + json.Marshal؛ req.Header.Set("X-API-KEY", ...).
فلگ -H "X-API-KEY: ..." و -d با JSON inline.
messageIds مقدار 0 یعنی شماره در لیست سیاه است؛ مقدار null یعنی شماره نامعتبر یا متن بیش از حد مجاز.
ارسال نظیر به نظیر (Like To Like)
این متد برای ارسال متنهای متفاوت به شمارههای مختلف استفاده میشود. تعداد موبایلها و متنها باید دقیقاً برابر باشند.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
|
lineNumber
| Long | اجباری | شماره خط ارسالی |
|
messageTexts
| Array[String] | اجباری | متن پیامها |
|
mobiles
| Array[String] | اجباری | شماره موبایلها |
|
sendDateTime
| UnixTime | اختیاری | زمان ارسال |
- حداکثر تعداد مجاز شمارههای مقصد: 100
دو آرایه messageTexts و mobiles باید هماندازه باشند؛ index i به index i.
قبل از ارسال count($mobiles) === count($messageTexts) را چک کن.
هر دو فیلد array؛ طولشان با .length یکی باشد.
لیستها را zip نکن مگر مطمئن باشی طول برابر است.
دو slice جدا؛ len(mobiles) == len(messageTexts) الزامی.
JSON شامل دو آرایه موازی؛ طول هر دو باید یکسان باشد.
ارسال Verify (کد تأیید)
متد Verify برای ارسال OTP و پیامکهای الگومند با اولویت بالا طراحی شده است. متن پیامک از قالب تأییدشده در پنل خوانده میشود؛ شما فقط شماره گیرنده، شناسه قالب و مقادیر متغیرها را در بدنه درخواست ارسال میکنید.
- ارسال از خطوط خدماتی با عبور از بلکلیست مخابراتی
- متن پیامک از قبل در پنل تعریف میشود و نیازی به ارسال متن کامل در API نیست
- پاسخ این متد اغلب plain text است؛ هدر مناسب را در درخواست ست کنید
ساخت قالب در پنل
- وارد پنل کاربری SMS.ir شوید.
- از منوی برنامهنویسان → قالبهای ارسال سریع قالب جدید بسازید.
- متن قالب را بنویسید. هر بخش پویا را با نام انگلیسی بین دو علامت # مشخص کنید.
کد تأیید شما: #Code#
- پس از تأیید قالب، شناسه قالب را از لیست قالبها بردارید و در API استفاده کنید.
نحوه جایگزینی متغیرها
در بدنه درخواست، آرایهای از name/value ارسال میشود. نام هر آیتم باید دقیقاً مطابق نام متغیر در قالب باشد، بدون علامت #.
| متغیر در قالب | name در API | نمونه value |
|---|---|---|
| #Code# | Code | 12345 |
Endpoint
بدنه درخواست (Request Body)
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
|
mobile
| String | اجباری | شماره موبایل گیرنده |
|
templateId
| Integer | اجباری | شناسه قالب (قالبها در پنل تعریف میشوند) |
|
parameters
| Array[Parameter] | اجباری | آرایهای از مدل Parameter برای جایگزینی |
مدل Parameter
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
name | String | اجباری | نام متغیر در قالب، بدون # (مثلاً Code) |
value | String | اجباری | مقدار جایگزین؛ حداکثر ۲۵ کاراکتر |
ساختار JSON
{
"mobile": "09190000000",
"templateId": 123456,
"parameters": [
{ "name": "Code", "value": "12345" }
]
}نمونه کد
پاسخ سرور
ابزار ساخت JSON از قالب Verify
متن قالب را وارد کنید، مقادیر متغیرها را تنظیم کنید و JSON آماده را کپی یا در Sandbox تست کنید.
قالب Sandbox مخصوص تست API است و از قبل روی سرور تنظیم شده: templateId = 123456 با متن کد تأیید شما: #Code#.
قالبهای پنل Production در Sandbox پشتیبانی نمیشوند. پیامک واقعی ارسال نمیشود و اعتباری کسر نمیشود.
شناسه قالب و موبایل را بالا وارد کنید، سپس هر متغیر را با نام (بدون #) و مقدار اضافه کنید.
{}ارسال از طریق URL
این متد برای ارسال پیامک از طریق URL مورد استفاده قرار میگیرد. کافی است پارامترهای مورد نیاز را در قالب Query Params در آدرس مشخصشده قرار دهید. متد قابل استفاده: GET و POST.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
username | String | اجباری | نام کاربری |
password | String | اجباری | کلید خصوصی (از پنل برنامهنویسان) |
line | Long | اجباری | شماره خط |
mobile | String | اجباری | شماره موبایل |
text | String | اجباری | متن پیامک |
حذف ارسال زمانبندیشده
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
packId | Guid | اجباری | شناسه مجموعه ارسال (در URL) |
گزارشهای ارسال پیامک
با متدهای این بخش میتوانید وضعیت ارسال، دلیوری و آرشیو پیامکهای ارسالی را پیگیری کنید.
گزارش پیامک · دریافت وضعیت
با شناسه یکتای پیامک (messageId) وضعیت دلیوری (Delivery) آن قابل دریافت است.
گزارش مجموعه ارسالهای روز
اطلاعات کلی مجموعه ارسالهای روز جاری را دریافت کنید.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
PageSize | Integer | اختیاری | تعداد آیتم در صفحه (پیشفرض: 100) |
PageNumber | Integer | اختیاری | شماره صفحه (پیشفرض: 1) |
گزارش مجموعه ارسال (جزئیات Pack)
با شناسه مجموعه ارسال (packId)، گزارش پیامکهای ارسالی آن درخواست بههمراه وضعیت دلیوری هرکدام را دریافت کنید.
گزارش ارسالهای روز (Live)
گزارشی از ارسالهای انجامشده در روز جاری قابل دریافت است.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
pageSize | Integer | اختیاری | تعداد آیتم در صفحه (حداکثر و پیشفرض: 100) |
pageNumber | Integer | اختیاری | شماره صفحه (پیشفرض: 1) |
mobile | String | اختیاری | فیلتر بر اساس شماره موبایل |
sortByNewest | Boolean | اختیاری | مرتبسازی نزولی بر اساس تاریخ (پیشفرض: false) |
گزارش ارسالهای آرشیو شده
گزارشی از ارسالهای انجامشده در گذشته (تا انتهای روز قبل) را دریافت کنید.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
fromDate | Integer (UnixTime) | اختیاری | از تاریخ |
toDate | Integer (UnixTime) | اختیاری | تا تاریخ |
pageSize | Integer | اختیاری | تعداد آیتم در صفحه |
pageNumber | Integer | اختیاری | شماره صفحه |
mobile | String | اختیاری | فیلتر بر اساس شماره موبایل |
sortByNewest | Boolean | اختیاری | مرتبسازی نزولی بر اساس تاریخ (پیشفرض: false) |
گزارشهای دریافت پیامک
متدهای این بخش برای دریافت پیامکهای وارده به خطوط اختصاصی شما استفاده میشوند.
گزارش تازهترین پیامکهای دریافتی
تازهترین پیامکهای دریافتی را مشاهده کنید. هر پیامک دریافتی تنها یکبار توسط این متد قابل دسترسی است و پس از خوانده شدن، دیگر برنمیگردد.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
count | Integer | اختیاری | تعداد درخواستی (حداکثر و پیشفرض: 100) |
گزارش پیامکهای دریافتی روز
گزارش پیامکهای دریافتی روز جاری (خواندهشده و نشده). در آغاز ساعات روز، گزارش پیامهای دریافتی روز گذشته نیز با همین متد قابل دریافت است.
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
pageSize | Integer | اختیاری | تعداد آیتم در صفحه (حداکثر: 100) |
pageNumber | Integer | اختیاری | شماره صفحه |
sortByNewest | Boolean | اختیاری | مرتبسازی بر اساس تاریخ (پیشفرض: false) |
mobile | String | اختیاری | فیلتر بر اساس شماره فرستنده |
گزارش پیامکهای دریافتی آرشیو شده
گزارشی از پیامکهای دریافتی در گذشته (تا انتهای روز قبل).
| پارامتر | نوع | وضعیت | توضیح |
|---|---|---|---|
fromDate | Integer (UnixTime) | اختیاری | از تاریخ |
toDate | Integer (UnixTime) | اختیاری | تا تاریخ |
pageSize | Integer | اختیاری | تعداد آیتم در صفحه |
pageNumber | Integer | اختیاری | شماره صفحه |
mobile | String | اختیاری | فیلتر بر اساس شماره فرستنده |
تنظیمات (اعتبار و خطوط)
دریافت مقدار اعتبار فعلی
برای مشاهده مقدار اعتبار فعلی پنل از متد زیر استفاده کنید.
دریافت لیست خطوط
با این متد، لیست خطوط آماده استفاده برای ارسال قابل مشاهده است.
کدهای وضعیت و خطا
فیلد status در پاسخ API معنای عملیات را مشخص میکند. کد 1 به معنای موفقیت است؛ سایر کدها خطا یا هشدار را نشان میدهند.
کدهای وضعیت سیستم
| کد | توضیح | کد | توضیح |
|---|---|---|---|
| 1 | عملیات با موفقیت انجام شد | 106 | تعداد متنها بیش از حد مجاز (100) |
| 0 | مشکلی در سامانه رخ داده؛ با پشتیبانی تماس بگیرید | 107 | لیست موبایلها خالی است |
| 10 | کلید وبسرویس نامعتبر است | 108 | لیست متنها خالی است |
| 11 | کلید وبسرویس غیرفعال است | 109 | زمان ارسال نامعتبر است |
| 12 | کلید محدود به IPهای تعریفشده است | 110 | تعداد موبایلها و متنها برابر نیستند |
| 13 | حساب کاربری غیرفعال است | 111 | با این شناسه ارسالی ثبت نشده است |
| 14 | حساب کاربری در حالت تعلیق است | 112 | رکوردی برای حذف یافت نشد |
| 20 | تعداد درخواست بیش از حد مجاز | 113 | قالب یافت نشد |
| 101 | شماره خط نامعتبر است | 114 | طول مقدار پارامتر بیش از 25 کاراکتر است |
| 102 | اعتبار کافی نیست | 115 | شماره موبایل در لیست سیاه سامانه است |
| 103 | درخواست دارای متن(های) خالی است | 116 | نام پارامتر نمیتواند خالی باشد |
| 104 | درخواست دارای موبایل(های) نادرست است | 117 | متن ارسالشده مورد تأیید نیست |
| 105 | تعداد موبایلها بیش از 100 است | 118 | تعداد پیامها بیش از حد مجاز است |
| 119 | برای قالب شخصیسازیشده پلن را ارتقا دهید | ||
| 123 | خط ارسالکننده نیاز به فعالسازی دارد | ||
کدهای وضعیت دلیوری (DeliveryState)
در گزارشهای ارسال، فیلد deliveryState وضعیت رسیدن پیامک به گوشی را نشان میدهد:
| کد | توضیح | کد | توضیح |
|---|---|---|---|
| 1 | رسیده به گوشی | 5 | رسیده به مخابرات |
| 2 | نرسیده به گوشی | 6 | خطا |
| 3 | پردازش در مخابرات | 7 | لیست سیاه |
| 4 | نرسیده به مخابرات | ||
تنظیمات امنیتی و لیست سفید (IP Whitelisting)
اگر در سرویس خود نیاز به محدودیت دسترسی (IP Restriction) دارید، برای جلوگیری از مسدود شدن درخواستها هنگام Failover، هر دو IP زیر را در فایروال سرور خود مجاز (Whitelist) کنید: