Bu rehberde: Dış kaynaklardan veri çeken ve öğeleri dönüştüren kutuları öğrenirsiniz: HTTP isteği, sayfa okuma, web araması, RSS, alan ayarlama, JavaScript kodu ve küçük veri depolama.
⏱ 12 dakika
Kısaca
Veri kutuları "tesisat" işini yapar: bir API'den veri almak, bir web sayfasını okumak, alan adlarını düzenlemek. Yapay zekâ kullanmazlar; yalnızca Web araması Serper/Tavily kredisi harcar. Kod kutusu ileri düzey kullanıcılar içindir; çoğu işi Alan ayarla ile kodsuz yaparsınız.


Teknik ayrıntılar
Veri node'ları dış kaynaklardan veri alır ve item'ları dönüştürür. LLM kullanmazlar (maliyetsizdir); yalnızca data.webSearch sağlayıcı kredisi tüketir.
| Node | Tip | Girdi | Çıktı handle'ları | Entegrasyon | Model |
|---|---|---|---|---|---|
| HTTP request | data.http | 1 | main, error | – | – |
| Fetch web page | data.fetchPage | 1 | main | – | – |
| Web search | data.webSearch | 1 | main | SERPER, TAVILY | – |
| RSS / news feed | data.rss | 1 | main | – | – |
| Set / transform fields | data.set | 1 | main | – | – |
| Code (JavaScript) | data.code | 1 | main | – | – |
| Key-value storage | data.storage | 1 | main | – | – |
HTTP request (data.http)
Herhangi bir REST API'yi çağırır; her gelen item için bir istek.
| Anahtar | Etiket | Tür | Zorunlu | Varsayılan | Notlar |
|---|---|---|---|---|---|
method | Method | select | Hayır | GET | GET, POST, PUT, PATCH, DELETE |
url | URL | expression | Evet | – | https://api.ornek.com/v1/items/{{ $json.id }} |
headers | Headers | keyvalue | Hayır | – | Değerler ifade destekler |
query | Query params | keyvalue | Hayır | – | URL'ye eklenir |
body | Body (JSON / expression) | json | Hayır | – | POST/PUT/PATCH için; nesne JSON olarak gönderilir, dize olduğu gibi |
auth | Auth | select | Hayır | none | none, bearer, basic, header |
authValue | Auth value | string | Hayır | – | Yalnızca auth ≠ none. bearer: token; basic: kullanıcı:parola; header: Header-Adı: değer |
timeoutMs | Timeout (ms) | number | Hayır | 15000 | Gelişmiş |
Çıktı item'ı: { status: 200, headers: {...}, body: <JSON veya metin>, durationMs }; gelen item'ın json alanları request altında korunur. 4xx/5xx yanıtlar hata sayılır ve onError kuralına göre error handle'ına gider (error.code: "HTTP_404"). 2xx ama boş gövde → body: null.
Gizli anahtarları authValue içine yazmak yerine WEBHOOK entegrasyonuna veya $vars'a koyun; $env kullanılamaz.
Örnek – stok kontrolü:
trigger.schedule (0 */6 * * *) → data.http
method: GET
url: https://shop.ornek.com/api/products?status=low_stock
auth: bearer, authValue: {{ $vars.shopToken }}
→ data.code (return items[0].json.body.products.map(p => ({ json: p })))
→ logic.filter ({{ $json.stock < 5 }})
→ agent.contentCreator (task "Stok azalan ürün için aciliyet vurgulu bir Instagram gönderisi: {{ $json.name }}", platforms [INSTAGRAM])
Fetch web page (data.fetchPage)
Sayfayı indirir, okunabilir metne çevirir, başlık/meta/linkleri çıkarır.
| Anahtar | Etiket | Tür | Zorunlu | Varsayılan | Notlar |
|---|---|---|---|---|---|
url | URL | expression | Evet | {{ $json.url }} | |
maxChars | Max characters | number | Hayır | 20000 | Metin kesilir; LLM maliyetini sınırlar |
Çıktı: { url, finalUrl, title, description, text, meta: { ogTitle, ogImage, canonical, lang }, links: [{ href, text }], wordCount, fetchedAt }. robots.txt'e uyar; JavaScript ile render edilen içerik alınmaz. 403/timeout → hata.
Örnek: data.rss → data.fetchPage (url {{ $json.link }}, maxChars 8000) → ai.generate (prompt "Bu makaleyi 3 cümlede özetle ve markamızla ilişkilendir: {{ $json.text }}").
Web search (data.webSearch)
Serper veya Tavily ile arama; her sonuç ayrı item.
| Anahtar | Etiket | Tür | Zorunlu | Varsayılan | Notlar |
|---|---|---|---|---|---|
query | Query | expression | Evet | {{ $json.query }} | |
count | Results | number | Hayır | 10 | En fazla 50 |
country | Country code | string | Hayır | tr | Serper gl, Tavily bölge; dil ülkeden türetilir |
Çıktı item'ı: { title, url, snippet, position, source, publishedAt?, query }. Hesap: denetçi panelinden Serper veya Tavily (organizasyon kapsamlı). Bağlı hesap yoksa platform anahtarı (SERPER_API_KEY/TAVILY_API_KEY) varsa o kullanılır.
Örnek – rakip haber izleme: trigger.schedule (0 8 * * *) → data.set (fields { query: "{{ $project.competitors[0] }} haber" }) → data.webSearch (count 10) → logic.dedupe (key {{ $json.url }}) → utility.notify (title "{{ $json.title }}", link {{ $json.url }}).
RSS / news feed (data.rss)
| Anahtar | Etiket | Tür | Zorunlu | Varsayılan | Notlar |
|---|---|---|---|---|---|
url | Feed URL | url | Evet | – | RSS 2.0 / Atom |
limit | Items | number | Hayır | 10 | En yeni N |
onlyNew | Only items not seen before | boolean | Hayır | true | Görülen guid/link iş akışı başına saklanır |
Çıktı item'ı: { title, link, description, content, author, publishedAt, guid, categories[], feedTitle }. onlyNew: true ile ilk çalıştırma hepsini, sonrakiler yalnızca yenileri döndürür; yeni yoksa downstream SKIPPED.
Örnek: data.rss (url https://blog.ornek.com/feed, limit 5) → agent.contentCreator (topic {{ $json.title }} – {{ $json.link }}, platforms [X, LINKEDIN], count 1).
Set / transform fields (data.set)
Alan ekler, yeniden adlandırır, hesaplar.
| Anahtar | Etiket | Tür | Zorunlu | Varsayılan | Notlar |
|---|---|---|---|---|---|
fields | Fields | keyvalue | Evet | {} | Anahtar: yeni alan adı (nokta ile iç içe: meta.source), değer: ifade |
keepOnlySet | Keep only these fields | boolean | Hayır | false | true → item yalnızca bu alanlardan oluşur |
Tek {{ }} ifadeleri ham tip korur (dizi/nesne/sayı).
Örnek – yayın node'u için normalizasyon:
fields:
body: {{ $truncate($json.text, 270) }}
mediaUrls: {{ $json.image ? [$json.image] : [] }}
platform: X
utmLink: {{ $project.websiteUrl }}?utm_source=x&utm_medium=social&utm_campaign={{ $slug($json.title) }}
keepOnlySet: true
Code (JavaScript) (data.code)
Sandbox'ta JavaScript çalıştırır. Girdi: items (WorkflowItem[]), dönüş: WorkflowItem[] ({ json, binary? }).
| Anahtar | Etiket | Tür | Zorunlu | Varsayılan | Notlar |
|---|---|---|---|---|---|
code | Code | code (javascript) | Evet | // items: WorkflowItem[]\nreturn items.map((it) => ({ json: { ...it.json } })); | |
timeoutMs | Timeout (ms) | number | Hayır | 5000 | Gelişmiş; en fazla 30000 |
Ortam: ES2022, items, $vars, $project, $run, $now, $today, $node(name) (o node'un item'ları), console.log (çalıştırma loglarına yazar), JSON, Math, Date, URL, TextEncoder. Yok: require/import, fetch, process, dosya sistemi, setTimeout, kripto. Bellek 64 MB. Hata fırlatılırsa node FAILED.
Örnek – GA4 satırlarını item'a çevir ve haftalık toplamla:
// items[0].json = analytics.ga4Report çıktısı
const rows = items[0].json.rows ?? [];
const byChannel = {};
for (const r of rows) {
const ch = r.sessionDefaultChannelGroup ?? "Other";
byChannel[ch] ??= { channel: ch, sessions: 0, conversions: 0 };
byChannel[ch].sessions += Number(r.sessions ?? 0);
byChannel[ch].conversions += Number(r.conversions ?? 0);
}
const out = Object.values(byChannel)
.map((c) => ({ ...c, cvr: c.sessions ? +(c.conversions / c.sessions * 100).toFixed(2) : 0 }))
.sort((a, b) => b.sessions - a.sessions);
console.log(`kanal sayısı: ${out.length}`);
return out.map((c) => ({ json: c }));
Örnek – item'ları grupla (her platform için tek item):
const groups = new Map();
for (const it of items) {
const key = it.json.platform;
if (!groups.has(key)) groups.set(key, []);
groups.get(key).push(it.json);
}
return [...groups].map(([platform, posts]) => ({ json: { platform, posts, count: posts.length } }));
Key-value storage (data.storage)
Çalıştırmalar arasında kalıcı küçük değerler (iş akışı başına ad alanı).
| Anahtar | Etiket | Tür | Zorunlu | Varsayılan | Notlar |
|---|---|---|---|---|---|
operation | Operation | select | Hayır | get | get, set, increment, delete |
key | Key | expression | Evet | – | En fazla 128 karakter |
value | Value | expression | Hayır | – | Yalnızca set ve increment (increment için sayı, varsayılan 1) |
Çıktı: gelen item + storage: { key, value, previousValue? }. Değer 64 KB'a kadar JSON. Aynı anahtara paralel yazımlar sıralıdır.
Örnek – günlük gönderi sayacı:
social.publish → data.storage (operation increment, key posts:{{ $today }}, value 1)
→ logic.if ({{ $json.storage.value >= 5 }})
true → utility.notify (title "Günlük 5 gönderi sınırına ulaşıldı")
Örnek – son işlenen id: data.storage (get, key lastCommentId) → logic.filter ({{ $json.commentId > ($json.storage.value ?? 0) }}) → … → data.storage (set, key lastCommentId, value {{ $json.commentId }}).
İpuçları ve sınırlar
data.httpvedata.fetchPageyalnızca herkese açık adreslere çıkar; özel ağ adresleri (10.x,localhost) engellenir.- Büyük yanıtlar (>5 MB) kesilir; sayfalama yapın.
data.codeiçinde uzun döngülerden kaçının; 5 saniye tavanı vardır. Ağır dönüşümlerilogic.loopile parçalara bölün.data.setifadeleri item başına,data.codetüm item'lar için bir kez çalışır; toplu işlemlerdedata.codedaha hızlıdır.data.storageiş akışına özeldir; iş akışları arası paylaşım içinleads/custommetrikler veyautility.runWorkflowile parametre geçin.
Sık sorulan sorular
Kod bilmeden veri dönüştürebilir miyim? Evet. Alan ayarla kutusu ve ifadeler çoğu işi görür.
HTTP kutusuna gizli anahtar yazmalı mıyım?
Hayır. Anahtarı Custom Webhook entegrasyonuna veya iş akışı değişkenlerine ($vars) koyun.
RSS kutusu aynı haberi tekrar getirir mi? "Only items not seen before" açıkken yalnızca yeni haberleri getirir.