ملی پیامک مستندات وب‌سرویس پیامک
ملی پیامک مستندات وب‌سرویس پیامک
ملی پیامک مستندات وب‌سرویس پیامک

درج الگوی خدماتی

آخرین به‌روزرسانی: 17 آبان 1405

آدرس وب سرویس

متد AddBody

  • این متد یک الگوی خدماتی BodyID جدید برای حساب ثبت می‌کند.  فراخوانی این متد منجر به ارسال پیامک نمی‌شود.
  • دریافت نتیجۀ موفق به این معناست که الگو با موفقیت ثبت شده و در وضعیت «در انتظار تأیید» قرار گرفته است.
  • برای استفاده از این امکان، مجوز «درج الگوی خدماتی» باید روی حساب کاربری شما فعال باشد.
  • پارامترهایی مانند فرستنده، وضعیت تأیید و acceptedRules توسط شما وارد نمی‌شوند.
  • هنگام ثبت الگو، سیستم به‌صورت خودکار عبارت‌های استاندارد لغو پیامک را از متن حذف می‌کند. برای مشاهدۀ متن نهایی ذخیره‌شده در سیستم از متد GetBodies استفاده کنید.
  • سیستم توانایی تشخیص خودکار درج الگوهای تکراری را ندارد.
  • اگر فرایند ثبت با مشکل مواجه شد یا از نتیجۀ آن مطمئن نبودید، پیش از فراخوانی مجدد متد، حتماً لیست الگوهای فعلی خود را بررسی کنید.

قواعد متن الگو

  • فرمت معتبر متغیرها: استفاده از اعداد فارسی ({۰})، پرانتز ((0))، حروف ({name}) و قالب‌بندی‌های خاص ({0:N2}) نامعتبر است.
  • تکرار یک متغیر در متن مجاز است
  • آکولادهای Escape‌شده: عباراتی که داخل دو آکولاد قرار می‌گیرند (مانند {{0}}) متغیر واقعی محسوب نمی‌شوند.
  • ترتیب متغیرها: الزامی به پیوسته‌بودن اندیس‌ها نیست، اما پیشنهاد می‌شود شماره‌گذاری را به‌ترتیب و با شروع از {0} انجام دهید.
  • بررسی محتوا: صحیح‌بودن ساختار متن و متغیرها، به‌معنای تأیید نهایی و ارسال پیامک خدماتی نیست.

پارامتر های ورودی

نام پارامترنوع پارامترتوضیحات
username string اجباری نام کاربری پنل شما در سامانه.
password string اجباری مقدار API Key شما در سامانه، در بدنۀ JSON
title string اجباری عنوان باید تکمیل شده و حداکثر مجاز ۵۰ کاراکتر است.
body string اجباری متن الگو باید حداقل یک متغیر واقعی از {0} تا {19} داشته باشد.

مقدار بازگشتی

نام پارامترنوع پارامترتوضیحات
Value String در حالت موفق، وضعیت الگوی ایجاد شده BodyID «منتظر تأیید» است.

0: نام کاربری یا APIKey صحیح نیست؛ احراز هویت موفق نیست. (RetStatus: 0 / UserNameAndPasswordFailed)

1-: حساب مجوز درج الگوی خدماتی ندارد. (RetStatus: 36 / AccessDenied)

2-: عنوان خالی یا صرفاً فاصله (space) است. (RetStatus: 35 / InvalidData)

3-: متن پیامک پترن خالی است. (RetStatus: 35 / InvalidData)

6-: ایجاد یا بازیابی لیست سیاه خودکار ناموفق بود. (RetStatus: 25 / UnSuccessful)

8-: عنوان بیشتر از ۵۰ کاراکتر مجاز (RetStatus: 35 / InvalidData)

9-: اندیس متغیر با ارقام فارسی یا عربی نوشته شده است. (RetStatus: 35 / InvalidData)

10-: برای متغیر از پرانتز (0) استفاده شده است. (RetStatus: 35 / InvalidData)

11-: ساختار متغیر نامعتبر است؛ مانند {x} یا {0:N2}. (RetStatus: 35 / InvalidData)

12-: اندیس متغیر بیشتر از 19 یا خارج از محدودۀ عددی است. (RetStatus: 35 / InvalidData)

13-: آکولاد بسته، آکولاد باز متناظر ندارد. (RetStatus: 35 / InvalidData)

14-: هیچ متغیر واقعی در متن وجود ندارد. (RetStatus: 35 / InvalidData)

15-: قالب نهایی متن معتبر نیست. (RetStatus: 35 / InvalidData)

100-: خطای داخلی. (RetStatus: 9 / InternalError)

108-: کنترل امنیتی تعداد درخواست یا مسدودسازی. (RetStatus: 35 / InvalidData)

109-: الزام تنظیم IP مجاز تأمین نشده است. (RetStatus: 35 / InvalidData)

110-: استفاده از API Key الزامی است. (RetStatus: 35 / InvalidData)

111-: IP درخواست مجاز نیست. (RetStatus: 35 / InvalidData)

