SAP Commerce Cloud’un en güçlü modüllerinden biri olan SAP Commerce Promotion Engine, e-ticaret sitelerinde kampanyaların dinamik, yönetilebilir ve performanslı şekilde uygulanmasını sağlayan kural tabanlı (Rule-Based) bir kampanya motorudur.
Eski Hybris sürümlerindeki klasik Promotions Extension’dan farklı olarak Promotion Engine, Drools Rule Engine üzerine inşa edilmiştir ve kampanyaların kod yazılmadan Business kullanıcıları tarafından Backoffice üzerinden yönetilmesine olanak tanır.
Kurumsal e-ticaret projelerinde yüzlerce hatta binlerce kampanya aynı anda aktif olabilir. Örneğin;
- Sepette %20 indirim
- 3 Al 2 Öde
- Aynı kategoriden ikinci ürüne %50
- VIP müşterilere özel kampanyalar
- Kupon kampanyaları
- Marka bazlı indirimler
- Kargo promosyonları
gibi birçok senaryo Promotion Engine tarafından yönetilir.
Bu makalede yalnızca Promotion oluşturmayı değil, Promotion Engine’in arkasındaki mimariyi, çalışma mantığını ve gerçek proje deneyimlerini inceleyeceğiz.
Promotion Engine Neden Geliştirildi?
Eski Promotion mekanizması birçok projede yeterli olsa da büyük ölçekli sistemlerde bazı problemler ortaya çıkıyordu.
| Eski Promotions | Promotion Engine |
|---|---|
| Kod bağımlılığı yüksektir | Rule tabanlıdır |
| Esnek değildir | Business kullanıcıları yönetebilir |
| Zor bakım yapılır | Backoffice üzerinden yönetilir |
| Performans sınırlıdır | Drools optimizasyonları kullanılır |
| Version desteği zayıftır | Rule versioning bulunur |
SAP bu nedenle tamamen Rule Engine tabanlı yeni Promotion Engine mimarisini geliştirmiştir.
Promotion Engine Architecture
Promotion Engine aslında tek başına çalışan bir servis değildir.
Aşağıdaki bileşenlerle birlikte çalışır.
Customer
|
Cart
|
Calculation Service
|
Promotion Engine
|
Rule Engine (Drools)
|
PromotionResult
|
Order Recalculation
|
Final Cart
Bu mimaride Promotion Engine yalnızca indirim hesaplamaz.
Aynı zamanda;
- Rule Evaluation
- Discount Calculation
- Consumed Entry hesaplama
- Coupon kontrolü
- Promotion Result oluşturma
işlemlerini de gerçekleştirir.
Promotion Engine Request Flow
Gerçek bir sepet hesaplaması şu şekilde ilerler.
Customer adds product
↓
Cart created
↓
CalculationService
↓
PromotionService
↓
Rule Engine
↓
Promotion Evaluation
↓
Discount Actions
↓
PromotionResult
↓
Order Recalculation
↓
Final Price
Burada en kritik nokta Promotion Engine’in Calculation Service ile entegre çalışmasıdır.
Promotion hesaplandıktan sonra sipariş tekrar hesaplanır.
Bu nedenle büyük kampanyalarda performans oldukça önemlidir.
Promotion Rule Yapısı
Bir Promotion temel olarak iki parçadan oluşur.
Condition
Kampanyanın hangi durumda çalışacağını belirler.
Örneğin
Cart Total > 1000 TL
veya
Customer == VIP
veya
Category == Electronics
Action
Condition sağlandığında yapılacak işlemdir.
Örneğin;
10% Discount
veya
Free Gift
veya
150 TL Discount
Basit bir örnek;
IF
Cart Total > 1000
THEN
150 TL Discount
Business kullanıcıları aslında Backoffice üzerinde bunu sürükle bırak yöntemiyle oluştururlar.
Promotion Groups
Kurumsal projelerde en önemli kavramlardan biri Promotion Group’tur.
Örneğin;
Default Promotions
VIP Promotions
Flash Sale
Black Friday
Summer Campaign
Her Rule aynı grupta olmak zorunda değildir.
Bunun avantajı;
- daha hızlı evaluation
- daha kısa publish süresi
- daha kolay yönetim
sağlamasıdır.
Binlerce Rule’un tek Promotion Group altında olması ciddi performans problemleri oluşturabilir.
Drools Altyapısı
Promotion Engine’in arkasında çalışan teknoloji Drools Rule Engine‘dir.
Backoffice’de oluşturulan Rule’lar doğrudan çalıştırılmaz.
Önce Drools formatına çevrilir.
Rule
↓
Rule Compiler
↓
Drools DRL
↓
KIE Module
↓
Rule Evaluation
Bu nedenle publish işlemi aslında Rule Compilation işlemidir.
RAO (Rule Action Object)
Promotion Engine Java Model’leri doğrudan kullanmaz.
Bunun yerine RAO isimli objeler oluşturur.
Örneğin;
CartRAO
OrderEntryRAO
CustomerRAO
ProductRAO
CategoryRAO
Bu yaklaşımın avantajı Rule Engine’in Commerce katmanından bağımsız çalışabilmesidir.
PromotionResult
Promotion çalıştıktan sonra ortaya PromotionResult çıkar.
PromotionResult
|
|-- Discount Values
|-- Consumed Entries
|-- Promotion
|-- Actions
PromotionResult siparişe uygulanacak tüm indirimleri içerir.
Coupon Yapısı
Promotion ile Coupon aynı şey değildir.
Promotion otomatik çalışabilir.
Coupon ise kullanıcı tarafından girilir.
Promotion
↓
Automatic
Coupon
↓
Manual Trigger
SAP Commerce aşağıdaki coupon tiplerini destekler.
- Single Code
- Multi Code
- Customer Coupon
- Campaign Coupon
Örneğin;
WELCOME100
yalnızca yeni üyeler tarafından kullanılabilir.
Promotion Customization
Kurumsal projelerde standart Promotion’lar çoğu zaman yeterli olmaz.
Örneğin;
- SuperPlus puanı
- Banka kampanyaları
- Sadakat sistemi
- ERP verisi
- CRM segmentleri
gibi özel senaryolar geliştirilir.
Yeni bir Condition yazmak oldukça yaygındır.
public class CustomerSegmentConditionTranslator
extends AbstractRuleConditionTranslator {
@Override
public RuleIrCondition translate(
RuleCompilerContext context,
RuleConditionData condition,
RuleConditionDefinitionData definition) {
// custom translation
}
}
Bu sınıf Rule Builder’daki Condition’ı Drools Rule’una çevirir.
Custom RAO
Örneğin müşterinin Loyalty Tier bilgisi Rule Engine’de kullanılacaksa;
public class LoyaltyRAO {
private String tier;
private Integer points;
}
ardından RAO Provider yazılır.
public class LoyaltyRAOProvider
implements RAOProvider {
}
Bu sayede Rule Builder artık Loyalty Tier bilgisine erişebilir.
Promotion Debugging
En sık karşılaşılan problemlerden biri;
Promotion neden çalışmıyor?
İlk kontrol edilmesi gerekenler;
- Rule Publish edildi mi?
- Promotion Group doğru mu?
- Coupon aktif mi?
- Rule Version güncel mi?
- PromotionResult oluşuyor mu?
Debug sırasında en çok incelenen yapı PromotionResult’tur.
PromotionResult
↓
Consumed Entries
↓
Discount Values
↓
Actions
PromotionResult boş ise Rule çalışmamıştır.
Performans
Gerçek projelerde performans en kritik konulardan biridir.
Örneğin;
3000 Promotion
100 Coupon
500 Category
bulunan bir projede her sepet için bütün Rule’ların çalıştırılması ciddi CPU tüketir.
En iyi uygulamalar şunlardır:
- Promotion Group kullanın.
- Büyük kampanyaları bölün.
- Gereksiz Condition eklemeyin.
- Category filtrelerini sade tutun.
- Publish işlemlerini mesai dışında yapın.
- Custom RAO sayısını minimumda tutun.
- Rule’ları düzenli temizleyin.
Gerçek Proje Senaryosu
Bir elektronik mağazasında aşağıdaki kampanyalar uygulanıyor olsun:
- 5000 TL üzeri alışverişe %10 indirim
- Laptop alan müşteriye çanta hediye
- Premium üyeye ek %5 indirim
- Kredi kartına özel 12 taksit kampanyası
- WELCOME100 kuponu ile 100 TL indirim
Bu senaryoda Promotion Engine tüm kuralları değerlendirir, uygun olanları uygular ve her bir indirimi PromotionResult içerisinde saklar. Eğer kampanyalar birbiriyle çakışıyorsa öncelik (priority), exclusivity ve stackability ayarlarına göre hangi kuralların uygulanacağı belirlenir. Doğru tasarlanmamış bir kampanya mimarisi, beklenmeyen indirimlere veya aynı siparişe birden fazla avantajın yanlış şekilde uygulanmasına neden olabilir.
Best Practices
Kurumsal projelerde Promotion Engine kullanımında aşağıdaki yaklaşımlar uzun vadede önemli avantajlar sağlar:
- Promotion Group yapısını iş birimlerine veya kampanya türlerine göre ayırın.
- Rule isimlendirmelerinde standart bir format belirleyin.
- Her kampanya için yeni bir Rule yazmak yerine yeniden kullanılabilir şablonlar oluşturun.
- Condition ifadelerini mümkün olduğunca basit tutun.
- Custom RAO nesnelerini yalnızca gerçekten ihtiyaç duyulduğunda geliştirin.
- Rule publish işlemlerini planlı bakım pencerelerinde gerçekleştirin.
- Backoffice üzerinde gereksiz yetkileri sınırlandırın.
- Kampanyalar için test senaryolarını otomatikleştirin.
- Production ortamında Drools log seviyelerini dikkatli yönetin.
- Eski ve kullanılmayan kampanyaları düzenli olarak arşivleyin.
Sonuç
SAP Commerce Promotion Engine, yalnızca indirim hesaplayan bir modül değildir; kurumsal e-ticaret projelerinde kampanya yönetiminin merkezinde yer alan, Drools tabanlı kural motoru, Rule Engine altyapısı, RAO modeli, PromotionResult mekanizması ve Backoffice yönetimi ile ölçeklenebilir bir mimari sunar.
Başarılı bir Promotion Engine tasarımı; performansı artırır, kampanya yönetimini kolaylaştırır ve pazarlama ekiplerinin geliştirici desteğine ihtiyaç duymadan yeni kampanyalar oluşturabilmesini sağlar. Ancak bunun için doğru Promotion Group stratejisi, sade kural tasarımı, iyi planlanmış yayın (publish) süreçleri ve gerektiğinde kontrollü özelleştirmeler kritik öneme sahiptir.
SAP Commerce Promotion Engine Nedir? Architecture, Rule Engine, Coupon ve Customization Rehberi Promotion Engine’i yalnızca bir kampanya modülü olarak değil, e-ticaret platformunun stratejik karar mekanizmalarından biri olarak tasarlayın. İlk günden itibaren doğru Rule mimarisi, iyi planlanmış Promotion Group yapısı ve kontrollü özelleştirmeler ile ilerlemek; gelecekte karşılaşılabilecek performans ve bakım problemlerinin büyük bölümünü daha ortaya çıkmadan önleyecektir.