Bildirim Kuyruğu

1.6k görüntülenme Markdown

Gönderilmeyi bekleyen e-posta ve mesajları izleyen, kurtaran ve temizleyen dokuz uç.

Genel Bakış

E-posta ve kısa mesajlar doğrudan gönderilmez; önce kuyruğa alınır ve arka planda sırayla işlenir. Bu dokuz uç o kuyruğu izler, takılanları kurtarır ve birikeni temizler.

Mesajın kendisi şifreli saklanır ve hiçbir uçtan dönmez: burada konu, alıcı ve durum vardır. Gönderilmiş bir metni okumak istiyorsanız yeri kayıt defterleridir.

Yapı modül kuyruğuyla neredeyse aynıdır ama iki uçta ayrılır: burada yeniden deneme bekleyen öğeleri de kabul eder, hemen gönderme ise yalnız bekleyenleri.

Referans

Kuyruğu Listeleme

get/api/v1/admin/tools/notification-queue
Tools/GetNotificationQueue admin mesaj hiç dönmez

Gönderilmeyi bekleyen e-posta ve kısa mesajları döndürür.

Sorgu parametreleri 5
statusstringDuruma göre süzer.
channelstringKanala göre süzer: e-posta ya da kısa mesaj.
pageintVarsayılan 1.
limitintVarsayılan 25, en çok 100.
searchstringKayıtlarda arar.
Dönen alanlar data[] — 17
idintKuyruk öğesinin kimliği.
channelstringmail ya da sms.
recipientstringAlıcının adresi ya da numarası.
recipient_ccstringNumaradan ayrı saklandığında SMS alıcısının ülke kodu (90 → +90 5551112233). E-postada ve + önekini kendisi taşıyan numarada boştur.
recipient_namestringAlıcının adı.
subjectstringBildirimin konusu.
statusstringpending sırada, processing gönderiliyor, sent gitti, failed düştü, cancelled gönderilmeden durduruldu (sebebi işlem günlüğünde).
priorityintGönderim önceliği.
user_idintİlgili müşterinin kimliği.
user_full_namestring | nullMüşterinin adı.
attemptsintKaç kez denendiği.
max_attemptsintEn çok kaç kez deneneceği.
batch_idstring | nullToplu gönderim kimliği. Aynı gönderimden çıkan bildirimleri birbirine bağlar.
created_atstring | nullKuyruğa girdiği zaman.
scheduled_atstring | nullGönderilmesi planlanan zaman.
processed_atstring | nullİşlendiği zaman.
next_retrystring | nullBir sonraki denemenin zamanı.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -G 'https://panel.ornek.com/api/v1/admin/tools/notification-queue' \
  -H "Authorization: Bearer $API_KEY" \
  -d status=failed \
  -d channel=mail
const url = new URL('https://panel.ornek.com/api/v1/admin/tools/notification-queue');
url.searchParams.set('status', 'failed');
url.searchParams.set('channel', 'mail');

const res  = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
$url = 'https://panel.ornek.com/api/v1/admin/tools/notification-queue?' . http_build_query([
    'status'  => 'failed',
    'channel' => 'mail',
]);

$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);
// Mesajin kendisi hicbir uctan DONMEZ; konu ve alici disinda icerik gormezsiniz.
$failed = Api::Tools()->GetNotificationQueue([], ['status' => 'failed'])['data'];

Kuyruk Sayaçları

get/api/v1/admin/tools/notification-queue/stats
Tools/GetNotificationQueueStats admin

Bekleyen ve gitmiş bildirimlerin sayısını döndürür.

Dönen alanlar data — 5
totalintKuyruktaki toplam bildirim.
pendingintSırada bekleyen bildirim sayısı.
processingintŞu an gönderilen bildirim sayısı.
sentintGönderilmiş bildirim sayısı.
failedintDüşmüş bildirim sayısı.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/tools/notification-queue/stats' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/tools/notification-queue/stats', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/notification-queue/stats');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Bekleyen sayisinin surekli buyumesi gonderim hattinin durdugunu gosterir.
$stats = Api::Tools()->GetNotificationQueueStats()['data'];

Öğe Detayı

get/api/v1/admin/tools/notification-queue/{id}
Tools/GetNotificationQueueItem admin adım kayıtları

Tek bir bildirimi, gönderim denemelerinin kaydıyla birlikte döndürür.

