# Talep Düzenleme Kancaları

https://dev.wisecp.com/tr/talep-duzenleme-kancalari

Talep birleştirme, bölme ve taşımanın yedi kancası.

## Genel Bakış

Talepleri düzenleyen işlemler burada: birleştirme, bölme ve departman, öncelik ya da bağlı hizmet değiştirme.

İlk ikisi geri alınamaz. Birleştirmede hedef dışındaki talepler **silinir**; bölmede yanıtlar yeni bir talebe taşınır. Kapılar bu yüzden değerlidir.

## Referans

### Talep birleştirmeyi durdurma

gateticket.merge

`AdminTickets` diğerleri silinir

Talepler birleştirilmeden önce çalışır. Birleştirme geri alınamaz: **hedef dışındakiler silinir**.

Parametreler 2

$primary_idintHedef talep; diğerleri buraya taşınacaktır.

$merge_idsarrayBirleştirilecek diğer talepler; hedef bu listede yoktur.

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.merge', 10, function ($primary_id, $merge_ids) {
    // Hedef disindakiler SILINIR: geri alinamaz.
    foreach ($merge_ids as $id)
        if (Acme::underLegalHold((int) $id)) return 'Saklama yukumlulugu olan talep birlestirilemez.';

    return null;
});
```

### Birleştirmeyi izleme

actionticket.merged

`AdminTickets` birleşme sonrası

Talepler birleştirildikten sonra çalışır.

Parametreler 2

$primary_idintHedef talep.

$merged_idsarrayBirleştirilip **silinen** taleplerin kimlikleri. Bu kimlikler artık yoktur: kendi kayıtlarınızda onları hedefe yönlendirin.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.merged', 10, function ($primary_id, $merged_ids) {
    // Bu kimlikler artik yok: hedefe yonlendirin.
    foreach ($merged_ids as $id) Acme::redirectRef((int) $id, $primary_id);
});
```

### Talep bölmeyi durdurma

gateticket.split

`AdminTickets` doğrulanmamış liste

Bir talebin bazı yanıtları yeni bir talebe taşınmadan önce çalışır.

Parametreler 2

$sourcearrayBölünecek kaynak talep.

$reply_idsarrayTaşınacak yanıtların kimlikleri. Temizlenmiştir ama **veritabanıyla henüz doğrulanmamıştır**: bu listedeki bir kimlik gerçekte o talebe ait olmayabilir.

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.split', 10, function ($source, $reply_ids) {
    // Liste henuz DB ile dogrulanmadi.
    if (count($reply_ids) > 50) return 'Tek seferde en cok 50 yanit tasinabilir.';

    return null;
});
```

### Bölmeyi izleme

actionticket.split

`AdminTickets` doğrulanmış liste

Yeni talep oluşturulup yanıtlar taşındıktan sonra çalışır.

Parametreler 3

$sourcearrayKaynak talep.

$new_ticketarrayYeni oluşturulan talep.

$moved_reply_idsarrayGerçekten taşınan yanıtların kimlikleri. Kapıdakinin aksine bu liste **doğrulanmıştır**: istenip taşınamayanlar burada yoktur.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.split', 10, function ($source, $new_ticket, $moved_reply_ids) {
    // Bu liste dogrulanmis: gercekten tasinanlar.
    Acme::reindexSplit((int) ($new_ticket['id'] ?? 0), $moved_reply_ids);
});
```

### Departman değişimini izleme

actionticket.department_changed

`AdminTickets` sıfır = yoktu

Bir talep başka departmana taşındıktan sonra çalışır. Departman, talebi kimin göreceğini belirler.

Parametreler 3

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

$oldDepartmentIdintÖnceki departman; sıfır ise yoktu.

$newDepartmentIdintYeni departman.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.department_changed', 10,
    function ($ticket, $oldDepartmentId, $newDepartmentId) {
        // Departman kimin gorecegini belirler.
        Acme::notifyDepartment($newDepartmentId, (int) ($ticket['id'] ?? 0));
    });
```

### Öncelik değişimini izleme

actionticket.priority_changed

`AdminTickets` dört seviye

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

Parametreler 3

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

$oldPriorityintÖnceki seviye.

$newPriorityintYeni seviye.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.priority_changed', 10,
    function ($ticket, $oldPriority, $newPriority) {
        if ($newPriority > $oldPriority) Acme::escalate((int) ($ticket['id'] ?? 0));
    });
```

### Bağlı hizmetin değişmesini izleme

actionticket.service_changed

`AdminTickets` sıfır = bağ yok

Bir talebin bağlı olduğu hizmet değiştikten sonra çalışır.

Parametreler 3

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

$oldServiceIdintÖnceki hizmet; sıfır ise bağlı değildi.

$newServiceIdintYeni hizmet; **sıfır ise bağ kaldırılmıştır**.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:ticket.service_changed', 10,
    function ($ticket, $oldServiceId, $newServiceId) {
        // Sifir = bag kaldirildi.
        if (!$newServiceId) return;

        Acme::attachServiceContext((int) ($ticket['id'] ?? 0), $newServiceId);
    });
```

## Tuzaklar

> **Birleştirme diğer talepleri siler**
> 
> Birleştirmede hedef dışındaki talepler yalnız taşınmaz, **silinir**. Olay kancasındaki kimlikler artık var olmayan kayıtlardır: kendi tarafınızda onları hedefe yönlendirin, yoksa kırık başvurular kalır.

> **Bölme kapısındaki liste henüz doğrulanmamıştır**
> 
> Kapıya gelen yanıt kimlikleri temizlenmiştir ama **veritabanıyla eşleştirilmemiştir**: listede o talebe ait olmayan bir kimlik bulunabilir. Gerçekten taşınanları görmek için olay kancasındaki listeye bakın.

## İ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)
