Bildirim Gönderme

1.7k görüntülenme Markdown

Müşteriye şablon, e-posta ya da SMS gönderen ve gönderileni geri okuyan beş uç.

Genel Bakış

Bu uçlar bir müşteriye mesaj gönderir ve gönderileni geri okur. Üç gönderim yolu vardır: kayıtlı bir şablon, serbest bir e-posta ve serbest bir SMS.

Gönderimlerin hepsi eş zamanlıdır. Yanıt, gönderim denemesi bittikten sonra döner; kuyruğa alınmaz. Yavaş bir sağlayıcı isteğinizi de yavaşlatır.

Referans

Alıcıları Önizleme

get/api/v1/admin/clients/{id}/notifications/recipients
Clients/GetClientNotificationRecipients admin gönderim yok

Bir şablonun kimlere gideceğini gönderim yapmadan döndürür.

Sorgu parametreleri 2
templatestringŞablon kimliği, grup/ad biçiminde.
channelstringemail ya da sms. Verirseniz yalnız o kanalın alıcıları döner.
Dönen alanlar data — 2
mailobject[]E-posta alıcıları. Her eleman email ve name taşır.
smsobject[]SMS alıcıları. Müşterinin telefonu yoksa boş dizidir.
Hatalar 3
not_found404Müşteri bulunamadı.
template_invalid422template grup/ad biçiminde değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -G 'https://panel.ornek.com/api/v1/admin/clients/42/notifications/recipients' \
  -H "Authorization: Bearer $API_KEY" \
  -d template=user/welcome
const url = new URL('https://panel.ornek.com/api/v1/admin/clients/42/notifications/recipients');
url.searchParams.set('template', 'user/welcome');

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
$url = 'https://panel.ornek.com/api/v1/admin/clients/42/notifications/recipients?' . http_build_query(['template' => 'user/welcome']);

$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);
// Gondermeden once alici var mi diye bakin: alici yoksa gonderim sent: false doner.
$preview = Api::Clients()->GetClientNotificationRecipients([
    'id'       => 42,
    'template' => 'user/welcome',
], ['channel' => 'email']);

if (!($preview['data']['mail'] ?? [])) {
    return;
}
Yanıt
{
  "data": {
    "mail": [
      { "email": "[email protected]", "name": "John Doe" }
    ],
    "sms": []
  }
}

Şablon Gönderme

post/api/v1/admin/clients/{id}/notifications/template
Clients/SendClientTemplate admin eş zamanlı

Kayıtlı bir bildirim şablonunu müşteriye gönderir.

Gövde 2
templatestringzorunluŞablon kimliği, grup/ad biçiminde. İki parça da dolu olmalı: user/welcome.
channelstringemail ya da sms. Varsayılan email.
Dönen alanlar data — 5
sentboolMüşteriye kanaldan ulaşıldıysa true. Kimseye ulaşmayan gönderim yine 200 ile, nedeniyle birlikte false döner.
reasonstringYalnız sent false iken: disabled, blocked, module_not_configured, no_recipients ya da send_failed.
messagestringYalnız sent false iken: İngilizce açıklama. send_failed durumunda modülün kendi hatasını taşır.
channelstringKullanılan kanal.
templatestringŞablonun kimliği.
Hatalar 3
not_found404Müşteri bulunamadı.
template_invalid422template grup/ad biçiminde değil.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/notifications/template' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"template":"user/welcome","channel":"email"}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/notifications/template', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ template: 'user/welcome', channel: 'email' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/notifications/template');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'template' => 'user/welcome',
        'channel'  => 'email',
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->SendClientTemplate([
    'id'       => 42,
    'template' => 'user/welcome',
    'channel'  => 'email',
]);

Özel E-posta Gönderme

post/api/v1/admin/clients/{id}/notifications/email
Clients/SendClientEmail admin eş zamanlı

Şablona bağlı olmadan, serbest konu ve gövdeyle e-posta gönderir.

Gövde 3
subjectstringzorunluE-posta konusu.
messagestringzorunluE-posta gövdesi.
copy_to_adminboolGönderen yöneticiye kopya iletir. Varsayılan kapalı.
Dönen alanlar data — 3
sentboolMüşteriye ulaşıldıysa true. Yalnız gönderen yöneticiye giden kopya sayılmaz.
reasonstringYalnız sent false iken. Şablon gönderimiyle aynı kodlar.
messagestringYalnız sent false iken: İngilizce açıklama.
Hatalar 4
not_found404Müşteri bulunamadı.
subject_required422subject boş.
message_required422message boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/notifications/email' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"subject":"Hesabinizla ilgili bir guncelleme","message":"Merhaba, talebiniz islendi.","copy_to_admin":true}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/notifications/email', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    subject: 'Hesabinizla ilgili bir guncelleme',
    message: 'Merhaba, talebiniz islendi.',
    copy_to_admin: true,
  }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/notifications/email');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'subject'       => 'Hesabinizla ilgili bir guncelleme',
        'message'       => 'Merhaba, talebiniz islendi.',
        'copy_to_admin' => true,
    ]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->SendClientEmail([
    'id'      => 42,
    'subject' => 'Hesabinizla ilgili bir guncelleme',
    'message' => 'Merhaba, talebiniz islendi.',
]);