Dönen alanlar data — 18
idintKuyruk öğesinin kimliği.
channelstringmail ya da sms.
recipientstringAlıcının adresi ya da numarası.
recipient_ccstringNumaradan ayrı saklandığında SMS alıcısının ülke kodu (90 → +90 5551112233). E-postada ve + önekini kendisi taşıyan numarada boştur.
recipient_namestringAlıcının adı.
subjectstringBildirimin konusu.
statusstringpending sırada, processing gönderiliyor, sent gitti, failed düştü, cancelled gönderilmeden durduruldu (sebebi işlem günlüğünde).
priorityintGönderim önceliği.
user_idintİlgili müşterinin kimliği.
user_full_namestring | nullMüşterinin adı.
attemptsintKaç kez denendiği.
max_attemptsintEn çok kaç kez deneneceği.
batch_idstring | nullToplu gönderim kimliği. Aynı gönderimden çıkan bildirimleri birbirine bağlar.
created_atstring | nullKuyruğa girdiği zaman.
scheduled_atstring | nullGönderilmesi planlanan zaman.
processed_atstring | nullİşlendiği zaman.
next_retrystring | nullBir sonraki denemenin zamanı.
process_logsarrayGönderim denemelerinin adım kaydı. Bir bildirimin neden gitmediği burada yazar.
Hatalar 3
invalid_id422Kimlik geçerli değil.
not_found404Kuyruk öğesi bulunamadı.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl 'https://panel.ornek.com/api/v1/admin/tools/notification-queue/201' \
  -H "Authorization: Bearer $API_KEY"
const res  = await fetch('https://panel.ornek.com/api/v1/admin/tools/notification-queue/201', {
  headers: { Authorization: `Bearer ${apiKey}` },
});
const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/notification-queue/201');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $apiKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Detay bile mesaj govdesini TASIMAZ: gonderilmis bir metni gormek icin kayit defterine bakin.
$item = Api::Tools()->GetNotificationQueueItem(['id' => 201])['data'];
$why  = end($item['process_logs']);

Öğeyi Yeniden Deneme

post/api/v1/admin/tools/notification-queue/{id}/retry
Tools/RetryNotificationQueueItem admin

Bir bildirimi tekrar gönderim sırasına alır.

Gövde —
——Gövde gerekmez. Bildirim, path parametresiyle belirlenir; boş gövde gönderin.
Dönen alanlar data
dataobjectBildirimin sıfırlama sonrası hâli. Öğe detayı ucuyla aynı şekildedir.
Hatalar 3
not_found404Kuyruk öğesi bulunamadı.
not_retryable422Yalnız düşmüş ya da bekleyen bildirimler yeniden denenebilir. Gitmiş bir bildirim buradan tekrar gönderilemez.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/tools/notification-queue/201/retry' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/notification-queue/201/retry', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/notification-queue/201/retry');
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);
// Yeniden deneme BEKLEYEN ogeleri de kabul eder; bu, sirasini one almanin yoludur.
Api::Tools()->RetryNotificationQueueItem(['id' => 201]);

Öğeyi Hemen Gönderme

post/api/v1/admin/tools/notification-queue/{id}/run
Tools/RunNotificationQueueItem admin anında gider

Bildirimi arka planı beklemeden o anda gönderir ve sonucunu döndürür.

Gövde —
——Gövde gerekmez. Bildirim, path parametresiyle belirlenir; boş gövde gönderin.
Dönen alanlar data — 3
task_successboolGönderim başarılı oldu mu.
task_messagestringDüştüyse hata mesajı.
itemobjectBildirimin gönderim sonrası hâli.
Hatalar 3
not_found404Kuyruk öğesi bulunamadı.
not_pending422Yalnız sırada bekleyen bildirimler gönderilebilir. Düşmüş bir bildirimi önce yeniden denemeye almanız gerekir.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/tools/notification-queue/201/run' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/notification-queue/201/run', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/notification-queue/201/run');
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);
// Dusmus bir bildirim dogrudan gonderilemez: once yeniden denemeye alin, sonra calistirin.
Api::Tools()->RetryNotificationQueueItem(['id' => 201]);
$result = Api::Tools()->RunNotificationQueueItem(['id' => 201])['data'];

if (!$result['task_success']) {
    $why = $result['task_message'];
}

Öğeyi Silme

delete/api/v1/admin/tools/notification-queue/{id}
Tools/DeleteNotificationQueueItem admin

Bir bildirimi kuyruktan çıkarır. Gönderilmemiş bildirim hiç gitmez.

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

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/notification-queue/201');
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);
// Gonderilmekte olan bir bildirim SILINEMEZ; islem bitene kadar bekleyin.
Api::Tools()->DeleteNotificationQueueItem(['id' => 201]);

Toplu Silme

post/api/v1/admin/tools/notification-queue/bulk-delete
Tools/BulkDeleteNotificationQueue admin

