Skip to content
OrqLabs

Veri (Data) node'ları

HTTP request, Fetch web page, Web search, RSS, Set / transform fields, Code (JavaScript) ve Key-value storage node'larının parametreleri ve örnekleri.

12 min Last updated:

This guide is in Turkish

Our guides are written in Turkish first; English versions are on the way. Your browser can translate this page, and the app itself is fully available in English.

On this page
  1. Kısaca
  2. Teknik ayrıntılar
  3. HTTP request (data.http)
  4. Fetch web page (data.fetchPage)
  5. Web search (data.webSearch)
  6. RSS / news feed (data.rss)
  7. Set / transform fields (data.set)
  8. Code (JavaScript) (data.code)
  9. Key-value storage (data.storage)
  10. İpuçları ve sınırlar
  11. Sık sorulan sorular
  12. Sonraki adım

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.

Palet: ① arama kutusu, ② kategoriler, ③ sürükle-bırak ipucu.
Palet: ① arama kutusu, ② kategoriler, ③ sürükle-bırak ipucu.
İfade alanı ve değişken seçici: ① {{ }} alanı, ② önceki kutuların çıktıları.
İfade alanı ve değişken seçici: ① `{{ }}` alanı, ② önceki kutuların çıktıları.

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.

NodeTipGirdiÇıktı handle'larıEntegrasyonModel
HTTP requestdata.http1main, error––
Fetch web pagedata.fetchPage1main––
Web searchdata.webSearch1mainSERPER, TAVILY–
RSS / news feeddata.rss1main––
Set / transform fieldsdata.set1main––
Code (JavaScript)data.code1main––
Key-value storagedata.storage1main––

HTTP request (data.http)

Herhangi bir REST API'yi çağırır; her gelen item için bir istek.

AnahtarEtiketTürZorunluVarsayılanNotlar
methodMethodselectHayırGETGET, POST, PUT, PATCH, DELETE
urlURLexpressionEvet–https://api.ornek.com/v1/items/{{ $json.id }}
headersHeaderskeyvalueHayır–Değerler ifade destekler
queryQuery paramskeyvalueHayır–URL'ye eklenir
bodyBody (JSON / expression)jsonHayır–POST/PUT/PATCH için; nesne JSON olarak gönderilir, dize olduğu gibi
authAuthselectHayırnonenone, bearer, basic, header
authValueAuth valuestringHayır–Yalnızca auth ≠ none. bearer: token; basic: kullanıcı:parola; header: Header-Adı: değer
timeoutMsTimeout (ms)numberHayır15000Geliş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.

AnahtarEtiketTürZorunluVarsayılanNotlar
urlURLexpressionEvet{{ $json.url }}
maxCharsMax charactersnumberHayır20000Metin 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.

AnahtarEtiketTürZorunluVarsayılanNotlar
queryQueryexpressionEvet{{ $json.query }}
countResultsnumberHayır10En fazla 50
countryCountry codestringHayırtrSerper 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)

AnahtarEtiketTürZorunluVarsayılanNotlar
urlFeed URLurlEvet–RSS 2.0 / Atom
limitItemsnumberHayır10En yeni N
onlyNewOnly items not seen beforebooleanHayırtrueGö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.

AnahtarEtiketTürZorunluVarsayılanNotlar
fieldsFieldskeyvalueEvet{}Anahtar: yeni alan adı (nokta ile iç içe: meta.source), değer: ifade
keepOnlySetKeep only these fieldsbooleanHayırfalsetrue → 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? }).

AnahtarEtiketTürZorunluVarsayılanNotlar
codeCodecode (javascript)Evet// items: WorkflowItem[]\nreturn items.map((it) => ({ json: { ...it.json } }));
timeoutMsTimeout (ms)numberHayır5000Geliş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ı).

AnahtarEtiketTürZorunluVarsayılanNotlar
operationOperationselectHayırgetget, set, increment, delete
keyKeyexpressionEvet–En fazla 128 karakter
valueValueexpressionHayı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.http ve data.fetchPage yalnı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.code içinde uzun döngülerden kaçının; 5 saniye tavanı vardır. Ağır dönüşümleri logic.loop ile parçalara bölün.
  • data.set ifadeleri item başına, data.code tüm item'lar için bir kez çalışır; toplu işlemlerde data.code daha hızlıdır.
  • data.storage iş akışına özeldir; iş akışları arası paylaşım için leads/custom metrikler veya utility.runWorkflow ile 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.

Sonraki adım

Get started with OrqLabs

Build your first workflow today

Start on the free plan: connect your accounts, pick a template and stay in control with approval steps. No credit card required.