Otomasyonlar
Abone davranışlarına dayalı otomatik çalışan tetikleyici tabanlı e-posta dizileri kurun
Otomasyonlar, abone olayları tarafından tetiklenen çok adımlı e-posta dizileri oluşturmanızı sağlar. Bir tetikleyici tanımlayın, adım dizisi oluşturun ve MailLand tetikleyici her çalıştığında akışı otomatik olarak yürütür.
Otomasyon Tetikleyicileri
Her otomasyon tek bir tetikleyici ile başlar:
| Tetikleyici | Değer | Açıklama |
|---|---|---|
SubscriberJoins | 0 | Abone bir posta listesine eklenir |
SubscriberUpdated | 1 | Abone profili güncellenir |
CampaignOpened | 2 | Abone belirli bir kampanyayı açar |
CampaignClicked | 3 | Abone bir kampanyadaki bağlantıya tıklar |
DateBased | 4 | Yalnızca doğum günü tetikleyicisi: Subscriber.Birthday'i değerlendirir (aşağıdaki uyarıya bakın) |
DateBased yalnızca Subscriber.Birthday'i değerlendirir, keyfi bir yinelenen tarih alanını değil. Birthday, POST/PUT /v1/marketing/subscribers üzerinden (Aboneler sayfasına bakın) ve isteğe bağlı bir birthday sütununu kabul eden CSV içe aktarma üzerinden ayarlanabilir, bu yüzden bir DateBased otomasyonu doğum günü bu iki yoldan biriyle ayarlanmış her aboneyi kaydeder.
| Manual | 5 | API aracılığıyla manuel olarak tetiklenir |
Otomasyon Durumları
| Durum | Değer | Açıklama |
|---|---|---|
Draft | 0 | Düzenlenebilir, çalışmıyor |
Active | 1 | Çalışıyor: tetikleyici çalıştığında yeni aboneler kaydedilir |
Paused | 2 | Duraklatıldı: yeni kayıt yok ve zaten kayıtlı aboneler için sonraki adımlar durur. Yeniden etkinleştirmek (Active) her kaydı tam olarak durduğu yerden devam ettirir ve duraklatma sırasında vadesi gelen her şeyi teslim eder |
Archived | 3 | Arşivlendi: varsayılan görünümlerden gizlenir. Paused gibi, bu yeni kayıtları durdurur; zaten kayıtlı aboneler için sonraki adımlar da durur. Arşivden çıkarma uç noktası olmadığından, bu durdurma bu kayıtlar için kalıcıdır |
Adım Türleri
Her otomasyon sıralı bir adım dizisi içerir:
| Adım Türü | Değer | Açıklama |
|---|---|---|
SendEmail | 0 | Aboneye bir e-posta gönder |
Wait | 1 | Devam etmeden önce bir süre bekle |
Condition | 2 | Bir abone alanını değerlendirir; doğruysa devam eden, yanlışsa kaydı sonlandıran bir kapı (aşağıdaki Condition adımına bakın) |
AddToList | 3 | Aboneyi bir posta listesine ekle |
RemoveFromList | 4 | Aboneyi bir posta listesinden çıkar |
UpdateSubscriber | 5 | Abone alanlarını güncelle |
Webhook | 6 | Harici bir URL'ye webhook gönder |
Kişiselleştirme
Otomasyon e-posta adımları, kayıtlı abonenin kendi kaydından alıcı başına değiştirilen {{variable}} birleştirme etiketlerini destekler.
| Etiket | Değer |
|---|---|
{{firstName}} | Abonenin adı |
{{lastName}} | Abonenin soyadı |
{{fullName}} | Ad ve soyad birleşimi |
{{email}} | Abonenin e-posta adresi |
{{subscriberId}} | Opak abone tanımlayıcısı |
{{custom_<field>}} | Abonedeki herhangi bir özel alan, {{<field>}} olarak da kullanılabilir |
<p>Hi {{firstName}}, here's what's new this month.</p>Değeri olmayan bir etiket tam olarak yazıldığı gibi bırakılır: adı olmayan bir abone için {{firstName}}, teslim edilen e-postada {{firstName}} olarak kalır. Her iki durumda da doğru okunan içerik yazın. Her abonenin bu alana sahip olduğundan emin değilseniz yedek bir selamlama kullanın.
Değerler, düştükleri kısma göre kaçışlanır: HTML içeriği HTML olarak kaçışlanır, oysa konu satırı ve düz metin gövdesi asla kaçışlanmaz, Ben & Jerry's tam olarak öyle kalır.
Eski snake_case yazımları ({{first_name}}, {{last_name}}, {{full_name}}, {{subscriber_id}}) takma ad olarak çalışmaya devam eder.
Otomasyon Oluşturma
POST https://api.mail.land/v1/marketing/automations{
"name": "Welcome Series",
"description": "3-email welcome sequence for new subscribers",
"trigger": 0,
"mailingListId": "7h3n5k8w2q9m1t",
"campaignId": null,
"steps": [
{
"type": 0,
"order": 1,
"templateId": "2p9x4k7m3q8n1z",
"subject": "Welcome to our newsletter!"
},
{
"type": 1,
"order": 2,
"delayMinutes": 1440
},
{
"type": 0,
"order": 3,
"templateId": "9k4p2x7m1q3n8z"
}
]
}| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
name | string | Evet | Otomasyon adı (çalışma alanı başına benzersiz) |
description | string | Hayır | Otomasyon açıklaması |
trigger | int | Evet | Tetikleyici türü (tetikleyiciler tablosuna bakın) |
mailingListId | string | Hayır | Tetikleyici için hedef posta listesi |
campaignId | string | Hayır | CampaignOpened / CampaignClicked tetikleyicileri için isteğe bağlıdır: belirtilmezse tetikleyici yalnızca bir kampanya için değil herhangi bir kampanya için çalışır |
steps | array | Evet | Sıralı adım dizisi |
Bir otomasyonda segmentId alanı yoktur: bu alan burada mevcut değildir (segmentler başka yerlerde, örneğin kampanyalarda kullanılır). SendEmail adımının içeriği templateId'den gelir, satır içi htmlContent/textContent/fromName/fromEmail'den değil.
campaignId, açma/tıklama tetikleyicileri için isteğe bağlıdır, bu sayfanın önceki sürümlerinde belirtildiği gibi zorunlu değildir. Ayrıca MailLand'in bugün filtrelemediği makine açılışlarında da (Apple Mail Privacy Protection ön yükleme, güvenlik bağlantı tarayıcıları) tetiklenir.
Adım Alanları
Her adımın gerçek şekli { order, type, delayMinutes, templateId, subject, settings: {} } şeklindedir: otomasyon düzeyinde bir segmentId yoktur ve adımların bu sayfanın önceki sürümlerinde gösterilen türe özgü alanları yoktur (conditionField, targetMailingListId, updateField, webhookUrl, fromName, fromEmail, replyTo üst düzey adım alanları değildir). Aşağıdaki tablolar gerçek şekli yansıtır.
SendEmail adımı (type: 0):
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
type | int | Evet | 0 |
order | int | Evet | Dizi içindeki adım sırası |
delayMinutes | int | Hayır | Bu adım çalışmadan önce beklenecek dakika: ilk adım olduğunda bile: ilk gönderimden önceki gecikme artık kayıt sırasında dikkate alınır (önceden yok sayılırdı) |
templateId | string | Evet | E-posta içeriğini sağlayan şablon: içerik yalnızca şablondan gelir |
subject | string | Hayır | Ayarlanırsa şablonun konusunu geçersiz kılar |
Bir adımda satır içi htmlContent/textContent/fromName/fromEmail/replyTo yoktur. Gönderen, çalışma alanı adıyla birlikte gösterilen noreply@<ilk tam doğrulanmış alan adı> olarak sabittir, adım başına yapılandırılamaz.
templateId, her SendEmail adımında zorunludur. templateId içermeyen oluşturma/güncelleme istekleri 400 VALIDATION_FAILED ile reddedilir; tenant'ınızda bir şablona karşılık gelmeyen bir templateId 400 TEMPLATE_NOT_FOUND ile reddedilir: her ikisi de herhangi bir şey yazılmadan önce gerçekleşir. Bir şablon otomasyon kaydedildikten sonra silinirse, bu adıma ulaşan bir sonraki abonenin kaydı, adım sessizce atlanmak yerine Failed olarak işaretlenir ve otomasyonun totalFailed sayacına dahil edilir (Otomasyon Ayrıntılarını Al bölümüne bakın).
Wait adımı (type: 1):
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
type | int | Evet | 1 |
order | int | Evet | Adım sırası |
delayMinutes | int | Evet | Sonraki adımdan önce beklenecek dakika |
Condition adımı (type: 2):
Bir Condition adımı bir kapıdır, bir dallanma değildir: doğrusal bir adım listesinin ikinci bir
yolu yoktur. Doğru olarak değerlendirildiğinde kayıt bir sonraki adıma devam eder. Yanlış
olarak değerlendirildiğinde kayıt orada biter (Completed) ve o abone için sonraki hiçbir adım
çalışmaz.
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
type | int | Evet | 2 |
order | int | Evet | Adım sırası |
settings.conditionField | string | Evet | Değerlendirilecek abone alanı: email, firstName, lastName, phone, company, source veya özel bir alan için custom_<name> |
settings.conditionOperator | string | Evet | equals, notEquals, contains, notContains, startsWith, endsWith, isEmpty, isNotEmpty (büyük/küçük harf duyarsız) |
settings.conditionValue | string | isEmpty/isNotEmpty dışında zorunlu | Karşılaştırılacak değer |
Karşılaştırmalar, segmentlerin zaten sunduğu operatörlerle aynı, büyük/küçük harf duyarsız dize
karşılaştırmalarıdır. Oluşturma/güncelleme sırasında conditionField bilinmiyorsa, conditionOperator
yukarıdaki değerlerden biri değilse veya değere ihtiyaç duyan bir operatör için conditionValue
eksikse 400 VALIDATION_FAILED döndürülür.
Bu doğrulama var olmadan önce kaydedilmiş bir Condition adımı (bu yüzden ayarları
değerlendirilemez) sürekliliği korumak için değişmeden geçmeye devam eder, yalnızca yeni
oluşturma/güncelleme istekleri doğrulanır.
AddToList / RemoveFromList adımları (type: 3, 4):
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
type | int | Evet | 3 veya 4 |
order | int | Evet | Adım sırası |
settings.mailingListId | string | Evet | settings'ten okunan, aboneyi eklenecek/çıkarılacak posta listesi |
UpdateSubscriber adımı (type: 5):
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
type | int | Evet | 5 |
order | int | Evet | Adım sırası |
settings | object | Evet | settings içindeki her anahtar, abone üzerinde özel bir alan olarak yazılır |
Webhook adımı (type: 6):
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
type | int | Evet | 6 |
order | int | Evet | Adım sırası |
settings.url | string | Evet | settings'ten okunan, POST isteğinin gönderileceği URL |
Webhook adımı istekleri, adımın alıcısına ait bir anahtarla imzalanır (X-MLND-Signature, müşteri webhook'ları gibi doğrulanır): her farklı adım URL'sinin kendi anahtarı vardır, bu yüzden hiçbir alıcı başka bir alıcı adına imza atamaz. Anahtarları GET /v1/marketing/automations/{id}/webhook-signing-secrets ile okuyun, POST /v1/marketing/automations/{id}/webhook-signing-secrets/regenerate ile yenileyin, bkz. Sürümleme. Yalnızca bir alıcıyı yenilemek için { "webhookUrl": "…" } gönderin.
curl -X POST https://api.mail.land/v1/marketing/automations \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"name": "Welcome Series",
"trigger": 0,
"mailingListId": "7h3n5k8w2q9m1t",
"steps": [
{
"type": 0, "order": 1,
"subject": "Welcome!",
"templateId": "2p9x4k7m3q8n1z"
},
{ "type": 1, "order": 2, "delayMinutes": 1440 },
{
"type": 0, "order": 3,
"subject": "Getting started",
"templateId": "9k4p2x7m1q3n8z"
}
]
}'Yanıt
{
"id": "4f8k2m9p1q6z3s",
"name": "Welcome Series",
"description": "3-email welcome sequence for new subscribers",
"trigger": "subscriberJoins",
"triggerName": "SubscriberJoins",
"status": "draft",
"statusName": "Draft",
"mailingListId": "7h3n5k8w2q9m1t",
"mailingListName": "Product Updates",
"campaignId": null,
"campaignName": null,
"stepsCount": 3,
"totalEnrolled": 0,
"totalCompleted": 0,
"activatedAt": null,
"createdAt": "2026-02-17T12:00:00Z",
"updatedAt": "2026-02-17T12:00:00Z"
}Bir otomasyonda segmentId/segmentName alanı yoktur ve kayıt sayaçları totalEnrolled/totalCompleted'dir (totalEnrollments/activeEnrollments/completedEnrollments değil). Detay yanıtı ayrıca steps (tam adım listesi), completionRate ve totalFailed ekler: tenant'ta şablonu olmayan (eksik veya sonradan silinmiş) bir SendEmail adımına ulaşan kayıtlar.
Otomasyonları Listeleme
GET https://api.mail.land/v1/marketing/automations| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
cursor | string | - | Önceki sayfanın nextCursor değerinden alınan opak imleç. İlk sayfa için belirtmeyin. |
limit | int | 20 | Sayfa başına öğe sayısı |
search | string | - | Ada göre arama |
status | int | - | Otomasyon durumuna göre filtreleme |
trigger | int | - | Tetikleyici türüne göre filtreleme |
mailingListId | string | - | Posta listesine göre filtreleme |
sortBy | string | - | Sıralama alanı |
sortDesc | bool | false | Azalan sıralama |
curl https://api.mail.land/v1/marketing/automations \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Otomasyon Detaylarını Görüntüleme
GET https://api.mail.land/v1/marketing/automations/{id}Tüm adımlar dahil tam otomasyonu döndürür:
curl https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."{
"id": "4f8k2m9p1q6z3s",
"name": "Welcome Series",
"description": "3-email welcome sequence for new subscribers",
"trigger": "subscriberJoins",
"triggerName": "SubscriberJoins",
"status": "active",
"statusName": "Active",
"mailingListId": "7h3n5k8w2q9m1t",
"mailingListName": "Product Updates",
"campaignId": null,
"campaignName": null,
"stepsCount": 3,
"totalEnrolled": 230,
"totalCompleted": 200,
"totalFailed": 4,
"activatedAt": "2026-01-10T08:05:00Z",
"steps": [
{
"order": 1,
"type": "sendEmail",
"typeName": "SendEmail",
"delayMinutes": null,
"templateId": "2p9x4k7m3q8n1z",
"subject": "Welcome to our newsletter!",
"settings": null
},
{
"order": 2,
"type": "wait",
"typeName": "Wait",
"delayMinutes": 1440,
"templateId": null,
"subject": null,
"settings": null
},
{
"order": 3,
"type": "sendEmail",
"typeName": "SendEmail",
"delayMinutes": null,
"templateId": "9k4p2x7m1q3n8z",
"subject": "Getting started with MailLand",
"settings": null
}
],
"completionRate": 86.96,
"createdAt": "2026-01-10T08:00:00Z",
"updatedAt": "2026-02-17T12:00:00Z"
}Otomasyon Güncelleme
PUT https://api.mail.land/v1/marketing/automations/{id}Active dışındaki her durum güncellenebilir (yalnızca Draft/Paused değil). İstek gövdesi oluşturma isteği ile aynıdır.
curl -X PUT https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"name": "Welcome Series",
"trigger": 0,
"mailingListId": "7h3n5k8w2q9m1t",
"steps": [
{
"type": 0, "order": 1,
"subject": "Welcome!",
"templateId": "2p9x4k7m3q8n1z"
},
{ "type": 1, "order": 2, "delayMinutes": 1440 },
{
"type": 0, "order": 3,
"subject": "Getting started",
"templateId": "9k4p2x7m1q3n8z"
}
]
}'Otomasyon Etkinleştirme
POST https://api.mail.land/v1/marketing/automations/{id}/activateOtomasyonu Draft veya Paused durumundan Active durumuna geçirir. Etkinleştirildikten sonra, otomasyon tetikleyici çalıştığında aboneleri kaydetmeye başlar.
Etkinleştirmenin kendisi alan adı doğrulamasına karşı kontrol edilmez. Tamamen doğrulanmış hiçbir alan adı olmadan ulaşılan bir SendEmail adımı atlanmaz, bekletilir: artan bir aralıkla (15 dakika, ardından en fazla 6 saatte bir) yeniden kontrol edilir ve bir alan adı doğrulanır doğrulanmaz gönderilir. Adımın ilk vadesi geldiği andan itibaren 7 gün içinde hiçbir alan adı doğrulanmazsa, kayıt sonsuza kadar bekletilmek yerine Failed olarak işaretlenir (totalFailed'e sayılır): yani doğrulanmış hiçbir alan adı olmadan etkinleştirme başarılı olur, ancak bir alan adını doğrulayana kadar hiçbir şey teslim edilmez ve bir haftadan sonra hâlâ bekleyen kayıtlar sonsuza kadar bekletilmek yerine sona erer.
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/activate \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Otomasyon Duraklatma
POST https://api.mail.land/v1/marketing/automations/{id}/pauseOtomasyonu duraklatır. Yeni aboneler kaydedilmez ve dizide halihazırda bulunan aboneler ilerlemeyi durdurur, her kayıt mevcut adımında bekler. Otomasyonu yeniden etkinleştirmek, duraklatılan her kaydı kaldığı yerden devam ettirir ve duraklama sırasında vadesi gelen her şeyi teslim eder.
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/pause \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Otomasyon Arşivleme
POST https://api.mail.land/v1/marketing/automations/{id}/archiveOtomasyonu arşivler; bu işlem Active dahil herhangi bir durumdan yapılabilir. Arşivlenen otomasyonlar varsayılan liste görünümlerinden gizlenir.
Arşivleme, hem yeni kayıtları hem de zaten kayıtlı aboneler için sonraki adımları durdurur: her kayıt, tıpkı duraklatmada olduğu gibi mevcut adımında bekler. Duraklatmadan farklı olarak, Archived bir otomasyonu yeniden etkinleştiren bir uç nokta yoktur, bu yüzden bu durdurma kendiliğinden çözülmez.
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/archive \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Otomasyon Çoğaltma
POST https://api.mail.land/v1/marketing/automations/{id}/duplicate?name=Copy%20of%20Welcome%20SeriesKlonlanmış adımlar ve ayarlarla yeni bir Draft otomasyon oluşturur. name sorgu parametresi isteğe bağlıdır.
curl -X POST "https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/duplicate?name=Copy%20of%20Welcome%20Series" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Manuel Tetikleme
POST https://api.mail.land/v1/marketing/automations/{id}/trigger{
"subscriberIds": ["3m8k1p9x4q7n2z", "6q2n9k4x1p8m3z", "1x7m3q8k2n9p4z"]
}Belirli aboneleri otomasyona manuel olarak kaydeder. Otomasyon Active durumunda olmalı ve tetikleyici türü Manual (5) olmalıdır.
curl -X POST https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s/trigger \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{"subscriberIds": ["3m8k1p9x4q7n2z", "6q2n9k4x1p8m3z", "1x7m3q8k2n9p4z"]}'Kayıt Takibi
Her abonenin otomasyon boyunca ilerlemesi bir kayıt olarak takip edilir:
| Durum | Değer | Açıklama |
|---|---|---|
Active | 0 | Şu anda adımlar arasında ilerliyor |
Paused | 1 | Kayıt duraklatıldı |
Completed | 2 | Tüm adımları tamamladı |
Failed | 3 | Bir SendEmail adımının bu tenant'ta şablonu yok: baştan eksik ya da sonradan silinmiş. Otomasyonun totalFailed sayacına dahildir |
Unsubscribed | 4 | Abone dizi sırasında aboneliğini iptal etti |
Cancelled kayıt durumu yoktur. Otomasyon detay yanıtı toplam kayıt sayılarını totalEnrolled ve totalCompleted olarak içerir (totalEnrollments/activeEnrollments/completedEnrollments/failedEnrollments değil).
Otomasyon Silme
DELETE https://api.mail.land/v1/marketing/automations/{id}Otomasyonu, adımlarını ve kayıt verilerini kalıcı olarak siler.
Güncelleme ve silme, Active dışındaki her durum için izin verilir: bu sayfanın önceki sürümlerinde belirtildiği gibi yalnızca Draft/Paused (güncelleme) veya Draft/Archived (silme) değil.
curl -X DELETE https://api.mail.land/v1/marketing/automations/4f8k2m9p1q6z3s \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."Hata Yanıtları
| Durum | Kod | Açıklama |
|---|---|---|
400 | VALIDATION_FAILED | Zorunlu alanlar eksik veya geçersiz adım yapılandırması: templateId içermeyen bir SendEmail adımı veya değerlendirilemeyen settings içeren bir Condition adımı dahil |
400 | TEMPLATE_NOT_FOUND | Bir SendEmail adımının templateId'si tenant'ınızda bir şablona karşılık gelmiyor |
400 | INVALID_REQUEST | Otomasyon adı zaten mevcut veya geçersiz durum geçişi |
403 | FORBIDDEN | Yetersiz yetkiler |
404 | RESOURCE_NOT_FOUND | Otomasyon bulunamadı veya durum geçişi geçersiz (yanlış durumda güncelleme/etkinleştirme/duraklatma, Active bir otomasyonun silinmesi) |
Otomasyon uç noktaları hiçbir zaman 422 döndürmez.
Sonraki Adımlar
- Kampanyalar: tek seferlik kampanyalar gönderin
- Aboneler: otomasyonların hedeflediği kişileri yönetin
- Listeler: tetikleyiciler için aboneleri listelere düzenleyin