Uluslararası SMS

1.6k görüntülenme Markdown

Uluslararası SMS gönderici adı başvurularını, ülke fiyatlarını ve modül ayarlarını yöneten on beş uç.

Genel Bakış

Bazı ülkeler SMS gönderici adının önceden onaylanmasını zorunlu tutar. Müşteri belgeleriyle birlikte başvurur, siz onaylar ya da reddedersiniz; ilk altı uç bu akışı yürütür.

Geri kalanı satışın kendisiyle ilgilidir: hangi modülle gönderileceği, ülke başına maliyet ve fiyat, kâr marjı ve eski kayıtların temizlenmesi. Fiyatlar tek bir birincil para biriminde tutulur; o ayarlanmadan otomatik fiyatlama çalışmaz.

Referans

Başvuruları Listeleme

get/api/v1/admin/products/sms/intl-origins
Products/GetSmsIntlOrigins admin sayfalı

Müşterilerin ülke bazında açtığı gönderici adı başvurularını döndürür.

Sorgu parametreleri 3
searchstringKayıtlarda arar.
pageintVarsayılan 1.
limitintVarsayılan 25, en çok 100.
Dönen alanlar data[] — 11
idintKayıt kimliği.
origin_idintBağlı yurt içi gönderici adının kimliği.
origin_namestringGönderici adı.
country_codestringÜlke kodu. İki harfli ve küçük harfli.
statusstringwaiting onay bekliyor, active onaylandı, inactive reddedildi.
status_messagestringKarara düşülen mesaj.
clientobjectTalebi açan müşteri.
idintMüşteri kimliği.
full_namestringAd ve soyad.
company_namestringFirma adı.
attachmentsarrayMüşterinin yüklediği belgeler.
sizeintDosya boyutu, bayt olarak.
file_namestringMüşterinin yüklediği özgün ad.
namestringSunucuda saklanan ad.
file_pathstringDosyanın saklandığı yol.
created_atstring | nullTalebin açıldığı zaman.
approved_datestring | nullOnay zamanı.
rejected_datestring | nullRed zamanı.
Meta 4
totalintSüzgece uyan toplam kayıt.
pageintBulunduğunuz sayfa.
limitintSayfa boyutu.
next_pageintSonraki sayfa. Sıfır son sayfada olduğunuz anlamına gelir.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/sms/intl-origins' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->GetSmsIntlOrigins();

$waiting = array_filter(
    $response['data'],
    fn (array $r): bool => $r['status'] === 'waiting',
);
Yanıt
{
  "data": [
    {
      "id": 9,
      "origin_id": 1,
      "origin_name": "ACME",
      "country_code": "sv",
      "status": "waiting",
      "status_message": "",
      "client": { "id": 2, "full_name": "John Doe", "company_name": "" },
      "attachments": [
        {
          "size": 255435,
          "file_name": "licence.jpg",
          "name": "215d8151c44f2d058eee5e5.jpg",
          "file_path": "215d8151c44f2d058eee5e5.jpg"
        }
      ],
      "created_at": "2026-03-09 11:52:45",
      "approved_date": null,
      "rejected_date": null
    }
  ],
  "meta": { "total": 2, "page": 1, "limit": 25, "next_page": 0 }
}

Başvuru Detayı

get/api/v1/admin/products/sms/intl-origins/{id}
Products/GetSmsIntlOrigin admin

Tek bir başvuruyu döndürür. Şema liste öğesiyle aynıdır.

Dönen alanlar data — 11
idintKayıt kimliği.
origin_idintBağlı yurt içi gönderici adının kimliği.
origin_namestringGönderici adı.
country_codestringÜlke kodu. İki harfli ve küçük harfli.
statusstringwaiting onay bekliyor, active onaylandı, inactive reddedildi.
status_messagestringKarara düşülen mesaj.
clientobjectTalebi açan müşteri.
idintMüşteri kimliği.
full_namestringAd ve soyad.
company_namestringFirma adı.
attachmentsarrayMüşterinin yüklediği belgeler.
sizeintDosya boyutu, bayt olarak.
file_namestringMüşterinin yüklediği özgün ad.
namestringSunucuda saklanan ad.
file_pathstringDosyanın saklandığı yol.
created_atstring | nullTalebin açıldığı zaman.
approved_datestring | nullOnay zamanı.
rejected_datestring | nullRed zamanı.
Hatalar 2
not_found404Kayıt bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->GetSmsIntlOrigin(['id' => 9]);

