{
  "id": "MyJ84ASqWdHGYuy0",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI Chat Agent: Dumpling AI + GPT-4o to Auto-Save Local Business Data to Airtable",
  "tags": [
    {
      "id": "TlcNkmb96fUfZ2eA",
      "name": "Tutorials",
      "createdAt": "2025-04-15T17:02:00.249Z",
      "updatedAt": "2025-04-15T17:02:00.249Z"
    }
  ],
  "nodes": [
    {
      "id": "1617006d-20d8-44da-8410-1fbbd6bc317e",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -480,
        -40
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "ccb3073d-4c39-44bf-bd7f-05a6ae0550cb",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1200,
        -220
      ],
      "parameters": {
        "width": 660,
        "height": 900,
        "content": "#### \ud83e\udde0 Workflow Purpose\nAn interactive chat assistant that listens for incoming messages, processes them with AI, and uses Dumpling AI to fetch external information or complete tasks \u2014 with memory tracking.\n\n## \ud83d\udd04 Workflow Steps\n\n### 1. Chat Trigger\n- Listens for chat messages (e.g., from a web app or messaging platform).\n\n### 2. OpenAI Chat Model\n- Processes the user's input using GPT-4o mini.\n\n### 3. Simple Memory Buffer\n- Keeps context from the last 10 exchanges to maintain a conversational flow.\n\n### 4. DumplingAI- News Agent and Local Business Finder Agent\n- Makes an external API call to Dumpling AI\u2019s agent endpoint to search or generate responses based on user intent.\n\n### 5. AI Agent Node\n- Connects all components: language model, memory, and external tools.\n\n### 6. Airtable Tool \u2013 Dynamic Business Data Storage\n\n-This Airtable node auto-populates and updates a \u201cLocal Business\u201d table using data returned from Dumpling AI\u2019s Local Business Finder Agent. It maps essential fields such as:\n\n\n## \u2699\ufe0f Notes\n- Dumpling AI agent ID is pre-configured.\n- JSON response from Dumpling is parsed as usable data.\n- You can add routing or fallback logic based on Dumpling's results.\n\n##### \ud83d\udca1 Tip\nTo customize it for a specific domain (e.g., real estate, restaurant finder, course assistant), adjust the agent prompt or plug in a domain-specific tool module.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "266e0454-5133-4287-a449-2eb1d3d00485",
      "name": "News Agent",
      "type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
      "position": [
        -20,
        180
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/agents/generate-completion",
        "method": "POST",
        "jsonBody": "={\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\":\"{{ $json.chatInput}}\"\n    }\n  ],\n  \"agentId\": \"\",\n  \"parseJson\": \"True\"\n  }",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "optimizeResponse": true
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "b3d834d7-eeb5-4ce8-bb45-2d6b58f8c0a9",
      "name": "Local Business Finder Agent",
      "type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
      "position": [
        100,
        180
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/agents/generate-completion",
        "method": "POST",
        "jsonBody": "={\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\":\"{{ $json.chatInput}}\"\n    }\n  ],\n  \"agentId\": \"\",\n  \"parseJson\": \"false\"\n  }",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "optimizeResponse": true
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "bc75a2b5-8d99-487a-a9fc-12045b555207",
      "name": "Track Last 10 Messages ",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -160,
        180
      ],
      "parameters": {
        "contextWindowLength": 10
      },
      "typeVersion": 1.3
    },
    {
      "id": "0eb2b921-360e-4043-8a2f-301d10113dfc",
      "name": "Route AI Tasks with Dumpling + GPT + Memory",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -108,
        -40
      ],
      "parameters": {
        "options": {
          "systemMessage": "You are a helpful assistant\nUse the Local Business Finder Agent HTTP request tool to find local business\n\nUse the News agent HTTP request tool to get get news\n\nUse the Create and update Airtable tool to send results from the Local Business Finder Agent HTTP request tool"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "948fafa9-6b4c-4656-b27f-ce5b1eb0d363",
      "name": "Process Input with GPT-4o Mini",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -320,
        180
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4a07cedd-f40e-4123-a894-c53da751263f",
      "name": "Save Business Results",
      "type": "n8n-nodes-base.airtableTool",
      "position": [
        240,
        180
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://airtable.com/appPSvSKdA6075xJC",
          "cachedResultName": "Testing n8n"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://airtable.com/appPSvSKdA6075xJC/tblgxhdRFc2fGLV9o",
          "cachedResultName": "Local business"
        },
        "columns": {
          "value": {
            "id": "=",
            "Rating": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Rating', ``, 'number') }}",
            "Address": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Address', ``, 'string') }}",
            "Website": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Website', ``, 'string') }}",
            "Category": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Category', ``, 'string') }}",
            "Phone Number": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Phone_Number', ``, 'string') }}",
            "Total Reviews": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Total_Reviews', ``, 'number') }}",
            "Name of Restaurant": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Name_of_Restaurant', ``, 'string') }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Name of Restaurant",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Name of Restaurant",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Rating",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total Reviews",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Total Reviews",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Phone Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Website",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Category",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Category",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "upsert"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "57c6329e-df0b-4eb4-9837-643c7de85e5e",
  "connections": {
    "News Agent": {
      "ai_tool": [
        [
          {
            "node": "Route AI Tasks with Dumpling + GPT + Memory",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Save Business Results": {
      "ai_tool": [
        [
          {
            "node": "Route AI Tasks with Dumpling + GPT + Memory",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Track Last 10 Messages ": {
      "ai_memory": [
        [
          {
            "node": "Route AI Tasks with Dumpling + GPT + Memory",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "Route AI Tasks with Dumpling + GPT + Memory",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Local Business Finder Agent": {
      "ai_tool": [
        [
          {
            "node": "Route AI Tasks with Dumpling + GPT + Memory",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Process Input with GPT-4o Mini": {
      "ai_languageModel": [
        [
          {
            "node": "Route AI Tasks with Dumpling + GPT + Memory",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Route AI Tasks with Dumpling + GPT + Memory": {
      "main": [
        []
      ]
    }
  }
}