Hizmet İptal Kancaları
Müşteri "bu hizmeti istemiyorum" dediğinde çalışan dokuz kanca: talep, onay, geri alma ve asıl iptal.
Genel Bakış
İptalin iki katmanı vardır ve karıştırılırsa yanlış yere kod yazılır. Üstteki katman taleptir: müşteri ister, operatör onaylar ya da müşteri vazgeçer. Alttaki katman işin kendisidir: hizmet gerçekten kapatılır.
Talep katmanı bir kayıt tutar ve müşteriyle konuşur. İş katmanı ise zamanlanmış görevden çalışır ve sağlayıcıya gider. Bir hizmet talep olmadan da iptal edilebilir: ödenmemiş fatura bunu kendiliğinden yapar.
Referans
İptal talebini durdurma
Müşteri iptal talebi oluşturmadan önce çalışır. Durdurursanız talep kaydı yazılmaz.
now hemen, period-ending dönem sonunda. İkisi çok farklı iştir: biri hizmeti bugün kapatır, diğeri ödenmiş dönemin sonunu bekler.not-needed, too-expensive, switching, missing-features, other.Hook::add('gate:service.cancellation_request', 10,
function ($service, $urgency, $reasonKey) {
// Taahhutlu hizmet donem sonundan once kapanmaz.
if ($urgency === 'now' && Acme::underContract($service))
return 'Taahhut suresi dolmadan hemen iptal yapilamaz.';
return null;
});İptal talebini izleme
Talep kaydedildikten sonra çalışır. Hizmet bu noktada hâlâ çalışıyor.
now hemen, period-ending dönem sonunda. İkisi çok farklı iştir: biri hizmeti bugün kapatır, diğeri ödenmiş dönemin sonunu bekler.not-needed, too-expensive, switching, missing-features, other.other seçiminde yalnız serbest metin gelir.Hook::add('action:service.cancellation_requested', 10,
function ($service, $urgency, $reasonKey, $reason, $eventId) {
// Hizmet HALA calisiyor: bu bir niyet bildirimi, kapanis degil.
Retention::opened($eventId, $reasonKey, $urgency);
});İptal onayını durdurma
Operatör iptal talebini onaylamadan önce çalışır.
id, owner_id ve çözülmüş data (zamanlama, neden).Hook::add('gate:service.cancellation_accept', 10, function ($service_id, $request) {
// Odenmemis faturasi olan hizmet iptal edilirse alacak tahsil edilemez.
if (Acme::hasUnpaid($service_id)) return 'Once odenmemis faturayi kapatin.';
return null;
});İptal onayını izleme
Operatör talebi onayladıktan sonra çalışır.
Hook::add('action:service.cancellation.accepted', 10,
function ($serviceId, $cancellationType, $requestData) {
// Donem sonu iptalinde hizmet bugun kapanmaz; sayaci simdiden dusurmeyin.
if ($cancellationType === 'now') Capacity::freed($serviceId);
});Talebin geri alınmasını izleme
Müşteri iptal talebinden vazgeçtiğinde çalışır.
Hook::add('action:service.cancellation_revoked', 10,
function ($service, $event, $uid) {
// Vazgecme, elde tutma calismasinin basarisidir: kaydini kapatin.
Retention::closed((int) ($event['id'] ?? 0), 'revoked');
});İptal işini durdurma
Hizmet ya da ek hizmet gerçekten iptal edilmeden önce çalışır. Bu, talep katmanının altındaki kapıdır.
service ya da addon.status, type, module, duedate.Hook::add('gate:service.cancel', 10,
function ($target_type, $target_id, $service, $user_id) {
// Veri hala tasiniyorsa iptali bekletmek isteyebilirsiniz.
if (Acme::migrationRunning($target_id)) return 'Tasima suruyor.';
return null;
});Eklenti iptal talebini izleme
Müşteri bir eklentinin dönem sonunda iptalini istediğinde çalışır. Talep kaydedilmiştir ama eklenti hâlâ etkindir: vade gelene kadar çalışmaya devam eder.
Hook::add('action:service.addon.cancellation_requested', 10,
function ($service, $addon, $reason, $eventId, $uid) {
// Elde tutma teklifini baslatin: eklenti hala calisiyor, vakit var.
Acme::offerRetention($uid, $addon['addon_name'] ?? '', $reason);
});Eklenti iptalinin geri alınmasını izleme
Müşteri iptal talebinden vazgeçtiğinde çalışır. Başlattığınız elde tutma akışını durdurmanın yeri burasıdır.
Hook::add('action:service.addon.cancellation_revoked', 10,
function ($service, $addon, $event, $uid) {
Acme::stopRetention($uid, $addon['addon_name'] ?? '');
});Planlı paket düşürmenin iptalini izleme
Vade sonunda uygulanacak paket düşürme iptal edildiğinde çalışır. Hizmet mevcut paketiyle devam eder.
Hook::add('action:service.scheduled_downgrade_cancelled', 10,
function ($service, $scheduled, $uid) {
// Kapasite planindan dusurmeyi geri alin.
Acme::releaseForecast((int) ($service['id'] ?? 0));
});Tuzaklar
Talep kancaları müşteri istediğinde çalışır; hizmet hâlâ ayaktadır. Asıl kapanış alt katmandaki iptal kancalarında olur. Kapasite düşmek, veri silmek ya da son faturayı kesmek gibi işleri talep kancasına yazmak, müşteri vazgeçerse geri alınamayan sonuç doğurur.
Onay kancasındaki tür değeri hemen ya da dönem sonu olabilir. İkincisinde hizmet ödenmiş dönemin sonuna kadar çalışmaya devam eder. Türü okumadan "iptal edildi" varsayan bir dinleyici, müşterinin hâlâ kullandığı hizmeti kapalı sayar.
İptal kapısında metin döndürmek işi durdurmaz; sinyal yine iptale çevrilir, yalnız gerekçeniz kayda geçer. Askı kapısıyla aynı tuzak. Gerçekten engellemek istiyorsanız bunu talep katmanında yapın.
Ödenmemiş fatura, hizmeti talep olmadan iptale götürür. Yalnız talep kancalarını dinleyen bir sistem bu iptalleri hiç görmez. Bütün iptalleri görmek istiyorsanız alt katmandaki durum kancasını dinleyin.
İlgili Makaleler
- Hizmet Durum Kancaları
- Fatura ve Ödeme Kancaları
- Hizmet Yaşam Döngüsü Kancaları
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.