AutomationFlowsAI & RAG › Generate and Manage Short Links with Gpt-4.1 and Data Storage

Generate and Manage Short Links with Gpt-4.1 and Data Storage

ByNghia Nguyen @nghiaaidev on n8n.io

This AI Agent helps you create short links from your original URLs. Each generated short link is automatically stored in a database table for easy management and tracking. Provide a long URL to the Agent. The Agent saves your original link in the database. It generates a short…

Chat trigger trigger★★★★☆ complexityAI-powered18 nodesData TableChat TriggerAgentOpenAI ChatMemory Buffer WindowExecute Workflow TriggerTool Workflow
AI & RAG Trigger: Chat trigger Nodes: 18 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #9861 — we link there as the canonical source.

This workflow follows the Agent → Chat Trigger 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
{
  "id": "WmHtnpnkARE1wVqs",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI Agent - Short Link Generator",
  "tags": [],
  "nodes": [
    {
      "id": "6c7043d8-e091-4e50-a661-f1047576c565",
      "name": "Insert row",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        -16,
        -144
      ],
      "parameters": {
        "columns": {
          "value": {
            "orginalLink": "={{ $('GenerateShortLink').item.json.originalLink }}",
            "shortlinkId": "={{ $json.shortLinkId }}"
          },
          "schema": [
            {
              "id": "orginalLink",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "orginalLink",
              "defaultMatch": false
            },
            {
              "id": "shortlinkId",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "shortlinkId",
              "defaultMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "MzE4aKh7Wsv4N0Cv",
          "cachedResultUrl": "/projects/pjq2PmuJxpMOPZST/datatables/MzE4aKh7Wsv4N0Cv",
          "cachedResultName": "ShortLink"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "310ecc62-f469-42d8-bb15-8795e0aef955",
      "name": "Generate shorlinkId",
      "type": "n8n-nodes-base.code",
      "position": [
        -240,
        -144
      ],
      "parameters": {
        "jsCode": "\nvar length = 4;\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\n  let result = '';\n  for (let i = 0; i < length; i++) {\n    const randomIndex = Math.floor(Math.random() * chars.length);\n    result += chars[randomIndex];\n  }\n\n  return [{ shortLinkId: result }];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "1a615458-ea3c-4336-b9fd-602844b36f5d",
      "name": "Get row(s)",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        -464,
        80
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "shortlinkId",
              "keyValue": "={{ $json.query.a }}"
            }
          ]
        },
        "operation": "get",
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "MzE4aKh7Wsv4N0Cv",
          "cachedResultUrl": "/projects/pjq2PmuJxpMOPZST/datatables/MzE4aKh7Wsv4N0Cv",
          "cachedResultName": "ShortLink"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2c2ace57-bb37-43b5-a606-122e38928bb2",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -688,
        -576
      ],
      "parameters": {
        "public": true,
        "options": {}
      },
      "typeVersion": 1.3
    },
    {
      "id": "af6bae57-7f02-4b14-b5a0-f4d852321a62",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -352,
        -576
      ],
      "parameters": {
        "options": {
          "systemMessage": "You are a helpful assistant.\n"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "c10cdd53-ddaa-4701-922c-5788c3f41759",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -480,
        -368
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8d9e3709-0fb7-4fbc-9c1d-f3f74878e6bc",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -256,
        -368
      ],
      "parameters": {},
      "typeVersion": 1.3
    },
    {
      "id": "1e495a59-c48b-4887-a9c1-19c53072a591",
      "name": "GenerateShortLink",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        -688,
        -144
      ],
      "parameters": {
        "inputSource": "jsonExample",
        "jsonExample": "\n{\n\"originalLink\": \n\"https://www.nghiaai.dev/\"\n}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "4e019563-fc6f-4ec7-b79e-1817cd35e411",
      "name": "Config",
      "type": "n8n-nodes-base.set",
      "position": [
        -464,
        -144
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5c7030c4-c308-4e95-a78d-c32d8a252df4",
              "name": "your_webhook_url",
              "type": "string",
              "value": "http://localhost:5678"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "290c7c96-1cc9-432a-806e-6f2b04fe92a5",
      "name": "Generate ShortLink",
      "type": "n8n-nodes-base.code",
      "position": [
        208,
        -144
      ],
      "parameters": {
        "jsCode": "var your_webhook_url = $('Config').first().json.your_webhook_url;\nvar shortLinkId = $('Generate shorlinkId').first().json.shortLinkId\nvar shortLink = your_webhook_url + \"/webhook/shortLink?a=\" + shortLinkId;\nreturn [{ shortLink: shortLink }];"
      },
      "typeVersion": 2
    },
    {
      "id": "1a2213c2-c423-49a0-a2b1-939109d30391",
      "name": "Call 'Create Short Link'",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "position": [
        -48,
        -368
      ],
      "parameters": {
        "workflowId": {
          "__rl": true,
          "mode": "list",
          "value": "WmHtnpnkARE1wVqs",
          "cachedResultUrl": "/workflow/WmHtnpnkARE1wVqs",
          "cachedResultName": "Create Short Link"
        },
        "description": "Call this tool to get short link",
        "workflowInputs": {
          "value": {
            "originalLink": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('originalLink', ``, 'string') }}"
          },
          "schema": [
            {
              "id": "originalLink",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "originalLink",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "host",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "host",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "49807a5c-8c1a-4a6d-9e1b-b6d0ea72ff92",
      "name": "Page Redirect",
      "type": "n8n-nodes-base.html",
      "position": [
        -240,
        80
      ],
      "parameters": {
        "html": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\" />\n  <title>Redirecting\u2026</title>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n  <!-- Optional: meta refresh as a no-JS fallback -->\n  <meta http-equiv=\"refresh\" content=\"0; url={{ $json.orginalLink }}\" />\n  <script>\n    // Use replace() so it doesn't create an extra history entry\n    location.replace({{ $json.orginalLink }});\n  </script>\n  <style>\n    body {font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; display:grid; place-content:center; min-height:100vh;}\n    a {text-decoration: none;}\n  </style>\n</head>\n<body>\n  <p>Redirecting\u2026 If nothing happens, <a href=\"{{ $json.orginalLink }}\">click here</a>.</p>\n</body>\n</html>\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "d6732527-8565-4d7d-8bf5-77f02eba0462",
      "name": "Response",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        -16,
        80
      ],
      "parameters": {
        "options": {},
        "respondWith": "text",
        "responseBody": "={{ $json.html }}"
      },
      "typeVersion": 1.4
    },
    {
      "id": "866a4e41-ff4f-4eda-8be8-0e584285318b",
      "name": "ShortLink API",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -688,
        80
      ],
      "parameters": {
        "path": "shortLink",
        "options": {},
        "responseMode": "responseNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "ad474ea3-02bb-4770-88b0-8bba2c5ad859",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1120,
        -656
      ],
      "parameters": {
        "width": 336,
        "height": 896,
        "content": "## Setup Guide\n1. Add your_webhook_url to the 'Config' Node.\n2. Set up OpenAI account\n3. Create a database table named ShortLink with the following columns:\n- originalLink\n- shortLinkId\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4903952a-5da7-4bee-b945-550c0a636b7e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -656
      ],
      "parameters": {
        "color": 4,
        "width": 1168,
        "height": 448,
        "content": "## Agent "
      },
      "typeVersion": 1
    },
    {
      "id": "05b8c558-4503-45a9-8c5d-52809d60f0d6",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        -208
      ],
      "parameters": {
        "color": 5,
        "width": 1168,
        "height": 224,
        "content": "## Create Short Link"
      },
      "typeVersion": 1
    },
    {
      "id": "5ba8e271-d542-42e9-8cab-fac08171c120",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        16
      ],
      "parameters": {
        "color": 3,
        "width": 1168,
        "height": 224,
        "content": "## Process Short Link Requests\n"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "be460863-5692-4397-a9d3-c94e69d2c6b3",
  "connections": {
    "Config": {
      "main": [
        [
          {
            "node": "Generate shorlinkId",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s)": {
      "main": [
        [
          {
            "node": "Page Redirect",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert row": {
      "main": [
        [
          {
            "node": "Generate ShortLink",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Page Redirect": {
      "main": [
        [
          {
            "node": "Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ShortLink API": {
      "main": [
        [
          {
            "node": "Get row(s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "GenerateShortLink": {
      "main": [
        [
          {
            "node": "Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Generate shorlinkId": {
      "main": [
        [
          {
            "node": "Insert row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Call 'Create Short Link'": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

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

About this workflow

This AI Agent helps you create short links from your original URLs. Each generated short link is automatically stored in a database table for easy management and tracking. Provide a long URL to the Agent. The Agent saves your original link in the database. It generates a short…

Source: https://n8n.io/workflows/9861/ — 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

by Varritech Technologies

Chat Trigger, Agent, OpenAI Chat +8
AI & RAG

Airtable AI Agent. Uses lmChatOpenAi, agent, toolWorkflow, toolCode. Chat trigger; 42 nodes.

OpenAI Chat, Agent, Tool Workflow +6
AI & RAG

Ai Agent To Chat With Airtable And Analyze Data. Uses lmChatOpenAi, agent, stickyNote, memoryBufferWindow. Chat trigger; 41 nodes.

OpenAI Chat, Agent, Memory Buffer Window +6
AI & RAG

I prepared a detailed guide that shows the entire process of building an AI agent that integrates with Airtable data in n8n. This template covers everything from data preparation to advanced configura

OpenAI Chat, Agent, Memory Buffer Window +6
AI & RAG

Categories: AI Agents, Design Automation, Business Tools

Tool Workflow, HTTP Request Tool, Memory Buffer Window +7