ارسال پیامک با الگو

برای پیام‌های خدماتی، اطلاع‌رسانی‌های تراکنشی و 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 استفاده کنید تا تولید و اعتبارسنجی کد با قرارداد مشخص انجام شود.