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

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

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

آدرس وب سرویس

متد EditBody

این متد برای ویرایش کامل عنوان و متن الگوی پیامک استفاده می‌شود و پس از اعمال تغییرات، الگو را مجدداً به وضعیت «در انتظار تأیید» برمی‌گرداند.

الگوی موردنظر حتماً باید متعلق به حساب کاربری فراخوانندۀ متد بوده و پیش‌تر حذف نشده باشد.

الگو تنها در صورتی قابل ویرایش است که در وضعیت «نیاز به ویرایش» قرار داشته باشد.

پر کردن هر دو فیلد عنوان و متن اجباری است.

با ثبت موفق ویرایش، وضعیت الگو به «در انتظار تأیید» تغییر می‌کند. همچنین، توضیحات مربوط به بررسی‌های قبلیِ کارشناسان پاک شده و تنظیمات شماره فرستنده به حالت پیش‌فرض سیستم بازمی‌گردد.

در این متد برخلاف متد AddBody، سیستم عبارات استاندارد لغو پیامک را به‌صورت خودکار از متن پاک‌سازی نمی‌کند (مسئولیت بررسی و رعایت این مورد با کاربر است).

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

لزوم استفاده از متغیر: متن پیام شما باید حداقل شامل یک متغیر (مانند {0}) باشد.

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

آکولادهای Escape‌شده: عباراتی که دارای آکولاد مضاعف هستند (مانند {{0}})، متغیر واقعی در نظر گرفته نمی‌شوند.

ترتیب اندیس‌ها: الزامی به پیوسته بودن شمارۀ متغیرها نیست؛ با این حال، استانداردتر است که شماره‌گذاری را به‌ترتیب و از {0} آغاز کنید.

ملاحظات تأیید: معتبر بودن ساختار متن و متغیرها از نظر سیستمی، لزوماً به‌معنای تأیید و ارسال پیامک خدماتی نیست.

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

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

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

نام پارامترنوع پارامترتوضیحات
Value String در موفقیت مقدار «1» است؛ تعداد رکوردها نیست.

  • 0: نام کاربری یا APIKey صحیح نیست؛ احراز هویت موفق نیست. (RetStatus: 0 / UserNameAndPasswordFailed)
  • 2-: عنوان خالی یا صرفاً فاصله (space) است. (RetStatus: 35 / InvalidData)
  • 3-: متن پیامک پترن خالی است. (RetStatus: 35 / InvalidData)
  • 4-: شناسه نامعتبر، ناموجود یا متعلق به حساب دیگر است؛ الگوی حذف‌شده نیز قابل ویرایش نیست. (RetStatus: 35 / InvalidData)
  • 5-: وضعیت الگو اجازۀ ویرایش نمی‌دهد. (RetStatus: 41 / Impossible)
  • 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).
  • 35: داده یا محدودیت امنیتی نامعتبر (InvalidData).
  • 41: وضعیت غیرقابل‌ویرایش (Impossible).
  • 9: خطای داخلی (InternalError).
StrRetStatus String نام انگلیسی وضعیت RetStatus است. اعداد به‌عنوان خطا نمایش‌داده می‌شوند نه متن‌ها.
$payload = [
    'username' => "YOUR_USERNAME",
    'password' => "YOUR_API_KEY",
    'bodyId' => 12345,
    'title' => "تایید سفارش اصلاح‌شده",
    'body' => "مشتری گرامی، سفارش شماره {0} ثبت و تایید شد.\nفروشگاه نمونه",
];
$ch = curl_init('https://rest.payamak-panel.com/api/ShareService/EditBody');
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/EditBody", {
  method: "POST",
  headers: { "Content-Type": "application/json; charset=utf-8", "Accept": "application/json" },
  body: JSON.stringify({
  "username": "YOUR_USERNAME",
  "password": "YOUR_API_KEY",
  "bodyId": 12345,
  "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",
  "bodyId": 12345,
  "title": "تایید سفارش اصلاح‌شده",
  "body": "مشتری گرامی، سفارش شماره {0} ثبت و تایید شد.\\nفروشگاه نمونه"
}
""";
var request = HttpRequest.newBuilder(URI.create("https://rest.payamak-panel.com/api/ShareService/EditBody"))
    .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",
    bodyId = 12345,
    title = "تایید سفارش اصلاح‌شده",
    body = "مشتری گرامی، سفارش شماره {0} ثبت و تایید شد.\nفروشگاه نمونه"
};
using var response = await client.PostAsJsonAsync("https://rest.payamak-panel.com/api/ShareService/EditBody", payload);
Console.WriteLine(await response.Content.ReadAsStringAsync());
import requests

payload = {
  "username": "YOUR_USERNAME",
  "password": "YOUR_API_KEY",
  "bodyId": 12345,
  "title": "تایید سفارش اصلاح‌شده",
  "body": "مشتری گرامی، سفارش شماره {0} ثبت و تایید شد.\nفروشگاه نمونه"
}
response = requests.post(
    "https://rest.payamak-panel.com/api/ShareService/EditBody",
    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",
  "bodyId": 12345,
  "title": "تایید سفارش اصلاح‌شده",
  "body": "مشتری گرامی، سفارش شماره {0} ثبت و تایید شد.\\nفروشگاه نمونه"
}
""";
var request = HttpRequest.newBuilder(URI.create("https://rest.payamak-panel.com/api/ShareService/EditBody"))
    .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",
  "bodyId": 12345,
  "title": "تایید سفارش اصلاح‌شده",
  "body": "مشتری گرامی، سفارش شماره {0} ثبت و تایید شد.\nفروشگاه نمونه"
}`)
    request, err := http.NewRequest(http.MethodPost, "https://rest.payamak-panel.com/api/ShareService/EditBody", 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": "1",
  "RetStatus": 1,
  "StrRetStatus": "Ok"
}

// نمونه خطای اختصاصی متد
{
  "Value": "-5",
  "RetStatus": 41,
  "StrRetStatus": "Impossible"
}