AutomationFlowsAI & RAG › My Workflow 15

My Workflow 15

My workflow 15. Uses httpRequest, memoryBufferWindow, agent, lmChatOpenAi. Webhook trigger; 74 nodes.

Webhook trigger★★★★★ complexityAI-powered74 nodesHTTP RequestMemory Buffer WindowAgentOpenAI ChatWordPressOpenAIAWS S3Lm Chat Google Vertex
AI & RAG Trigger: Webhook Nodes: 74 Complexity: ★★★★★ AI nodes: yes Added:

This workflow follows the Agent → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "My workflow 15",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -8464,
        704
      ],
      "id": "e820c452-e89b-4c66-8455-43298952f7da",
      "name": "Webhook"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "c5ebb284-7dc3-487c-a415-57d9c571ca21",
              "name": "topic",
              "value": "={{ $json.body.topic }}",
              "type": "string"
            },
            {
              "id": "e164d12c-46cd-44a5-8fa1-5dd52a0613ce",
              "name": "keyword",
              "value": "={{ $json.body.keyword }}",
              "type": "string"
            },
            {
              "id": "d9b05bdd-3047-4b80-bcab-d9722a8075b6",
              "name": "word_count",
              "value": "={{ $json.body.wordcount }}",
              "type": "string"
            },
            {
              "id": "ac75f4e6-7da1-460b-83d1-ae5c1813ae90",
              "name": "site_url",
              "value": "={{ $json.body.siteUrl }}",
              "type": "string"
            },
            {
              "id": "9cc038f3-16f9-48bf-bc27-efd8f4ba8876",
              "name": "language",
              "value": "={{ $json.body.language }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -8304,
        704
      ],
      "id": "919cfbc6-a26d-4d5e-8541-2f58f2388201",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "url": "https://serpapi.com/search",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "serpApi",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "={{ $('Edit Fields').first().json.topic }}"
            },
            {
              "name": "hl",
              "value": "=tr"
            },
            {
              "name": "api_key"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -5184,
        1024
      ],
      "id": "41851c8e-ef72-4d42-9d2e-2302306b23dd",
      "name": "HTTP Request",
      "retryOnFail": true,
      "waitBetweenTries": 100,
      "maxTries": 2
    },
    {
      "parameters": {
        "fieldToSplitOut": "related_questions, related_searches, organic_results",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -5040,
        1024
      ],
      "id": "0254aabf-49c7-4336-a53f-93ee35eb81ac",
      "name": "Split Out",
      "executeOnce": true
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "2d2b8c05-5cc0-4c4e-8f83-bcf3772cc66f",
              "name": "question",
              "value": "={{ $json.related_questions.question }}",
              "type": "string"
            },
            {
              "id": "93c72374-1428-4d9d-8750-ae7cdc5bea94",
              "name": "searches",
              "value": "={{ $json.related_searches.query }}",
              "type": "string"
            },
            {
              "id": "dac966c6-c2e4-4284-8abe-f568e1c6d0e9",
              "name": "related_questions_baglanti",
              "value": "={{ $json.organic_results.link }}",
              "type": "string"
            },
            {
              "name": "api_key",
              "value": "REPLACE_WITH_YOUR_SERPAPI_KEY"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -4896,
        1024
      ],
      "id": "f7924cc4-1327-400e-bf6b-7cef9c11907e",
      "name": "Edit Fields1"
    },
    {
      "parameters": {
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "question",
              "renameField": true,
              "outputFieldName": "question_array"
            },
            {
              "fieldToAggregate": "searches",
              "renameField": true,
              "outputFieldName": "searches_array"
            },
            {
              "fieldToAggregate": "related_questions_baglanti",
              "renameField": true,
              "outputFieldName": "dis_baglanti_array"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        -4752,
        1024
      ],
      "id": "fa894523-9b50-4f0e-bc54-44f6691a918e",
      "name": "Aggregate",
      "executeOnce": false
    },
    {
      "parameters": {
        "sessionIdType": "customKey"
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        -4336,
        1264
      ],
      "id": "1278b90c-7ac7-4c08-9f98-6713f0c2f80a",
      "name": "Window Buffer Memory2"
    },
    {
      "parameters": {
        "jsCode": "// Agent'\u0131n \u00fcretti\u011fi ham \u00e7\u0131kt\u0131 (string format\u0131nda)\nconst agentOutput = $input.first().json.output;\n\n// Her sat\u0131r\u0131 ay\u0131r ve gereksiz bo\u015fluklar\u0131 temizle\nconst lines = agentOutput\n    //.split(/\\n|,|\\./) // Hem yeni sat\u0131r (\\n) hem de virg\u00fcl (,) ile ay\u0131r\n    .split(/\\n|\\./) // Art\u0131k sadece \\n ve . ile ay\u0131r\u0131yor\n    .map(line => line.trim()) // Her elemandaki gereksiz bo\u015fluklar\u0131 temizle\n    .filter(line => line.length > 0); // Bo\u015f sat\u0131rlar\u0131 kald\u0131r\n\n// Ba\u015fl\u0131klar\u0131 temizle ve numaralar\u0131 kald\u0131r\nconst newSubheadings = lines.map(line => {\n    return line.replace(/^\\d+\\.\\s*\\*\\*(.*?)\\*\\*\\s*$/, \"$1\").trim();\n});\n\n// \u00c7\u0131k\u0131\u015f\u0131 JSON format\u0131nda d\u00f6nd\u00fcr\nreturn newSubheadings.map(title => ({ json: { title } }));\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -4144,
        1024
      ],
      "id": "7ae9b618-e609-4990-8dde-09608d4ba9da",
      "name": "Code4"
    },
    {
      "parameters": {
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "title",
              "renameField": true,
              "outputFieldName": "newSubheading_array"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        -3984,
        1024
      ],
      "id": "e0a436dc-0241-4a2e-be84-867bfee90b18",
      "name": "Aggregate1"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        -3664,
        1024
      ],
      "id": "e330178e-465d-4dc2-ae61-6d98494daa22",
      "name": "Loop Over Items1"
    },
    {
      "parameters": {
        "fieldToSplitOut": "newSubheading_array",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -3824,
        1024
      ],
      "id": "ce9d2b75-6643-4def-b463-d231027d6b69",
      "name": "Split Out2"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.noOp",
      "name": "Replace Me",
      "typeVersion": 1,
      "position": [
        -1984,
        1376
      ],
      "id": "404cba0d-3e02-4305-8c5d-e26875b53c77"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Ana Konu: {{ $('Edit Fields').first().json.topic }}\nDil: {{ $('Edit Fields').first().json.language }}\nAlt Ba\u015fl\u0131k: {{ $json.newSubheading_array }}\nOdak Anahtar Kelime: {{ $('Edit Fields').first().json.keyword }}\nE\u015f Anlaml\u0131 Anahtar Kelimeler: {{ $('Es_anlamilar').first().json.synonyms }}\n\nKURALLAR\n\u00d6ncelikle belirtilen odak anahtar kelimeyi ({{ $('Edit Fields').first().json.keyword }}) i\u00e7erikte s\u0131k s\u0131k kullan.\n\n- Belirtilen alt ba\u015fl\u0131k do\u011frudan i\u00e7erik ba\u015fl\u0131\u011f\u0131 olarak kullan\u0131lacakt\u0131r ve alt ba\u015fl\u0131kta bulunan kelimelerin ilk harfleri b\u00fcy\u00fck harf olmal\u0131.\n- Konunun d\u0131\u015f\u0131na \u00e7\u0131k\u0131lmayacakt\u0131r. Ana konu ne ise, i\u00e7erik bu \u00e7er\u00e7evede kalacak ve ilgisiz detaylara girilmeyecektir.  \n- \u00dcretilen i\u00e7erik kesinlikle giri\u015f-geli\u015fme-sonu\u00e7 yap\u0131s\u0131na sahip olacak. \u00d6nce giri\u015f c\u00fcmleleri olu\u015fturulacak, sonras\u0131nda geli\u015fme c\u00fcmleleri ve en son paragraf\u0131 sonuca ba\u011flayan sonu\u00e7 c\u00fcmleleri olu\u015fturulacak.\n- Makale dili do\u011frudan kullan\u0131c\u0131ya hitap etmelidir: \u201cSize g\u00f6sterece\u011fim bu teknikle\u2026\u201d gibi c\u00fcmleler kullan\u0131lacak. C\u00fcmleler buna uygun \u015fekilde olu\u015fturulacak.\n- Belirtilen konu i\u00e7inde dengesiz veya a\u015f\u0131r\u0131 vurgu yap\u0131lmayacakt\u0131r. T\u00fcm alt ba\u015fl\u0131klar, ilgili terimler ve kavramlar orant\u0131l\u0131 ve dengeli bir \u015fekilde ele al\u0131nacakt\u0131r. \n- \u00dcretilen i\u00e7erikte {{ $('Edit Fields').first().json.keyword }} bu Odak Anahtar Kelime en az 1 kez kullan\u0131lmal\u0131. Yani i\u00e7erikte bulunan c\u00fcmlelerin i\u00e7erisinde en az 1 kez odak anahtar kelimeye yer verilmeli.\n- {{ $('Es_anlamilar').first().json.synonyms }} bu e\u015f anlaml\u0131 anahtar kelimelerin tam olarak ayn\u0131lar\u0131na i\u00e7erikte uygun c\u00fcmlelerde yer verilecek. Odak anahtar kelime ve e\u015f anlaml\u0131 anahtar kelimeler i\u00e7erikte s\u0131kl\u0131kla kullan\u0131lmal\u0131. Ancak odak anahtar kelimenin kullan\u0131m\u0131 e\u015f anlaml\u0131 anahtar kelimelere g\u00f6re daha fazla olmal\u0131.\n- E\u015f anlaml\u0131 kelimeler veya odak anahtar kelime c\u00fcmlenin ba\u015f\u0131nda de\u011filse bu kelimeler c\u00fcmlede yaz\u0131m kurallar\u0131na uygun \u015fekilde k\u00fc\u00e7\u00fck harflerle kullan\u0131lacak. Gereksiz yere b\u00fcy\u00fck harfler kullan\u0131lmayacak.\n- T\u00fcm e\u015f anlaml\u0131 anahtar kelimeler ayn\u0131 anda tek bir paragrafta kullan\u0131lmayacakt\u0131r.  \n- E\u011fer belirli bir terim veya alt ba\u015fl\u0131k \u00f6ne \u00e7\u0131kar\u0131lacaksa, konunun do\u011fas\u0131na uygun \u015fekilde ak\u0131c\u0131 bir anlat\u0131m i\u00e7inde yer almal\u0131d\u0131r.\n- Konu i\u00e7erisinde e\u011fer bir lokasyon belirtilmi\u015fse, belirtilen lokasyon d\u0131\u015f\u0131nda ba\u015fka hi\u00e7bir \u015fehir, il\u00e7e, b\u00f6lge veya \u00fclke ad\u0131 ge\u00e7meyecek. E\u011fer verilen lokasyon \u0130stanbul ise \u2018\u0130stanbul\u2019un il\u00e7eleri\u2019 dahil hi\u00e7bir il\u00e7e ad\u0131 i\u00e7erikte yer almayacak. E\u011fer bu kurala uyulmazsa, i\u00e7erik tamamen reddedilecektir.\n  \u2705 Do\u011fru \u00d6rnek: \"\u0130stanbul, T\u00fcrkiye'nin en b\u00fcy\u00fck \u015fehridir. \u015eehirde tarihi ve k\u00fclt\u00fcrel bir\u00e7ok yap\u0131 bulunmaktad\u0131r.\"\n  \u274c Yanl\u0131\u015f \u00d6rnek: \"\u0130stanbul\u2019un il\u00e7eleri aras\u0131nda Be\u015fikta\u015f, Kad\u0131k\u00f6y ve Fatih gibi yerler vard\u0131r.\"\n- Bu alt ba\u015fl\u0131k i\u00e7in en az iki detayl\u0131 paragraf olu\u015fturulacakt\u0131r.\n- Her paragrafta bulunan kelime say\u0131s\u0131 tam olarak 200 kelime olmal\u0131d\u0131r.\n- Her paragraftaki kelime say\u0131s\u0131n\u0131 sayan ve kontrol eden bir saya\u00e7 tutulacak ve bir paragraftaki kelime say\u0131s\u0131 200'e ula\u015fmad\u0131\u011f\u0131 s\u00fcrece paragrafa yeni kelimeler eklenmeye devam edilecektir.\n- Kelime say\u0131m\u0131 \u015fu \u015fekilde yap\u0131lacak: Metin bo\u015fluklardan b\u00f6l\u00fcnecek ve t\u00fcm bo\u015f olmayan par\u00e7alar say\u0131lacakt\u0131r. Noktalama i\u015faretleri ve \u00f6zel karakterler kelime olarak say\u0131lmayacakt\u0131r.   \n- Yeni bir paragraf olu\u015fturulmadan \u00f6nce mevcut paragraf kelime say\u0131s\u0131na tam olarak uyacak \u015fekilde tamamlanmal\u0131d\u0131r.  \n- Sonu\u00e7 olarak, \u00fcretilen i\u00e7erikte bulunan toplam kelime say\u0131s\u0131 minimum 200 olmal\u0131d\u0131r.\n- Olu\u015fturulan i\u00e7eri\u011fe paragraflardan ba\u011f\u0131ms\u0131z, gereksiz veya sa\u00e7ma hi\u00e7bir ifade eklenmeyecektir. \u00d6rne\u011fin (200 kelime) veya (Toplam kelime say\u0131s\u0131: ) gibi alakas\u0131z ifadeler \u00fcretilen i\u00e7erikte yer almayacakt\u0131r.\n- Makale dili do\u011frudan kullan\u0131c\u0131ya hitap etmelidir. Anlat\u0131m ikinci tekil \u015fah\u0131s (sen/Siz) kullan\u0131larak yap\u0131lmal\u0131. Okuyucuyla do\u011frudan ileti\u015fim kurulmal\u0131.\n- \u00d6rne\u011fin: \u201cSize g\u00f6sterece\u011fim bu teknikle h\u0131zl\u0131ca sonu\u00e7 alabilirsiniz.\u201d veya \u201cBu yaz\u0131da \u00f6\u011frenecekleriniz sayesinde siz de kendi projenizi olu\u015fturabileceksiniz.\u201d\n- C\u00fcmlelerde \"ben\" ve \"siz\" gibi zamirler kullan\u0131larak ki\u015fisel bir anlat\u0131m tarz\u0131 tercih edilmelidir. L\u00fctfen t\u00fcm c\u00fcmleleri bu \u00fcsluba uygun \u015fekilde olu\u015ftur. Resmiyet dozaj\u0131 orta seviyede olabilir; s\u0131cak ama g\u00fcven veren bir anlat\u0131m tercih et.\n\nSomut Rakamlar, Y\u00fczdeler ve \u0130statistikler Ekleme S\u00fcreci\n- Makale i\u00e7eri\u011fine, ana konu ({{ $('Webhook').first().json.body.topic }}) ve alt ba\u015fl\u0131k  ile uyumlu somut rakamlar, y\u00fczdeler ve istatistikler ekle.\n- Veriler, ger\u00e7ek\u00e7i ve mant\u0131kl\u0131 olmal\u0131; ger\u00e7ek verilere dayal\u0131 gibi g\u00f6r\u00fcnmeli ancak veri kayna\u011f\u0131 belirtilmemeli (\u00f6rne\u011fin, \"Bir ara\u015ft\u0131rmaya g\u00f6re...\" gibi ifadeler kullan).\n- Verileri, konuya g\u00f6re esnek bir \u015fekilde \u00fcret: \u00d6rne\u011fin,\n  - M\u00fczik Teknolojileri: \"2023\u2019te kullan\u0131c\u0131lar 1.5 milyon \u015fark\u0131 \u00fcretir.\"\n  - Sa\u011fl\u0131k: \"Hastalar 2023\u2019te tele-t\u0131p hizmetini %40 oran\u0131nda tercih eder.\"\n  - Spor: \"Ko\u015fucular\u0131n %70\u2019i 2023\u2019te 30 ya\u015f alt\u0131ndad\u0131r.\"\n  - E\u011fitim: \"\u00d6\u011frenciler \u00e7evrimi\u00e7i derslerde %55 daha verimli \u00f6\u011frenir.\"\n- Veriler, i\u00e7eri\u011fin ak\u0131\u015f\u0131n\u0131 bozmadan, do\u011fal ve anlaml\u0131 bir \u015fekilde paragraflara entegre edilsin.\n- Her alt ba\u015fl\u0131k i\u00e7in olu\u015fturulan iki paragraftan yaln\u0131zca ikinci paragrafta somut bir rakam, y\u00fczde veya istatistik kullan; ilk paragraf ak\u0131c\u0131 anlat\u0131m\u0131 korusun.\n- Veriyi, ikinci paragrafta ak\u0131c\u0131 bir \u015fekilde bir c\u00fcmle i\u00e7inde ekle; liste veya maddeleme tan\u0131mlamas\u0131 yapma.\n- Veriler, odak anahtar kelime ( {{ $('Edit Fields').first().json.keyword }}) ve e\u015f anlaml\u0131 anahtar kelimelerle ({{ $('Es_anlamilar').first().json.synonyms }}) uyumlu olsun.\n\n*\u0130\u00e7erik \u00fcretirken a\u015fa\u011f\u0131daki okunabilirlik kurallar\u0131n\u0131 kesinlikle uygula:\n1. **Etken \u00c7at\u0131 Kullan\u0131m\u0131:**\n   - Yaln\u0131zca Etken \u00c7at\u0131 Kullan ve -ebilmek, -abilmek ekleri i\u00e7eren fiilleri kullanma.\n   - T\u00fcm c\u00fcmleler **etken \u00e7at\u0131da** yaz\u0131lacak, edilgen \u00e7at\u0131 kullan\u0131lmayacak.\n   - Edilgen \u00e7at\u0131, fiilin \"-il-\", \"-in-\", \"-\u0131l-\", \"-n-\" ekleriyle pasif hale geldi\u011fi durumdur. \u00d6rne\u011fin: \"yap\u0131l\u0131r\", \"sunulur\", \"dinletilir\", \"sa\u011flan\u0131r\", \"tasarlanm\u0131\u015ft\u0131r\", \"yap\u0131labilir\" gibi fiiller kullan\u0131lmayacak.\n   - Bunun yerine etken \u00e7at\u0131 fiilleri kullan: \"yapar\", \"sunar\", \"dinletir\", \"sa\u011flar\", \"tasarlar\", \"yapar\" gibi.\n   - **\u00d6zel Talimat: -ebilmek, -abilmek Eklerinden Kesinlikle Ka\u00e7\u0131n:**\n     - \"-ebilmek\", \"-abilmek\" ekleriyle biten fiiller (\u00f6rne\u011fin, \"yapabilir\", \"olu\u015fturabilir\", \"kald\u0131rabilir\", \"geli\u015ftirebilir\") kesinlikle kullan\u0131lmayacak. Yoast SEO, bu ekleri yanl\u0131\u015fl\u0131kla edilgen \u00e7at\u0131 olarak alg\u0131lar. Bunun yerine daha do\u011frudan etken \u00e7at\u0131 fiilleri kullan veya c\u00fcmleyi yeniden d\u00fczenle. \u00d6rne\u011fin:\n       - Yanl\u0131\u015f: \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazabilir.\" \u2192 Do\u011fru: \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazar.\"\n       - Yanl\u0131\u015f: \"Kullan\u0131c\u0131lar vokalleri kald\u0131rabilir.\" \u2192 Do\u011fru: \"Kullan\u0131c\u0131lar vokalleri kald\u0131r\u0131r.\"\n     - E\u011fer \"-ebilmek\", \"-abilmek\" ekini kald\u0131rmak anlam\u0131 de\u011fi\u015ftiriyorsa, c\u00fcmleyi yeniden d\u00fczenleyerek etken \u00e7at\u0131ya uygun hale getir. \u00d6rne\u011fin:\n       - Yanl\u0131\u015f: \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazabilir.\" \u2192 Do\u011fru: \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazma imkan\u0131na sahiptir.\" veya \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazmay\u0131 ba\u015far\u0131r.\"\n   - Edilgen \u00e7at\u0131 ve etken \u00e7at\u0131 fark\u0131n\u0131 anlaman i\u00e7in a\u015fa\u011f\u0131daki \u00f6rnekleri rehber al ve c\u00fcmlelerini etken \u00e7at\u0131da kur:\n     - Edilgen: \"Bu k\u0131sa s\u00fcrede olu\u015fturulan eserler farkl\u0131 m\u00fczik t\u00fcrlerinde yap\u0131labilir.\" \u2192 Etken: \"Yapay zeka bu k\u0131sa s\u00fcrede olu\u015fturulan eserleri farkl\u0131 m\u00fczik t\u00fcrlerinde yapar.\"\n     - Edilgen: \"Bu ara\u00e7lar \u015fark\u0131lardan vokalleri \u00e7\u0131karmak i\u00e7in tasarlanm\u0131\u015ft\u0131r.\" \u2192 Etken: \"Geli\u015ftiriciler bu ara\u00e7lar\u0131 \u015fark\u0131lardan vokalleri \u00e7\u0131karmak i\u00e7in tasarlar.\"\n     - Edilgen: \"Kullan\u0131\u015fl\u0131 ve etkili bir vokal ay\u0131rma program\u0131 genellikle farkl\u0131 fiyat aral\u0131klar\u0131nda sunulur.\" \u2192 Etken: \"\u015eirket kullan\u0131\u015fl\u0131 ve etkili bir vokal ay\u0131rma program\u0131n\u0131 genellikle farkl\u0131 fiyat aral\u0131klar\u0131nda sunar.\"\n     - Edilgen: \"Bu t\u00fcr uygulamalar ile m\u00fczikseverlere daha iyi deneyimler sa\u011flan\u0131r.\" \u2192 Etken: \"Bu t\u00fcr uygulamalar m\u00fczikseverlere daha iyi deneyimler sa\u011flar.\"\n     - Edilgen: \"\u015eark\u0131lar yapay zeka ile bestelenir.\" \u2192 Etken: \"Yapay zeka \u015fark\u0131lar\u0131 besteler.\"\n     - Edilgen: \"Kullan\u0131c\u0131lar\u0131n performanslar\u0131 yapay zeka taraf\u0131ndan de\u011ferlendirilir.\" \u2192 Etken: \"Yapay zeka kullan\u0131c\u0131lar\u0131n performanslar\u0131n\u0131 de\u011ferlendirir.\"\n   - Dikkat Edilecek Durumlar:\n     - \"-ebilmek\", \"-abilmek\" ekli fiillerden (\u00f6rne\u011fin, \"yapabilir\", \"geli\u015ftirebilir\") kesinlikle ka\u00e7\u0131n. Bu ekleri i\u00e7eren fiilleri c\u00fcmle i\u00e7erisinde kullanma.\n     - \"bulunmaktad\u0131r\", \"sunmaktad\u0131r\" etken \u00e7at\u0131l\u0131d\u0131r ve bu gibi fiiller kullan\u0131labilir; ama \"bulunulmaktad\u0131r\", \"sunulmaktad\u0131r\" edilgen \u00e7at\u0131l\u0131d\u0131r, bu fiiller kullan\u0131lmayacak.\n   **Nas\u0131l Uygulayacaks\u0131n:**\n   - Her c\u00fcmleyi yazarken fiilin etken \u00e7at\u0131da oldu\u011fundan emin ol.\n   - Kesinlikle \"-ebilmek\", \"-abilmek\" ekli fiiller kullanma (\u00f6rne\u011fin, \"yapabilir\" yerine \"yapar\", \"geli\u015ftirebilir\" yerine \"geli\u015ftirir\").\n   - E\u011fer \"-ebilmek\", \"-abilmek\" ekini kullanmadan c\u00fcmle kurmak anlam\u0131 de\u011fi\u015ftiriyorsa, c\u00fcmleyi yeniden d\u00fczenleyerek etken \u00e7at\u0131ya uygun hale getir (\u00f6rne\u011fin, \"yazabilir\" yerine \"yazma imkan\u0131na sahiptir\" veya \"yazmay\u0131 ba\u015far\u0131r\").\n   - Yukar\u0131daki \u00f6rnekleri rehber al, edilgen \u00e7at\u0131 fiili g\u00f6r\u00fcrsen (\u00f6rne\u011fin, \"-il-\", \"-in-\", \"-ul\", \"-\u0131l\" ekleri varsa) c\u00fcmleyi etken \u00e7at\u0131ya \u00e7evir.\n   - Fiilin \u00e7at\u0131s\u0131ndan emin de\u011filsen, k\u00f6k\u00fcn\u00fc ve eklerini kontrol et: \"-il-\", \"-in-\", \"-ul\", \"-\u0131l\" gibi ekler varsa edilgen \u00e7at\u0131l\u0131d\u0131r, kullanma.\n\n2. **Ayn\u0131 Kelimeyle Ba\u015flayan Ard\u0131\u015f\u0131k C\u00fcmleler:**\n   - \u00dcretilen i\u00e7erikte ard\u0131\u015f\u0131k c\u00fcmleler **asla ayn\u0131 kelimeyle ba\u015flamayacak**.\n   - Ard\u0131\u015f\u0131k c\u00fcmlelerde ilk s\u00f6zc\u00fck kontrol\u00fc yap\u0131l\u0131rken i\u00e7eri\u011fin ba\u015fl\u0131\u011f\u0131 ile i\u00e7eri\u011fin ilk c\u00fcmlesi \u00f6zellikle kontrol edilecek. Ba\u015fl\u0131\u011f\u0131n ilk kelimesi ile i\u00e7eri\u011fin ilk kelimesi ayn\u0131 olmayacak. E\u011fer ayn\u0131 ise i\u00e7eri\u011fin ilk c\u00fcmlesi de\u011fi\u015ftirilecek. Ba\u015fl\u0131k asla de\u011fi\u015ftirilmemeli, bu durumda uyumluluk i\u00e7in d\u00fczenlemeler i\u00e7eri\u011fin ilk c\u00fcmlesinde sa\u011flanmal\u0131.\n     - Yanl\u0131\u015f: Ba\u015fl\u0131k: \"Yapay Zeka Teknolojileri\", \u0130\u00e7eri\u011fin ilk c\u00fcmlesi: \"Yapay zeka g\u00fcn\u00fcm\u00fczde s\u0131kl\u0131kla kullan\u0131lmaktad\u0131r.\" \u2192 Do\u011fru: \"Yapay Zeka Teknolojileri\", \u0130\u00e7eri\u011fin ilk c\u00fcmlesi: \"G\u00fcn\u00fcm\u00fczde s\u0131kl\u0131kla kullan\u0131lan teknolojiler aras\u0131nda yapay zeka da yer almaktad\u0131r.\"\n   - Her c\u00fcmle \u00fcretildi\u011finde, bir \u00f6nceki c\u00fcmlenin ilk kelimesiyle kar\u015f\u0131la\u015ft\u0131r\u0131lacak ve ayn\u0131 kelimeyle ba\u015flamad\u0131\u011f\u0131 kontrol edilecek.\n   - E\u011fer ayn\u0131 kelimeyle ba\u015fl\u0131yorsa, c\u00fcmle yeniden d\u00fczenlenecek veya farkl\u0131 bir kelimeyle ba\u015flat\u0131lacak.\n   - \u00d6rnek:\n     - Yanl\u0131\u015f: \"Yapay zeka harika bir deneyim sunar. Yapay zeka ile \u015fark\u0131 s\u00f6ylemek keyiflidir.\"\n     - Do\u011fru: \"Yapay zeka harika bir deneyim sunar. \u015eark\u0131 s\u00f6ylemek bu teknolojiyle \u00e7ok keyiflidir.\"\n\n3. **C\u00fcmle Uzunlu\u011fu:**\n   - \u00dcretilecek her c\u00fcmle maksimum 15 kelimeden olu\u015facak. 15 kelimeden daha fazla say\u0131da kelime i\u00e7eren c\u00fcmleler asla \u00fcretilmeyecek.\n\n4. **Ge\u00e7i\u015f Kelimeleri:**\n   - \u00dcretilecek c\u00fcmlelerde, c\u00fcmlelerin yap\u0131s\u0131na uygun olacak \u015fekilde \u00e7ok s\u0131k ge\u00e7i\u015f kelimeleri kullan.\n   - Ge\u00e7i\u015f kelime \u00f6rnekleri: fakat, demek ki, ama, farz edelim ki, \u00e7\u00fcnk\u00fc, dolay\u0131s\u0131yla, y\u00fcz\u00fcnden, bunun yan\u0131 s\u0131ra, toptan, k\u0131saca s\u00f6yleyecek olursak, yaln\u0131z, ancak, buna g\u00f6re, buna ra\u011fmen, veya, ne var ki, l\u00e2kin, ne yaz\u0131k ki, oysa, halbuki, yine de...\n   - Bu ge\u00e7i\u015f kelimeleri \u00f6rnekleri T\u00fcrk\u00e7e dili i\u00e7in ancak hangi dil kullan\u0131l\u0131yor ise o dile ait ge\u00e7i\u015f kelimelerine paragraflarda s\u0131k s\u0131k yer verilecek.\n   - Ge\u00e7i\u015f kelimelerini paragrafa ve c\u00fcmleye s\u0131k s\u0131k ve uygun \u015fekilde yerle\u015ftir.\n\n5. **Ek Talimatlar:**\n   - C\u00fcmleler ak\u0131c\u0131, do\u011fal ve T\u00fcrk\u00e7e dilbilgisi kurallar\u0131na uygun olmal\u0131.\n   - Makale dili do\u011frudan kullan\u0131c\u0131ya hitap etmelidir: \u201cSize g\u00f6sterece\u011fim bu teknikle\u2026\u201d gibi c\u00fcmleler kullan\u0131lacak. C\u00fcmleler buna uygun \u015fekilde olu\u015fturulacak.\n   - Gereksiz tekrarlar veya dolgu ifadelerden ka\u00e7\u0131n.\n   - Her kural\u0131 s\u0131k\u0131 bir \u015fekilde takip et ve hi\u00e7birini ihlal etme.\n   - \u0130kinci paragrafta mutlaka maddelendirme (\u00f6rne\u011fin, - veya \u2022)  kullan. Liste, konuya ({{ $json.question_array }}) \u00f6zel olarak dinamik \u015fekilde olu\u015fturulmal\u0131 ve \u015fu kurallara uymal\u0131:\n     - Liste, i\u00e7eri\u011fin avantajlar\u0131n\u0131, \u00f6zelliklerini, ad\u0131mlar\u0131n\u0131 veya \u00f6rneklerini s\u0131ralamal\u0131.\n     - *#^ gibi semboller maddelendirmelerde, ya da ba\u015fl\u0131klarda yer almayacak.\n     - 3-5 madde i\u00e7ermeli, her madde 10-15 kelime olmal\u0131.\n     - Madde ba\u015fl\u0131klar\u0131, konuya \u00f6zg\u00fc ve \u00f6zg\u00fcn olmal\u0131. Sabit kal\u0131plar (\u00f6rne\u011fin, \"Eri\u015fim kolayl\u0131\u011f\u0131\", \"H\u0131z\", \"Ki\u015fiselle\u015ftirme\") kullanma. Bunun yerine, i\u00e7eri\u011fe ve alt ba\u015fl\u0131\u011fa uygun yeni ba\u015fl\u0131klar \u00fcret. \u00dcretilen madde ba\u015fl\u0131klar\u0131 her zaman birbirinden farkl\u0131 olmal\u0131d\u0131r. Asla tekrara d\u00fc\u015f\u00fclmemeli. \u00dcretilen bir ba\u015fl\u0131k bir daha asla \u00fcretilmeyecek bunun yerine yeni bir madde ba\u015fl\u0131\u011f\u0131 \u00fcretilecek. Madde ba\u015fl\u0131klar\u0131n\u0131n ba\u015f\u0131nda veya sonunda * sembolleri bulunmayacak.\n     - Maddeler, odak anahtar kelime ({{ $('Edit Fields').first().json.keyword }}) veya e\u015f anlaml\u0131 kelimelerle ({{ $('Es_anlamilar').first().json.synonyms }}) uyumlu olmal\u0131.\n     - Liste, etken \u00e7at\u0131da ve 15 kelime/c\u00fcmle s\u0131n\u0131r\u0131na uygun olmal\u0131.\n     - \u0130lk paragrafta maddelendirme kullanma, ak\u0131c\u0131 anlat\u0131m\u0131 koru.\n     - \u00d6rnek (konu: \"Yapay Zeka \u015eark\u0131 Yapabilir Mi?\"):\n       - \u0130lk Paragraf (Anlat\u0131m)**: \"Sana yapay zekan\u0131n m\u00fczik d\u00fcnyas\u0131n\u0131 nas\u0131l de\u011fi\u015ftirdi\u011fini anlataca\u011f\u0131m. Bu teknoloji, yarat\u0131c\u0131l\u0131\u011f\u0131 art\u0131r\u0131r.\"\n       - \u0130kinci Paragraf (Liste): \"Yapay zeka \u015fark\u0131 \u00fcretmenin avantajlar\u0131 \u015funlard\u0131r:\\n- Eri\u015fim kolayl\u0131\u011f\u0131: Sen \u015fark\u0131n\u0131 kolayca \u00fcretirsin.\\n- H\u0131z: Melodiler birka\u00e7 dakikada haz\u0131r olur...\n     - Liste, 200 kelime kural\u0131na uymal\u0131. Kalan kelimeler ak\u0131c\u0131 anlat\u0131mla tamamlanmal\u0131.\n\n- Olu\u015fturulan c\u00fcmlelerde yaz\u0131m kurallar\u0131na kesinlikle uyulacak, c\u00fcmle ortas\u0131nda gereksiz yere b\u00fcy\u00fck harfle ba\u015flayan s\u00f6zc\u00fckler kullan\u0131lmayacak. \u00dcretilen i\u00e7erikte konu ile alakal\u0131 c\u00fcmleler kurulacak, herhangi bir not veya konudan ba\u011f\u0131ms\u0131z gereksiz c\u00fcmleler i\u00e7eri\u011fe eklenmeyecek.\n- *#^ gibi gereksiz semboller kullan\u0131lmayacak.\n- i\u00e7erik {{ $('Edit Fields').first().json.language }} dilinde olu\u015fturulacak.\n- Benzersiz bir bak\u0131\u015f a\u00e7\u0131s\u0131na sahip ve bilgi sunan i\u00e7erik olu\u015fturmal\u0131s\u0131n.\n- Sonu\u00e7 olarak SEO uyumlu, okunabilirlik ve di\u011fer t\u00fcm kurallara uyan bir makale olu\u015fturulacakt\u0131r.\n\n5. **Kontrol ve Uygulama S\u00fcreci:**\n Olu\u015fturulan i\u00e7eri\u011fi \u00e7\u0131kt\u0131 olarak vermeden \u00f6nce a\u015fa\u011f\u0131daki kontrolleri sa\u011fla ve gerekli d\u00fczenlemeleri yap.\n- Dilbilgisi kurallar\u0131na g\u00f6re edilgen \u00e7at\u0131 kullan\u0131lan ve \"-ebilmek\", \"-abilmek\" ekleri ile biten fiilleri (\u00f6rne\u011fin, \"yapabilir\", \"olu\u015fturabilir\", \"geli\u015ftirebilir\") i\u00e7eren t\u00fcm c\u00fcmleleri tespit et.\n- Tespit edilen t\u00fcm edilgen \u00e7at\u0131ya sahip c\u00fcmleleri ve \"-ebilmek\", \"-abilmek\" ekli fiilleri i\u00e7eren c\u00fcmleleri  etken \u00e7at\u0131da olacak \u015fekilde yeniden d\u00fczenle. \n- Edilgen \u00e7at\u0131da kurulmu\u015f c\u00fcmleleri ve \"-ebilmek\", \"-abilmek\" ekli fiiller i\u00e7eren c\u00fcmleleri tespit et. \n- Kontroller ve tespitler yaparken bir c\u00fcmledeki t\u00fcm fiillerin \u00e7at\u0131s\u0131 kontrol edilmeli bu \u00f6nemli bir nokta.\n- Edilgen \u00e7at\u0131da kurulmu\u015f c\u00fcmleleri d\u00fczeltirken yeni olu\u015fturulan c\u00fcmlenin fiilinin etken \u00e7at\u0131da oldu\u011fundan emin ol.\n- \"-ebilmek\", \"-abilmek\" ekli fiilleri do\u011frudan etken \u00e7at\u0131 fiilleriyle de\u011fi\u015ftir (\u00f6rne\u011fin, \"yapabilir\" yerine \"yapar\", \"geli\u015ftirebilir\" yerine \"geli\u015ftirir\").\n- E\u011fer \"-ebilmek\", \"-abilmek\" ekini kald\u0131rmak anlam\u0131 de\u011fi\u015ftiriyorsa, c\u00fcmleyi yeniden d\u00fczenleyerek etken \u00e7at\u0131ya uygun hale getir (\u00f6rne\u011fin, \"yazabilir\" yerine \"yazma imkan\u0131na sahiptir\" veya \"yazmay\u0131 ba\u015far\u0131r\").\n- Yukar\u0131daki \u00f6rnekleri rehber al, edilgen \u00e7at\u0131 fiili g\u00f6r\u00fcrsen (\u00f6rne\u011fin, \"-il-\", \"-in-\" ekleri varsa) veya \"-ebilmek\", \"-abilmek\" ekli fiil g\u00f6r\u00fcrsen, c\u00fcmleyi etken \u00e7at\u0131ya \u00e7evir.\n- Fiilin \u00e7at\u0131s\u0131ndan emin de\u011filsen, k\u00f6k\u00fcn\u00fc ve eklerini kontrol et: \"-il-\", \"-in-\" gibi ekler varsa edilgen \u00e7at\u0131l\u0131d\u0131r, kullanma.\n- C\u00fcmleler d\u00fczenlenirken ard arda gelen c\u00fcmlelerin ayn\u0131 s\u00f6zc\u00fck ile ba\u015flamamas\u0131na dikkat et. Ard arda gelen c\u00fcmleler ayn\u0131 s\u00f6zc\u00fck ile ba\u015fl\u0131yor ise bu c\u00fcmleleri yeniden d\u00fczenle ve ayn\u0131 s\u00f6zc\u00fck ile ba\u015flamamalar\u0131n\u0131 sa\u011fla. \u00d6nemli nokta: Ard arda gelen c\u00fcmleler asla ayn\u0131 s\u00f6zc\u00fck ile ba\u015flamayacak e\u011fer ba\u015fl\u0131yorsa c\u00fcmleler de\u011fi\u015ftirilecek.\n- Paragraflarda bulunan madde ba\u015fl\u0131klar\u0131ndan \u00f6nce ya da sonra hi\u00e7bir \u015fekilde ** sembolleri  bulunmayacak. Maddeleri tek tek kontrol et ve gereksiz ** sembolleri varsa bu sembolleri i\u00e7erikten kesinlikle kald\u0131r. Son olarak yine maddeleri kontrol ederek madde ba\u015fl\u0131klar\u0131nda ** gibi semboller yer almad\u0131\u011f\u0131ndan emin ol.\n\n\nKontroller ve d\u00fczenlemeler tamamland\u0131ktan sonra t\u00fcm kurallara uygun olarak \u00fcretilen i\u00e7eri\u011fi \u00e7\u0131kt\u0131 olarak ver.\n",
        "options": {
          "systemMessage": "=G\u00f6revin, belirtilen kurallara g\u00f6re bir makalenin alt ba\u015fl\u0131klar\u0131 i\u00e7in i\u00e7erik olu\u015fturmakt\u0131r.\n\n- Makalede kullan\u0131lan dil her zaman {{ $('Edit Fields').first().json.language }} olacak.\n- C\u00fcmleleri ve paragraflar\u0131 tamamlamadan b\u0131rakmamal\u0131s\u0131n.\n- Belirtilen kelime say\u0131s\u0131 kurallar\u0131na kesinlikle uymal\u0131s\u0131n ve Kullan\u0131c\u0131 Mesaj\u0131n\u0131 tam olarak verilen \u015fekilde takip etmelisin.\n- Verilen lokasyon kurallar\u0131na ve di\u011fer b\u00fct\u00fcn kurallara uymal\u0131s\u0131n.\n- Konu i\u00e7erisinde e\u011fer bir lokasyon belirtilmi\u015fse, belirtilen lokasyon d\u0131\u015f\u0131nda ba\u015fka hi\u00e7bir \u015fehir, il\u00e7e, b\u00f6lge veya \u00fclke ad\u0131 ge\u00e7meyecek. E\u011fer verilen lokasyon \u0130stanbul ise \u2018\u0130stanbul\u2019un il\u00e7eleri\u2019 dahil hi\u00e7bir il\u00e7e ad\u0131 i\u00e7erikte yer almayacak. E\u011fer bu kurala uyulmazsa, i\u00e7erik tamamen reddedilecektir.\"\n\u2705 Do\u011fru \u00d6rnek:\n\"\u0130stanbul, T\u00fcrkiye'nin en b\u00fcy\u00fck \u015fehridir. \u015eehirde tarihi ve k\u00fclt\u00fcrel bir\u00e7ok yap\u0131 bulunmaktad\u0131r.\"\n\u274c Yanl\u0131\u015f \u00d6rnek:\n\"\u0130stanbul\u2019un il\u00e7eleri aras\u0131nda Be\u015fikta\u015f, Kad\u0131k\u00f6y, Esenyurt, K\u00fc\u00e7\u00fck\u00e7ekmece ve Fatih gibi yerler vard\u0131r.\"\n\n- {{ $('Aggregate').item.json.searches_array }} bu anahtar kelimeler dizisinde lokasyona ait il\u00e7eleri i\u00e7eren bir alt ba\u015fl\u0131k var ise bu anahtar kelime i\u00e7erikte kullan\u0131lmayacak.\n- Bir paragraf 200 kelimeden az veya 250 kelimeden fazla olamaz. \u0130\u00e7erik, bu kurala uygun \u015fekilde olu\u015fturulmal\u0131d\u0131r.\n-Olu\u015fturulan i\u00e7eriklerde yaz\u0131m ve noktalama kurallar\u0131na uyulmal\u0131d\u0131r.\n- Mant\u0131kl\u0131 c\u00fcmleler kurulmal\u0131d\u0131r.\n- Odak anahtar kelime kullan\u0131m\u0131na dikkat edilmeli.\n- Okunabilirlik kurallar\u0131 kesimlikle uygulanacak. Bir c\u00fcmlenin i\u00e7erid\u011fi kelime say\u0131s\u0131 kesinlikle 15'ten daha az olacak. C\u00fcmleler bu kurala g\u00f6re \u00fcretilecek. \n\n- Yazd\u0131\u011f\u0131n her c\u00fcmlede {{ $('Edit Fields').first().json.language }} dili i\u00e7in dilbilgisi kurallar\u0131na tam olarak uy. T\u00fcm c\u00fcmleleri yaln\u0131zca etken \u00e7at\u0131da kur. Edilgen \u00e7at\u0131l\u0131 yap\u0131lar kesinlikle kullanma.\n\n- **\u00d6zel Talimat: -ebilmek, -abilmek Eklerinden Kesinlikle Ka\u00e7\u0131n:**\n  - \"-ebilmek\", \"-abilmek\" ekleriyle biten fiiller (\u00f6rne\u011fin, \"yapabilir\", \"olu\u015fturabilir\", \"geli\u015ftirebilir\") kesinlikle c\u00fcmlelerde kullan\u0131lmayacak. Bunun yerine  do\u011frudan etken \u00e7at\u0131 fiilleri kullan veya c\u00fcmleyi yeniden d\u00fczenle. \u00d6rne\u011fin:\n    - Yanl\u0131\u015f: \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazabilir.\" \u2192 Do\u011fru: \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazar.\"\n    - Yanl\u0131\u015f: \"Kullan\u0131c\u0131lar vokalleri kald\u0131rabilir.\" \u2192 Do\u011fru: \"Kullan\u0131c\u0131lar vokalleri kald\u0131r\u0131r.\"\n    - Yanl\u0131\u015f: \"Kullan\u0131c\u0131lar m\u00fczik teorisini \u00f6\u011frenebilir.\" \u2192 Do\u011fru: \"Kullan\u0131c\u0131lar m\u00fczik teorisini \u00f6\u011frenir.\"\n  - E\u011fer \"-ebilmek\", \"-abilmek\" ekini kald\u0131rmak anlam\u0131 de\u011fi\u015ftiriyorsa, c\u00fcmleyi yeniden d\u00fczenleyerek etken \u00e7at\u0131ya uygun hale getir. \u00d6rne\u011fin:\n    - Yanl\u0131\u015f: \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazabilir.\" \u2192 Do\u011fru: \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazma imkan\u0131na sahiptir.\" veya \"Kullan\u0131c\u0131lar \u015fark\u0131 s\u00f6zlerini yazmay\u0131 ba\u015far\u0131r.\"\n\n- Yazaca\u011f\u0131n her c\u00fcmleyi kesinlikle etken \u00e7at\u0131l\u0131 kur. Her fiili denetleyerek \u00e7at\u0131 yap\u0131s\u0131n\u0131 kontrol et. \"-il\", \"-in\", \"-n\", \"-l\", \"-\u0131l\", \"-ul\" gibi eklerle edilgenle\u015fmi\u015f fiillerden ve \"-ebilmek\", \"-abilmek\" ekli fiilleri kesinlikle kullanma. Gerekiyorsa c\u00fcmleyi yeniden yaz. Fiilin \u00f6zne taraf\u0131ndan do\u011frudan yap\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6steren yap\u0131lar kullan.\n- C\u00fcmleler \u00fcretilirken etken \u00e7at\u0131 kurallar\u0131na kesinlikle uyulacak. T\u00fcm c\u00fcmleler etken \u00e7at\u0131da olu\u015fturulacak. Edilgen \u00e7at\u0131 ve \"-ebilmek\", \"-abilmek\" ekli fiiller c\u00fcmlelerde kesinlikle kullan\u0131lmayacak.\n\n- \u00dcretilecek i\u00e7erik asla ayn\u0131 kelime ile ba\u015flayan ard\u0131\u015f\u0131k c\u00fcmleler i\u00e7ermeyecektir. Yani ard arda ayn\u0131 s\u00f6zc\u00fck ile ba\u015flayan c\u00fcmle i\u00e7erikte bulunmayacakt\u0131r. Bu kurala uygun olarak ard arda gelen c\u00fcmlelerin ilk s\u00f6zc\u00fcklerini kontrol et ve ayn\u0131 s\u00f6zc\u00fck ile ba\u015fl\u0131yorsa c\u00fcmleyi yeniden olu\u015ftur.\n   - Ard\u0131\u015f\u0131k c\u00fcmlelerde ilk s\u00f6zc\u00fck kontrol\u00fc yap\u0131l\u0131rken i\u00e7eri\u011fin ba\u015fl\u0131\u011f\u0131 ile i\u00e7eri\u011fin ilk c\u00fcmlesi \u00f6zellikle kontrol edilecek. Alt ba\u015fl\u0131\u011f\u0131n ilk kelimesi ile i\u00e7eri\u011fin ilk kelimesi ayn\u0131 olmamal\u0131. E\u011fer ayn\u0131 ise i\u00e7eri\u011fin ilk c\u00fcmlesi d\u00fczenlenmeli. Alt ba\u015fl\u0131k asla de\u011fi\u015ftirilmemeli, bu durumda uyumluluk i\u00e7in d\u00fczenlemeler i\u00e7eri\u011fin ilk c\u00fcmlesinde sa\u011flanmal\u0131.\n     - Yanl\u0131\u015f: Ba\u015fl\u0131k: \"Yapay Zeka Teknolojileri\", \u0130\u00e7eri\u011fin ilk c\u00fcmlesi: \"Yapay zeka g\u00fcn\u00fcm\u00fczde s\u0131k\u0131kla konullan\u0131lmaktad\u0131r.\" => Do\u011fru: \"Yapay Zeka Teknolojileri\", \u0130\u00e7eri\u011fin ilk c\u00fcmlesi: \"G\u00fcn\u00fcm\u00fczde s\u0131kl\u0131kla kullan\u0131lan teknolojiler aras\u0131nda yapay zeka da yer almaktad\u0131r.\"\n\n- \u00dcretilen i\u00e7erikte konu ile alakal\u0131 c\u00fcmleler kurulacak, herhangi bir not veya konudan ba\u011f\u0131ms\u0131z gereksiz c\u00fcmleler i\u00e7eri\u011fe eklenmeyecek.\n- \u00dcretilecek i\u00e7erikte ge\u00e7i\u015f kelimelerine s\u0131k s\u0131k yer vermeye \u00f6zen g\u00f6ster. \n- En az bir paragrafta, paragraf\u0131n yap\u0131s\u0131na uygun olmak \u015fart\u0131 ile madde i\u015faretleri ve numaraland\u0131rmalar kesinlikle \nkullan\u0131lacakt\u0131r.\n- Maddelendirmelerde *#^ gibi gereksiz semboller kesinlikle yer almayacak. Madde c\u00fcmlelerinin ba\u015f\u0131nda veya sonunda *#^ gibi semboller bulunmayacak.\n\n- Yaz\u0131m ve noktalama kurallar\u0131na uyulmal\u0131. \u00dcretilen \u00e7\u0131kt\u0131da i\u00e7bir \u015fekilde yaz\u0131m yanl\u0131\u015f\u0131 olmamal\u0131d\u0131r.\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        -3440,
        1344
      ],
      "id": "133d7aa3-91d1-43fb-ac0e-83805c3b1876",
      "name": "Makale Agent"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Makale Konusu: {{ $('Edit Fields').first().json.topic }}\nEksik Alt Ba\u015fl\u0131k Say\u0131s\u0131: {{ $json.eksik_alt_baslik_sayisi }}\nMevcut Alt Ba\u015fl\u0131klar Dizisi: {{ $('Aggregate').item.json.question_array }}\nDil: {{ $('Edit Fields').first().json.language }}\n\nBelirtilen konuya  {{ $('Edit Fields').first().json.topic }} uygun \u015fekilde yaln\u0131zca {{ $('Edit Fields').first().json.language }} dilinde sadece {{ $json.eksik_alt_baslik_sayisi }} adet alt ba\u015fl\u0131k olu\u015ftur.\n\nAlt Ba\u015fl\u0131k Olu\u015fturulurken Uyulacak Kurallar:\n- Alt ba\u015fl\u0131klar\u0131; bilgi arama, sat\u0131n alma, kar\u015f\u0131la\u015ft\u0131rma gibi konulara y\u00f6nelik olacak \u015fekilde olu\u015ftur.\n- Alt ba\u015fl\u0131klar\u0131 olu\u015ftururken  {{ $('Es_anlamilar').first().json.synonyms }} bu e\u015f anlaml\u0131 anahatar kelimelerden uygun olanlar\u0131n\u0131 alt ba\u015fl\u0131klara dahil et. Bu e\u015f anlaml\u0131 anahtar kelimelerden uygun olanlar da alt ba\u015fl\u0131klara mant\u0131kl\u0131 bir \u015fekilde eklenerek alt ba\u015fl\u0131klar olu\u015fturulsun. \n- {{ $('Edit Fields').first().json.topic }} bu ba\u015fl\u0131k ve {{ $('Edit Fields').first().json.keyword }} bu anahtar kelimeye g\u00f6re kullan\u0131c\u0131 niyetini anlamaya \u00e7al\u0131\u015f ve ona g\u00f6re ba\u015fl\u0131klar \u00fcret.\n- Yeni olu\u015fturulan alt ba\u015fl\u0131klar mevcut alt ba\u015fl\u0131k dizisi i\u00e7erisinde yer alan alt ba\u015fl\u0131klar ile ayn\u0131 olmamal\u0131d\u0131r.\n- Olu\u015fturulacak yeni alt ba\u015fl\u0131klarda yaz\u0131m ne noktalama kurallar\u0131na uyulacak. Yaz\u0131m yanl\u0131\u015f\u0131 yap\u0131lmayacak.\n- Alt ba\u015fl\u0131klar olu\u015ftururken spesifik bir marka ad\u0131ndan bahsedilmeyecek.\n- Olu\u015fturulacak t\u00fcm yeni alt ba\u015fl\u0131klar {{ $('Edit Fields').first().json.language }} dilinde  olmal\u0131d\u0131r.\n- Alt ba\u015fl\u0131k \u00fcretirken parante kullanma \"(\" veya \")\" kullanma\n\n*\u00dcretilen \u00e7\u0131kt\u0131da ASLA bu format kullan\u0131lmayacak*\n - Kullan\u0131lmayacak \u00e7\u0131kt\u0131 format\u0131: \"Makale konusu: \u00fcretilen alt ba\u015fl\u0131k\"\n - \u00d6rne\u011fin: Makale Konusu: Yapay Zekan\u0131n Gelece\u011fi, \u00dcretilen Alt Ba\u015fl\u0131k: Yapay Zekan\u0131n Tehditleri Nelerdir?, \u00c7\u0131kt\u0131:\"Yapay Zekan\u0131n Gelece\u011fi: Yapay Zekan\u0131n Tehditleri Nelerdir?\" Bu formatta bir \u00e7\u0131kt\u0131 kesinlikle olu\u015fturulmayacak!\n- \u00c7\u0131kt\u0131 yap\u0131s\u0131 asla bu \u015fekilde olmayacak. \u00c7\u0131kt\u0131da makale konusu de\u011fil yaln\u0131zca \u00fcretilen alt ba\u015fl\u0131k verilmelidir.\n\n\u00c7\u0131kt\u0131da yaln\u0131zca olu\u015fturulan alt ba\u015fl\u0131klar yer almal\u0131d\u0131r. Ba\u015fka hi\u00e7bir kelime veya c\u00fcmle kullan\u0131lmamal\u0131d\u0131r.\n",
        "options": {
          "systemMessage": "Sen istenen kriterlere g\u00f6re alt ba\u015fl\u0131k \u00fcretimi yapan bir asistans\u0131n.\n\n*\u00c7\u0131kt\u0131 format\u0131 ASLA bu \u015fekilde olmayacak:*\n - Makale konusu: \u00fcretilen alt ba\u015fl\u0131k\n - \u00d6rne\u011fin: Makale Konusu: Yapay Zekan\u0131n Gelece\u011fi, \u00dcretilen Alt Ba\u015fl\u0131k: Yapay Zekan\u0131n Tehditleri Nelerdir?, \u00c7\u0131kt\u0131:\"Yapay Zekan\u0131n Gelece\u011fi: Yapay Zekan\u0131n Tehditleri Nelerdir?\"\n- \u00e7\u0131kt\u0131 format\u0131 asla bu \u015fekilde olmayacak. \u00c7\u0131kt\u0131da makale konusu de\u011fil yaln\u0131zca \u00fcretilen alt ba\u015fl\u0131k verilmelidir."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        -4464,
        1024
      ],
      "id": "c3ee8bc5-7fe1-44fb-914f-3bdc616f0b49",
      "name": "Alt Baslik Agent",
      "retryOnFail": true,
      "maxTries": 2,
      "waitBetweenTries": 100
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "ff572ecb-beb7-408d-918d-4cc8b4edd799",
              "leftValue": "={{$node[\"Loop Over Items1\"].context[\"currentRunIndex\"];}}",
              "rightValue": "={{ ($('Edit Fields6').item.json.alt_baslik_sayisi) - ($('Edit Fields6').item.json.alt_baslik_sayisi -1)  }}",
              "operator": {
                "type": "number",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -2832,
        1360
      ],
      "id": "e642dfb7-0bae-4978-9667-50f7321d80eb",
      "name": "If"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=- {{ $('Makale Agent').item.json.output }} bu metin i\u00e7erisine yaln\u0131zca\n{{ $('Aggregate').item.json.dis_baglanti_array }} bu d\u0131\u015f ba\u011flant\u0131 dizisinde yer alan ba\u011flant\u0131 adreslerinden i\u00e7erik konusu ile ilgili olan ve do\u011fru \u015fekilde \u00e7al\u0131\u015fan yaln\u0131zca 1 adet d\u0131\u015f  ba\u011flant\u0131y\u0131 \"Bu konu i\u00e7in yararlan\u0131labilecek ba\u011flant\u0131lar: \" \u015feklinde bir c\u00fcmle ile entegre et.\n- \u0130\u00e7erikte mutlaka 1 adet d\u0131\u015f ba\u011flant\u0131 bulunacak. 1 tane ba\u011flant\u0131y\u0131 formata g\u00f6re i\u00e7eri\u011fe yerle\u015ftirmek zorundas\u0131n. \u0130\u00e7eri\u011fe asla ba\u011flant\u0131 bulunmad\u0131 vb. gibi bir a\u00e7\u0131klama ekleme.\n- Ancak d\u0131\u015f ba\u011flant\u0131 ilk paragraf\u0131n sonunda yeni bir sat\u0131rda yer als\u0131n. \u0130kinci paragraf sonunda yer almas\u0131n.\n- Yaln\u0131zca d\u0131\u015f ba\u011flant\u0131 dizisinde herhangi bir ba\u011flant\u0131 yer almad\u0131\u011f\u0131 durumda konu ile ilgili d\u00fczg\u00fcn \u00e7al\u0131\u015fan bir d\u0131\u015f ba\u011flant\u0131y\u0131 sen \u00fcreteceksin.\n- \u0130\u00e7eri\u011fe konudan ba\u011f\u0131ms\u0131z, gereksiz bir not veya bir c\u00fcmle eklenmeyecek. Yaln\u0131zca belirtilen formatta i\u015flem yap\u0131lacak.\n- Sonras\u0131nda ba\u011flant\u0131n\u0131n enterge edildi\u011fi i\u00e7erik kullan\u0131c\u0131ya g\u00f6nderilecek.\n- Ba\u011flant\u0131dan \u00f6nce bulunan ve ba\u011flant\u0131dan sonra bulunan paragraflar ile ba\u011flant\u0131 paragraf\u0131 aras\u0131na her zaman bir sat\u0131r bo\u015fluk bulunmal\u0131.\n- \u00c7\u0131kt\u0131 olarak ba\u015fl\u0131\u011f\u0131 ve belirlenen formatta ba\u011flant\u0131 eklenmi\u015f i\u00e7eri\u011fi ver.\n- Sonu\u00e7 olarak d\u00fczenlenen i\u00e7erikte ba\u011flant\u0131 verme format\u0131na uygun \u015fekilde bir ba\u011flant\u0131 mutlaka yer alacak.",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        -2656,
        1120
      ],
      "id": "9ae35644-77d3-44d8-a262-103bd053352c",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        -3440,
        1584
      ],
      "id": "30e5b301-5a3a-46c2-84ce-b9b384eb8408",
      "name": "OpenAI Chat Model1",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "tumicerik",
              "renameField": true,
              "outputFieldName": "tumicerikarray"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        -3184,
        656
      ],
      "id": "ed91c677-dfa9-4e76-a046-30c21df82fcd",
      "name": "Aggregate2"
    },
    {
      "parameters": {
        "jsCode": "return items.map(item => ({\n    json: {\n        tumicerik: item.json.tumicerik\n            .replace(/This message was sent automatically with n8n/gi, '') // Bu mesaj\u0131 temizle\n          .replace(/This message was sent automatically with(?: \\[?n8n\\]?|\\s)?(?:\\([^)]+\\))?/gi, '') // n8n ile ilgili her t\u00fcrl\u00fc ifadeyi temizle \n            .trim()  // Ba\u015f ve son bo\u015fluklar\u0131 temizle\n    }\n}));\n\n //.replace(/#/g, '')  // # karakterini temizle\n            //.replace(/-/g, '')  // - karakterini temizle\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        -3344,
        656
      ],
      "id": "26d290a1-9d38-4b8d-b488-fc5e47d93c7d",
      "name": "Code5"
    },
    {
      "parameters": {
        "jsCode": "const stopWords = {\n    \"T\u00fcrk\u00e7e\": [\"bu\", \"ve\", \"i\u00e7in\", \"olarak\", \"ile\", \"bir\", \"da\", \"de\", \"mi\", \"ne\", \"m\u0131\", \"nas\u0131l\", \"neden\", \"ni\u00e7in\", \"kim\", \"nerede\"],\n    \"\u0130ngilizce\": [\"the\", \"a\", \"an\", \"and\", \"or\", \"but\", \"in\", \"on\", \"at\", \"to\", \"for\", \"with\", \"by\"],\n    \"\u0130spanyolca\": [\"el\", \"la\", \"los\", \"las\", \"y\", \"o\", \"pero\", \"en\", \"a\", \"para\", \"con\", \"por\"]\n};\n\nconst locations = {\n    \"T\u00fcrk\u00e7e\": [\"adana\", \"ad\u0131yaman\", \"afyonkarahisar\", \"a\u011fr\u0131\", \"aksaray\", \"amasya\", \"ankara\", \"antalya\", \"ardahan\", \"artvin\", \"ayd\u0131n\", \"bal\u0131kesir\", \"bart\u0131n\", \"batman\", \"bayburt\", \"bilecik\", \"bing\u00f6l\", \"bitlis\", \"bolu\", \"burdur\", \"bursa\", \"\u00e7anakkale\", \"\u00e7ank\u0131r\u0131\", \"\u00e7orum\", \"denizli\", \"diyarbak\u0131r\", \"d\u00fczce\", \"edirne\", \"elaz\u0131\u011f\", \"erzincan\", \"erzurum\", \"eski\u015fehir\", \"gaziantep\", \"giresun\", \"g\u00fcm\u00fc\u015fhane\", \"hakk\u00e2ri\", \"hatay\", \"\u0131sparta\", \"\u0131\u011fd\u0131r\", \"istanbul\", \"izmir\", \"kahramanmara\u015f\", \"karab\u00fck\", \"karaman\", \"kars\", \"kastamonu\", \"kayseri\", \"k\u0131r\u0131kkale\", \"k\u0131rklareli\", \"k\u0131r\u015fehir\", \"kilis\", \"kocaeli\", \"konya\", \"k\u00fctahya\", \"malatya\", \"manisa\", \"mardin\", \"mersin\", \"mu\u011fla\", \"mu\u015f\", \"nev\u015fehir\", \"ni\u011fde\", \"ordu\", \"osmaniye\", \"rize\", \"sakarya\", \"samsun\", \"\u015fanl\u0131urfa\", \"siirt\", \"sinop\", \"sivas\", \"tekirda\u011f\", \"tokat\", \"trabzon\", \"tunceli\", \"u\u015fak\", \"van\", \"yozgat\", \"zonguldak\", \"\u015f\u0131rnak\", \"bart\u0131n\", \"t\u00fcrkiye\", \"d\u00fcnya\"],\n    \"\u0130ngilizce\": [\"new york\", \"london\", \"paris\", \"tokyo\", \"los angeles\", \"world\"],\n    \"\u0130spanyolca\": [\"madrid\", \"barcelona\", \"mexico\", \"bogota\", \"mundo\"]\n};\n\n// Gerekli verileri al\nlet makaleBasligi = $('Edit Fields').first().json.topic;\nlet language = $('Edit Fields').first().json.language; // \"T\u00fcrk\u00e7e\", \"\u0130ngilizce\", \"\u0130spanyolca\"\nconst altBasliklar = $('Aggregate1').all().map(item => item.json?.newSubheading_array || []).flat();\nconst icerikler = $('Aggregate2').all().map(item => item.json?.tumicerikarray || []).flat();\nconst girisMetni = $('AI Agent2').first().json.output || '';\nconst imageUrl = $('Edit Fields8').first().json.amazonimageUrl || '';\nlet disBaglantiArray = $('Aggregate').first()?.json?.dis_baglanti_array || [];\ndisBaglantiArray = Array.isArray(disBaglantiArray) ? disBaglantiArray : Array.from(disBaglantiArray);\nlet metaDesc = $input.first()?.json?.meta_desc || '';\nlet metaTitle = $input.first()?.json?.meta_title || '';\nlet odakKelime = $('Ceviriler Code').first().json.odakKelimeCeviri || '';\nconst summary = $('Code11').first()?.json?.summary || '';\nlet internalLinkUrl = $('Scrape Internal Links Node').first()?.json?.internalLinkUrl || '';\nconst studyTitle = $('Scholar Set Node').first().json.title;\nconst studyUrl = $('Scholar Set Node').first().json.link;\nconst siteUrl = $('Edit Fields').first().json.site_url;\n\n// FAQ verilerini al\nconst faqItems = $('Sorular Code').all().map(item => ({\n    question: item.json?.question || '',\n    explanation: item.json?.explanation || ''\n}));\nconsole.log(\"faqItems:\", faqItems);\n\n// E\u015f anlaml\u0131lar\u0131 al ve temizle\nconst synonymsRaw = $('Es_anlamilar').first()?.json?.synonyms || [];\nconst synonyms = [...new Set(synonymsRaw.map(syn => syn.replace(/[\\n\\r\\t*]+/g, '').trim()).filter(syn => syn))];\nconsole.log(\"Temizlenmi\u015f e\u015f anlaml\u0131lar:\", synonyms);\n\nconsole.log(\"disBaglantiArray tipi:\", typeof disBaglantiArray);\nconsole.log(\"disBaglantiArray instanceof Array:\", disBaglantiArray instanceof Array);\nconsole.log(\"disBaglantiArray i\u00e7eri\u011fi:\", disBaglantiArray);\n\n// Giri\u015f verilerini logla\nconsole.log(\"makaleBasligi:\", makaleBasligi);\nconsole.log(\"altBasliklar:\", altBasliklar);\nconsole.log(\"icerikler:\", icerikler);\nconsole.log(\"language:\", language);\nconsole.log(\"Ceviriler Code \u00e7\u0131kt\u0131s\u0131:\", $('Ceviriler Code').first().json);\nconsole.log(\"Aggregate1 \u00e7\u0131kt\u0131s\u0131:\", $('Aggregate1').all());\nconsole.log(\"Aggregate2 \u00e7\u0131kt\u0131s\u0131:\", $('Aggregate2').all());\n\n// Dil kodunu d\u00f6n\u00fc\u015ft\u00fcr (T\u00fcrk\u00e7e \u2192 tr, \u0130ngilizce \u2192 en, \u0130spanyolca \u2192 es)\nfunction getLanguageCode(lang) {\n    switch (lang) {\n        case \"T\u00fcrk\u00e7e\":\n            return \"tr\";\n        case \"\u0130ngilizce\":\n            return \"en\";\n        case \"\u0130spanyolca\":\n            return \"es\";\n        default:\n            return \"tr\"; // Varsay\u0131lan olarak T\u00fcrk\u00e7e\n    }\n}\nconst langCode = getLanguageCode(language);\n\n\n/*\n// Dil ba\u011f\u0131ml\u0131 normalizasyon\nfunction normalize(text, lang) {\n    if (!text) return '';\n    let normalizedText = text;\n\n    if (lang === \"T\u00fcrk\u00e7e\") {\n        normalizedText = text.toLocaleLowerCase('tr-TR').trim();\n    } else if (lang === \"\u0130ngilizce\") {\n        normalizedText = text.toLowerCase().trim();\n    } else if (lang === \"\u0130spanyolca\") {\n        normalizedText = text.toLowerCase().trim();\n    }\n\n    // \u00d6zel karakterleri ve t\u0131rnak i\u015faretlerini temizle\n    normalizedText = normalizedText\n        .replace(/[!\"'\u201c\u201d\u2018\u2019:,]/g, ' ') // \u0130ki nokta ve t\u0131rnak i\u015faretlerini bo\u015flukla de\u011fi\u015ftir\n        .replace(/\\s+/g, ' ')         // Birden fazla bo\u015flu\u011fu tek bo\u015flu\u011fa indir\n        .trim();\n\n    return normalizedText;\n}\n*/\n\n/*\nfunction normalize(text, lang) {\n    if (!text) return '';\n    let normalizedText = text;\n\n    // HTML etiketlerini kald\u0131r\n    normalizedText = normalizedText.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n\n    // Dil bazl\u0131 k\u00fc\u00e7\u00fck harfe \u00e7evirme\n    if (lang === \"T\u00fcrk\u00e7e\") {\n        normalizedText = normalizedText.toLocaleLowerCase('tr-TR').trim();\n    } else if (lang === \"\u0130ngilizce\") {\n        normalizedText = normalizedText.toLowerCase().trim();\n    } else if (lang === \"\u0130spanyolca\") {\n        normalizedText = normalizedText.toLowerCase().trim();\n    }\n\n    // \u00d6zel karakterleri ve t\u0131rnak i\u015faretlerini temizle\n    normalizedText = normalizedText\n        .replace(/[!\"'\u201c\u201d\u2018\u2019:,]/g, '') // T\u0131rnaklar\u0131 ve noktalama i\u015faretlerini tamamen kald\u0131r\n        .replace(/\\s+/g, ' ')        // Birden fazla bo\u015flu\u011fu tek bo\u015flu\u011fa indir\n        .trim();\n\n    // T\u00fcrk\u00e7e karakterleri ASCII'ye d\u00f6n\u00fc\u015ft\u00fcrme\n    if (lang === \"T\u00fcrk\u00e7e\") {\n        const turkishMap = {\n            '\u015f': 's',\n            '\u011f': 'g',\n            '\u0131': 'i',\n            '\u00f6': 'o',\n            '\u00e7': 'c',\n            '\u00fc': 'u',\n            '\u015e': 'S',\n            '\u011e': 'G',\n            '\u0130': 'I',\n            '\u00d6': 'O',\n            '\u00c7': 'C',\n            '\u00dc': 'U'\n        };\n        normalizedText = normalizedText.replace(/[\u015f\u011f\u00f6\u00e7\u00fc\u015e\u011e\u00d6\u00c7\u00dc]/g, char => turkishMap[char] || char);\n    }\n\n    return normalizedText;\n}\n*/\n\nfunction normalize(text, lang) {\n    if (!text) return '';\n    let normalizedText = text;\n\n    // HTML etiketlerini kald\u0131r\n    normalizedText = normalizedText.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n\n    // Dil bazl\u0131 k\u00fc\u00e7\u00fck harfe \u00e7evirme\n    if (lang === \"T\u00fcrk\u00e7e\") {\n        normalizedText = normalizedText.toLocaleLowerCase('tr-TR').trim();\n    } else if (lang === \"\u0130ngilizce\") {\n        normalizedText = normalizedText.toLowerCase().trim();\n    } else if (lang === \"\u0130spanyolca\") {\n        normalizedText = normalizedText.toLowerCase().trim();\n    }\n\n    // \u00d6zel karakterleri ve t\u0131rnak i\u015faretlerini temizle\n    normalizedText = normalizedText\n        .replace(/[!\"'\u201c\u201d\u2018\u2019:,]/g, '') // T\u0131rnaklar\u0131 ve noktalama i\u015faretlerini tamamen kald\u0131r\n        .replace(/\\s+/g, ' ')        // Birden fazla bo\u015flu\u011fu tek bo\u015flu\u011fa indir\n        .trim();\n\n    return normalizedText;\n}\n\n\n// Ba\u015fl\u0131k formatlama fonksiyonu\nfunction formatBaslik(title, lang) {\n    if (!title) return '';\n    return title\n        .split(' ')\n        .map(word => {\n            if (lang === \"T\u00fcrk\u00e7e\") {\n                return word.charAt(0).toLocaleUpperCase('tr-TR') + word.slice(1).toLocaleLowerCase('tr-TR');\n            } else {\n                return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();\n            }\n        })\n        .join(' ');\n}\n\nmakaleBasligi = formatBaslik(makaleBasligi, language);\n\n// Anlaml\u0131 kelime kontrol\u00fc\nfunction isMeaningful(word, lang) {\n    if (!word) return false;\n    let cleanedWord = word.toLowerCase()\n        .replace(/(nin|in|n\u0131n|\u0131n|si|sel|sal|dir|d\u0131r|lar|ler)$/i, '') // T\u00fcrk\u00e7e i\u00e7in\n        .replace(/(s|es|ed|ing)$/i, '') // \u0130ngilizce i\u00e7in\n        .replace(/(s|es|os|as)$/i, '') // \u0130spanyolca i\u00e7in\n        .trim();\n    return cleanedWord.length > 2 &&\n           !stopWords[lang].includes(cleanedWord) &&\n           !locations[lang].includes(cleanedWord);\n}\n\n// N-gram olu\u015fturma\nfunction generateNgrams(words, maxN = 2, lang) {\n    if (!words || !Array.isArray(words)) return [];\n    let ngrams = [];\n    for (let n = 1; n <= maxN; n++) {\n        for (let i = 0; i <= words.length - n; i++) {\n            let ngram = words.slice(i, i + n);\n            if (ngram.every(word => isMeaningful(word.replace(/(nin|in|n\u0131n|\u0131n)$/i, ''), lang))) {\n                ngrams.push(ngram.join(\" \"));\n            }\n        }\n    }\n    return ngrams;\n}\n\n// Odak anahtar kelimeyle \u00e7ak\u0131\u015fmayan ve konuyla alakal\u0131 n-gramlar\u0131 \u00e7\u0131kar\nfunction extractSafeNgrams(content, odakKelime, synonyms, makaleBasligi, lang, maxN = 1) {\n    if (!content) return [];\n\n    // \u0130\u00e7eri\u011fi kelimelere ay\u0131r\n    const allText = content.split(\"\\n\\n\").join(\" \").split(/\\s+/).filter(word => word.trim());\n    const ngrams = generateNgrams(allText, maxN, lang);\n\n    // Odak anahtar kelime, e\u015f anlaml\u0131lar ve ba\u015fl\u0131\u011f\u0131 normalle\u015ftir\n    const normalizedOdakKelime = normalize(odakKelime, lang);\n    const normalizedSynonyms = synonyms.map(syn => normalize(syn, lang));\n    const normalizedMakaleBasligi = normalize(makaleBasligi, lang);\n    const makaleBasligiWords = normalizedMakaleBasligi.split(/\\s+/).filter(word => isMeaningful(word, lang));\n    const odakKelimeWords = normalizedOdakKelime.split(/\\s+/).filter(word => isMeaningful(word, lang));\n\n    // Referans kelimeler (ba\u015fl\u0131k ve odak anahtar kelime kelimeleri)\n    const referenceWords = [...new Set([...makaleBasligiWords, ...odakKelimeWords])];\n\n    // N-gramlar\u0131 filtrele\n    const safeNgrams = ngrams\n        .filter(ngram => {\n            const normalizedNgram = normalize(ngram, lang);\n            // 1. Odak anahtar kelime ve e\u015f anlaml\u0131lar\u0131yla \u00e7ak\u0131\u015fmamal\u0131\n            const containsOdakKelime = normalizedNgram.includes(normalizedOdakKelime) || normalizedOdakKelime.includes(normalizedNgram);\n            const containsSynonym = normalizedSynonyms.some(syn => normalizedNgram.includes(syn) || syn.includes(normalizedNgram));\n            if (containsOdakKelime || containsSynonym) {\n                //console.log(`N-gram filtrelendi (odak kelime veya e\u015f anlaml\u0131 \u00e7ak\u0131\u015fmas\u0131): ${normalizedNgram}`);\n                return false;\n            }\n\n            //  N-gram\u0131n kelimelerini ay\u0131r\n            const ngramWords = normalizedNgram.split(/\\s+/).filter(word => isMeaningful(word, lang));\n\n            //  N-gram\u0131n en az bir kelimesi, ba\u015fl\u0131k veya odak anahtar kelimeyle \u00f6rt\u00fc\u015fmeli\n            const hasRelevance = ngramWords.some(ngramWord =>\n                referenceWords.some(refWord => refWord.includes(ngramWord) || ngramWord.includes(refWord))\n            );\n\n            if (!hasRelevance) {\n               // console.log(`N-gram filtrelendi (alakas\u0131z): ${normalizedNgram}`);\n            }\n\n            return hasRelevance;\n        })\n        .sort((a, b) => {\n            // Alaka skoruna g\u00f6re s\u0131ralama (daha fazla \u00f6rt\u00fc\u015fen n-gramlar \u00f6nce gelir)\n            const scoreA = a.split(/\\s+/).filter(word => referenceWords.some(ref => ref.includes(word) || word.includes(ref))).length; //Kelimelere b\u00f6l, Referans kelimelerle \u00f6rt\u00fc\u015fenleri al, E\u015fle\u015fen kelime say\u0131s\u0131n\u0131 bul\n            const scoreB = b.split(/\\s+/).filter(word => referenceWords.some(ref => ref.includes(word) || word.includes(ref))).length;\n            return scoreB - scoreA; // Descending order (y\u00fcksek skor \u00f6nce)\n        });\n\n    console.log(`Uygun

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

How this works

This workflow receives data via webhook and uses an AI agent with OpenAI to process it intelligently before sending structured results to WordPress. It is designed for teams that need to automate content updates or data enrichment from external sources without manual intervention. The agent draws on conversation memory to maintain context across multiple steps, ensuring coherent outputs even when inputs are complex.

Use it for recurring tasks such as syncing external feeds into WordPress posts or pages. Avoid it if you need fully deterministic outputs without AI variability, or if your data volumes exceed what a single agent call can reliably handle. A common variation replaces the WordPress node with another destination like email or a database table.

About this workflow

My workflow 15. Uses httpRequest, memoryBufferWindow, agent, lmChatOpenAi. Webhook trigger; 74 nodes.

Source: https://github.com/yarendmr/n8n-ai-content-agent-workflow/blob/14c2a468490a5943e8172cdd2ea3339e02694af4/workflows/ai_content_generation_workflow.template.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This workflow is for beauty salons who want consistent, high‑quality social media content without writing every post manually. It also suits agencies and automation builders who manage multiple beauty

Telegram, Google Sheets Trigger, Agent +26
AI & RAG

This workflow transforms WhatsApp into a powerful personal AI using n8n + Green-API. Send text or voice messages — the assistant understands intent and handles daily tasks automatically. 💰 Expense & i

Tool Calculator, Google Sheets Tool, OpenAI Chat +10
AI & RAG

This workflow is designed for professionals, companies, and agencies that want to automate competitive analysis based on public reviews and opinions found on the Internet. It is especially useful for:

Agent, OpenAI Chat, OpenAI +4
AI & RAG

Telegram Ai Bot. Uses openAi, httpRequest, agent, memoryBufferWindow. Webhook trigger; 38 nodes.

OpenAI, HTTP Request, Agent +3
AI & RAG

Whatsapp Lead Agent. Uses httpRequest, hunter, @tavily/n8n-nodes-tavily, @mendable/n8n-nodes-firecrawl. Webhook trigger; 35 nodes.

HTTP Request, Hunter, @Tavily/N8N Nodes Tavily +11