n8n ile Rakip Fiyatlarını İzle, Değişince Telegram'a Uyarı Al
Fiyat savaşlarını kazanmak için rakibin ne zaman indirim yaptığını anında öğrenmek zorundasın. Bunu manuel yapmak — her gün sekme sekme kontrol etmek — hem hata payı yüksek hem de zaman kaybı. n8n ile zamanlanmış bir akış kurarsın; akış saatte bir kontrol eder, fiyat değişmişse AI yorumuyla birlikte doğrudan Telegram'a düşer.
Bu yazıda bu akışı sıfırdan nasıl kuracağını adım adım anlatıyorum.
Akışın Genel Mantığı
Schedule Trigger → HTTP Request → HTML Extract → IF (fiyat değişti mi?) → AI/LLM Node → Telegram Send Message
Her adımın ne işe yaradığını tek tek görelim, ardından gerçek konfigürasyona geçelim.
Adım 1 — Schedule Trigger: Kontrol Saatini Belirle
n8n editöründe yeni bir akış aç. İlk düğüm olarak Schedule Trigger ekle.
Önerilen ayar:
| Alan | Değer |
|---|---|
| Trigger Interval | Hours |
| Hours Between Triggers | 1 |
Saatte bir kontrol fiyat/performans dengesi için idealdir. Çok fazla istek atarsan bazı siteler IP'ni geçici olarak bloke edebilir; çok seyrek atarsan fırsatı kaçırırsın.
İpucu: Yoğun indirim dönemlerinde (Bayram, Black Friday) interval'i 15 dakikaya düşürebilirsin. Schedule Trigger'ı istediğin zaman editleyebilirsin, akışı yeniden başlatman gerekmez.
Adım 2 — HTTP Request: Rakip Sayfasını Çek
Schedule Trigger'ın çıkışına bir HTTP Request düğümü bağla.
Konfigürasyon:
{
"method": "GET",
"url": "https://www.rakip-site.com/urun/sneaker-model-x",
"responseFormat": "text",
"options": {
"allowUnauthorizedCerts": false,
"timeout": 10000
}
}
responseFormat: text ile tam HTML'i alıyorsun. Birden fazla rakibi takip edeceksen bu adımdan önce bir Set düğümüyle URL listesini tanımla ve bir SplitInBatches döngüsü içinde her URL için HTTP Request'i çalıştır.
Headers eklemen gerekebilir. Bazı siteler User-Agent başlığı olmayan istekleri reddeder:
{
"User-Agent": "Mozilla/5.0 (compatible; fiyat-bot/1.0)"
}
Adım 3 — HTML Extract: Fiyatı Sayfadan Çıkar
HTML'in tamamını çektin; şimdi fiyatı ayıklamak gerekiyor. HTML Extract düğümü ekle.
Nasıl yapılandırırsın:
- Rakip sitenin ürün sayfasına git, fiyatın göründüğü HTML elementine sağ tıkla → Inspect.
- CSS selector'ı bul. Örnek:
.product-price__currentya da[data-price]. - HTML Extract düğümüne bu selector'ı gir:
CSS Selector: .product-price__current
Return Value: text
Çıktı şöyle bir şey olur: "₺1.249,00". Sayısal karşılaştırma yapabilmek için bir Set düğümüyle bunu sayıya çevir:
// Expression alanına:
{{ $json["price"].replace(/[^\d,]/g, "").replace(",", ".") }}
Adım 4 — IF: Fiyat Değişti mi?
Önceki fiyatı n8n'in workflow static data'sında saklayacaksın. Akış her çalıştığında:
- Static data'dan önceki fiyatı oku.
- Yeni fiyatla karşılaştır.
- Farklıysa devam et; aynıysa akışı sonlandır.
Code düğümü (JavaScript) ile bunu yapabilirsin:
const prevPrice = $workflow.staticData.lastPrice ?? null;
const currentPrice = parseFloat($input.first().json.price);
if (prevPrice !== null && currentPrice === prevPrice) {
return []; // Fark yok, akış durur
}
$workflow.staticData.lastPrice = currentPrice;
return [{
json: {
previousPrice: prevPrice,
currentPrice: currentPrice,
delta: prevPrice ? (currentPrice - prevPrice).toFixed(2) : "ilk kayıt",
changePercent: prevPrice
? (((currentPrice - prevPrice) / prevPrice) * 100).toFixed(1)
: null
}
}];
Bu blok hem filtre hem de durum kaydı işlevi görür.
Adım 5 — AI/LLM Node: Farkı Yorumla
İşte rakip çözümlerden ayrılan nokta burada. Code düğümünün çıkışına bir AI/LLM (ya da Basic LLM Chain) düğümü bağla.
System prompt:
Sen bir e-ticaret fiyatlandırma analistisisin. Sana bir ürünün önceki ve yeni rakip fiyatı veriliyor. Değişimin büyüklüğünü ve yönünü değerlendir; ardından şu üç seçenekten birini öner: "Fiyatını düşür", "Fiyatını koru" veya "Fırsatı değerlendir (rakip düşürdü, sen artır)". Kısa, net bir açıklama ekle.
User message (expression ile doldur):
Ürün: Sneaker Model X
Önceki rakip fiyatı: ₺{{ $json.previousPrice }}
Yeni rakip fiyatı: ₺{{ $json.currentPrice }}
Değişim: {{ $json.delta }} TL ({{ $json.changePercent }}%)
AI düğümü bu girdiyi alır ve şöyle bir çıktı üretir:
"Rakip fiyatını %8,3 düşürdü. Bu segment fiyat hassasiyeti yüksek; fiyatını en az ₺80 düşürmen önerilir. Düşürmezsen dönüşüm kaybı yaşayabilirsin."
Adım 6 — Telegram Send Message: Cebine Düşür
Son düğüm: Telegram → Send Message.
Mesaj şablonu (expression):
🔔 Rakip Fiyat Uyarısı
Ürün: Sneaker Model X
Önceki: ₺{{ $json.previousPrice }}
Yeni: ₺{{ $json.currentPrice }} ({{ $json.changePercent }}%)
🤖 AI Yorumu:
{{ $('AI/LLM Node').first().json.text }}
Telegram bot token ve chat ID bilgilerini n8n Credentials bölümüne bir kez gir; sonraki tüm Telegram düğümleri bu credential'ı kullanır.
AgentRoost'ta Bu Akışı Çalıştırmak
Bütün bu adımları yerel ortamda deniyorsan bir sunucu kurman, SSL ayarlamanın, Docker konteynerlerini yönetmenin ve OpenAI API anahtarı almanın derdine girmen gerekiyor. AgentRoost bu yükü tamamen ortadan kaldırıyor:
- agentroost.app üzerinden hesap aç.
- n8n framework'ünü seç, instance'a bir isim ver.
- Yaklaşık 2 dakika içinde kendi n8n editörün
https://<id>.agentroost.appadresinde hazır — bu instance tamamen sana ait, başka kimseyle paylaşılmaz. - Yukarıdaki akışı oluşturmaya başla — AI/LLM düğümüne API anahtarı girmen gerekmiyor. AI kredisi zaten planına dahil; düğümü bağla ve kullan.
Aylık $19,99'dan başlayan planlar server + AI kredisi + kurulum masrafını tek fiyatta birleştiriyor. 14 gün içinde memnun kalmazsan iade alabilirsin.
Planları karşılaştır veya n8n hakkında daha fazla bilgi al.
Dikkat Edilecek Noktalar
- robots.txt'e saygı göster. Takip ettiğin siteye gereksiz yük bindirme; saatte 1 istek genelde sorunsuz kabul edilir.
- CSS selector kırılabilir. Rakip site tasarımını değiştirdiğinde selector'ın geçersiz kalabilir. Akışa bir IF ekleyerek HTML Extract sonucu boşsa sana hata uyarısı gönder.
- Fiyat formatı değişkenlik gösterir. "1.249,00 TL", "₺1249" ve "1249.00" üç farklı string. Regex'ini geniş tut.
- Tek fiyat yanıltıcı olabilir. Ürünün varyantı (renk, beden) varsa sayfa birden fazla fiyat içerebilir.
HTML ExtractdüğümündeReturn Allseçeneğiyle tüm eşleşmeleri alıp doğrusunu filtrele.
Sıkça sorulan sorular
Rakip site fiyatı JavaScript ile yüklüyorsa HTML Extract çalışır mı?
Statik HTML'de doğrudan çalışır. Eğer fiyat JS ile render ediliyorsa n8n içindeki HTTP Request yerine bir Puppeteer/Playwright entegrasyonu ya da ScrapingBee / Browserless gibi bir API'ye istek atmak gerekir. n8n bu servislerle de kolayca konuşur — HTTP Request düğümüne hedef servisin API URL'sini ve anahtarını eklemen yeterli.
Birden fazla rakibi takip etmek için akışı kopyalamak mı gerekiyor?
Hayır. n8n'de bir Loop Over Items veya SplitInBatches düğümüyle URL listesi üzerinde döngü kurabilirsin. Bir JSON dizisine tüm rakip URL'lerini ve kendi karşılaştırma fiyatını ekle, akışın geri kalanını bu döngüye bağla — tek akış, kaç rakip olursa olsun yönetir.
Fiyatları nereye kaydetmeliyim? Her çalışmada bir öncekiyle nasıl karşılaştırırım?
En basit yöntem n8n içindeki Static Data (workflow static data) özelliğidir; akış her tetiklendiğinde bir önceki fiyatı buradan okur, yeniyle karşılaştırır, yenisini geri yazar. Daha kalıcı bir çözüm için n8n'in Postgres, MySQL veya Airtable düğümleriyle basit bir fiyat geçmişi tablosu tutabilirsin.
AgentRoost'taki n8n örneğim sadece bana mı ait?
Evet. AgentRoost her kullanıcıya bağımsız, tek kiracılı bir n8n örneği verir. Kendi oturum açma bilgilerin, kendi iş akışların, kendi public subdomain'in (https://<id>.agentroost.app) — başka hiçbir kullanıcıyla paylaşılmaz.
Aboneliği iptal edersem akışlarım ve verilerim ne olur?
İptal etmeden önce n8n'in yerleşik Export özelliğiyle tüm akışlarını JSON olarak indirebilirsin. Verilerini farklı bir n8n kurulumuna import etmek istersen aynı JSON yeterli — n8n açık kaynak, akışların sana ait.