112-: دسترسی به وب‌سرویس در پنل شما غیرفعال است. (RetStatus: 35 / InvalidData)

RetStatus Int وضعیت عمومی پاسخ؛ مستقل از Value و BodyStatus:

1: عملیات موفق (Ok).

0: احراز هویت ناموفق (UserNameAndPasswordFailed).

36: بدون مجوز درج (AccessDenied).

35: داده یا محدودیت امنیتی نامعتبر (InvalidData).

25: عدم موفقیت لیست سیاه (UnSuccessful).

9: خطای داخلی (InternalError).

StrRetStatus String نام انگلیسی وضعیت RetStatus است. اعداد به‌عنوان خطا نمایش‌داده می‌شوند نه متن‌ها.
$payload = [
    'username' => "YOUR_USERNAME",
    'password' => "YOUR_API_KEY",
    'title' => "تایید سفارش",
    'body' => "مشتری گرامی، سفارش شما با کد {0} ثبت شد.\nفروشگاه نمونه",
];
$ch = curl_init('https://rest.payamak-panel.com/api/ShareService/AddBody');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json; charset=utf-8', 'Accept: application/json'],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR),
]);
$response = curl_exec($ch);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));
درحال‌حاضر این متد از SOAP پشتیبانی نمی‌کند.
const response = await fetch("https://rest.payamak-panel.com/api/ShareService/AddBody", {
  method: "POST",
  headers: { "Content-Type": "application/json; charset=utf-8", "Accept": "application/json" },
  body: JSON.stringify({
  "username": "YOUR_USERNAME",
  "password": "YOUR_API_KEY",
  "title": "تایید سفارش",
  "body": "مشتری گرامی، سفارش شما با کد {0} ثبت شد.\nفروشگاه نمونه"
}),
});
const result = await response.json();
console.log(result);
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

var json = """
{
  "username": "YOUR_USERNAME",
  "password": "YOUR_API_KEY",
  "title": "تایید سفارش",
  "body": "مشتری گرامی، سفارش شما با کد {0} ثبت شد.\\nفروشگاه نمونه"
}
""";
var request = HttpRequest.newBuilder(URI.create("https://rest.payamak-panel.com/api/ShareService/AddBody"))
    .header("Content-Type", "application/json; charset=utf-8")
    .header("Accept", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(json))
    .build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using System;
using System.Net.Http;
using System.Net.Http.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Accept.ParseAdd("application/json");
var payload = new
{
    username = "YOUR_USERNAME",
    password = "YOUR_API_KEY",
    title = "تایید سفارش",
    body = "مشتری گرامی، سفارش شما با کد {0} ثبت شد.\nفروشگاه نمونه"
};
using var response = await client.PostAsJsonAsync("https://rest.payamak-panel.com/api/ShareService/AddBody", payload);
Console.WriteLine(await response.Content.ReadAsStringAsync());
import requests

payload = {
  "username": "YOUR_USERNAME",
  "password": "YOUR_API_KEY",
  "title": "تایید سفارش",
  "body": "مشتری گرامی، سفارش شما با کد {0} ثبت شد.\nفروشگاه نمونه"
}
response = requests.post(
    "https://rest.payamak-panel.com/api/ShareService/AddBody",
    json=payload,
    headers={"Accept": "application/json"},
    timeout=30,
)
print(response.json())
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

var json = """
{
  "username": "YOUR_USERNAME",
  "password": "YOUR_API_KEY",
  "title": "تایید سفارش",
  "body": "مشتری گرامی، سفارش شما با کد {0} ثبت شد.\\nفروشگاه نمونه"
}
""";
var request = HttpRequest.newBuilder(URI.create("https://rest.payamak-panel.com/api/ShareService/AddBody"))
    .header("Content-Type", "application/json; charset=utf-8")
    .header("Accept", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(json))
    .build();
var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
package main

import (
    "bytes"
    "fmt"
    "io"
    "net/http"
)

func main() {
    payload := []byte(`{
  "username": "YOUR_USERNAME",
  "password": "YOUR_API_KEY",
  "title": "تایید سفارش",
  "body": "مشتری گرامی، سفارش شما با کد {0} ثبت شد.\nفروشگاه نمونه"
}`)
    request, err := http.NewRequest(http.MethodPost, "https://rest.payamak-panel.com/api/ShareService/AddBody", bytes.NewReader(payload))
    if err != nil { panic(err) }
    request.Header.Set("Content-Type", "application/json; charset=utf-8")
    request.Header.Set("Accept", "application/json")
    response, err := http.DefaultClient.Do(request)
    if err != nil { panic(err) }
    defer response.Body.Close()
    body, err := io.ReadAll(response.Body)
    if err != nil { panic(err) }
    fmt.Println(string(body))
}
// نمونه پاسخ موفق
{
  "Value": "12345",
  "RetStatus": 1,
  "StrRetStatus": "Ok"
}

// نمونه خطای اختصاصی متد
{
  "Value": "-12",
  "RetStatus": 35,
  "StrRetStatus": "InvalidData"
}