// Musteriye ulasilmadiysa sent false olur; nedeni reason soyler.
$failed = !($response['data']['sent'] ?? false);

Özel SMS Gönderme

post/api/v1/admin/clients/{id}/notifications/sms
Clients/SendClientSms admin eş zamanlı

Müşteriye serbest içerikli bir SMS gönderir.

Gövde 2
messagestringzorunluSMS gövdesi.
copy_to_adminboolGönderen yöneticinin profilindeki telefona kopya gönderir. Varsayılan kapalı; profilde telefon yoksa atlanır.
Dönen alanlar data — 3
sentboolMüşteriye ulaşıldıysa true.
reasonstringYalnız sent false iken. SMS modülü seçili değilse module_not_configured olur.
messagestringYalnız sent false iken: İngilizce açıklama.
Hatalar 3
not_found404Müşteri bulunamadı.
message_required422message boş.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/clients/42/notifications/sms' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"message":"Merhaba, talebiniz islendi."}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/clients/42/notifications/sms', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ message: 'Merhaba, talebiniz islendi.' }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/clients/42/notifications/sms');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['message' => 'Merhaba, talebiniz islendi.']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
$response = Api::Clients()->SendClientSms([
    'id'      => 42,
    'message' => 'Merhaba, talebiniz islendi.',
]);

Gönderilmiş Mesajı Okuma

get/api/v1/admin/clients/messages/preview
Clients/GetMessagePreview admin şifresi çözülür

Daha önce gönderilmiş bir e-posta ya da SMS kaydının içeriğini döndürür. Güvenlik iletileri (parola sıfırlama, doğrulama ve transfer kodları) ve gizli işaretli kayıtlar, müşterinin Mesajlar sekmesindeki gibi boş gövdeyle ve redacted true olarak döner.

Sorgu parametreleri 2
typestringzorunluemail ya da sms.
idintzorunluKayıt kimliği. Müşteri kimliği değil, günlük kaydının kendi kimliği.
Dönen alanlar data — 4
typestringKayıt türü.
idintGünlük kaydının kimliği.
contentstringÇözülmüş mesaj içeriği. redacted true ise ya da saklanan gövde okunamıyorsa boş.
redactedboolGövde verilmediğinde true: güvenlik iletisi ya da private işaretli kayıt.
Hatalar 4
invalid_request422type ya da id eksik veya geçersiz.
not_found404Bu kimlikle günlük kaydı yok.
credential_privilege_required403Hizmet aktivasyon maili müşterinin hizmet kimlik bilgilerini taşır; okumak için anahtar sahibinde Hizmetleri Görüntüleme yetkisi gerekir.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -G 'https://panel.ornek.com/api/v1/admin/clients/messages/preview' \
  -H "Authorization: Bearer $API_KEY" \
  -d type=email \
  -d id=901
const url = new URL('https://panel.ornek.com/api/v1/admin/clients/messages/preview');
url.searchParams.set('type', 'email');
url.searchParams.set('id', '901');

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
$url = 'https://panel.ornek.com/api/v1/admin/clients/messages/preview?' . http_build_query(['type' => 'email', 'id' => 901]);

$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::Clients()->GetMessagePreview([], [
    'type' => 'email',
    'id'   => 901,
]);

$content = $response['data']['content'];

Tuzaklar

200 müşterinin aldığı anlamına gelmez

Kimseye ulaşmayan gönderim de 200 döner; sent false olur ve reason nedenini söyler: şablon kapalı, bir kural engelledi, kanal için modül seçili değil, müşterinin o kanalda adresi yok ya da teslim başarısız oldu. Kontrolü önce sent'e, sonra reason'a göre yazın. Gönderen yöneticiye giden kopya gönderim sayılmaz.

Adresi olmayan müşteri hata değildir

Müşterinin e-postası ya da telefonu yoksa yanıt no_recipients nedeniyle sent: false olur. Böyle müşterileri baştan ayıklamak için önce önizleme ucunu çağırın ve listesi boş dönenleri atlayın.

İstek gönderim bitene kadar bekler

Gönderim kuyruğa alınmaz. Toplu iş yazıyorsanız her müşteri için sağlayıcının yanıt süresini ödersiniz; zaman aşımı sınırınızı buna göre koyun.

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.