ارسال پیامک با الگو
برای پیامهای خدماتی، اطلاعرسانیهای تراکنشی و OTP میتوان از الگوهای از پیش تاییدشده حساب استفاده کرد. کد الگو در SMSDaily پایدار است و وابستگی برنامه مشتری به شناسه داخلی سرویسدهنده را حذف میکند.
۱. دریافت الگوهای فعال
GET /v1/patterns
X-API-Key: YOUR_API_KEY
نمونه پاسخ:
[
{
"code": "order-ready",
"name": "آماده تحویل",
"category": "service",
"sender": "300099000121",
"otpCodeLength": 0,
"otpTtlSeconds": 0
},
{
"code": "login-otp",
"name": "ورود با رمز یکبار مصرف",
"category": "otp",
"sender": "300099000121",
"otpCodeLength": 6,
"otpTtlSeconds": 120
}
]
| فیلد | نوع | توضیح |
|---|---|---|
code |
string | کد پایدار الگو که در درخواست ارسال استفاده میشود |
name |
string | نام نمایشی الگو |
category |
string | دسته کاربردی الگو |
sender |
string/null | فرستنده پیشفرض الگو، در صورت تعریف |
otpCodeLength |
integer | طول کد OTP برای الگوهای OTP |
otpTtlSeconds |
integer | مدت اعتبار OTP برای الگوهای OTP |
۲. ارسال پیام با الگو
POST /v1/messages/pattern
X-API-Key: YOUR_API_KEY
Idempotency-Key: order-781-pattern
Content-Type: application/json
{
"patternCode": "order-ready",
"recipient": "09121234567",
"variables": {
"name": "علیرضا",
"orderNo": "781"
},
"sender": "300099000121",
"clientReference": "order-781"
}
فیلدهای درخواست
| فیلد | نوع | الزام | توضیح |
|---|---|---|---|
patternCode |
string | الزامی | کد یکی از الگوهای فعال حساب |
recipient |
string | الزامی | شماره موبایل گیرنده |
variables |
object | وابسته به الگو | مقادیر متغیرهای تعریفشده در الگو |
sender |
string/null | اختیاری | فرستنده موردنظر؛ اگر الگو فرستنده پیشفرض داشته باشد میتواند حذف شود |
clientReference |
string/null | اختیاری | شناسه درخواست در سیستم مشتری برای تطبیق داخلی |
تمام متغیرهای لازم الگو باید مقدار داشته باشند. نام متغیرها باید دقیقاً مطابق تعریف الگو ارسال شوند؛ SMSDaily قرارداد عمومی را نگه میدارد و جزئیات Pattern سرویسدهنده پاییندستی را منتشر نمیکند.
۳. پاسخ
برای درخواست جدید، پاسخ معمولاً 202 Accepted است:
{
"trackingCode": "SMS-20260810-3C91A12F",
"status": "queued",
"encoding": "Persian",
"characterCount": 38,
"partCount": 1,
"submittedAt": "2026-08-10T07:10:00Z",
"duplicate": false
}
اگر همان Idempotency-Key قبلاً ثبت شده باشد، پیام جدید ساخته نمیشود و نتیجه موجود با 200 OK و duplicate: true بازگردانده میشود.
| HTTP | کاربرد |
|---|---|
202 |
درخواست جدید پذیرفته شد |
200 |
درخواست تکراری معتبر با همان Idempotency Key |
400 |
داده یا متغیرهای درخواست نامعتبر |
401 |
API Key نامعتبر یا غیرفعال |
404 |
الگو یا منبع موردنظر برای حساب پیدا نشد |
409 |
وضعیت الگو یا درخواست با عملیات سازگار نیست |
429 |
عبور از محدودیت نرخ |
۴. نمونه C# / .NET
using System.Net.Http.Json;
var client = new HttpClient
{
BaseAddress = new Uri("https://service.smsdaily.ir")
};
client.DefaultRequestHeaders.Add("X-API-Key", apiKey);
var request = new HttpRequestMessage(HttpMethod.Post, "/v1/messages/pattern");
request.Headers.Add("Idempotency-Key", $"order-{orderId}-pattern");
request.Content = JsonContent.Create(new
{
patternCode = "order-ready",
recipient = "09121234567",
variables = new Dictionary<string, string>
{
["name"] = "علیرضا",
["orderNo"] = "781"
},
sender = "300099000121",
clientReference = "order-781"
});
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
response.EnsureSuccessStatusCode();
Console.WriteLine(body);
۵. نکات عملیاتی
patternCodeرا در تنظیمات Backend خود نگهداری کنید و شناسه Provider را ذخیره نکنید.- برای Retry شبکه همان
Idempotency-Keyاولیه را تکرار کنید. trackingCodeرا در رکورد تراکنش کسبوکار خود ذخیره کنید.- تحویل نهایی را از
GET /v1/messages/{trackingCode}بررسی کنید؛202به معنی تحویل به گوشی نیست. - برای OTP از مسیرهای اختصاصی OTP استفاده کنید تا تولید و اعتبارسنجی کد با قرارداد مشخص انجام شود.