This workflow follows the Airtable → Chainllm 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 →
{
"nodes": [
{
"id": "36816ae7-414a-482e-8a50-021885237273",
"name": "Event Type",
"type": "n8n-nodes-base.switch",
"position": [
-220,
-140
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "row.updated",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "2162daf8-d23d-4b8f-8257-bdfc5400a3a8",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.event_type }}",
"rightValue": "row.updated"
}
]
},
"renameOutput": true
},
{
"outputKey": "field.created",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "48e112f6-afe8-40bf-b673-b37446934a62",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.event_type }}",
"rightValue": "field.created"
}
]
},
"renameOutput": true
},
{
"outputKey": "field.updated",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5aa258cd-15c2-4156-a32d-afeed662a38e",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.event_type }}",
"rightValue": "field.updated"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "920ca6d8-7a6e-4482-b003-fa643f550a85",
"name": "Get Prompt Fields",
"type": "n8n-nodes-base.code",
"position": [
-900,
-140
],
"parameters": {
"jsCode": "const fields = $input.first().json.fields\n .filter(item => item.description)\n .map((item, idx) => ({\n id: item.id,\n order: idx,\n name: item.name,\n type: item.type,\n description: item.description,\n }));\n\nreturn { json: { fields } };"
},
"typeVersion": 2
},
{
"id": "3b73b2f5-9081-4633-911f-ef3041600a00",
"name": "Get File Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
1220,
320
],
"parameters": {
"url": "={{ $json.File[0].url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "e96edca8-9e8b-4ca4-bef9-dae673d3aba4",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1380,
320
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "b5c2b87b-5756-4810-84c9-34ea420bdcef",
"name": "Get Result",
"type": "n8n-nodes-base.set",
"position": [
2000,
380
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "63d7c52e-d5bf-4f4c-9e37-1d5feaea20f4",
"name": "id",
"type": "string",
"value": "={{ $('Row Reference').item.json.id }}"
},
{
"id": "3ad72567-1d17-4910-b916-4c34a43b1060",
"name": "={{ $('Event Ref').first().json.field.name }}",
"type": "string",
"value": "={{ $json.text.trim() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a5cb0510-620b-469d-bf66-26ab64d6f88f",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
800,
220
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "20e24946-59d8-4b19-bfab-eebb02f7e46d",
"name": "Row Reference",
"type": "n8n-nodes-base.noOp",
"position": [
980,
320
],
"parameters": {},
"typeVersion": 1
},
{
"id": "4090c53e-e635-4421-ab2b-475bfc62cea4",
"name": "Generate Field Value",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1540,
320
],
"parameters": {
"text": "=<file>\n{{ $json.text }}\n</file>\n\nData to extract: {{ $('Event Ref').first().json.field.description }}\noutput format is: {{ $('Event Ref').first().json.field.type }}",
"messages": {
"messageValues": [
{
"message": "=You assist the user in extracting the required data from the given file.\n* Keep you answer short.\n* If you cannot extract the requested data, give you response as \"n/a\"."
}
]
},
"promptType": "define"
},
"typeVersion": 1.5
},
{
"id": "582d4008-4871-4798-bc24-abf774ad29b5",
"name": "Fields to Update",
"type": "n8n-nodes-base.code",
"position": [
1560,
-300
],
"parameters": {
"jsCode": "const row = $('Row Ref').first().json;\nconst fields = $('Get Prompt Fields').first().json.fields;\nconst missingFields = fields\n .filter(field => field.description && !row[field.name]);\n\nreturn missingFields;"
},
"typeVersion": 2
},
{
"id": "051c6a99-cec3-42df-9de7-47cb69b51682",
"name": "Loop Over Items1",
"type": "n8n-nodes-base.splitInBatches",
"position": [
820,
-420
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "f559c8ff-2ee5-478d-84ee-6b0ca2fe2050",
"name": "Row Ref",
"type": "n8n-nodes-base.noOp",
"position": [
1000,
-300
],
"parameters": {},
"typeVersion": 1
},
{
"id": "7b82cc73-67cb-46d7-a1d4-19712c86890a",
"name": "Get File Data1",
"type": "n8n-nodes-base.httpRequest",
"position": [
1240,
-300
],
"parameters": {
"url": "={{ $('Row Ref').item.json.File[0].url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "7ef1556c-96a3-4988-982d-ec8c5fba4601",
"name": "Extract from File1",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1400,
-300
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "9916f1c1-f413-4996-ad45-380a899b4a88",
"name": "Get Result1",
"type": "n8n-nodes-base.set",
"position": [
2120,
-260
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e376ba60-8692-4962-9af7-466b6a3f44a2",
"name": "={{ $('Fields to Update').item.json.name }}",
"type": "string",
"value": "={{ $json.text.trim() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f62f612d-c288-4062-ab3c-dbc24c9b4b38",
"name": "Generate Field Value1",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1720,
-300
],
"parameters": {
"text": "=<file>\n{{ $('Extract from File1').first().json.text }}\n</file>\n\nData to extract: {{ $json.description }}\noutput format is: {{ $json.type }}",
"messages": {
"messageValues": [
{
"message": "=You assist the user in extracting the required data from the given file.\n* Keep you answer short.\n* If you cannot extract the requested data, give you response as \"n/a\" followed by \"(reason)\" where reason is replaced with reason why data could not be extracted."
}
]
},
"promptType": "define"
},
"typeVersion": 1.5
},
{
"id": "615f7436-f280-4033-8ec8-a34f1bd78075",
"name": "Filter Valid Rows",
"type": "n8n-nodes-base.filter",
"position": [
520,
-420
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7ad58f0b-0354-49a9-ab2f-557652d7b416",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.File[0].url }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "281b9fb0-305c-4a0c-b73b-82b6ba876d12",
"name": "Filter Valid Fields",
"type": "n8n-nodes-base.filter",
"position": [
340,
220
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5b4a7393-788c-42dc-ac1f-e76f833f8534",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.field.description }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "dd0fa792-791f-4d31-a7e8-9b72a25b6a07",
"name": "Event Ref",
"type": "n8n-nodes-base.noOp",
"position": [
160,
220
],
"parameters": {},
"typeVersion": 1
},
{
"id": "ca1174b3-da18-4d3c-86ef-3028cd5b12a7",
"name": "Event Ref1",
"type": "n8n-nodes-base.noOp",
"position": [
160,
-420
],
"parameters": {},
"typeVersion": 1
},
{
"id": "8800b355-0fa8-4297-b13b-d3da8a01c3b7",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1180,
-340
],
"parameters": {
"color": 7,
"width": 480,
"height": 440,
"content": "### 1. \ud14c\uc774\ube14 \uc2a4\ud0a4\ub9c8 \uac00\uc838\uc624\uae30\n\n[Airtable \ub178\ub4dc\uc5d0 \ub300\ud574 \ub354 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.airtable/)\n\n\uc774 \uc791\uc5c5\uc744 \uc704\ud574 \ud3b8\ub9ac\ud55c Airtable \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4. Airtable\uc5d0 \ub300\ud55c \ubaa8\ub4e0 \ud544\uc694\ub97c \uc704\ud574 \uc774 \ub178\ub4dc\uc5d0 \uc775\uc219\ud574\uc9c0\ub294 \uac83\uc744 \ucd94\ucc9c\ud569\ub2c8\ub2e4!"
},
"typeVersion": 1
},
{
"id": "a90876d3-8a93-4d90-9e2a-f23de452259d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-260,
-440
],
"parameters": {
"color": 5,
"width": 330,
"height": 80,
"content": "2a. \ucd5c\uc18c \ud589 \uc218 \uc5c5\ub370\uc774\ud2b8 \n\uc774 \ube0c\ub79c\uce58\uac00 \uc601\ud5a5\uc744 \ubc1b\uc740 \ud589\ub9cc \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "319adf97-8b14-4069-b4cc-594a6ea479c1",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-320,
140
],
"parameters": {
"color": 5,
"width": 390,
"height": 120,
"content": "2b. \ud544\ub4dc \uc544\ub798\uc758 \ubaa8\ub4e0 \ud589 \uc5c5\ub370\uc774\ud2b8 \n\uc774 \ube0c\ub79c\uce58\uac00 \ud544\ub4dc/\uc5f4\uc774 \uc0dd\uc131\ub418\uac70\ub098 \ubcc0\uacbd\ub420 \ub54c \ud544\ub4dc \uc544\ub798\uc758 \ubaa8\ub4e0 \uc801\uc6a9 \uac00\ub2a5\ud55c \ud589\uc744 \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uc8fc\uc758\ud558\uc138\uc694 - \ud589\uc774 \uc218\ucc9c \uac1c \uc788\uc73c\uba74, \uc774 \uc791\uc5c5\uc774 \uc2dc\uac04\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4!"
},
"typeVersion": 1
},
{
"id": "42a60c8c-476f-4930-bac5-4d36a7185f4f",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2240,
-1000
],
"parameters": {
"width": 520,
"height": 1120,
"content": "## \uc9c1\uc811 \ud574\ubcf4\uc138\uc694!\n### \uc774 n8n \ud15c\ud50c\ub9bf\uc740 [Airtable](https://airtable.com/invite/r/cKzxFYVc) \ud14c\uc774\ube14\uc5d0 \ub300\ud55c PDF \uc6cc\ud06c\ud50c\ub85c \ud328\ud134\uacfc \ud568\uaed8 \"\ub3d9\uc801\" \ub610\ub294 \"\uc0ac\uc6a9\uc790 \uc815\uc758\" \ud504\ub86c\ud504\ud2b8\ub97c \uad6c\ub3d9\ud569\ub2c8\ub2e4. \uac04\ub2e8\ud788 \ub9d0\ud574\uc11c, \uc0ac\uc6a9\uc790\uac00 \uae30\ubcf8 \ud15c\ud50c\ub9bf\uc744 \uac74\ub4dc\ub9ac\uc9c0 \uc54a\uace0 \ud504\ub86c\ud504\ud2b8\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc2a4\ud504\ub808\ub4dc\uc2dc\ud2b8\ub97c \ucc44\uc6b8 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4.\n\n**n8n Studio\uc5d0\uc11c \uc81c\uac00 \ud55c \ub3d9\uc601\uc0c1 \ub370\ubaa8 \ud655\uc778\ud558\uae30**: https://www.youtube.com/watch?v=_fNAD1u8BZw\n\n**\uc608\uc2dc Airtable \ud655\uc778\ud558\uae30:** https://airtable.com/appAyH3GCBJ56cfXl/shrXzR1Tj99kuQbyL\n\n\uc774 \ud15c\ud50c\ub9bf\uc740 Airtable\uc758 \uc6f9hook \uc18c\uc2a4\ub85c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc124\uacc4\ub418\uc5c8\uc2b5\ub2c8\ub2e4. **Baserow \ubc84\uc804\uc774 \ud544\uc694\ud558\uc2e0\uac00\uc694? [\uc5ec\uae30 \ud074\ub9ad](https://n8n.io/workflows/2780-ai-data-extraction-with-dynamic-prompts-and-baserow)**\n\n## \uc791\ub3d9 \uc6d0\ub9ac\n* Airtable.io \ud14c\uc774\ube14\uc740 \ud14c\uc774\ube14 \ubcc0\uacbd \uc0ac\ud56d\uc744 \uc811\uadfc \uac00\ub2a5\ud55c \uc6f9hook\uc73c\ub85c \uc774\ubca4\ud2b8\ub85c \ubcf4\ub0b4\ub294 \ud1b5\ud569 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub294 \ubc18\uc751\ud615 \ud2b8\ub9ac\uac70 \ud328\ud134\uc744 \uac00\ub2a5\ud558\uac8c \ud558\uba70, \uc774 \uacbd\uc6b0 \uc6b0\ub9ac\ub294 `row_updated`, `field_created` \ubc0f `field_updated` \uc774\ubca4\ud2b8\ub97c \ucea1\ucc98\ud569\ub2c8\ub2e4.\n* \ub2e4\uc74c\uc73c\ub85c, Airtable.io \ud14c\uc774\ube14\uc5d0 \"input\" \uc5f4\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc774 \uc5f4\uc740 \ud504\ub86c\ud504\ud2b8\ub97c \ud3c9\uac00\ud560 \ucee8\ud14d\uc2a4\ud2b8\uac00 \uc800\uc7a5\ub418\ub294 \uacf3\uc785\ub2c8\ub2e4. \uc774 \uc608\uc2dc\uc5d0\uc11c \"input\" \uc5f4 \uc774\ub984\uc740 \"file\"\uc774\uba70, \uc5ec\uae30\uc5d0 PDF\ub97c \uc5c5\ub85c\ub4dc\ud569\ub2c8\ub2e4. \uc774 \"input\" \ud544\ub4dc\ub294 \uc778\uac04\uc774 \uc81c\uc5b4\ud558\uba70, \uc774 \ud15c\ud50c\ub9bf\uc5d0\uc11c \uc5c5\ub370\uc774\ud2b8\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\n* \uc774\uc81c \uc5f4(\uc989, Airtable\uc758 \"fields\")\uc5d0 \ub300\ud574 \uc124\uba85\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uac01 \ud544\ub4dc\ub294 \uc774\ub984, \uc720\ud615 \ubc0f \uc124\uba85\uc744 \uc815\uc758\ud560 \uc218 \uc788\uc73c\uba70, \uc774\ub4e4\uc774 \ud568\uaed8 \uc2a4\ud0a4\ub9c8\ub97c \ud615\uc131\ud569\ub2c8\ub2e4. \ucc98\uc74c \ub450 \uac00\uc9c0\ub294 \uc790\uba85\ud558\uc9c0\ub9cc, \"description\"\uc740 \uc0ac\uc6a9\uc790\uac00 \ud504\ub86c\ud504\ud2b8\ub97c \uc81c\uacf5\ud558\ub294 \uacf3\uc73c\ub85c, \ud574\ub2f9 \ud544\ub4dc\uac00 \ud3ec\ud568\ud574\uc57c \ud560 \ub370\uc774\ud130\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4.\n* \uc774 \ud15c\ud50c\ub9bf\uc5d0\uc11c \uc6f9hook \ud2b8\ub9ac\uac70\ub294 \ud589\uc774\ub098 \uc5f4\uc774 \uc5c5\ub370\uc774\ud2b8\ub420 \ub54c \ub300\uae30\ud569\ub2c8\ub2e4. \ub4e4\uc5b4\uc624\ub294 \uc774\ubca4\ud2b8\uc5d0\ub294 \uc601\ud5a5\uc744 \ubc1b\uc740 \ud14c\uc774\ube14, \ud589 \ubc0f/\ub610\ub294 \uc5f4 ID\uc640 \uac19\uc740 \ub9ce\uc740 \uc138\ubd80 \uc815\ubcf4\uac00 \ud3ec\ud568\ub429\ub2c8\ub2e4.\n* \uc774 \uc815\ubcf4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud14c\uc774\ube14\uc758 \uc2a4\ud0a4\ub9c8\ub97c \uac00\uc838\uc640 \uc5f4\uc758 \uc124\uba85(\uc989, \ub3d9\uc801 \ud504\ub86c\ud504\ud2b8)\uc744 \uac00\uc838\uc635\ub2c8\ub2e4.\n* \uac01 \ud2b8\ub9ac\uac70\ub41c \uc774\ubca4\ud2b8\uc5d0 \ub300\ud574, \uc785\ub825(\uc989, PDF)\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ud558\uc5ec AI/LLM\uc5d0 \uc900\ube44\ud569\ub2c8\ub2e4. \uc0ac\uc6a9 \uac00\ub2a5\ud55c \uc5f4\uc744 \ubc18\ubcf5\ud558\uba70 \ub3d9\uc801 \ud504\ub86c\ud504\ud2b8\ub97c \uc81c\uacf5\ud558\uc5ec, LLM\uc774 PDF\uc5d0 \ub300\ud574 \uac01 \ud504\ub86c\ud504\ud2b8\ub97c \uc2e4\ud589\ud558\uace0 \uac01 \uc140\uc5d0 \ub300\ud55c \uac12 \uc751\ub2f5\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.\n* \uc774\ub7ec\ud55c \uac12\ub4e4\uc744 \uc218\uc9d1\ud558\uc5ec Airtable \ub808\ucf54\ub4dc\ub97c \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4.\n\n## \uc0ac\uc6a9 \ubc29\ubc95\n* \uc774 \uc6cc\ud06c\ud50c\ub85c\ub97c \uac8c\uc2dc\ud558\uc5ec Airtable \uc778\uc2a4\ud134\uc2a4\uc5d0\uc11c \uc811\uadfc\ud560 \uc218 \uc788\uac8c \ud574\uc57c \ud569\ub2c8\ub2e4.\n* \"Create Airtable Webhooks\" \ubbf8\ub2c8-\ud50c\ub85c\ub97c \uc2e4\ud589\ud558\uc5ec Airtable\uacfc \uc5f0\uacb0\ud574\uc57c \ud569\ub2c8\ub2e4.\n* \uc774 \ud15c\ud50c\ub9bf\uc740 \ub2e4\ub978 Airtable\uc5d0\ub3c4 \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\uc9c0\ub9cc, \uac01 \ud14c\uc774\ube14\ub9c8\ub2e4 \uc6f9hook\uc744 \uc0c8\ub85c \uc0dd\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\n\n### \ub3c4\uc6c0\uc774 \ud544\uc694\ud558\uc2e0\uac00\uc694?\n[Discord](https://discord.com/invite/XPKeKXeB7d) \uc5d0 \ucc38\uc5ec\ud558\uac70\ub098 [Forum](https://community.n8n.io/)\uc5d0\uc11c \ubb3c\uc5b4\ubcf4\uc138\uc694!\n\n\uc990\uac70\uc6b4 \ud50c\ub85c\uc6b0\uadf8\ub7a8\ubc0d!"
},
"typeVersion": 1
},
{
"id": "c6d037e9-1bf7-47a7-9c46-940220e0786b",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-680,
-340
],
"parameters": {
"color": 7,
"width": 760,
"height": 440,
"content": "### 2. \uc774\ubca4\ud2b8 \ub77c\uc6b0\ud130 \ud328\ud134\n\n[\uc2a4\uc704\uce58 \ub178\ub4dc\uc5d0 \ub300\ud574 \ub354 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/)\n\n\ub2e8\uc21c\ud55c \uc2a4\uc704\uce58 \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ucc98\ub9ac\ud560 \uc774\ubca4\ud2b8\ub97c \uacb0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc6b0\ub9ac\uc758 \ud589 \uc774\ubca4\ud2b8\uc640 \ud544\ub4dc \uc774\ubca4\ud2b8\uc758 \ucc28\uc774\uc810\uc740 \ud589 \uc774\ubca4\ud2b8\uac00 \ud558\ub098\uc758 \ud589\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce58\ub294 \ubc18\uba74 \ud544\ub4dc \uc774\ubca4\ud2b8\ub294 \ubaa8\ub4e0 \ud589\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce5c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "897cec32-3a4c-4a76-bffe-b1456c287b44",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
100,
-620
],
"parameters": {
"color": 7,
"width": 620,
"height": 400,
"content": "### 3. \uc720\ud6a8 \uc785\ub825\uc774 \uc788\ub294 \ud589\ub9cc \ud544\ud130\ub9c1\n[Split Out \ub178\ub4dc\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitout/)\n\n\uc774 \ub2e8\uacc4\ub294 \ud558\ub098 \uc774\uc0c1\uc758 \uc5c5\ub370\uc774\ud2b8\ub41c \ud589\uc744 \ucc98\ub9ac\ud569\ub2c8\ub2e4. \uc5ec\uae30\uc11c \"updated\"\ub294 \uc774 \ud589\ub4e4\uc758 \"input\" \uc5f4(\uc989, \uc6b0\ub9ac \uc608\uc81c\uc5d0\uc11c\uc758 \"file\")\uc774 \ubcc0\uacbd\ub418\uc5c8\uc74c\uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4. \uac01 \uc601\ud5a5\uc744 \ubc1b\uc740 \ud589\uc5d0 \ub300\ud574, \uc6b0\ub9ac\ub294 \uc804\uccb4 \ud589\uc744 \uac00\uc838\uc640 \uc5c5\ub370\uc774\ud2b8\ud574\uc57c \ud560 \uc5f4\ub4e4\ub9cc \ud30c\uc545\ud560 \uac83\uc785\ub2c8\ub2e4 - \uc774\ub294 \uc774\ubbf8 \uac12\uc774 \uc788\ub294 \uc5f4\uc5d0 \ub300\ud55c \uac12 \uc0dd\uc131\uacfc \uac19\uc740 redundant\ud55c \uc791\uc5c5\uc744 \ud53c\ud558\uae30 \uc704\ud55c \ucd5c\uc801\ud654\uc785\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "a5999ca3-4418-42c5-aa1c-fbdfb1c04fef",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2060,
-480
],
"parameters": {
"color": 7,
"width": 600,
"height": 440,
"content": "### 6. Airtable \ub808\ucf54\ub4dc \uc5c5\ub370\uc774\ud2b8\n\n[Edit Fields \ub178\ub4dc\uc5d0 \ub300\ud574 \ub354 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/)\n\n\ub9c8\uce68\ub0b4, LLM \uc751\ub2f5\uc744 \uc218\uc9d1\ud558\uc5ec \uc774\ub97c \uacb0\ud569\ud574 Airtable \ub808\ucf54\ub4dc\ub97c \uc5c5\ub370\uc774\ud2b8\ud558\uae30 \uc704\ud55c API \uc694\uccad\uc744 \uad6c\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4 - \uc774 \ub808\ucf54\ub4dc\uc758 ID\ub294 \ucd08\uae30 \uc6f9\ud6c5\uc5d0\uc11c \uc5bb\uc5c8\uc2b5\ub2c8\ub2e4. \uc774 \uc791\uc5c5\uc774 \uc644\ub8cc\ub41c \ud6c4, \ub2e4\uc74c \ud589\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \ud504\ub85c\uc138\uc2a4\ub97c \ubc18\ubcf5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "38192929-a387-4240-8373-290499b40e5a",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1180,
-580
],
"parameters": {
"color": 7,
"width": 860,
"height": 580,
"content": "### 5. PDFs, LLMs \uadf8\ub9ac\uace0 \ub3d9\uc801 \ud504\ub86c\ud504\ud2b8? \uc624 \ub9c8\uc774!\n\n[Basic LLM \ub178\ub4dc\uc5d0 \ub300\ud574 \ub354 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/)\n\n\uc774 \ub2e8\uacc4\ub294 \ubaa8\ub4e0 \uac83\uc774 \ud569\uccd0\uc9c0\ub294 \uacf3\uc785\ub2c8\ub2e4! \uac04\ub2e8\ud788 \ub9d0\ud574\uc11c, \uc6b0\ub9ac\ub294 LLM\uc5d0\uac8c PDF \ub0b4\uc6a9\uc744 \ucee8\ud14d\uc2a4\ud2b8\ub85c \uc81c\uacf5\ud558\uace0, \uc774\uc804\uc5d0 \uac00\uc838\uc628 \uc2a4\ud0a4\ub9c8\uc5d0\uc11c \ub098\uc628 \ub3d9\uc801 \ud504\ub86c\ud504\ud2b8\ub97c \uc6b0\ub9ac\uc758 \ud589\uc5d0 \ub300\ud574 \ubc18\ubcf5\ud569\ub2c8\ub2e4. \ub9c8\uc9c0\ub9c9\uc5d0, \uc6b0\ub9ac\uc758 LLM\uc774 \uc694\uccad\ub41c \uac01 \uc5f4\uc5d0 \ub300\ud55c \uac12\uc744 \uc0dd\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\n\n**\ub178\ud2b8**: PDF\ub97c \uce90\uc2f1\ud558\uae30 \uc704\ud55c \ucd5c\uc801\ud654\uac00 \ud655\uc2e4\ud788 \uac00\ub2a5\ud558\uc9c0\ub9cc, \uc774\ub294 \uc774 \ub370\ubaa8\uc758 \ubc94\uc704\ub97c \ubc97\uc5b4\ub0a9\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "19a9b93a-d18f-4ffd-ae93-ed41cf398e90",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
740,
-580
],
"parameters": {
"color": 7,
"width": 420,
"height": 460,
"content": "### 4. \uc544\uc774\ud15c \ub8e8\ud504 \uc0ac\uc6a9\n\n[Split in Batches \ub178\ub4dc\uc5d0 \ub300\ud574 \ub354 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/)\n\n\uc5ec\uae30\uc11c \ubd84\ud560 \ubc30\uce58 \ub178\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud55c \ubc88\uc5d0 \ud558\ub098\uc758 \ud589\uc744 \uc5c5\ub370\uc774\ud2b8\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774\ub294 \uc0ac\uc6a9\uc790 \uacbd\ud5d8\uc744 \uc704\ud55c \uc120\ud638\uc0ac\ud56d\uc785\ub2c8\ub2e4 - Airtable\uc5d0\uc11c \ubcc0\uacbd \uc0ac\ud56d\uc774 \ub354 \ube60\ub974\uac8c \ubcf4\uc785\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "5407fead-ee7c-47c8-94ed-5b89e74e50e8",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
100,
40
],
"parameters": {
"color": 7,
"width": 600,
"height": 360,
"content": "### 7. \ud574\ub2f9 \uc5f4 \uc544\ub798\uc5d0 \ubaa8\ub4e0 \uc801\uc6a9 \uac00\ub2a5\ud55c \ud589 \ub098\uc5f4 \n[\ud544\ud130 \ub178\ub4dc\uc5d0 \ub300\ud574 \ub354 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.filter) \n\n\uc131\ub2a5\uc744 \uc720\uc9c0\ud558\uae30 \uc704\ud574, \uc6b0\ub9ac\ub294 inputfield\uac00 \ucc44\uc6cc\uc9c4 \ud589\ub9cc \uac00\uc838\uc624\uae30\ub85c \uacb0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 \ucd94\ucd9c\uc744 \uc218\ud589\ud558\ub294 \ub370 \ud544\uc694\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uc774\ub294 Airtable \ud544\ud130\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc27d\uac8c \ub2ec\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "43b0e330-b79a-4577-b4fc-314e8b790cf7",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
1160,
140
],
"parameters": {
"color": 7,
"width": 700,
"height": 500,
"content": "### 9. LLM\uc744 \uc0ac\uc6a9\ud558\uc5ec \uac12 \uc0dd\uc131\n\n[\ud30c\uc77c\uc5d0\uc11c \ucd94\ucd9c \ub178\ub4dc\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/)\n\nStep 5\uc640 \uac70\uc758 \ub3d9\uc77c\ud558\uc9c0\ub9cc, \ubaa8\ub4e0 \ud544\ub4dc/\uc5f4\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \ub300\uc2e0 \ud558\ub098\uc758 \uac12\ub9cc \uc0dd\uc131\ud558\uba74 \ub429\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "0665fe56-48d2-4215-8d95-d4c01f9266ed",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1720,
-140
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "1997fb8b-73eb-4016-bab6-eb8f02fee368",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
40
],
"parameters": {
"color": 7,
"width": 420,
"height": 460,
"content": "### 8. \uc544\uc774\ud15c \ub8e8\ud504 \uc0ac\uc6a9\n\n[Split in Batches \ub178\ub4dc\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/)\n\n4\ub2e8\uacc4\uc640 \uc720\uc0ac\ud558\uac8c, Split in Batches \ub178\ub4dc\ub294 \uc0ac\uc6a9\uc790 \uacbd\ud5d8\uc744 \uc704\ud55c \uc120\ud638 \uc0ac\ud56d\uc785\ub2c8\ub2e4 - \ubcc0\uacbd \uc0ac\ud56d\uc774 Airtable\uc5d0\uc11c \ub354 \ube60\ub974\uac8c \ubc18\uc601\ub429\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "c2799ded-b742-43a2-80ce-7a0c8f1df96e",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1540,
500
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "e5b42790-fc86-4134-9d04-e6bcad4a5f20",
"name": "Sticky Note13",
"type": "n8n-nodes-base.stickyNote",
"position": [
1880,
140
],
"parameters": {
"color": 7,
"width": 500,
"height": 440,
"content": "### 10. Airtable \ub808\ucf54\ub4dc \uc5c5\ub370\uc774\ud2b8\n\n[Edit Fields \ub178\ub4dc\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/)\n\nStep 6\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c, LLM \uc751\ub2f5\uc740 \ud589\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\uc9c0\ub9cc \uc0dd\uc131\ub418\uac70\ub098 \ubcc0\uacbd\ub41c \ud544\ub4dc\uc5d0\uc11c\ub9cc \ud569\ub2c8\ub2e4. \uc644\ub8cc\ub418\uba74 \ub8e8\ud504\uac00 \uacc4\uc18d\ub418\uc5b4 \ub2e4\uc74c \ud589\uc774 \ucc98\ub9ac\ub429\ub2c8\ub2e4."
},
"typeVersion": 1
},
{
"id": "b1e98631-a440-4c66-b2d2-8236f6889b65",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2240,
-1140
],
"parameters": {
"color": 7,
"width": 300,
"height": 120,
"content": "\uc5d0\uc5b4\ud14c\uc774\ube14.io"
},
"typeVersion": 1
},
{
"id": "9d293b3a-954d-4e3b-8773-b6c3dded9520",
"name": "Get Webhook Payload",
"type": "n8n-nodes-base.httpRequest",
"position": [
-580,
-140
],
"parameters": {
"url": "=https://api.airtable.com/v0/bases/{{ $('Airtable Webhook').first().json.body.base.id }}/webhooks/{{ $('Airtable Webhook').first().json.body.webhook.id }}/payloads",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "airtableTokenApi"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "5f8d919b-14cd-4cb4-8604-731e56cc9402",
"name": "Parse Event",
"type": "n8n-nodes-base.code",
"position": [
-400,
-140
],
"parameters": {
"jsCode": "const webhook = $('Airtable Webhook').first().json;\nconst schema = $('Get Prompt Fields').first().json;\nconst { payloads } = $input.first().json;\nif (!payloads.length) return [];\n\nconst event = payloads[payloads.length - 1];\nconst baseId = webhook.body.base.id;\nconst tableId = Object.keys(event.changedTablesById)[0];\nconst table = event.changedTablesById[tableId];\n\nreturn {\n baseId,\n tableId,\n event_type: getEventType(table),\n fieldId: getFieldId(table),\n field: getField(getFieldId(table)),\n rowId: getRecordId(table),\n}\n\nfunction getEventType(changedTableByIdObject) {\n if (changedTableByIdObject['createdFieldsById']) return 'field.created';\n if (changedTableByIdObject['changedFieldsById']) return 'field.updated'\n if (changedTableByIdObject['changedRecordsById']) return 'row.updated';\n return 'unknown';\n}\n\nfunction getFieldId(changedTableByIdObject) {\n const field = changedTableByIdObject.createdFieldsById\n || changedTableByIdObject.changedFieldsById\n || null;\n\n return field ? Object.keys(field)[0] : null;\n}\n\nfunction getField(id) {\n return schema.fields.find(field => field.id === id);\n}\n\nfunction getRecordId(changedTableByIdObject) {\n const record = changedTableByIdObject.changedRecordsById\n || null;\n\n return record ? Object.keys(record)[0] : null;\n}"
},
"typeVersion": 2
},
{
"id": "9b99d939-94d6-4fef-8b73-58c702503221",
"name": "Get Table Schema",
"type": "n8n-nodes-base.airtable",
"position": [
-1080,
-140
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('Airtable Webhook').item.json.body.base.id }}"
},
"resource": "base",
"operation": "getSchema"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "c29fc911-a852-46f2-bbb1-5092cc1aaa9d",
"name": "Fetch Records",
"type": "n8n-nodes-base.airtable",
"position": [
520,
220
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $json.baseId }}"
},
"table": {
"__rl": true,
"mode": "id",
"value": "={{ $json.tableId }}"
},
"options": {},
"operation": "search",
"filterByFormula": "NOT({File} = \"\")"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "86d3c8d8-709f-4d9d-99bc-5d1b4aeb8603",
"name": "Update Row",
"type": "n8n-nodes-base.airtable",
"position": [
2180,
380
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('Event Ref').first().json.baseId }}"
},
"table": {
"__rl": true,
"mode": "id",
"value": "={{ $('Event Ref').first().json.tableId }}"
},
"columns": {
"value": {},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "File",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Created",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Modified",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Last Modified",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Address",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Address",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"id"
]
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "95d08439-59a2-4e74-bd5a-b71cf079b621",
"name": "Get Row",
"type": "n8n-nodes-base.airtable",
"position": [
340,
-420
],
"parameters": {
"id": "={{ $json.rowId }}",
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $json.baseId }}"
},
"table": {
"__rl": true,
"mode": "id",
"value": "={{ $json.tableId }}"
},
"options": {}
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "50888ac5-30c9-4036-aade-6ccfdf605c3b",
"name": "Add Row ID to Payload",
"type": "n8n-nodes-base.set",
"position": [
2300,
-260
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={{\n{\n id: $('Row Ref').item.json.id,\n ...$input.all()\n .map(item => item.json)\n .reduce((acc, item) => ({\n ...acc,\n ...item,\n }), {})\n}\n}}"
},
"executeOnce": true,
"typeVersion": 3.4
},
{
"id": "e3ebeb45-45d9-44a4-a2e6-bde89f5da125",
"name": "Update Record",
"type": "n8n-nodes-base.airtable",
"position": [
2480,
-260
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $('Event Ref1').first().json.baseId }}"
},
"table": {
"__rl": true,
"mode": "id",
"value": "={{ $('Event Ref1').first().json.tableId }}"
},
"columns": {
"value": {},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "File",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "File",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Address",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Created",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Modified",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Last Modified",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"id"
]
},
"options": {},
"operation": "update"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "ac01ec4b-e030-4608-af38-64558408832f",
"name": "Airtable Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-1400,
-140
],
"parameters": {
"path": "a82f0ae7-678e-49d9-8219-7281e8a2a1b2",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "90178da9-2000-474e-ba93-a02d03ec6a1d",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1600,
-640
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b8b887ce-f891-4a3c-993b-0aaccadf1b52",
"name": "Set Airtable Vars",
"type": "n8n-nodes-base.set",
"position": [
-1420,
-640
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "012cb420-1455-4796-a2ac-a31e6abf59ba",
"name": "appId",
"type": "string",
"value": "<MY_BASE_ID>"
},
{
"id": "e863b66c-420f-43c6-aee2-43aa5087a0a5",
"name": "tableId",
"type": "string",
"value": "<MY_TABLE_ID>"
},
{
"id": "e470be1a-5833-47ed-9e2f-988ef5479738",
"name": "notificationUrl",
"type": "string",
"value": "<MY_WEBHOOK_URL>"
},
{
"id": "e4b3213b-e3bd-479b-99ec-d1aa31eaa4c8",
"name": "inputField",
"type": "string",
"value": "File"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a3ef1a4a-fd22-4a37-8edb-48037f44fa4b",
"name": "Get Table Schema1",
"type": "n8n-nodes-base.airtable",
"position": [
-1240,
-820
],
"parameters": {
"base": {
"__rl": true,
"mode": "id",
"value": "={{ $json.appId }}"
},
"resource": "base",
"operation": "getSchema"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "2490bbc6-2ea1-4146-b0b8-5a406e89ea2c",
"name": "Get \"Input\" Field",
"type": "n8n-nodes-base.set",
"position": [
-1060,
-820
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={{\n$input.all()\n .map(item => item.json)\n .find(item => item.id === $('Set Airtable Vars').first().json.tableId)\n .fields\n .find(field => field.name === $('Set Airtable Vars').first().json.inputField)\n}}"
},
"executeOnce": true,
"typeVersion": 3.4
},
{
"id": "a3de141f-0ce8-4f8e-ae8e-f10f635d14ec",
"name": "RecordsChanged Webhook",
"type": "n8n-nodes-base.httpRequest",
"position": [
-880,
-820
],
"parameters": {
"url": "=https://api.airtable.com/v0/bases/{{ $('Set Airtable Vars').first().json.appId }}/webhooks",
"method": "POST",
"options": {},
"jsonBody": "={{\n{\n \"notificationUrl\": $('Set Airtable Vars').first().json.notificationUrl,\n \"specification\": {\n \"options\": {\n \"filters\": {\n \"fromSources\": [ \"client\" ],\n \"dataTypes\": [ \"tableData\" ],\n \"changeTypes\": [ \"update\" ],\n \"recordChangeScope\": $('Set Airtable Vars').first().json.tableId,\n \"watchDataInFieldIds\": [$json.id]\n }\n }\n }\n}\n}}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "airtableTokenApi"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "21b0fae8-2046-4647-83c4-132d1d63503a",
"name": "FieldsChanged Webhook",
"type": "n8n-nodes-base.httpRequest",
"position": [
-880,
-640
],
"parameters": {
"url": "=https://api.airtable.com/v0/bases/{{ $('Set Airtable Vars').first().json.appId }}/webhooks",
"method": "POST",
"options": {},
"jsonBody": "={{\n{\n \"notificationUrl\": $('Set Airtable Vars').first().json.notificationUrl,\n \"specification\": {\n \"options\": {\n \"filters\": {\n \"fromSources\": [ \"client\" ],\n \"dataTypes\": [ \"tableFields\" ],\n \"changeTypes\": [ \"add\", \"update\" ],\n \"recordChangeScope\": $('Set Airtable Vars').first().json.tableId\n }\n }\n }\n}\n}}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "airtableTokenApi"
},
"credentials": {
"airtableTokenApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "f31c36cb-98da-4688-a83a-f06e46d2b8a2",
"name": "Sticky Note14",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1680,
-1000
],
"parameters": {
"color": 5,
"width": 1020,
"height": 580,
"content": "## \u2b50\ufe0f Airtable \uc6f9\ud6c5 \uc0dd\uc131\n\uc774 \uc6cc\ud06c\ud50c\ub85c\ub97c Airtable\uacfc \uc5f0\uacb0\ud558\ub824\uba74 Base\uc5d0 \uc6f9\ud6c5\uc744 \uc0dd\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\n\uc774 \uc791\uc5c5\uc740 \ud55c \ubc88\ub9cc \uc218\ud589\ud558\uba74 \ub418\uc9c0\ub9cc, \uc774 \uc6f9\ud6c5\uc774 7\uc77c \ud6c4\uc5d0 \ube44\ud65c\uc131\ud654\ub418\uba74 \ub2e4\uc2dc \uc0dd\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\n\n\ub354 \ub9ce\uc740 \uc815\ubcf4\ub97c \uc704\ud574 Airtable \uac1c\ubc1c\uc790 \ubb38\uc11c\ub97c \ud655\uc778\ud558\uc138\uc694: [https://airtable.com/developers/web/api/webhooks-overview](https://airtable.com/developers/web/api/webhooks-overview)"
},
"typeVersion": 1
}
],
"connections": {
"Get Row": {
"main": [
[
{
"node": "Filter Valid Rows",
"type": "main",
"index": 0
}
]
]
},
"Row Ref": {
"main": [
[
{
"node": "Get File Data1",
"type": "main",
"index": 0
}
]
]
},
"Event Ref": {
"main": [
[
{
"node": "Filter Valid Fields",
"type": "main",
"index": 0
}
]
]
},
"Event Ref1": {
"main": [
[
{
"node": "Get Row",
"type": "main",
"index": 0
}
]
]
},
"Event Type": {
"main": [
[
{
"node": "Event Ref1",
"type": "main",
"index": 0
}
],
[
{
"node": "Event Ref",
"type": "main",
"index": 0
}
],
[
{
"node": "Event Ref",
"type": "main",
"index": 0
}
]
]
},
"Get Result": {
"main": [
[
{
"node": "Update Row",
"type": "main",
"index": 0
}
]
]
},
"Update Row": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Get Result1": {
"main": [
[
{
"node": "Add Row ID to Payload",
"type": "main",
"index": 0
}
]
]
},
"Parse Event": {
"main": [
[
{
"node": "Event Type",
"type": "main",
"index": 0
}
]
]
},
"Fetch Records": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Get File Data": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Row Reference": {
"main": [
[
{
"node": "Get File Data",
"type": "main",
"index": 0
}
]
]
},
"Update Record": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Get File Data1": {
"main": [
[
{
"node": "Extract from File1",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Row Reference",
"type": "main",
"index": 0
}
]
]
},
"Airtable Webhook": {
"main": [
[
{
"node": "Get Table Schema",
"type": "main",
"index": 0
}
]
]
},
"Fields to Update": {
"main": [
[
{
"node": "Generate Field Value1",
"type": "main",
"index": 0
}
]
]
},
"Get Table Schema": {
"main": [
[
{
"node": "Get Prompt Fields",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items1": {
"main": [
[],
[
{
"node": "Row Ref",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Generate Field Value",
"type": "main",
"index": 0
}
]
]
},
"Filter Valid Rows": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Get \"Input\" Field": {
"main": [
[
{
"node": "RecordsChanged Webhook",
"type": "main",
"index": 0
}
]
]
},
"Get Prompt Fields": {
"main": [
[
{
"node": "Get Webhook Payload",
"type": "main",
"index": 0
}
]
]
},
"Get Table Schema1": {
"main": [
[
{
"node": "Get \"Input\" Field",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate Field Value1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Set Airtable Vars": {
"main": [
[
{
"node": "Get Table Schema1",
"type": "main",
"index": 0
},
{
"node": "FieldsChanged Webhook",
"type": "main",
"index": 0
}
]
]
},
"Extract from File1": {
"main": [
[
{
"node": "Fields to Update",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Generate Field Value",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Filter Valid Fields": {
"main": [
[
{
"node": "Fetch Records",
"type": "main",
"index": 0
}
]
]
},
"Get Webhook Payload": {
"main": [
[
{
"node": "Parse Event",
"type": "main",
"index": 0
}
]
]
},
"Generate Field Value": {
"main": [
[
{
"node": "Get Result",
"type": "main",
"index": 0
}
]
]
},
"Add Row ID to Payload": {
"main": [
[
{
"node": "Update Record",
"type": "main",
"index": 0
}
]
]
},
"FieldsChanged Webhook": {
"main": [
[]
]
},
"Generate Field Value1": {
"main": [
[
{
"node": "Get Result1",
"type": "main",
"index": 0
}
]
]
},
"RecordsChanged Webhook": {
"main": [
[]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Set Airtable Vars",
"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.
airtableTokenApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
2771. Uses httpRequest, chainLlm, lmChatOpenAi, airtable. Webhook trigger; 51 nodes.
Source: https://github.com/n8nKOR/n8n-shared-workflow/blob/62a671327e906c22a40d290b339ff6d2373f8d75/workflows/n8nworkflows/ai/2771.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Ai Data Extraction With Dynamic Prompts And Airtable. Uses httpRequest, extractFromFile, splitInBatches, noOp. Webhook trigger; 51 nodes.
This n8n template introduces the Dynamic Prompts Ai workflow pattern which are incredible for certain types of data extraction tasks where attributes are unknown or need to remain flexible.
Tech CRM. Uses httpRequest, airtable, splitOut, markdown. Webhook trigger; 27 nodes.
fireflies. Uses openAi, httpRequest, emailSend, chainLlm. Webhook trigger; 25 nodes.
Content creators, social media managers, and marketing teams who want to automate image editing and Instagram posting workflows using AI-powered image analysis and generation.