{
  "name": "Generate structured article summaries with Telegram, Claude AI & Jina Reader",
  "nodes": [
    {
      "id": "ce04c36f-596a-445b-906a-5fd5c51900c1",
      "name": "After message is received",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        1184,
        -112
      ]
    },
    {
      "id": "7056604f-5185-4c80-b82a-b6599b41a56b",
      "name": "Check if URL",
      "type": "n8n-nodes-base.filter",
      "position": [
        1408,
        -112
      ]
    },
    {
      "id": "3a8db721-345e-41c1-887a-9fc6bf5051f6",
      "name": "Extract URL",
      "type": "n8n-nodes-base.set",
      "position": [
        1680,
        -112
      ]
    },
    {
      "id": "56578477-9406-40ef-9e29-f306416f42ea",
      "name": "Fetch Article Markdown",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1904,
        -112
      ]
    },
    {
      "id": "872e133e-6c0d-4bd7-9dd7-792d9a51190b",
      "name": "Summarize Article",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        2176,
        -128
      ]
    },
    {
      "id": "bbb97241-521c-4ddd-b00a-23b15e52a1b5",
      "name": "Send Summary to Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2784,
        -192
      ]
    },
    {
      "id": "3791d353-17a4-4b45-b383-e608a737f6a2",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -384
      ],
      "parameters": {
        "width": 380,
        "height": 943,
        "content": "## Article summarizer bot\n\nSend any URL to your Telegram bot and get an AI summary instantly.\n\nWhat it does\n\n- Receives URLs via Telegram\n- Fetches clean article content (removes ads, navbars)\n- Gener"
      }
    },
    {
      "id": "5c537825-51b3-4d0b-ad60-7bce7ea7895a",
      "name": "Save to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2784,
        -384
      ]
    },
    {
      "id": "4d67dfb6-490c-4627-b06e-6ba64cc59102",
      "name": "Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        2336,
        272
      ]
    },
    {
      "id": "02fa1407-ebcd-4cc8-8fda-9de6fd1a3628",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        2096,
        256
      ]
    },
    {
      "id": "8d160193-d474-4434-8691-51c7f7796d8f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1344,
        -320
      ],
      "parameters": {
        "width": null,
        "height": 336,
        "content": "## Filter URLs\n\nOnly processes messages that start with http:// or https://\n\nNon-URL messages are ignored."
      }
    },
    {
      "id": "8528f480-c1a5-4455-a8cf-6e75be2f06e5",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1872,
        -400
      ],
      "parameters": {
        "width": null,
        "height": 432,
        "content": "## Fetch article\n\nUses Jina AI to convert webpage to clean markdown.\n\nRemoves navigation, ads, and clutter automatically.\n\nIf fetch fails, sends error message."
      }
    },
    {
      "id": "d78eb2c2-26d3-449b-82b5-3fa9a6f6d655",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2144,
        -400
      ],
      "parameters": {
        "width": 304,
        "height": 432,
        "content": "##  AI summary\n\nSends markdown to llm model via OpenRouter.\n\nReturns structured JSON with:\n- Title\n- One-sentence summary  \n- 3-5 key points\n\nMatches the article's original language."
      }
    },
    {
      "id": "6adb92e2-d30a-41ef-8e9b-8570bdb22f99",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2944,
        -256
      ],
      "parameters": {
        "width": null,
        "height": 240,
        "content": "## Send summary\n\nFormats the summary with emojis and sends to Telegram.\n\nOptionally saves to Google Sheets for tracking."
      }
    },
    {
      "id": "7f10167e-3e09-4808-97fc-7e0fd056c095",
      "name": "Notify an error while fetching",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2048,
        528
      ]
    },
    {
      "id": "dc78430c-9f60-4b09-a49b-ef126acc8e3b",
      "name": "Notify an error while summarizing",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2784,
        0
      ]
    }
  ],
  "connections": {
    "Extract URL": {
      "main": [
        [
          {
            "node": "Fetch Article Markdown",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if URL": {
      "main": [
        [
          {
            "node": "Extract URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Summarize Article",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Summarize Article": {
      "main": [
        [
          {
            "node": "Send Summary to Telegram",
            "type": "main",
            "index": 0
          },
          {
            "node": "Save to Google Sheets",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify an error while summarizing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Summarize Article",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Output Parser",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Article Markdown": {
      "main": [
        [
          {
            "node": "Summarize Article",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify an error while fetching",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "After message is received": {
      "main": [
        [
          {
            "node": "Check if URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}