Başvuruyu Karara Bağlama

put/api/v1/admin/products/sms/intl-origins/{id}/status
Products/SetSmsIntlOriginStatus admin

Başvuruyu onaylar ya da reddeder.

Gövde 2
actionstringzorunluactive onaylar, inactive reddeder.
reasonstringKarara düşülecek mesaj. Hazır metinler gerekçe ucundan alınır.
Dönen alanlar data
dataobjectBaşvurunun güncel hâli. Detay şemasıyla aynı. İki karar tarihinden geçerliliğini yitiren temizlenir.
Hatalar 3
not_found404Kayıt bulunamadı.
invalid_action422İşlem active ya da inactive değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9/status' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"action":"inactive","reason":"Documents missing"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9/status', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ action: 'inactive', reason: 'Documents missing' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9/status');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'action' => 'inactive',
        'reason' => 'Documents missing',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Hazir gerekceyi sablon listesinden alin ki musteri her seferinde ayni metni gorsun.
$reasons = Api::Products()->GetSmsReasons([], ['group' => 'international-sms'])['data'];

Api::Products()->SetSmsIntlOriginStatus([
    'id'     => 9,
    'action' => 'inactive',
    'reason' => $reasons['en'][0]['description'] ?? '',
]);

Toplu Karar

post/api/v1/admin/products/sms/intl-origins/bulk
Products/BulkSmsIntlOrigins admin gerekçe yok

Birden çok başvuruyu tek çağrıda onaylar ya da reddeder.

Gövde 2
idsint[]zorunluBaşvuru kimlikleri.
actionstringzorunluactive ya da inactive.
Dönen alanlar data — 2
updatedint[]Durumu değişen kimlikler.
actionstringUygulanan durum.
Hatalar 3
ids_required422ids boş.
invalid_action422İşlem active ya da inactive değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/bulk' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"ids":[9,10],"action":"active"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/bulk', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ ids: [9, 10], action: 'active' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/bulk');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['ids' => [9, 10], 'action' => 'active']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Toplu ucta gerekce alani YOKTUR: red mesaji gerekiyorsa tek tek karara baglayin.
Api::Products()->BulkSmsIntlOrigins([
    'ids'    => [9, 10],
    'action' => 'active',
]);

Başvuruyu Silme

delete/api/v1/admin/products/sms/intl-origins/{id}
Products/DeleteSmsIntlOrigin admin belgeler de gider

Başvuruyu ve yüklenmiş belgelerini siler.

Dönen alanlar data — 2
deletedboolSilme başarılı mı.
idintSilinen başvurunun kimliği.
Hatalar 2
not_found404Kayıt bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE 'https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-origins/9');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->DeleteSmsIntlOrigin(['id' => 9]);

Teslimat Raporu

get/api/v1/admin/products/sms/intl-reports/{id}
Products/GetSmsIntlReport admin modüle sorar

Gönderilmiş bir SMS için sağlayıcıdan canlı teslimat durumu ister.

Dönen alanlar data — 5
modulestringRaporu üreten SMS modülü.
sendingarrayHâlâ yolda olan alıcılar. Satır şekli modüle özgü, sağlayıcıdan sağlayıcıya değişir.
deliveredarrayTeslim edildiği doğrulanan alıcılar.
failedarrayBaşarısız alıcılar.
total_recipientsintModülün bildirdiği toplam. Üç dizinin uzunluğu yerine bunu okuyun; ikisi ayrışabilir.
Hatalar 5
not_found404Rapor bulunamadı.
no_module422Bu rapor için SMS modülü yok.
not_supported422Modül teslimat raporu desteklemiyor.
report_failed422Sağlayıcıdan yanıt alınamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/sms/intl-reports/501' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-reports/501', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-reports/501');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Rapor sagliyiciya sorularak uretilir: yavas olabilir ve modul destegine baglidir.
$response = Api::Products()->GetSmsIntlReport(['id' => 501]);

