Personel Yanıt Kancaları
Personel yanıtları, iç notlar ve atamanın dokuz kancası.
Genel Bakış
Personelin bir talebe dokunduğu her nokta burada: yanıt yazmak, düzenlemek, silmek, iç not eklemek ve atama yapmak.
Yanıt kancaları üçtür ve karıştırılmamalıdır: personelin yazdığı, müşterinin yazdığı ve zamanlanmış görevin yazdığı. Sonuncusu parametrelerini tek dizide taşır.
İçerikten ayrı bir soru daha var: mesaja kimin adı gidecek. Yazar kancası bunu yazma anından önce belirler.
Referans
Yazar adını ve imzayı değiştirme
Personel mesajının müşteriye görünen yazar adını ve mesaja eklenecek imzayı, mesaj yazılmadan önce değiştirir.
ticket_id (talep açma formunda henüz sıfır), lang (talebin açıldığı dil), user_id (talebin sahibi; misafir talebinde sıfır), staff_id, source, explicit_name, ai. source beş değer alır. Yazma yolları: panel, panel-create, api. Önizleme yolları: panel-form, panel-create-form.explicit_name doğruysa çağıran yazarı bilerek seçmiştir; ada dokunmayın.Hook::add('filter:ticket.reply_author', 10, function (&$name, &$signature, $ctx) {
// Cagiran adi kendi verdiyse ona dokunmayin: API author_name, yapay zeka personasi.
if (!empty($ctx['explicit_name'])) return;
// Onizleme yollari sayfa her acildiginda calisir: burada yan etki uretmeyin.
$agent = Acme::pickAgent((int) ($ctx['ticket_id'] ?? 0), (string) ($ctx['lang'] ?? ''));
if (!$agent) return;
$name = $agent['name'];
$signature = $agent['signature'];
});Personel yanıtını durdurma
Personel yanıtı gönderilmeden önce çalışır.
Hook::add('gate:ticket.reply', 10, function ($ticket, $message, $admin_id) {
// Imza coktan eklendi: uzunluk olcerken hesaba katin.
if (Acme::containsSecret($message)) return 'Yanitta paylasilmamasi gereken bir deger var.';
return null;
});Personel yanıtını izleme
Personel yanıtı eklendikten sonra çalışır.
Hook::add('action:ticket.reply_added', 10, function ($ticket, $reply_id, $reply) {
Acme::stopSlaClock((int) ($ticket['id'] ?? 0));
});Otomatik yanıtı izleme
Zamanlanmış görev bir talebe yanıt eklediğinde çalışır. Kardeşlerinin aksine parametreleri tek bir dizide gelir.
Hook::add('action:ticket.replied', 10, function ($context) {
// Tek dizi: kardeslerinden farkli.
$ticket = $context['request'] ?? [];
Acme::noteAutoReply((int) ($ticket['id'] ?? 0));
});Yanıt düzenlemesini izleme
Bir yanıt düzenlendikten sonra çalışır.
Hook::add('action:ticket.reply_updated', 10, function ($ticketId, $replyId, $reply) {
// Onceki hali gecilmez.
Acme::reindexReply($replyId, $reply['message'] ?? '');
});Yanıt silinmesini izleme
Bir yanıt silindikten sonra çalışır.
Hook::add('action:ticket.reply_deleted', 10, function ($ticketId, $replyId, $reply) {
Acme::dropFromIndex('reply', $replyId);
});İç not eklemeyi durdurma
Personel iç not eklemeden önce çalışır. Notlar müşteriye görünmez.
Hook::add('gate:ticket.note_add', 10, function ($ticket, $message, $admin_id) {
if (Acme::tooLong($message)) return 'Not cok uzun.';
return null;
});İç not eklenmesini izleme
İç not eklendikten sonra çalışır.
Hook::add('action:ticket.note_added', 10, function ($ticket, $admin_id, $note) {
// Not BOS gelebilir.
if (!$note) return;
Acme::mirrorNote((int) ($ticket['id'] ?? 0), $note['message'] ?? '');
});Atamayı izleme
Bir talep personele atandığında ya da ataması kaldırıldığında çalışır.
Hook::add('action:ticket.assigned', 10,
function ($ticket, $old_assigned_id, $new_assigned_id) {
// Sifir = atama kaldirildi.
if (!$new_assigned_id) { Acme::backToPool((int) ($ticket['id'] ?? 0)); return; }
Acme::notifyAgent($new_assigned_id, (int) ($ticket['id'] ?? 0));
});Tuzaklar
Yanıt formundaki imza kutusu değerini bu kancadan alır, yazma anında kanca yeniden çalışır. İki sonucu var: dinleyiciniz sayfa her açıldığında da çalıştığı için orada sayaç artırmamalı ya da kayıt yazmamalıdır; ve imzayı koşulsuz belirliyorsanız kutu bir önizlemedir, bir girdi değil. Operatörün kutuda yaptığı elle düzenleme yazma anında ezilir.
İç not kancasının üçüncü parametresi, not okunamadığında boştur. İçine doğrudan erişen bir dinleyici o durumda hata üretir; ilk satırda sınayın.
Kardeşleri talebi, yanıt kimliğini ve yanıtı ayrı parametreler olarak verir; zamanlanmış görevin yanıtı ise hepsini tek bir bağlam dizisinde taşır. Aynı imzayı bekleyen bir dinleyici burada boş değerlerle çalışır.
İlgili Makaleler
- Destek Talebi Kancaları
- Müşteri Hesabı Kancaları
- Kancalar Nasıl Çalışır
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.