# Talep Yaşam Döngüsü Kancaları

https://dev.wisecp.com/tr/talep-yasam-dongusu-kancalari

Talep açma, kapatma, devretme ve kilitlemenin sekiz kancası.

## Genel Bakış

Bir talebin yolu burada: açılır, durumu değişir, devredilir, kilitlenir ve sonunda silinir ya da kendiliğinden çözülür.

İki durum kancası birbirine benzer ama ayrıdır: biri personelin değiştirdiği durumu, öteki **kimsenin dokunmadığı** otomatik çözülmeyi bildirir.

## Referans

### Yönetici tarafından talep açmayı durdurma

gateticket.admin_create

`AdminTickets` yazımdan önce

Personel bir müşteri adına talep açtığında, kayıt yazılmadan önce çalışır.

Parametreler 3

$set_requestarrayYazılacak talep kaydı: başlığı, durumu, departmanı, önceliği ve ataması.

$messagestringİlk mesaj; yer tutucular çözülmüş hâliyle.

$udataarrayTalebin sahibi olacak müşterinin verisi.

Dönüş 1

string|null**Boş olmayan bir metin işlemi engeller** ve hata olarak gösterilir. Boş dönüş devam ettirir.

Dinleyici PHP

```php
Hook::add('gate:ticket.admin_create', 10, function ($set_request, $message, $udata) {
    if (Acme::blacklisted((int) ($udata['id'] ?? 0))) return 'Bu hesap icin talep acilamaz.';

    return null;
});
```

### Talebin oluşmasını izleme

actionticket.created

`AdminTickets` ilk mesaj dâhil

Bir talep oluşturulduktan sonra çalışır.

Parametreler 1

$ticketarrayTalebin tam verisi, **ilk mesaj da içinde**: sahibi, başlığı, durumu, departmanı, önceliği ve ataması.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.created', 10, function ($ticket) {
    // Ilk mesaj ayri parametre degil, talebin icinde.
    Acme::classify((int) ($ticket['id'] ?? 0), $ticket['message'] ?? '');
});
```

### Durum değişimini izleme

actionticket.status_changed

`AdminTickets` beş temel durum

Bir talebin durumu değiştikten sonra çalışır.

Parametreler 4

$ticketarrayDeğişim **öncesi** anlık görüntü.

$old_statusstringÖnceki temel durum: açık, bekliyor, işlemde, yanıtlandı ya da çözüldü.

$new_statusstringYeni temel durum.

$new_cstatusintYeni özel durum. Operatör kendi durumlarını tanımlayabilir; **sıfır** özel durum yok demektir. Yalnız temel duruma bakan bir kural özel durumları göremez.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.status_changed', 10,
    function ($ticket, $old_status, $new_status, $new_cstatus) {
        // Ozel durumlar temel durumun yaninda ayri bir eksendir.
        if ($new_status === 'solved') Acme::stopSlaClock((int) ($ticket['id'] ?? 0));
    });
```

### Otomatik çözülmeyi izleme

actionticket.auto_resolved

`cronjobs` kimse dokunmadan

Uzun süre yanıt gelmeyen bir talep kendiliğinden çözüldüğünde çalışır. **Kimse kapatmamıştır**: sessizlik kapatmıştır.

Parametreler 3

$ticket_idintÇözülen talebin kimliği.

$ticketarrayGüncel talep satırı; durumu çözüldü olarak yazılmıştır.

$delayed_dayintSon yanıttan bu yana geçen gün sayısı.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.auto_resolved', 10, function ($ticket_id, $ticket, $delayed_day) {
    // Kimse kapatmadi: sessizlik kapatti.
    Acme::surveyLater($ticket_id, $delayed_day);
});
```

### Personelin talebi açmasını izleme

actionticket.viewed

`AdminTickets` okundu işaretlenmiş

Personel bir talebi açtığında çalışır.

Parametreler 2

$ticketarrayYüklenen talep. Okunmadı işareti **çoktan kaldırılmıştır**: “yeni miydi” sorusunu buradan cevaplayamazsınız.

$idintTalebin kimliği.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.viewed', 10, function ($ticket, $id) {
    // Okunmadi isareti coktan kaldirildi.
    Acme::trackHandling($id);
});
```

### Talebin devrini izleme

actionticket.transferred

`AdminTickets` sahip değişimi

Bir talep başka bir müşteriye devredildikten sonra çalışır.

Parametreler 3

$ticketIdintDevredilen talebin kimliği.

$fromUserIdintEski sahibi.

$toUserIdintYeni sahibi. Talebin geçmişi de birlikte taşınır: eski sahibin göremeyeceği bir konuşma artık yeni sahiptedir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.transferred', 10, function ($ticketId, $fromUserId, $toUserId) {
    // Gecmis de birlikte tasindi.
    Acme::reindexOwner($ticketId, $toUserId);
});
```

### Kilit değişimini izleme

actionticket.lock_changed

`AdminTickets` yanıt kapanır

Bir talep kilitlendiğinde ya da açıldığında çalışır. Kilitli talebe müşteri **yanıt yazamaz**.

Parametreler 2

$ticketarrayDeğişim öncesi kayıt.

$lockedintYeni kilit durumu: bir kilitli, sıfır açık.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.lock_changed', 10, function ($ticket, $locked) {
    // Kilitli talebe musteri yanit yazamaz.
    if ($locked === 1) Acme::notifyLocked((int) ($ticket['user_id'] ?? 0));
});
```

### Talebin silinmesini izleme

actionticket.deleted

`AdminTickets` yalnız kimlik

Bir talep silindikten sonra çalışır.

Parametreler 1

$ticket_idintSilinen talebin kimliği. Kayıt geçilmez: talebin içeriğine ihtiyacınız varsa silme **öncesinde** saklamış olmanız gerekir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.deleted', 10, function ($ticket_id) {
    // Kayit gecilmez: icerik gerekiyorsa once saklamis olmalisiniz.
    Acme::dropFromIndex('ticket', $ticket_id);
});
```

## Tuzaklar

> **Görüntüleme kancasında okunmadı işareti çoktan silinmiştir**
> 
> Personel bir talebi açtığında kanca çalışır, ama okunmadı bayrağı **kancadan önce** temizlenir. "Bu talep yeni miydi" sorusunu buradan cevaplayamazsınız; ilk açılışı ayrıca izlemeniz gerekir.

> **Silme kancası yalnız kimlik taşır**
> 
> Diğer silme kancalarının aksine burada **talep kaydı geçilmez**. Başlığa, sahibine ya da içeriğine ihtiyacınız varsa silmeden önce saklamış olmanız gerekir; kanca çalıştığında okuyacak bir yer kalmamıştır.

## İlgili Makaleler

- Destek Talebi Kancaları
- [Müşteri Hesabı Kancaları](https://dev.wisecp.com/tr/musteri-hesabi-kancalari)
- [Kancalar Nasıl Çalışır](https://dev.wisecp.com/tr/kancalar-nasil-calisir)