Red Gerekçelerini Listeleme

get/api/v1/admin/products/sms/reasons
Products/GetSmsReasons admin

Başvuru reddederken kullanılan hazır metinleri dil başına döndürür.

Sorgu parametreleri 1
groupstringHangi kanal: sms ya da international-sms. Varsayılan sms, yani parametreyi unutmak yurt içi listeyi verir.
Dönen alanlar data
dataobjectDil kodundan gerekçe listesine eşleme. Her gerekçe bir başlık ve bir açıklama taşır.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -G 'https://panel.ornek.com/api/v1/admin/products/sms/reasons' \
  -H "Authorization: Bearer $API_KEY" \
  -d group=international-sms
const url = new URL('https://panel.ornek.com/api/v1/admin/products/sms/reasons');
url.searchParams.set('group', 'international-sms');

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
$url = 'https://panel.ornek.com/api/v1/admin/products/sms/reasons?' . http_build_query(['group' => 'international-sms']);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->GetSmsReasons([], ['group' => 'international-sms']);

Red Gerekçesi Ekleme

post/api/v1/admin/products/sms/reasons
Products/AddSmsReason admin 201

Bir dile hazır red metni ekler.

Gövde 2
langstringzorunluMetnin hangi dile ekleneceği.
reasonstringzorunluGerekçe metni. Başlık ilk elli karakterden üretilir.
Sorgu parametreleri 1
groupstringHangi kanal: sms ya da international-sms. Varsayılan sms, yani parametreyi unutmak yurt içi listeyi verir.
Dönen alanlar data
dataobjectYazımdan sonraki gerekçe setinin tamamı, 201 ile döner. Listeyle aynı şema: kurulu her dil için bir anahtar, her biri kendi listesini taşır. Gerekçesi olmayan dil boş dizi döner.
Hatalar 2
reason_required422Dil ya da metin boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/sms/reasons?group=international-sms' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"lang":"en","reason":"Please upload a valid trade licence."}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/reasons?group=international-sms', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    lang: 'en',
    reason: 'Please upload a valid trade licence.',
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/reasons?group=international-sms');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'lang'   => 'en',
        'reason' => 'Please upload a valid trade licence.',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->AddSmsReason(
    ['lang' => 'en', 'reason' => 'Please upload a valid trade licence.'],
    ['group' => 'international-sms'],
);

Red Gerekçesi Silme

delete/api/v1/admin/products/sms/reasons/{index}
Products/DeleteSmsReason admin sırayla silinir

Bir dildeki gerekçeyi listedeki sırasına göre siler.

Sorgu parametreleri 2
langstringzorunluHangi dilin listesinden silineceği.
groupstringHangi kanal: sms ya da international-sms. Varsayılan sms, yani parametreyi unutmak yurt içi listeyi verir.
Dönen alanlar data
dataobjectSilmeden sonraki gerekçe setinin tamamı. Listeyle aynı şema. Liste yeniden numaralanır, silinenin altındaki her gerekçe bir sıra yukarı kayar.
Hatalar 3
lang_required422lang verilmedi.
not_found404O sırada gerekçe yok.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X DELETE -G 'https://panel.ornek.com/api/v1/admin/products/sms/reasons/0' \
  -H "Authorization: Bearer $API_KEY" \
  -d lang=en \
  -d group=international-sms
const url = new URL('https://panel.ornek.com/api/v1/admin/products/sms/reasons/0');
url.searchParams.set('lang', 'en');
url.searchParams.set('group', 'international-sms');

