{
  "updatedAt": "2026-04-02T15:15:21.611Z",
  "createdAt": "2026-04-02T15:00:48.965Z",
  "id": "rNLTPrZvDUKi2UBP",
  "name": "GNCA AI News Pipeline",
  "description": null,
  "active": true,
  "isArchived": false,
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 12
            }
          ]
        }
      },
      "id": "sched-12h",
      "name": "Her 12 Saatte",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {},
      "id": "manual",
      "name": "Manuel Test",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        200
      ]
    },
    {
      "parameters": {
        "url": "https://techcrunch.com/category/artificial-intelligence/feed/",
        "options": {}
      },
      "id": "rss1",
      "name": "RSS TechCrunch",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.1,
      "position": [
        260,
        -100
      ]
    },
    {
      "parameters": {
        "url": "https://www.theverge.com/rss/ai-artificial-intelligence/index.xml",
        "options": {}
      },
      "id": "rss2",
      "name": "RSS Verge",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.1,
      "position": [
        260,
        100
      ]
    },
    {
      "parameters": {
        "url": "https://feeds.feedburner.com/venturebeat/SZYF",
        "options": {}
      },
      "id": "rss3",
      "name": "RSS VBeat",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.1,
      "position": [
        260,
        300
      ]
    },
    {
      "parameters": {
        "mode": "append"
      },
      "id": "merge",
      "name": "Birle\u015ftir",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [
        520,
        100
      ]
    },
    {
      "parameters": {
        "jsCode": "const allItems = $input.all();\nallItems.sort((a, b) => {\n  const dateA = new Date(a.json.pubDate || a.json.isoDate || a.json.date || 0);\n  const dateB = new Date(b.json.pubDate || b.json.isoDate || b.json.date || 0);\n  return dateB - dateA;\n});\nconst top5 = allItems.slice(0, 5);\nconst newsSummary = top5.map((item, i) => {\n  const title = item.json.title || 'No title';\n  const desc = (item.json.contentSnippet || item.json.content || item.json.description || '').replace(/<[^>]*>/g, '').substring(0, 300);\n  const link = item.json.link || '';\n  return (i+1) + '. ' + title + '\\n\u00d6zet: ' + desc + '\\nLink: ' + link;\n}).join('\\n\\n');\n\nconst openaiBody = {\n  model: \"gpt-4o-mini\", temperature: 0.7, max_tokens: 2000,\n  messages: [\n    {role: \"system\", content: \"Sen GNCA (Gaziantep Enerji & Otomasyon) \u015firketinin sosyal medya uzman\u0131s\u0131n. T\u00fcrk\u00e7e, profesyonel ama samimi Instagram postlar\u0131 \u00fcretirsin.\"},\n    {role: \"user\", content: \"A\u015fa\u011f\u0131daki AI haberlerinden Instagram postu olu\u015ftur:\\n\\n\" + newsSummary + \"\\n\\nKURALLAR: 1) Ba\u015fl\u0131k: emoji max 60 karakter 2) Caption: T\u00fcrk\u00e7e \u00f6zet max 1500 karakter 3) Her habere 2-3 c\u00fcmle 4) Hashtag: #AI #YapayZeka #Teknoloji #GNCA #Otomasyon +5 5) imagePrompt: DALL-E \u0130ngilizce prompt 6) CTA\\n\\nJSON: {\\\"title\\\",\\\"caption\\\",\\\"imagePrompt\\\",\\\"hashtags\\\"}\\nSadece JSON d\u00f6nd\u00fcr.\"}\n  ]\n};\nreturn [{ json: { newsCount: top5.length, newsSummary, openaiBody } }];"
      },
      "id": "sort",
      "name": "S\u0131rala & Haz\u0131rla",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        760,
        100
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/chat/completions",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_OPENAI_API_KEY"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.openaiBody) }}",
        "options": {
          "timeout": 60000
        }
      },
      "id": "openai",
      "name": "OpenAI",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1000,
        100
      ]
    },
    {
      "parameters": {
        "jsCode": "const response = $input.first().json;\nlet rawText = '';\nif (response.choices && response.choices[0]) {\n  rawText = response.choices[0].message.content;\n} else { throw new Error('OpenAI yanit vermedi'); }\n\n// Remove markdown code fences robustly\nlet cleaned = rawText;\nif (cleaned.indexOf('```') !== -1) {\n  const firstBrace = cleaned.indexOf('{');\n  const lastBrace = cleaned.lastIndexOf('}');\n  if (firstBrace !== -1 && lastBrace !== -1) {\n    cleaned = cleaned.substring(firstBrace, lastBrace + 1);\n  }\n}\n\nlet content;\ntry {\n  content = JSON.parse(cleaned);\n} catch(e) {\n  throw new Error('JSON parse hatasi. Temizlenen metin: ' + cleaned.substring(0, 300));\n}\n\nif (!content.title || !content.caption) throw new Error('title/caption eksik');\n\nconst dalleBody = {\n  model: \"dall-e-3\",\n  prompt: (content.imagePrompt || \"Modern AI technology\") + \". Clean modern professional Instagram square post. No text overlay.\",\n  n: 1, size: \"1024x1024\", quality: \"standard\"\n};\n\nreturn [{ json: {\n  title: content.title,\n  caption: content.caption,\n  imagePrompt: content.imagePrompt || 'Modern AI technology social media post',\n  hashtags: content.hashtags || '#AI #YapayZeka #GNCA',\n  newsSummary: $('S\u0131rala & Haz\u0131rla').first().json.newsSummary,\n  newsCount: $('S\u0131rala & Haz\u0131rla').first().json.newsCount,\n  generatedAt: new Date().toISOString(),\n  dalleBody: dalleBody\n} }];"
      },
      "id": "parse",
      "name": "Parse Et",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1240,
        100
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/images/generations",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_OPENAI_API_KEY"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify($json.dalleBody) }}",
        "options": {
          "timeout": 120000
        }
      },
      "id": "dalle",
      "name": "DALL-E",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1480,
        100
      ]
    },
    {
      "parameters": {
        "jsCode": "const dalleRes = $input.first().json;\nconst parsed = $('Parse Et').first().json;\nlet imageUrl = '';\nif (dalleRes.data && dalleRes.data[0]) imageUrl = dalleRes.data[0].url;\n\nconst pkg = {\n  title: parsed.title, caption: parsed.caption, imagePrompt: parsed.imagePrompt,\n  imageUrl, hashtags: parsed.hashtags, newsSummary: parsed.newsSummary,\n  newsCount: parsed.newsCount, generatedAt: parsed.generatedAt, status: 'pending'\n};\n\nawait this.helpers.httpRequest({\n  method: 'PUT',\n  url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify(pkg)\n});\n\nreturn [{ json: pkg }];"
      },
      "id": "save",
      "name": "Kaydet",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1720,
        100
      ]
    },
    {
      "parameters": {
        "chatId": "2099378542",
        "text": "=\ud83e\udd16 *GNCA AI Haber B\u00fclteni*\n\ud83d\udcc5 {{ $now.format('dd.MM.yyyy HH:mm') }}\n\n\ud83d\udccc *{{ $json.title }}*\n\n{{ $json.caption.substring(0, 800) }}\n\n---\n\ud83d\uddbc\ufe0f G\u00f6rsel: {{ $json.imageUrl ? '\u2705 \u00dcretildi' : '\u274c Yok' }}\n\n\u2705 /onayla \u2192 Yay\u0131nla\n\u274c /reddet \u2192 Reddet\n\ud83d\udcca /durum \u2192 Durum",
        "additionalFields": {
          "parse_mode": "Markdown"
        }
      },
      "id": "tg-preview",
      "name": "Telegram \u00d6nizleme",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1960,
        100
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "seconds",
              "secondsInterval": 30
            }
          ]
        }
      },
      "id": "sched-30s",
      "name": "Telegram Poll (30s)",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        600
      ]
    },
    {
      "parameters": {
        "url": "https://api.telegram.org/botYOUR_TELEGRAM_BOT_TOKEN/getUpdates?timeout=5&limit=10&allowed_updates=[\"message\"]",
        "options": {
          "timeout": 10000
        }
      },
      "id": "tg-poll",
      "name": "Telegram API",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        260,
        600
      ]
    },
    {
      "parameters": {
        "jsCode": "const result = $input.first().json;\n\n// Read offset from blob\nlet offsetData;\ntry {\n  offsetData = await this.helpers.httpRequest({\n    method: 'GET', url: 'https://jsonblob.com/api/jsonBlob/019d4ec3-5fb1-7729-93fd-f2e5c4018268',\n    headers: { 'Accept': 'application/json' }\n  });\n} catch(e) { offsetData = { offset: 0 }; }\n\nconst currentOffset = offsetData.offset || 0;\n\nif (!result.ok || !result.result || result.result.length === 0) return [];\n\nconst messages = [];\nlet maxId = currentOffset;\n\nfor (const update of result.result) {\n  // Skip already-processed updates\n  if (update.update_id < currentOffset) continue;\n  if (update.update_id >= maxId) maxId = update.update_id + 1;\n  \n  const msg = update.message;\n  if (!msg || String(msg.chat.id) !== '2099378542') continue;\n  const text = (msg.text || '').trim().toLowerCase();\n  if (text === '/onayla' || text === 'onayla') messages.push({ json: { action: 'approve' } });\n  else if (text === '/reddet' || text === 'reddet') messages.push({ json: { action: 'reject' } });\n  else if (text === '/durum' || text === 'durum') messages.push({ json: { action: 'status' } });\n}\n\n// Save new offset to blob\nif (maxId > currentOffset) {\n  await this.helpers.httpRequest({\n    method: 'PUT', url: 'https://jsonblob.com/api/jsonBlob/019d4ec3-5fb1-7729-93fd-f2e5c4018268',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify({ offset: maxId })\n  });\n  \n  // Confirm to Telegram \u2014 discard processed messages\n  await this.helpers.httpRequest({\n    method: 'GET',\n    url: 'https://api.telegram.org/botYOUR_TELEGRAM_BOT_TOKEN/getUpdates?offset=' + maxId + '&limit=0'\n  });\n}\n\nreturn messages.length > 0 ? messages : [];"
      },
      "id": "tg-parse",
      "name": "Komut Ayr\u0131\u015ft\u0131r",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        520,
        600
      ]
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.action }}",
                    "rightValue": "approve",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ]
              },
              "renameOutput": true,
              "outputKey": "Onayla"
            },
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.action }}",
                    "rightValue": "reject",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ]
              },
              "renameOutput": true,
              "outputKey": "Reddet"
            },
            {
              "conditions": {
                "conditions": [
                  {
                    "leftValue": "={{ $json.action }}",
                    "rightValue": "status",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ]
              },
              "renameOutput": true,
              "outputKey": "Durum"
            }
          ]
        }
      },
      "id": "switch",
      "name": "Aksiyon",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        760,
        600
      ]
    },
    {
      "parameters": {
        "jsCode": "const content = await this.helpers.httpRequest({\n  method: 'GET',\n  url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n  headers: { 'Accept': 'application/json' }\n});\n\nif (!content || content.status === 'empty') throw new Error('\u0130\u00e7erik bulunamad\u0131! \u00d6nce i\u00e7erik \u00fcretin.');\nif (content.status === 'published') throw new Error('Zaten yay\u0131nland\u0131!');\nif (content.status === 'rejected') throw new Error('Zaten reddedildi!');\nif (!content.imageUrl) throw new Error('G\u00f6rsel URL yok!');\n\nreturn [{ json: content }];"
      },
      "id": "load",
      "name": "\u0130\u00e7erik Y\u00fckle",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1000,
        500
      ]
    },
    {
      "parameters": {
        "chatId": "2099378542",
        "text": "\u23f3 Instagram'a y\u00fckleniyor...",
        "additionalFields": {}
      },
      "id": "tg-loading",
      "name": "Y\u00fckleniyor",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1000,
        380
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://graph.facebook.com/v19.0/17841436005649126/media",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ image_url: $json.imageUrl, caption: $json.caption, access_token: \"YOUR_INSTAGRAM_ACCESS_TOKEN\" }) }}",
        "options": {
          "timeout": 30000
        }
      },
      "id": "ig-create",
      "name": "IG Container",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1240,
        500
      ]
    },
    {
      "parameters": {
        "amount": 15,
        "unit": "seconds"
      },
      "id": "wait-ig",
      "name": "15s Bekle",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1480,
        500
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://graph.facebook.com/v19.0/17841436005649126/media_publish",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ creation_id: $('IG Container').first().json.id, access_token: \"YOUR_INSTAGRAM_ACCESS_TOKEN\" }) }}",
        "options": {
          "timeout": 30000
        }
      },
      "id": "ig-pub",
      "name": "IG Yay\u0131nla",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1720,
        500
      ]
    },
    {
      "parameters": {
        "jsCode": "const content = await this.helpers.httpRequest({\n  method: 'GET', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n  headers: { 'Accept': 'application/json' }\n});\ncontent.status = 'published';\ncontent.publishedAt = new Date().toISOString();\ncontent.postId = $input.first().json.id || 'unknown';\nawait this.helpers.httpRequest({\n  method: 'PUT', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify(content)\n});\nreturn [{ json: { success: true, postId: content.postId, title: content.title } }];"
      },
      "id": "mark-pub",
      "name": "Yay\u0131n Kayd\u0131",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1960,
        500
      ]
    },
    {
      "parameters": {
        "chatId": "2099378542",
        "text": "=\u2705 *Yay\u0131nland\u0131!*\n\ud83c\udf89 Post ID: {{ $json.postId }}\n\ud83d\udccc {{ $json.title }}",
        "additionalFields": {
          "parse_mode": "Markdown"
        }
      },
      "id": "tg-ok",
      "name": "Ba\u015far\u0131",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        2200,
        500
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "try {\n  const content = await this.helpers.httpRequest({\n    method: 'GET', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n    headers: { 'Accept': 'application/json' }\n  });\n  if (content && content.status !== 'empty') {\n    content.status = 'rejected';\n    content.rejectedAt = new Date().toISOString();\n    await this.helpers.httpRequest({\n      method: 'PUT', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(content)\n    });\n  }\n} catch(e) {}\nreturn [{ json: { rejected: true } }];"
      },
      "id": "mark-rej",
      "name": "Red Kayd\u0131",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1000,
        700
      ]
    },
    {
      "parameters": {
        "chatId": "2099378542",
        "text": "\u274c *Reddedildi.* Yeni i\u00e7erik 12 saat sonra veya manuel \u00fcretilir.",
        "additionalFields": {
          "parse_mode": "Markdown"
        }
      },
      "id": "tg-rej",
      "name": "Red Bildir",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1240,
        700
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "let s = 'Hen\u00fcz i\u00e7erik \u00fcretilmemi\u015f.';\ntry {\n  const c = await this.helpers.httpRequest({\n    method: 'GET', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n    headers: { 'Accept': 'application/json' }\n  });\n  if (c && c.status !== 'empty') {\n    const m = {'pending':'\u23f3 Onay bekliyor','published':'\u2705 Yay\u0131nland\u0131','rejected':'\u274c Reddedildi'};\n    s = '\ud83d\udcca *Durum*\\n\ud83d\udccc ' + (c.title||'?') + '\\n\ud83d\udd04 ' + (m[c.status]||c.status) + '\\n\ud83d\udcc5 ' + (c.generatedAt||'?');\n  }\n} catch(e) {}\nreturn [{ json: { statusText: s } }];"
      },
      "id": "check-st",
      "name": "Durum Kontrol",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1000,
        880
      ]
    },
    {
      "parameters": {
        "chatId": "2099378542",
        "text": "={{ $json.statusText }}",
        "additionalFields": {
          "parse_mode": "Markdown"
        }
      },
      "id": "tg-st",
      "name": "Durum Bildir",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1240,
        880
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "id": "err",
      "name": "Hata Yakala",
      "type": "n8n-nodes-base.errorTrigger",
      "typeVersion": 1,
      "position": [
        0,
        1100
      ]
    },
    {
      "parameters": {
        "chatId": "2099378542",
        "text": "=\u26a0\ufe0f *Hata!*\n{{ $json.execution?.error?.message || 'Bilinmeyen hata' }}\nn8n: http://localhost:5678",
        "additionalFields": {
          "parse_mode": "Markdown"
        }
      },
      "id": "tg-err",
      "name": "Hata Bildir",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        260,
        1100
      ],
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Her 12 Saatte": {
      "main": [
        [
          {
            "node": "RSS TechCrunch",
            "type": "main",
            "index": 0
          },
          {
            "node": "RSS Verge",
            "type": "main",
            "index": 0
          },
          {
            "node": "RSS VBeat",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manuel Test": {
      "main": [
        [
          {
            "node": "RSS TechCrunch",
            "type": "main",
            "index": 0
          },
          {
            "node": "RSS Verge",
            "type": "main",
            "index": 0
          },
          {
            "node": "RSS VBeat",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS TechCrunch": {
      "main": [
        [
          {
            "node": "Birle\u015ftir",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Verge": {
      "main": [
        [
          {
            "node": "Birle\u015ftir",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "RSS VBeat": {
      "main": [
        [
          {
            "node": "Birle\u015ftir",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Birle\u015ftir": {
      "main": [
        [
          {
            "node": "S\u0131rala & Haz\u0131rla",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "S\u0131rala & Haz\u0131rla": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "Parse Et",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Et": {
      "main": [
        [
          {
            "node": "DALL-E",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "DALL-E": {
      "main": [
        [
          {
            "node": "Kaydet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Kaydet": {
      "main": [
        [
          {
            "node": "Telegram \u00d6nizleme",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram Poll (30s)": {
      "main": [
        [
          {
            "node": "Telegram API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Telegram API": {
      "main": [
        [
          {
            "node": "Komut Ayr\u0131\u015ft\u0131r",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Komut Ayr\u0131\u015ft\u0131r": {
      "main": [
        [
          {
            "node": "Aksiyon",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aksiyon": {
      "main": [
        [
          {
            "node": "\u0130\u00e7erik Y\u00fckle",
            "type": "main",
            "index": 0
          },
          {
            "node": "Y\u00fckleniyor",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Red Kayd\u0131",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Durum Kontrol",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u0130\u00e7erik Y\u00fckle": {
      "main": [
        [
          {
            "node": "IG Container",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IG Container": {
      "main": [
        [
          {
            "node": "15s Bekle",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "15s Bekle": {
      "main": [
        [
          {
            "node": "IG Yay\u0131nla",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IG Yay\u0131nla": {
      "main": [
        [
          {
            "node": "Yay\u0131n Kayd\u0131",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Yay\u0131n Kayd\u0131": {
      "main": [
        [
          {
            "node": "Ba\u015far\u0131",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Red Kayd\u0131": {
      "main": [
        [
          {
            "node": "Red Bildir",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Durum Kontrol": {
      "main": [
        [
          {
            "node": "Durum Bildir",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Hata Yakala": {
      "main": [
        [
          {
            "node": "Hata Bildir",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "callerPolicy": "workflowsFromSameOwner",
    "availableInMCP": false
  },
  "staticData": {
    "node:Her 12 Saatte": {
      "recurrenceRules": []
    },
    "node:Telegram Poll (30s)": {
      "recurrenceRules": []
    },
    "global": {
      "tgOffset": "294347649"
    }
  },
  "meta": null,
  "versionId": "8d6456cc-a38e-412a-990c-fe0e47b12670",
  "activeVersionId": "8d6456cc-a38e-412a-990c-fe0e47b12670",
  "versionCounter": 41,
  "triggerCount": 2,
  "shared": [
    {
      "updatedAt": "2026-04-02T15:00:48.966Z",
      "createdAt": "2026-04-02T15:00:48.966Z",
      "role": "workflow:owner",
      "workflowId": "rNLTPrZvDUKi2UBP",
      "projectId": "OaRgGzcKoxgAmXgy",
      "project": {
        "updatedAt": "2026-04-02T14:01:51.860Z",
        "createdAt": "2026-04-02T14:00:22.118Z",
        "id": "OaRgGzcKoxgAmXgy",
        "name": "Osman Baran Tekin <tekinosmanbaran@gmail.com>",
        "type": "personal",
        "icon": null,
        "description": null,
        "creatorId": "6b30529f-4650-4270-99e7-95f467bb8d04"
      }
    }
  ],
  "tags": [],
  "activeVersion": {
    "updatedAt": "2026-04-02T15:15:21.611Z",
    "createdAt": "2026-04-02T15:15:21.611Z",
    "versionId": "8d6456cc-a38e-412a-990c-fe0e47b12670",
    "workflowId": "rNLTPrZvDUKi2UBP",
    "nodes": [
      {
        "parameters": {
          "rule": {
            "interval": [
              {
                "field": "hours",
                "hoursInterval": 12
              }
            ]
          }
        },
        "id": "sched-12h",
        "name": "Her 12 Saatte",
        "type": "n8n-nodes-base.scheduleTrigger",
        "typeVersion": 1.2,
        "position": [
          0,
          0
        ]
      },
      {
        "parameters": {},
        "id": "manual",
        "name": "Manuel Test",
        "type": "n8n-nodes-base.manualTrigger",
        "typeVersion": 1,
        "position": [
          0,
          200
        ]
      },
      {
        "parameters": {
          "url": "https://techcrunch.com/category/artificial-intelligence/feed/",
          "options": {}
        },
        "id": "rss1",
        "name": "RSS TechCrunch",
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.1,
        "position": [
          260,
          -100
        ]
      },
      {
        "parameters": {
          "url": "https://www.theverge.com/rss/ai-artificial-intelligence/index.xml",
          "options": {}
        },
        "id": "rss2",
        "name": "RSS Verge",
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.1,
        "position": [
          260,
          100
        ]
      },
      {
        "parameters": {
          "url": "https://feeds.feedburner.com/venturebeat/SZYF",
          "options": {}
        },
        "id": "rss3",
        "name": "RSS VBeat",
        "type": "n8n-nodes-base.rssFeedRead",
        "typeVersion": 1.1,
        "position": [
          260,
          300
        ]
      },
      {
        "parameters": {
          "mode": "append"
        },
        "id": "merge",
        "name": "Birle\u015ftir",
        "type": "n8n-nodes-base.merge",
        "typeVersion": 3,
        "position": [
          520,
          100
        ]
      },
      {
        "parameters": {
          "jsCode": "const allItems = $input.all();\nallItems.sort((a, b) => {\n  const dateA = new Date(a.json.pubDate || a.json.isoDate || a.json.date || 0);\n  const dateB = new Date(b.json.pubDate || b.json.isoDate || b.json.date || 0);\n  return dateB - dateA;\n});\nconst top5 = allItems.slice(0, 5);\nconst newsSummary = top5.map((item, i) => {\n  const title = item.json.title || 'No title';\n  const desc = (item.json.contentSnippet || item.json.content || item.json.description || '').replace(/<[^>]*>/g, '').substring(0, 300);\n  const link = item.json.link || '';\n  return (i+1) + '. ' + title + '\\n\u00d6zet: ' + desc + '\\nLink: ' + link;\n}).join('\\n\\n');\n\nconst openaiBody = {\n  model: \"gpt-4o-mini\", temperature: 0.7, max_tokens: 2000,\n  messages: [\n    {role: \"system\", content: \"Sen GNCA (Gaziantep Enerji & Otomasyon) \u015firketinin sosyal medya uzman\u0131s\u0131n. T\u00fcrk\u00e7e, profesyonel ama samimi Instagram postlar\u0131 \u00fcretirsin.\"},\n    {role: \"user\", content: \"A\u015fa\u011f\u0131daki AI haberlerinden Instagram postu olu\u015ftur:\\n\\n\" + newsSummary + \"\\n\\nKURALLAR: 1) Ba\u015fl\u0131k: emoji max 60 karakter 2) Caption: T\u00fcrk\u00e7e \u00f6zet max 1500 karakter 3) Her habere 2-3 c\u00fcmle 4) Hashtag: #AI #YapayZeka #Teknoloji #GNCA #Otomasyon +5 5) imagePrompt: DALL-E \u0130ngilizce prompt 6) CTA\\n\\nJSON: {\\\"title\\\",\\\"caption\\\",\\\"imagePrompt\\\",\\\"hashtags\\\"}\\nSadece JSON d\u00f6nd\u00fcr.\"}\n  ]\n};\nreturn [{ json: { newsCount: top5.length, newsSummary, openaiBody } }];"
        },
        "id": "sort",
        "name": "S\u0131rala & Haz\u0131rla",
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [
          760,
          100
        ]
      },
      {
        "parameters": {
          "method": "POST",
          "url": "https://api.openai.com/v1/chat/completions",
          "sendHeaders": true,
          "headerParameters": {
            "parameters": [
              {
                "name": "Authorization",
                "value": "Bearer YOUR_OPENAI_API_KEY"
              },
              {
                "name": "Content-Type",
                "value": "application/json"
              }
            ]
          },
          "sendBody": true,
          "specifyBody": "json",
          "jsonBody": "={{ JSON.stringify($json.openaiBody) }}",
          "options": {
            "timeout": 60000
          }
        },
        "id": "openai",
        "name": "OpenAI",
        "type": "n8n-nodes-base.httpRequest",
        "typeVersion": 4.2,
        "position": [
          1000,
          100
        ]
      },
      {
        "parameters": {
          "jsCode": "const response = $input.first().json;\nlet rawText = '';\nif (response.choices && response.choices[0]) {\n  rawText = response.choices[0].message.content;\n} else { throw new Error('OpenAI yanit vermedi'); }\n\n// Remove markdown code fences robustly\nlet cleaned = rawText;\nif (cleaned.indexOf('```') !== -1) {\n  const firstBrace = cleaned.indexOf('{');\n  const lastBrace = cleaned.lastIndexOf('}');\n  if (firstBrace !== -1 && lastBrace !== -1) {\n    cleaned = cleaned.substring(firstBrace, lastBrace + 1);\n  }\n}\n\nlet content;\ntry {\n  content = JSON.parse(cleaned);\n} catch(e) {\n  throw new Error('JSON parse hatasi. Temizlenen metin: ' + cleaned.substring(0, 300));\n}\n\nif (!content.title || !content.caption) throw new Error('title/caption eksik');\n\nconst dalleBody = {\n  model: \"dall-e-3\",\n  prompt: (content.imagePrompt || \"Modern AI technology\") + \". Clean modern professional Instagram square post. No text overlay.\",\n  n: 1, size: \"1024x1024\", quality: \"standard\"\n};\n\nreturn [{ json: {\n  title: content.title,\n  caption: content.caption,\n  imagePrompt: content.imagePrompt || 'Modern AI technology social media post',\n  hashtags: content.hashtags || '#AI #YapayZeka #GNCA',\n  newsSummary: $('S\u0131rala & Haz\u0131rla').first().json.newsSummary,\n  newsCount: $('S\u0131rala & Haz\u0131rla').first().json.newsCount,\n  generatedAt: new Date().toISOString(),\n  dalleBody: dalleBody\n} }];"
        },
        "id": "parse",
        "name": "Parse Et",
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [
          1240,
          100
        ]
      },
      {
        "parameters": {
          "method": "POST",
          "url": "https://api.openai.com/v1/images/generations",
          "sendHeaders": true,
          "headerParameters": {
            "parameters": [
              {
                "name": "Authorization",
                "value": "Bearer YOUR_OPENAI_API_KEY"
              },
              {
                "name": "Content-Type",
                "value": "application/json"
              }
            ]
          },
          "sendBody": true,
          "specifyBody": "json",
          "jsonBody": "={{ JSON.stringify($json.dalleBody) }}",
          "options": {
            "timeout": 120000
          }
        },
        "id": "dalle",
        "name": "DALL-E",
        "type": "n8n-nodes-base.httpRequest",
        "typeVersion": 4.2,
        "position": [
          1480,
          100
        ]
      },
      {
        "parameters": {
          "jsCode": "const dalleRes = $input.first().json;\nconst parsed = $('Parse Et').first().json;\nlet imageUrl = '';\nif (dalleRes.data && dalleRes.data[0]) imageUrl = dalleRes.data[0].url;\n\nconst pkg = {\n  title: parsed.title, caption: parsed.caption, imagePrompt: parsed.imagePrompt,\n  imageUrl, hashtags: parsed.hashtags, newsSummary: parsed.newsSummary,\n  newsCount: parsed.newsCount, generatedAt: parsed.generatedAt, status: 'pending'\n};\n\nawait this.helpers.httpRequest({\n  method: 'PUT',\n  url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify(pkg)\n});\n\nreturn [{ json: pkg }];"
        },
        "id": "save",
        "name": "Kaydet",
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [
          1720,
          100
        ]
      },
      {
        "parameters": {
          "chatId": "2099378542",
          "text": "=\ud83e\udd16 *GNCA AI Haber B\u00fclteni*\n\ud83d\udcc5 {{ $now.format('dd.MM.yyyy HH:mm') }}\n\n\ud83d\udccc *{{ $json.title }}*\n\n{{ $json.caption.substring(0, 800) }}\n\n---\n\ud83d\uddbc\ufe0f G\u00f6rsel: {{ $json.imageUrl ? '\u2705 \u00dcretildi' : '\u274c Yok' }}\n\n\u2705 /onayla \u2192 Yay\u0131nla\n\u274c /reddet \u2192 Reddet\n\ud83d\udcca /durum \u2192 Durum",
          "additionalFields": {
            "parse_mode": "Markdown"
          }
        },
        "id": "tg-preview",
        "name": "Telegram \u00d6nizleme",
        "type": "n8n-nodes-base.telegram",
        "typeVersion": 1.2,
        "position": [
          1960,
          100
        ],
        "credentials": {
          "telegramApi": {
            "id": "9VDqFtkbrcHS1LG9",
            "name": "Telegram Bot - GNCA"
          }
        },
        "webhookId": "90d72b9c-e848-4ab9-9a8a-1d961223a94d"
      },
      {
        "parameters": {
          "rule": {
            "interval": [
              {
                "field": "seconds",
                "secondsInterval": 30
              }
            ]
          }
        },
        "id": "sched-30s",
        "name": "Telegram Poll (30s)",
        "type": "n8n-nodes-base.scheduleTrigger",
        "typeVersion": 1.2,
        "position": [
          0,
          600
        ]
      },
      {
        "parameters": {
          "url": "https://api.telegram.org/botYOUR_TELEGRAM_BOT_TOKEN/getUpdates?timeout=5&limit=10&allowed_updates=[\"message\"]",
          "options": {
            "timeout": 10000
          }
        },
        "id": "tg-poll",
        "name": "Telegram API",
        "type": "n8n-nodes-base.httpRequest",
        "typeVersion": 4.2,
        "position": [
          260,
          600
        ]
      },
      {
        "parameters": {
          "jsCode": "const result = $input.first().json;\n\n// Read offset from blob\nlet offsetData;\ntry {\n  offsetData = await this.helpers.httpRequest({\n    method: 'GET', url: 'https://jsonblob.com/api/jsonBlob/019d4ec3-5fb1-7729-93fd-f2e5c4018268',\n    headers: { 'Accept': 'application/json' }\n  });\n} catch(e) { offsetData = { offset: 0 }; }\n\nconst currentOffset = offsetData.offset || 0;\n\nif (!result.ok || !result.result || result.result.length === 0) return [];\n\nconst messages = [];\nlet maxId = currentOffset;\n\nfor (const update of result.result) {\n  // Skip already-processed updates\n  if (update.update_id < currentOffset) continue;\n  if (update.update_id >= maxId) maxId = update.update_id + 1;\n  \n  const msg = update.message;\n  if (!msg || String(msg.chat.id) !== '2099378542') continue;\n  const text = (msg.text || '').trim().toLowerCase();\n  if (text === '/onayla' || text === 'onayla') messages.push({ json: { action: 'approve' } });\n  else if (text === '/reddet' || text === 'reddet') messages.push({ json: { action: 'reject' } });\n  else if (text === '/durum' || text === 'durum') messages.push({ json: { action: 'status' } });\n}\n\n// Save new offset to blob\nif (maxId > currentOffset) {\n  await this.helpers.httpRequest({\n    method: 'PUT', url: 'https://jsonblob.com/api/jsonBlob/019d4ec3-5fb1-7729-93fd-f2e5c4018268',\n    headers: { 'Content-Type': 'application/json' },\n    body: JSON.stringify({ offset: maxId })\n  });\n  \n  // Confirm to Telegram \u2014 discard processed messages\n  await this.helpers.httpRequest({\n    method: 'GET',\n    url: 'https://api.telegram.org/botYOUR_TELEGRAM_BOT_TOKEN/getUpdates?offset=' + maxId + '&limit=0'\n  });\n}\n\nreturn messages.length > 0 ? messages : [];"
        },
        "id": "tg-parse",
        "name": "Komut Ayr\u0131\u015ft\u0131r",
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [
          520,
          600
        ]
      },
      {
        "parameters": {
          "rules": {
            "values": [
              {
                "conditions": {
                  "conditions": [
                    {
                      "leftValue": "={{ $json.action }}",
                      "rightValue": "approve",
                      "operator": {
                        "type": "string",
                        "operation": "equals"
                      }
                    }
                  ]
                },
                "renameOutput": true,
                "outputKey": "Onayla"
              },
              {
                "conditions": {
                  "conditions": [
                    {
                      "leftValue": "={{ $json.action }}",
                      "rightValue": "reject",
                      "operator": {
                        "type": "string",
                        "operation": "equals"
                      }
                    }
                  ]
                },
                "renameOutput": true,
                "outputKey": "Reddet"
              },
              {
                "conditions": {
                  "conditions": [
                    {
                      "leftValue": "={{ $json.action }}",
                      "rightValue": "status",
                      "operator": {
                        "type": "string",
                        "operation": "equals"
                      }
                    }
                  ]
                },
                "renameOutput": true,
                "outputKey": "Durum"
              }
            ]
          }
        },
        "id": "switch",
        "name": "Aksiyon",
        "type": "n8n-nodes-base.switch",
        "typeVersion": 3.2,
        "position": [
          760,
          600
        ]
      },
      {
        "parameters": {
          "jsCode": "const content = await this.helpers.httpRequest({\n  method: 'GET',\n  url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n  headers: { 'Accept': 'application/json' }\n});\n\nif (!content || content.status === 'empty') throw new Error('\u0130\u00e7erik bulunamad\u0131! \u00d6nce i\u00e7erik \u00fcretin.');\nif (content.status === 'published') throw new Error('Zaten yay\u0131nland\u0131!');\nif (content.status === 'rejected') throw new Error('Zaten reddedildi!');\nif (!content.imageUrl) throw new Error('G\u00f6rsel URL yok!');\n\nreturn [{ json: content }];"
        },
        "id": "load",
        "name": "\u0130\u00e7erik Y\u00fckle",
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [
          1000,
          500
        ]
      },
      {
        "parameters": {
          "chatId": "2099378542",
          "text": "\u23f3 Instagram'a y\u00fckleniyor...",
          "additionalFields": {}
        },
        "id": "tg-loading",
        "name": "Y\u00fckleniyor",
        "type": "n8n-nodes-base.telegram",
        "typeVersion": 1.2,
        "position": [
          1000,
          380
        ],
        "credentials": {
          "telegramApi": {
            "id": "9VDqFtkbrcHS1LG9",
            "name": "Telegram Bot - GNCA"
          }
        },
        "webhookId": "a2857179-58f1-4c10-a607-2defcf845353"
      },
      {
        "parameters": {
          "method": "POST",
          "url": "https://graph.facebook.com/v19.0/17841436005649126/media",
          "sendBody": true,
          "specifyBody": "json",
          "jsonBody": "={{ JSON.stringify({ image_url: $json.imageUrl, caption: $json.caption, access_token: \"YOUR_INSTAGRAM_ACCESS_TOKEN\" }) }}",
          "options": {
            "timeout": 30000
          }
        },
        "id": "ig-create",
        "name": "IG Container",
        "type": "n8n-nodes-base.httpRequest",
        "typeVersion": 4.2,
        "position": [
          1240,
          500
        ]
      },
      {
        "parameters": {
          "amount": 15,
          "unit": "seconds"
        },
        "id": "wait-ig",
        "name": "15s Bekle",
        "type": "n8n-nodes-base.wait",
        "typeVersion": 1.1,
        "position": [
          1480,
          500
        ],
        "webhookId": "341a7fff-ee08-434b-9d9a-9a1533edc34b"
      },
      {
        "parameters": {
          "method": "POST",
          "url": "https://graph.facebook.com/v19.0/17841436005649126/media_publish",
          "sendBody": true,
          "specifyBody": "json",
          "jsonBody": "={{ JSON.stringify({ creation_id: $('IG Container').first().json.id, access_token: \"YOUR_INSTAGRAM_ACCESS_TOKEN\" }) }}",
          "options": {
            "timeout": 30000
          }
        },
        "id": "ig-pub",
        "name": "IG Yay\u0131nla",
        "type": "n8n-nodes-base.httpRequest",
        "typeVersion": 4.2,
        "position": [
          1720,
          500
        ]
      },
      {
        "parameters": {
          "jsCode": "const content = await this.helpers.httpRequest({\n  method: 'GET', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n  headers: { 'Accept': 'application/json' }\n});\ncontent.status = 'published';\ncontent.publishedAt = new Date().toISOString();\ncontent.postId = $input.first().json.id || 'unknown';\nawait this.helpers.httpRequest({\n  method: 'PUT', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify(content)\n});\nreturn [{ json: { success: true, postId: content.postId, title: content.title } }];"
        },
        "id": "mark-pub",
        "name": "Yay\u0131n Kayd\u0131",
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [
          1960,
          500
        ]
      },
      {
        "parameters": {
          "chatId": "2099378542",
          "text": "=\u2705 *Yay\u0131nland\u0131!*\n\ud83c\udf89 Post ID: {{ $json.postId }}\n\ud83d\udccc {{ $json.title }}",
          "additionalFields": {
            "parse_mode": "Markdown"
          }
        },
        "id": "tg-ok",
        "name": "Ba\u015far\u0131",
        "type": "n8n-nodes-base.telegram",
        "typeVersion": 1.2,
        "position": [
          2200,
          500
        ],
        "credentials": {
          "telegramApi": {
            "id": "9VDqFtkbrcHS1LG9",
            "name": "Telegram Bot - GNCA"
          }
        },
        "webhookId": "a9ded165-fc2a-4a2d-b2fc-50f68612af86"
      },
      {
        "parameters": {
          "jsCode": "try {\n  const content = await this.helpers.httpRequest({\n    method: 'GET', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n    headers: { 'Accept': 'application/json' }\n  });\n  if (content && content.status !== 'empty') {\n    content.status = 'rejected';\n    content.rejectedAt = new Date().toISOString();\n    await this.helpers.httpRequest({\n      method: 'PUT', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(content)\n    });\n  }\n} catch(e) {}\nreturn [{ json: { rejected: true } }];"
        },
        "id": "mark-rej",
        "name": "Red Kayd\u0131",
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [
          1000,
          700
        ]
      },
      {
        "parameters": {
          "chatId": "2099378542",
          "text": "\u274c *Reddedildi.* Yeni i\u00e7erik 12 saat sonra veya manuel \u00fcretilir.",
          "additionalFields": {
            "parse_mode": "Markdown"
          }
        },
        "id": "tg-rej",
        "name": "Red Bildir",
        "type": "n8n-nodes-base.telegram",
        "typeVersion": 1.2,
        "position": [
          1240,
          700
        ],
        "credentials": {
          "telegramApi": {
            "id": "9VDqFtkbrcHS1LG9",
            "name": "Telegram Bot - GNCA"
          }
        },
        "webhookId": "093bbb6e-c2da-40f1-9131-5cc8bebaa8b1"
      },
      {
        "parameters": {
          "jsCode": "let s = 'Hen\u00fcz i\u00e7erik \u00fcretilmemi\u015f.';\ntry {\n  const c = await this.helpers.httpRequest({\n    method: 'GET', url: 'https://jsonblob.com/api/jsonBlob/019d4ec1-0cb3-7f05-9073-1fcc4d8da68b',\n    headers: { 'Accept': 'application/json' }\n  });\n  if (c && c.status !== 'empty') {\n    const m = {'pending':'\u23f3 Onay bekliyor','published':'\u2705 Yay\u0131nland\u0131','rejected':'\u274c Reddedildi'};\n    s = '\ud83d\udcca *Durum*\\n\ud83d\udccc ' + (c.title||'?') + '\\n\ud83d\udd04 ' + (m[c.status]||c.status) + '\\n\ud83d\udcc5 ' + (c.generatedAt||'?');\n  }\n} catch(e) {}\nreturn [{ json: { statusText: s } }];"
        },
        "id": "check-st",
        "name": "Durum Kontrol",
        "type": "n8n-nodes-base.code",
        "typeVersion": 2,
        "position": [
          1000,
          880
        ]
      },
      {
        "parameters": {
          "chatId": "2099378542",
          "text": "={{ $json.statusText }}",
          "additionalFields": {
            "parse_mode": "Markdown"
          }
        },
        "id": "tg-st",
        "name": "Durum Bildir",
        "type": "n8n-nodes-base.telegram",
        "typeVersion": 1.2,
        "position": [
          1240,
          880
        ],
        "credentials": {
          "telegramApi": {
            "id": "9VDqFtkbrcHS1LG9",
            "name": "Telegram Bot - GNCA"
          }
        },
        "webhookId": "2ddb73a3-36d2-4c13-9834-5a6769c7f349"
      },
      {
        "parameters": {},
        "id": "err",
        "name": "Hata Yakala",
        "type": "n8n-nodes-base.errorTrigger",
        "typeVersion": 1,
        "position": [
          0,
          1100
        ]
      },
      {
        "parameters": {
          "chatId": "2099378542",
          "text": "=\u26a0\ufe0f *Hata!*\n{{ $json.execution?.error?.message || 'Bilinmeyen hata' }}\nn8n: http://localhost:5678",
          "additionalFields": {
            "parse_mode": "Markdown"
          }
        },
        "id": "tg-err",
        "name": "Hata Bildir",
        "type": "n8n-nodes-base.telegram",
        "typeVersion": 1.2,
        "position": [
          260,
          1100
        ],
        "credentials": {
          "telegramApi": {
            "id": "9VDqFtkbrcHS1LG9",
            "name": "Telegram Bot - GNCA"
          }
        },
        "webhookId": "831bf7d6-b334-4b00-a05f-9b30fbd2fa58"
      }
    ],
    "connections": {
      "Her 12 Saatte": {
        "main": [
          [
            {
              "node": "RSS TechCrunch",
              "type": "main",
              "index": 0
            },
            {
              "node": "RSS Verge",
              "type": "main",
              "index": 0
            },
            {
              "node": "RSS VBeat",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Manuel Test": {
        "main": [
          [
            {
              "node": "RSS TechCrunch",
              "type": "main",
              "index": 0
            },
            {
              "node": "RSS Verge",
              "type": "main",
              "index": 0
            },
            {
              "node": "RSS VBeat",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "RSS TechCrunch": {
        "main": [
          [
            {
              "node": "Birle\u015ftir",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "RSS Verge": {
        "main": [
          [
            {
              "node": "Birle\u015ftir",
              "type": "main",
              "index": 1
            }
          ]
        ]
      },
      "RSS VBeat": {
        "main": [
          [
            {
              "node": "Birle\u015ftir",
              "type": "main",
              "index": 2
            }
          ]
        ]
      },
      "Birle\u015ftir": {
        "main": [
          [
            {
              "node": "S\u0131rala & Haz\u0131rla",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "S\u0131rala & Haz\u0131rla": {
        "main": [
          [
            {
              "node": "OpenAI",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "OpenAI": {
        "main": [
          [
            {
              "node": "Parse Et",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Parse Et": {
        "main": [
          [
            {
              "node": "DALL-E",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "DALL-E": {
        "main": [
          [
            {
              "node": "Kaydet",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Kaydet": {
        "main": [
          [
            {
              "node": "Telegram \u00d6nizleme",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Telegram Poll (30s)": {
        "main": [
          [
            {
              "node": "Telegram API",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Telegram API": {
        "main": [
          [
            {
              "node": "Komut Ayr\u0131\u015ft\u0131r",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Komut Ayr\u0131\u015ft\u0131r": {
        "main": [
          [
            {
              "node": "Aksiyon",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Aksiyon": {
        "main": [
          [
            {
              "node": "\u0130\u00e7erik Y\u00fckle",
              "type": "main",
              "index": 0
            },
            {
              "node": "Y\u00fckleniyor",
              "type": "main",
              "index": 0
            }
          ],
          [
            {
              "node": "Red Kayd\u0131",
              "type": "main",
              "index": 0
            }
          ],
          [
            {
              "node": "Durum Kontrol",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "\u0130\u00e7erik Y\u00fckle": {
        "main": [
          [
            {
              "node": "IG Container",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "IG Container": {
        "main": [
          [
            {
              "node": "15s Bekle",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "15s Bekle": {
        "main": [
          [
            {
              "node": "IG Yay\u0131nla",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "IG Yay\u0131nla": {
        "main": [
          [
            {
              "node": "Yay\u0131n Kayd\u0131",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Yay\u0131n Kayd\u0131": {
        "main": [
          [
            {
              "node": "Ba\u015far\u0131",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Red Kayd\u0131": {
        "main": [
          [
            {
              "node": "Red Bildir",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Durum Kontrol": {
        "main": [
          [
            {
              "node": "Durum Bildir",
              "type": "main",
              "index": 0
            }
          ]
        ]
      },
      "Hata Yakala": {
        "main": [
          [
            {
              "node": "Hata Bildir",
              "type": "main",
              "index": 0
            }
          ]
        ]
      }
    },
    "authors": "Osman Baran Tekin",
    "name": null,
    "description": null,
    "autosaved": false,
    "workflowPublishHistory": [
      {
        "createdAt": "2026-04-02T15:15:21.628Z",
        "id": 7,
        "workflowId": "rNLTPrZvDUKi2UBP",
        "versionId": "8d6456cc-a38e-412a-990c-fe0e47b12670",
        "event": "activated",
        "userId": "6b30529f-4650-4270-99e7-95f467bb8d04"
      }
    ]
  }
}