n8n ile Google Sheets Verilerini Yapay Zekâyla Zenginleştir
Google E-Tablonuzda yüzlerce, belki binlerce satır var. Her satırda bir müşteri yorumu, bir destek talebi, bir ürün açıklaması ya da ham lead verisi. Bu satırları okuyup sınıflandırmak için ya saatler harcıyorsunuz ya da o işi hiç yapmıyorsunuz.
n8n'in AI/LLM düğümü bu tıkanıklığı çözer: her satırı okur, sizin belirlediğiniz şemaya göre etiketler ve sonucu doğrudan tablonuzda yeni bir sütuna yazar. Tek yapmanız gereken akışı bir kez kurmak.
Akışın mantığı: ne yapacağız?
Hedef basit: Google Sheets'ten her satırı çek → LLM'e gönder → gelen cevabı aynı satıra yaz.
Kullanacağımız n8n düğümleri şunlar:
| Düğüm | Görevi |
|---|---|
| Schedule Trigger | Akışı her gece otomatik başlatır |
| Google Sheets → Read Rows | Ham veriyi çeker |
| IF | Zaten etiketlenmiş satırları atlar |
| Loop Over Items | Satırları tek tek işler |
| AI / LLM düğümü | Her satır için LLM'e istek atar |
| Set | Dönen JSON'dan istediğiniz alanı ayıklar |
| Google Sheets → Update Row | Sonucu tabloya geri yazar |
Adım adım kurulum
1. Google Sheets bağlantısını kurun
n8n'de Credentials → Add → Google Sheets OAuth2 yolunu izleyin. Google Cloud Console'dan bir OAuth istemci kimliği oluşturup buraya yapıştırın — bu adımı bir kez yaparsınız, ardından tüm akışlarınızda aynı kimlik bilgisini kullanırsınız.
Tablonuz şöyle görünüyor olsun:
| A: Yorum | B: Kategori | C: Duygu | D: Özet |
|---|---|---|---|
| "Kargo çok geç geldi" | (boş) | (boş) | (boş) |
| "Ürün harika, hızlı kargo" | (boş) | (boş) | (boş) |
2. Schedule Trigger — ne zaman çalışacak?
Schedule Trigger düğümü ekleyin. "Interval" alanını Every Day olarak ayarlayın, saati ise mesai saati dışı bir vakite alın (örn. 02:00). Tablonuz sürekli büyüyorsa bunu Every Hour yapabilirsiniz.
3. Google Sheets: satırları çekin
Google Sheets düğümü ekleyin, Operation: Read Rows. Sheet ID'yi URL'den kopyalayın:
https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit
"Filters" bölümünden B sütununa isEmpty filtresi ekleyin — böylece zaten işlenmiş satırlar tekrar LLM'e gitmiyor. Hem maliyet hem süre açısından kritik bir optimizasyon.
4. IF düğümü (ilave bir güvence)
Bazen Sheets filtresi yetmez; bir hücre boş görünüp boşluk karakteri içerebilir. IF düğümüyle {{ $json["Kategori"] }} alanının gerçekten boş olup olmadığını kontrol edin. "True" çıkışı bir sonraki adıma geçsin, "False" çıkışı hiçbir yere bağlı olmasın — n8n bu satırı düşürür.
5. Loop Over Items — satır satır işleme
Loop Over Items düğümü akışın kalbini oluşturur. Batch size'ı 1 yapın: her LLM çağrısı tek bir satır için atılsın; bu sayede hata olduğunda hangi satırın sorun çıkardığını görmek kolaylaşır.
6. AI / LLM düğümü — asıl iş burada
AI düğümü (ya da @n8n/n8n-nodes-langchain.lmOpenAi / Langchain LLM Chain — n8n sürümünüze bağlı olarak isim değişebilir) ekleyin.
System Prompt:
Sen bir müşteri deneyimi analistisisin. Sana verilen metni analiz edip
aşağıdaki JSON formatında yanıt ver. Başka hiçbir şey yazma.
{
"kategori": "kargo | ürün | ödeme | iade | diğer",
"duygu": "olumlu | olumsuz | nötr",
"ozet": "Metnin tek cümlelik özeti"
}
User Prompt (Expression):
{{ $json["Yorum"] }}
Model seçimi için gpt-4o-mini uygun maliyetli bir başlangıç noktasıdır. Daha uzun metinlerde claude-haiku veya gemini-flash deneyebilirsiniz. AgentRoost'ta 350'den fazla model arasından geçiş yapabilirsiniz; hangi modeli seçerseniz seçin, AI kredisi aboneliğinize dahildir.
Not: AgentRoost'ta bu düğümü kullanırken API anahtarı girmenize gerek yok. LLM kredisi aboneliğinize dahil — düğümü ekleyip promptu yazıyorsunuz, gerisini sistem hallediyor.
7. Set düğümü — JSON'u parçalayın
LLM'den dönen yanıt tek bir metin bloğu. Set düğümüyle bunu üç ayrı alana bölün:
{
"kategori": "={{ JSON.parse($json.output).kategori }}",
"duygu": "={{ JSON.parse($json.output).duygu }}",
"ozet": "={{ JSON.parse($json.output).ozet }}"
}
İpucu: LLM bazen yanıtı
```json ... ```kod bloğuyla sarar. Bu durumda önce bir Code düğümüyle bloğu temizleyin:const raw = $input.first().json.output.replace(/```json|```/g, "").trim(); return [{ json: JSON.parse(raw) }];
8. Google Sheets: satırı güncelleyin
Google Sheets düğümü, Operation: Update Row. Row Number için {{ $('Google Sheets').item.json.row_number }} ifadesini kullanın — n8n her satıra bu alanı otomatik ekler.
Sütun eşlemesi:
| n8n alanı | Sheets sütunu |
|---|---|
kategori |
B |
duygu |
C |
ozet |
D |
Kaydedip "Test workflow" ile birkaç satırda deneyin. Tabloya dönüp B, C, D sütunlarının dolduğunu gördüğünüzde akış hazır.
Yaygın sorunlar ve çözümleri
LLM çıktısı JSON değil, düz metin geliyor:
System Prompt'a "Başka hiçbir şey yazma, sadece JSON döndür" ekleyin. Model yine de uymazsa JSON Mode (OpenAI'de response_format: json_object) kullanın.
Filtreden atlamış satırlar yeniden işleniyor:
isEmpty filtresi yerine equals → "" kullanmayı deneyin; bazı Sheets API sürümlerinde davranış farklılaşıyor.
Loop çok yavaş, binlerce satır var:
Batch size'ı 5-10'a çıkarın ve System Prompt'a "Her metni sırayla işle, sonuçları JSON dizisi olarak döndür" ekleyin; Loop'tan çıkan her item'ı döngüde eşleştirin.
AgentRoost'ta bu akışı çalıştırın
Bu akışı kendi bilgisayarınızda kurmak isteseydiniz: n8n yüklemek (Docker veya npm), port açmak, SSL sertifikası almak, Google OAuth callback URL'sini ayarlamak, akışın her gece çalışması için sunucunun uyanık olmasını sağlamak — ve elbette bir LLM sağlayıcısından API anahtarı alıp bunu aboneliğe bağlamak.
AgentRoost'ta bunların hiçbiri yok.
Nasıl çalışır:
- agentroost.app'e gidin, e-posta veya Google hesabınızla kaydolun.
- Framework olarak n8n seçin, instance'ınıza bir isim verin.
- ~2 dakika içinde kendi n8n editörünüz
https://<sizin-id>.agentroost.appadresinde açılır — bu instance tamamen size aittir. - Yukarıdaki adımları takip edip akışı oluşturun. AI düğümüne API anahtarı girmeden LLM çağrısı yapabilirsiniz — krediler aboneliğe dahil.
- Schedule Trigger aktif olduğunda akış 7/24 çalışır; bilgisayarınızın açık olmasına gerek yok.
Fiyat $19.99/ay'dan başlıyor, aylık ödeme, istediğiniz zaman iptal edebilirsiniz. İlk 14 gün içinde memnun kalmazsanız para iadesi yapılıyor.
Ne tür veriler için kullanabilirsiniz?
Bu şablonu minimum değişiklikle farklı senaryolara uyarlayabilirsiniz:
- Müşteri yorumları → duygu + kategori + aciliyet skoru
- Destek talepleri → konu etiketleme + öncelik tespiti
- Lead listesi → sektör tahmini + kısa şirket özeti (web sitesini HTTP Request düğümüyle çekip LLM'e besleyebilirsiniz)
- İçerik fikirleri → hedef kitle + içerik türü + anahtar kelime önerisi
- Stok açıklamaları → SEO başlığı + kısa açıklama üretimi
Her durumda temel yapı aynı: Sheets'ten oku → LLM'e gönder → Sheets'e yaz.
Sıkça sorulan sorular
AI düğümü için OpenAI veya başka bir sağlayıcıdan API anahtarı almam gerekiyor mu?
AgentRoost'ta hayır. LLM kredisi aboneliğe dahil olduğu için AI/LLM düğümünü API anahtarı girmeden kullanabilirsiniz. Kendi n8n sunucunuzda kurarsanız, o zaman OpenAI, Anthropic veya başka bir sağlayıcıdan ayrı bir anahtar almanız gerekir.
Kaç satır işleyebilirim, bir limit var mı?
n8n tarafında teknik bir satır sınırı yok; akış her çalıştığında isEmpty filtresiyle sadece yeni satırları işler. Çok büyük tablolarda (binlerce satır) Schedule Trigger sıklığını artırın ya da batch size'ı yükselterek Loop'u daha verimli çalıştırın.
AgentRoost'taki n8n instance'ım sadece bana mı ait?
Evet. Her kullanıcıya özel, izole bir n8n instance kurulur; kendi giriş bilgileriniz ve kendi https://<id>.agentroost.app adresiniz olur. Verileriniz, iş akışlarınız ve kimlik bilgileriniz başka kullanıcılarla paylaşılmaz.
İstediğim zaman iptal edebilir miyim, verilerimi alabilir miyim?
Evet. Abonelik aylık olup istediğiniz zaman iptal edilebilir. İptal etmeden önce n8n'in yerleşik dışa aktarma özelliğiyle tüm iş akışlarınızı JSON olarak indirip başka bir n8n kurulumuna aktarabilirsiniz. 14 gün içinde iptal ederseniz ücret iadesi yapılır.
LLM gelen yanıtı bazen JSON olarak döndürmüyor, ne yapmalıyım?
System Prompt'u 'Sadece JSON döndür, başka hiçbir şey yazma' şeklinde güçlendirin. OpenAI modelleri kullanıyorsanız response_format: { type: "json_object" } parametresini etkinleştirin. Yine de düzensiz çıktı gelirse akışa bir Code düğümü ekleyip ```json ... ``` bloklarını temizledikten sonra JSON.parse() yapın.