const res = await fetch(url, {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$url = 'https://panel.ornek.com/api/v1/admin/products/sms/reasons/0?' . http_build_query([
    'lang'  => 'en',
    'group' => 'international-sms',
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'DELETE',
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Sira numarasi silme sonrasi KAYAR: birden fazla silecekseniz sondan basa gidin.
foreach ([2, 1] as $index)
    Api::Products()->DeleteSmsReason(['index' => $index], ['lang' => 'en']);

Ayarları Getirme

get/api/v1/admin/products/sms/intl-settings
Products/GetSmsIntlSettings admin

Uluslararası SMS için modül, fiyatlama ve ön kayıt ayarlarını döndürür.

Dönen alanlar data — 5
active_modulestringKullanılan SMS modülü. Seçilmemişse none.
cron_statusboolFiyatları düzenli yenileyen görev açık mı.
primary_currencyintFiyatların tutulduğu para biriminin kimliği.
profit_ratefloatMaliyetin üzerine eklenen kâr marjı.
pre_register_countriesstring[]Gönderici adının önceden onaylanması gereken ülkeler.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/sms/intl-settings' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-settings', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->GetSmsIntlSettings();

Ayarları Yazma

put/api/v1/admin/products/sms/intl-settings
Products/SetSmsIntlSettings admin marj ayrı dal

Modülü, fiyatlama görevini ve ön kayıt ülkelerini ayarlar; ya da yalnız kâr marjını değiştirir.

Gövde 5
marginfloatKâr marjı. Bu alanı göndermek diğerlerini yok sayar ve fiyatları yeniden hesaplar.
active_modulestringKullanılacak SMS modülü.
cron_statusboolFiyatları düzenli yenileyen görevi açar.
primary_currencyintFiyatların tutulacağı para birimi.
countries_pre_registerstring[]Gönderici adının önceden onaylanması gereken ülkeler.
Dönen alanlar data
dataobjectAyarların güncel hâli. Okuma ucuyla aynı şema.
Hatalar 3
module_unsupported422Görev açılmak isteniyor ama modül fiyat çekemiyor.
update_failed422Ayar kaydedilemedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/sms/intl-settings' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"active_module":"Twilio","cron_status":true,"primary_currency":1}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-settings', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    active_module: 'Twilio',
    cron_status: true,
    primary_currency: 1,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-settings');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'active_module'    => 'Twilio',
        'cron_status'      => true,
        'primary_currency' => 1,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// 'margin' govdedeyse DIGER alanlar okunmaz — iki degisikligi ayri istek yapin.
Api::Products()->SetSmsIntlSettings(['active_module' => 'Twilio']);
Api::Products()->SetSmsIntlSettings(['margin' => 20]);

Fiyatları Getirme

get/api/v1/admin/products/sms/intl-pricing
Products/GetSmsIntlPricing admin

Ülke başına maliyet ve satış fiyatını döndürür.

Sorgu parametreleri 1
primary_currencyintAyarlardaki para birimi yerine bunu kullanır.
Dönen alanlar data[] — 5
country_codestringÜlke kodu. Burada BÜYÜK harfli; başvuru kayıtlarında küçük.
costfloatSağlayıcıya ödenen maliyet.
amountfloatMüşteriden alınan tutar.
cidintPara birimi kimliği.
statusboolO ülkeye gönderim açık mı.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Products()->GetSmsIntlPricing();

Fiyatları Yazma

put/api/v1/admin/products/sms/intl-pricing
Products/SetSmsIntlPricing admin

Ülke başına maliyet ve fiyatı elle yazar.

Gövde 1
valuesobjectzorunluÜlke kodundan fiyat nesnesine eşleme. Her nesne maliyet, satış tutarı, para birimi ve gönderim durumunu taşır. Yalnız gönderdiğiniz ülkeler değişir.
Dönen alanlar data — 1
updatedintGüncellenen ülke sayısı.
Hatalar 2
values_required422values boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"values":{"US":{"cost":0.01,"amount":0.02,"cid":1,"status":true}}}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    values: {
      US: { cost: 0.01, amount: 0.02, cid: 1, status: true },
    },
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'values' => [
            'US' => ['cost' => 0.01, 'amount' => 0.02, 'cid' => 1, 'status' => true],
        ],
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Ulke kodu BUYUK harfli yazilir; basvuru kayitlarindaki kucuk harfli kodla karistirmayin.
Api::Products()->SetSmsIntlPricing([
    'values' => [
        'US' => ['cost' => 0.01, 'amount' => 0.02, 'cid' => 1, 'status' => true],
    ],
]);

Fiyatları Modülden Çekme

post/api/v1/admin/products/sms/intl-pricing/auto
Products/AutoDefineSmsIntlPricing admin elle girilenleri ezer

Ülke fiyatlarını sağlayıcıdan çeker ve marjı uygulayarak yazar.

Gövde —
——Gövde gerekmez, boş gönderin. Modül, para birimi ve marj uluslararası SMS ayarlarından gelir.
Dönen alanlar data — 1
statusstringİşlemin sonucu.
Hatalar 5
no_module422Seçili SMS modülü yok.
module_unsupported422Modül fiyat çekmeyi desteklemiyor.
no_primary_currency422Birincil para birimi ayarlanmamış.
auto_define_failed422Fiyatlar çekilemedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing/auto' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing/auto', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/intl-pricing/auto');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Ucun uc onkosulu vardir: modul secili, modul fiyat cekebiliyor, para birimi ayarli.
$settings = Api::Products()->GetSmsIntlSettings()['data'];

if ($settings['active_module'] !== 'none' && $settings['primary_currency'] > 0)
    Api::Products()->AutoDefineSmsIntlPricing();

Raporları Temizleme

post/api/v1/admin/products/sms/clear-reports
Products/ClearSmsReports admin geri alınamaz

Verilen tarihte ve öncesinde gönderilmiş SMS kayıtlarını siler.

Gövde 2
datestringzorunluKesim tarihi. Bu tarih ve öncesi silinir.
typestringHangi kanal: domestic ya da international. Varsayılan domestic.
Dönen alanlar data — 3
clearedboolTemizlik yapıldı mı.
beforestringKullanılan kesim tarihi.
typestringTemizlenen kanal.
Hatalar 2
invalid_date422Tarih eksik ya da geçersiz.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/products/sms/clear-reports' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"date":"2026-01-01","type":"international"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/products/sms/clear-reports', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ date: '2026-01-01', type: 'international' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/products/sms/clear-reports');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'date' => '2026-01-01',
        'type' => 'international',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Kanal belirtmezseniz YURT ICI kayitlar silinir; uluslararasi olanlari acikca isteyin.
Api::Products()->ClearSmsReports([
    'date' => '2026-01-01',
    'type' => 'international',
]);

Tuzaklar

Ülke kodunun harf durumu iki uçta farklı

Başvuru kayıtları ülke kodunu küçük harfle döndürür, fiyatlama uçları ise büyük harfle bekler ve döndürür. İkisini eşleştiren kod, harf durumunu dönüştürmezse hiçbir ülkeyi bulamaz ve bunu sessizce yapar.

Marj alanı diğerlerini yok sayar

Ayar ucunda margin gövdedeyse yalnız marj dalı çalışır; modül, para birimi ve ülke listesi okunmaz. İkisini birden değiştirmek istiyorsanız iki ayrı istek gönderin.

Otomatik fiyatlama elle girilenleri ezer

Fiyatları modülden çekmek, elle yazdığınız ülke fiyatlarının üzerine yazar. Birkaç ülkeyi özel olarak fiyatladıysanız bu çağrıdan sonra onları yeniden girmeniz gerekir; ayrıca fiyat görevi açıksa aynı ezme düzenli olarak tekrarlanır.

Toplu kararda gerekçe yoktur

Toplu uç yalnız durumu değiştirir; red mesajı alanı yoktur. Müşterinin neden reddedildiğini görmesini istiyorsanız başvuruları tek tek karara bağlamanız gerekir.

Gerekçe sırası silmeden sonra kayar

Gerekçeler kimlikle değil listedeki sırayla silinir. Bir gerekçe silindiğinde ondan sonrakilerin sırası bir azalır; art arda silme yapacaksanız sondan başa gidin, yoksa yanlış metni silersiniz.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.