Birden çok bildirimi kuyruktan çıkarır.

Gövde 1
idsint[]zorunluSilinecek bildirimlerin kimlikleri.
Dönen alanlar data — 2
deletedboolSilme çalıştı mı.
countintSilinen bildirim sayısı. Gönderilmekte olanlar atlandığı için gönderdiğinizden az olabilir.
Hatalar 2
ids_required422Hiç kimlik verilmedi.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/tools/notification-queue/bulk-delete' \
  -H "Authorization: Bearer $API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"ids":[201,202]}'
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/notification-queue/bulk-delete', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${apiKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ ids: [201, 202] }),
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/notification-queue/bulk-delete');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['ids' => [201, 202]]),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Gonderilmekte olanlar sessizce atlanir: silinen sayiyi gonderdiginizle karsilastirin.
$ids      = [201, 202];
$response = Api::Tools()->BulkDeleteNotificationQueue(['ids' => $ids]);

$skipped = count($ids) - $response['data']['count'];

Tüm Düşenleri Yeniden Deneme

post/api/v1/admin/tools/notification-queue/retry-all-failed
Tools/RetryAllFailedNotificationQueue admin kuyruğun tamamı

Kuyruktaki bütün düşmüş bildirimleri tekrar sıraya alır.

Gövde —
——Gövde gerekmez. İşlem kuyruğun tamamını kapsar ve daraltılamaz; boş gövde gönderin.
Dönen alanlar data — 1
retriedintTekrar sıraya alınan bildirim sayısı.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/tools/notification-queue/retry-all-failed' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/notification-queue/retry-all-failed', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/notification-queue/retry-all-failed');
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);
// Modul kuyrugunun aksine bu uc SAYIYI dondurur.
$count = Api::Tools()->RetryAllFailedNotificationQueue()['data']['retried'];

Gönderilenleri Temizleme

post/api/v1/admin/tools/notification-queue/clear-sent
Tools/ClearSentNotificationQueue admin

Gönderilmiş bildirimleri kuyruktan siler.

Gövde —
——Gövde gerekmez. İşlem kuyruğun tamamını kapsar ve daraltılamaz; boş gövde gönderin.
Dönen alanlar data — 1
clearedboolTemizlik çalıştı mı.
Hatalar 1
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
İstek
curl -X POST 'https://panel.ornek.com/api/v1/admin/tools/notification-queue/clear-sent' \
  -H "Authorization: Bearer $API_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/admin/tools/notification-queue/clear-sent', {
  method: 'POST',
  headers: { Authorization: `Bearer ${apiKey}` },
});

const body = await res.json();
$ch = curl_init('https://panel.ornek.com/api/v1/admin/tools/notification-queue/clear-sent');
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);
// Kuyrugu temizlemek GONDERIM KAYDINI silmez: ne gonderildigi kayit defterinde durur.
Api::Tools()->ClearSentNotificationQueue();

Tuzaklar

Mesajın kendisi hiçbir uçtan dönmez

Kuyruk uçları konu, alıcı ve durumu verir; gövde şifreli saklanır ve detayda bile yer almaz. Bir müşteriye ne gönderildiğini görmek istiyorsanız kuyruğa değil, kayıt defterlerine bakmanız gerekir.

İki uç farklı durumları kabul eder

Yeniden deneme hem düşmüş hem bekleyen bildirimleri alır; hemen gönderme ise yalnız bekleyenleri. Yani düşmüş bir bildirimi hemen göndermek isterseniz önce yeniden denemeye alıp sonra çalıştırmanız gerekir. Tek adım denemek not_pending ile döner.

Gönderilmekte olan öğe silinemez

Şu an gönderilen bir bildirim silinemez ve toplu silmede sessizce atlanır. Gönderdiğiniz kimlik sayısıyla dönen sayının farkı, atlanan öğeleri gösterir; farkı kontrol etmezseniz sildiğinizi sandığınız bildirim yola çıkmış olabilir.

İki kuyruk toplu uçlarda ayrışır

Bildirim kuyruğunda tüm düşenleri yeniden deneme ucu kaç bildirimin sıraya alındığını döndürür; modül kuyruğunun aynı ucu döndürmez. İki kuyruk için ortak bir yardımcı yazıyorsanız bu farkı gözetin.

Kuyruğu temizlemek gönderim kaydını silmez

Gönderilenleri temizlemek yalnız kuyruk satırlarını kaldırır. Neyin gönderildiği kayıt defterlerinde durmaya devam eder, yani geçmişi kaybetmezsiniz. İki yeri karıştırmak, silinmemiş bir veriyi silinmiş sanmaya yol açar.

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.