This workflow follows the HTTP Request → Readwritefile 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 →
{
"name": "pipelineB",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
-2496,
-736
],
"id": "0ca9172d-f3aa-4bbf-9afb-feec02f419ce",
"name": "When clicking \u2018Execute workflow\u2019"
},
{
"parameters": {
"fileSelector": "/data/data/onboarding/*.txt",
"options": {}
},
"type": "n8n-nodes-base.readWriteFile",
"typeVersion": 1.1,
"position": [
-2224,
-736
],
"id": "4d1c3ad7-7b43-4eba-8d64-481b3a960653",
"name": "Read/Write Files from Disk"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
-1952,
-736
],
"id": "6f45b229-5875-466f-a831-21a9ba144eab",
"name": "Loop Over Items"
},
{
"parameters": {
"operation": "text",
"destinationKey": "transcript",
"options": {
"keepSource": "json"
}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1.1,
"position": [
-1520,
-736
],
"id": "cfabd8ec-ec68-494a-baa0-92370eb3ec1e",
"name": "Extract from File"
},
{
"parameters": {
"method": "POST",
"url": "https://api.groq.com/openai/v1/chat/completions",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "httpBearerAuth",
"sendBody": true,
"contentType": "raw",
"rawContentType": "JSON",
"body": "={\n \"model\": \"llama-3.3-70b-versatile\",\n \"temperature\": 0,\n \"response_format\": { \"type\": \"json_object\" },\n \"messages\": [\n {\n \"role\": \"system\",\n \"content\": \"You extract operational updates from onboarding calls and return structured JSON.\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Account ID: {{$json.account_id}}\\n\\nExtract any updates to the company configuration from this onboarding call.\\n\\nReturn JSON using this schema:\\n\\n{\\n \\\"account_id\\\": \\\"string\\\",\\n \\\"updates\\\": {},\\n \\\"routing_changes\\\": {},\\n \\\"new_services\\\": [],\\n \\\"business_hour_changes\\\": {},\\n \\\"integration_changes\\\": [],\\n \\\"notes\\\": \\\"string\\\"\\n}\\n\\nRules:\\n- Always copy the Account ID exactly from the input above.\\n- Only extract information explicitly mentioned.\\n- If no change is mentioned for a field, return null.\\n- Output must be valid JSON only.\\n\\nTranscript:\\n{{$json.transcript_clean}}\"\n }\n ]\n}",
"options": {
"response": {
"response": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
-1072,
-752
],
"id": "be4aae31-ecf0-47c9-bb46-a53a3b342e63",
"name": "HTTP Request1",
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "let transcript = $json.transcript || \"\";\n\n// clean problematic characters\ntranscript = transcript\n .replace(/\\r/g, \" \")\n .replace(/\\n/g, \" \")\n .replace(/\"/g, '\\\\\"');\n\n// limit size to avoid Groq token limit\nif (transcript.length > 4000) {\n transcript = transcript.substring(0, 4000);\n}\n\nreturn [\n {\n json: {\n account_id: $json.account_id,\n transcript_clean: transcript\n }\n }\n];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-1280,
-752
],
"id": "3b36588f-3f60-43ae-8e22-f1ef49d6fc83",
"name": "Code in JavaScript1"
},
{
"parameters": {
"method": "POST",
"url": "http://host.docker.internal:5000/process-onboarding",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "account_id",
"value": "={{$json.account_id}}"
},
{
"name": "updates",
"value": "={{ $json.updates}}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
-448,
-752
],
"id": "6dd29152-7749-405e-87a1-0be873c70bcd",
"name": "HTTP Request2"
},
{
"parameters": {
"jsCode": "const raw = $json.choices[0].message.content;\n\n// remove markdown code blocks\nconst cleaned = raw\n .replace(/```json/g, \"\")\n .replace(/```/g, \"\")\n .trim();\n\n// parse JSON\nconst parsed = JSON.parse(cleaned);\n\nreturn [\n {\n json: parsed\n }\n];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-768,
-752
],
"id": "9a3e0a99-3ba8-4e41-9c6c-24b70ec128ae",
"name": "Code in JavaScript3"
},
{
"parameters": {},
"type": "n8n-nodes-base.noOp",
"name": "Replace Me1",
"typeVersion": 1,
"position": [
-1328,
-208
],
"id": "53a7eaea-c469-4bf1-b12c-6a97ba864955"
},
{
"parameters": {
"jsCode": "return $input.all().map(item => {\n\n const filename = item.binary.data.fileName;\n\n const account_id = filename.replace(\".txt\",\"\");\n\n return {\n json: {\n account_id: account_id\n },\n binary: item.binary\n };\n\n});"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-1696,
-736
],
"id": "b77d2d62-89dd-4a93-a95d-219e3ed026e0",
"name": "Code in JavaScript"
}
],
"connections": {
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Read/Write Files from Disk",
"type": "main",
"index": 0
}
]
]
},
"Read/Write Files from Disk": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
],
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Code in JavaScript1",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request1": {
"main": [
[
{
"node": "Code in JavaScript3",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript1": {
"main": [
[
{
"node": "HTTP Request1",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request2": {
"main": [
[
{
"node": "Replace Me1",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript3": {
"main": [
[
{
"node": "HTTP Request2",
"type": "main",
"index": 0
}
]
]
},
"Replace Me1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate",
"availableInMCP": false
},
"versionId": "1fc3c1e5-825e-4a0b-b493-ac616ac1b6b1",
"id": "JnQX3nGP7cAS6a3d",
"tags": []
}
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.
httpBearerAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
pipelineB. Uses readWriteFile, httpRequest. Event-driven trigger; 10 nodes.
Source: https://github.com/4ryn/Talk2Agent/blob/e63c49b69fdcfa145b8c04589000ce722a662984/workflows/pipelineB.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 Agent for Top n8n Creators Leaderboard Reporting. Uses httpRequest, executeWorkflowTrigger, readWriteFile, googleDrive. Event-driven trigger; 49 nodes.
pipelineA. Uses httpRequest, readWriteFile. Event-driven trigger; 11 nodes.
RAG CHATBOT Main. Uses telegram, telegramTrigger, lmChatOpenAi, n8n-nodes-mcp. Event-driven trigger; 87 nodes.
This workflow helps to automatically discover undocumented API endpoints by analysing JavaScript files from the website's HTML code.
🤖🧑💻 AI Agent for Top n8n Creators Leaderboard Reporting. Uses httpRequest, lmChatOpenAi, executeWorkflowTrigger, toolWorkflow. Event-driven trigger; 49 nodes.