Otomasyon kuralı, bir konuşmada bir şey olduğunda kendiliğinden çalışır: koşulları denetler, ardından sizin
yerinize etiketler, atar, yanıtlar ya da bir webhook çağırır. Kurallar /v1/automation-rules altındaki API ile
yönetilir; tüm örnekler bir API anahtarı kullanır.
1. Kural oluşturun
Kuralları sahipler, yöneticiler ve gelen kutularıyla sınırlı olmayan anahtarlar oluşturur. Bu kural, mesai saatleri dışında açılan her yeni e-posta konuşmasına etiket ekler ve hazır yanıt gönderir:
curl -X POST https://support.example.com/v1/automation-rules \
-H "Authorization: Bearer $YUVA_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "After hours",
"trigger": "conversation_created",
"conditions": [
{"field": "channel_kind", "operator": "in", "values": ["email"]},
{"field": "business_hours", "operator": "equals", "value": "outside"}
],
"actions": [
{"type": "add_labels", "label_ids": ["<label id>"]},
{"type": "send_reply", "canned_reply_id": "<canned reply id>"}
]}'
Yanıt kuralın kendisidir, 201. Sıranın sonuna girer ve kaydedildikten sonra olanlara tepki verir. Bir
kuralın adını verdiği her etiket, üye, ekip, hazır yanıt, webhook uç noktası, özel alan ve gelen kutusu var olmalıdır
(400 validation_failed). Bir çalışma alanında en fazla 100 kural olur (403 automation_rule_limit).
| Alan | Anlamı |
|---|---|
name |
1 ile 100 karakter. |
enabled |
Varsayılan true. |
inbox_id |
Her gelen kutusundaki kural için boş bırakın; yalnızca o gelen kutusunun konuşmalarında çalışması için verin. |
trigger |
Kuralın ne zaman değerlendirileceği, bkz. tetikleyiciler. |
idle_minutes |
5 ile 43200. idle için zorunlu, diğer tetikleyicilerde reddedilir. |
conditions |
En fazla 20; hepsi eşleşmeli. Boş liste her konuşmayla eşleşir. |
actions |
1 ile 10. |
PATCH /v1/automation-rules/{automationRuleId} yalnızca gönderdiklerinizi değiştirir; conditions ve actions
bütünüyle değiştirilir, null verilen inbox_id ve idle_minutes temizlenir.
| Çağrı | Ne yapar |
|---|---|
GET /v1/automation-rules |
Kuralları sırayla listeler: {"items": [...]}. |
POST /v1/automation-rules |
Bir kural oluşturur. |
GET, PATCH, DELETE /v1/automation-rules/{automationRuleId} |
Birini okur, değiştirir ya da siler. Silmek günlüğünü de siler; kuralın yaptıkları kalır. |
PUT /v1/automation-rules/order |
Sırayı belirler: {"ids": [...]} her kuralı bir kez içerir. |
GET /v1/automation-rules/{automationRuleId}/runs |
Kuralın günlüğü. |
2. Tetikleyiciler
| Tetikleyici | Ne zaman çalışır |
|---|---|
conversation_created |
Bir konuşma oluşturuldu: bir kişi, üye ya da anahtar tarafından. |
message_received |
Kişi bir mesaj yazdı. İçe aktarılan mesajlar ve taslaklar sayılmaz. |
status_changed |
Durum değişti; bir kişinin mesajı ya da erteleme süresinin dolması konuşmayı yeniden açtığında da. |
idle |
Açık ya da bekleyen bir konuşmada idle_minutes boyunca hiçbir şey yazılmadı. |
idle her 5 dakikada bir denetlenir; kural en fazla birkaç dakika geç çalışır ve sessiz dönem başına bir kez:
bir sonraki dönem ancak biri yazdıktan sonra başlar. Bir kuralın kendi notu ya da yanıtı yeni bir sessiz dönem
başlatmaz. Sunucu 15 dakikadan uzun süre kapalıyken sessizleşen bir konuşma yakalanmaz. Spam, çöp kutusundaki ve
kapalı konuşmalar hiçbir zaman boşta sayılmaz; kural çalışmadan önce yazılan ya da kapatılan konuşmaya dokunulmaz.
3. Koşullar
Bir koşulun field, operator ve karşılaştırılacak değeri vardır: in ve not_in için values, equals,
not_equals, contains ve not_contains için value, is_set ve is_not_set için hiçbiri.
| Alan | İşleçler | Neyi karşılaştırır |
|---|---|---|
channel_kind |
in, not_in |
email, chat, app ya da api. |
kind |
in, not_in |
Konuşma türü. |
feedback_category |
in, not_in |
Geri bildirim kategori anahtarları. |
priority, status |
in, not_in |
Konuşmanın önceliği ya da durumu. |
subject, body |
contains, not_contains |
Büyük/küçük harf duyarsız. body kuralı tetikleyen mesajdır; diğer tetikleyicilerde kişinin son mesajı. |
contact_attribute |
equals, not_equals, contains, not_contains, is_set, is_not_set |
key ile adı verilen kişi özniteliği. |
custom_field |
aynı | O key ile konuşmanın özel alanı. Sayılar, onay kutuları ve tarihler JSON metni olarak karşılaştırılır (42, true, 2026-01-31). |
label |
in, not_in |
in: etiketlerden herhangi birine sahip. not_in: hiçbirine sahip değil. |
team |
in, not_in, is_set, is_not_set |
Ekip kimlikleri. |
assignee |
is_set, is_not_set |
Atanmış bir üye olup olmadığı. |
business_hours |
equals |
Gelen kutusunun mesai saatleri inside (içinde) ya da outside (dışında). Mesai saati olmayan gelen kutusu her zaman içindedir. |
equals birebir eşleşir; contains büyük/küçük harfe bakmaz. Koşullar konuşmanın kural çalıştığı andaki hâline
göre denetlenir; yani bir kural, öncekilerin değiştirdiğini görür.
4. Eylemler
| Eylem | Alanlar | Ne yapar |
|---|---|---|
add_labels, remove_labels |
label_ids (en fazla 50) |
Etiket ekler ya da kaldırır. Aynı etiketi paylaşamazlar. |
assign_member |
member_id |
Gelen kutusuna erişimi olan bir üyeyi atar. |
assign_team |
team_id |
Gelen kutusuna yetkili bir ekibi atar. |
unassign |
yok | Atanmış üyeyi kaldırır. |
assign_pool |
yok | Atanan üyeyi temizler; tetikleyicinin kuralları çalıştıktan sonra otomatik atama havuzdan birini seçer. |
set_priority |
priority |
Önceliği ayarlar. |
set_status |
status |
open, pending ya da closed. Kapatmak için konuşmanın zorunlu özel alanları gerekir. |
snooze |
snooze_minutes (1 ile 525600) |
Konuşmayı erteler. |
add_note |
body (en fazla 10000 karakter) |
İç not ekler. |
send_reply |
canned_reply_id |
Hazır yanıtın metnini kişiye gönderir, bkz. yanıtlar. |
send_webhook |
webhook_id |
O uç noktaya automation.triggered gönderir. |
Her tür bir kuralda en fazla bir kez, yalnızca kendi alanlarıyla yer alır (aksi hâlde 400 validation_failed).
set_status ile snooze birbirini dışlar; assign_member, assign_pool ve unassign da öyle.
Bir kuralın içinde eylemler, siz hangi sırayla yazarsanız yazın sabit bir sırayla çalışır: not, yanıt, ardından
etiketler, atanan, ekip, öncelik ve durum ya da erteleme birlikte, en sonda webhook. Bir kuralın bir konuşmada yaptığı
her şey zaman çizelgesine system yazarıyla yazılır ve her mesaj o andaki kuralın id ve name değerlerini
taşıyan rule alanını içerir. Bir çalıştırma ayrıca eylemleri ve sonuçlarını listeleyen bir rule_applied olayı ekler.
5. Sıra ve döngüler
Kurallar position ile sıralanmış tek bir listededir; çalışma alanı ve gelen kutusu kuralları aynı listeyi paylaşır.
Bir tetikleyici için uygulanan etkin kurallar bu sırayla çalışır ve her kural tetikleyici başına en fazla bir kez,
sunucu yeniden denese bile: bir kez çalışmış kural, eşleşmiş olsun olmasın, o tetikleyici için bir daha çalışmaz.
Bir kuralın kendi değişiklikleri hiçbir kuralı tetiklemez; yani kurallar döngüye giremez: eklediği etiket, ayarladığı durum ya da yazdığı mesaj hiçbir şey başlatmaz. Bir kuralın kurduğu erteleme için de aynıdır: erteleme bitip konuşma yeniden açıldığında uyanma için hiçbir kural çalışmaz.
6. Yanıtlar
send_reply, hazır yanıtın metnini otomatik yanıt olarak gönderir (e-postada Auto-Submitted: auto-replied
ile). Aşağıdaki durumlarda reddedilir ve çalıştırma error: auto_reply ile başarısız olur:
- kuralı tetikleyen mesaj bir otomatik yanıt ya da geri dönen e-postadır (bounce);
- kuralı tetikleyen mesaj DMARC’tan geçmemiş bir e-postaysa (sohbet ve API mesajları etkilenmez);
- kişi engellenmiştir;
- konuşma spamdır;
- bir kural bu konuşmada son bir saat içinde ya da son 24 saatte üç kez zaten yanıt verdi.
Bir kuralın müşterilere e-posta gönderip gönderemeyeceği ayrıca bots_may_send çalışma alanı ayarına bağlıdır
(Botlar gönderebilir). Kapalıyken yanıt yalnızca hem kural hem de hazır yanıt,
kural çalıştığında hâlâ sahip ya da yönetici olan bir üye tarafından en son kaydedilmişse gider; aksi hâlde çalıştırma
bot_sending_disabled ile başarısız olur ve detail hangisinin eksik olduğunu söyler.
İkisinde de saved_by vardır (type ve member_id ya da api_key_id):
- Bir kuralın
saved_bydeğeri, onu oluşturan ya datrigger,idle_minutes,inbox_id,conditions,actionsveyaenabledalanlarını en son değiştirendir. Yeniden adlandırma ve yeniden sıralama onu değiştirmez. - Bir hazır yanıtın
saved_bydeğeri, onu oluşturan ya da metnini en son değiştirendir. Kaydedildiği zaman henüz tutulmadığı için eski yanıtlarda yoktur;bots_may_sendkapalıyken bir kuralın bunu gönderebilmesi için bir sahip ya da yöneticinin yanıtı yeniden kaydetmesi gerekir. - API anahtarları ve bağlı uygulamalar, bir sahip yapmış olsa bile bot sayılır.
7. Çalıştırma günlüğü
Bir kural bir tetikleyici için her değerlendirildiğinde bir çalıştırma bırakır; 30 gün saklanır:
curl -H "Authorization: Bearer $YUVA_API_KEY" \
"https://support.example.com/v1/automation-rules/$RULE_ID/runs?outcome=failed"
En yeni önce; sayfalama için limit ve next_cursor. outcome tek bir değere göre süzer.
| Sonuç | Anlamı |
|---|---|
applied |
Koşullar eşleşti ve eylemler uygulandı. |
failed |
Bir eylem yapılamadı. O kuralın hiçbir şeyi uygulanmadı. error sorun kodunu, detail bir cümle içerir. |
not_matched |
Koşullar eşleşmedi. Eylem yok. |
Her çalıştırmada conversation_id, trigger ve actions vardır: eylem başına bir type ve result. Sonuç
applied, unchanged (konuşma zaten öyleydi), skipped (yalnızca eski çalıştırmalarda) ya da not_run (çalıştırma başarısız oldu) olur.
Sık görülen error değerleri:
| Hata | Nedeni |
|---|---|
auto_reply |
Müşteriyi korumak için yanıt reddedildi, bkz. yanıtlar. |
bot_sending_disabled |
bots_may_send kapalı ve kural ya da hazır yanıt en son bir sahip veya yönetici tarafından kaydedilmemiş. |
field_required |
Kapatmak için bir özel alan değeri gerekir. |
team_access, validation_failed |
Ekibin gelen kutusuna erişimi yok ya da üyenin yok. |
email_undeliverable, email_not_configured |
Yanıt e-postayla gönderilemedi. |
label_gone, canned_reply_gone, webhook_unavailable |
Eylemin adını verdiği şey silindi ya da uç nokta kapalı veya başka bir gelen kutusuyla sınırlı. |
Silinmiş bir etiketi, üyeyi, ekibi, hazır yanıtı ya da uç noktayı anan bir kural değiştirilmez: onu gerektiren
eylemleri başarısız olur. Silinmiş bir etiket veya ekip üzerindeki koşul hiç eşleşmez (in) ya da her zaman eşleşir
(not_in). Bir gelen kutusunu silmek onun kurallarını da siler.
8. Webhook eylemi
send_webhook, adını verdiği webhook uç noktasına diğer teslimatlar gibi imzalanmış bir
automation.triggered olayı gönderir. Uç nokta bunu events içinde listeleyemez (orada reddedilir); kapalı ya da
başka bir gelen kutusuyla sınırlı olmadıkça events değerinden bağımsız olarak alır. Kurallar URL veya sır saklamaz.
data şunları içerir: rule (id, name), trigger, kuralın diğer eylemlerinden sonraki hâliyle conversation ve contact.
9. Hız sınırı
Bir çalışma alanının kuralları dakikada en fazla 600 eylem uygular. Bir kural sınırı aşacaksa başarısız olmaz, sonraki dakikayı bekler; sonraki kurallar da onunla bekler. Koşulları eşleşmeyen kurallar hiçbir şeye mal olmaz.
10. Erişim
| Kapsam | İzin verir |
|---|---|
automations:read |
Kuralları ve günlüklerini okur. |
automations:manage |
Kural oluşturur, değiştirir, sıralar ve siler. Yalnızca sahipler ve yöneticiler; gelen kutularıyla sınırlı anahtarlarda reddedilir; başka hiçbir kapsama dahil değildir. |
Aracılar ve bazı gelen kutularıyla sınırlı anahtarlar çalışma alanı kurallarını ve kendi gelen kutularının kurallarını
okuyabilir (diğerleri 404), yalnızca kendi gelen kutularındaki konuşmaların çalıştırmalarını görür. Yazamazlar:
403 forbidden. Bir kural kapsadığı her gelen kutusunda çalışma alanının yetkisiyle davrandığı için
automations:manage yetkisini dikkatle verin.
Bir kuralı oluşturmak, değiştirmek ve silmek denetim günlüğüne
automation_rule.created, automation_rule.updated ve automation_rule.deleted olarak, kuralın adı,
tetikleyicisi, gelen kutusu, eylem türleri ve webhook uç noktalarının ana makineleriyle (URL’leriyle asla) yazılır.
Otomasyon kuralları MCP asistanlarına bilerek sunulmaz.