This workflow corresponds to n8n.io template #15957 — we link there as the canonical source.
This workflow follows the Chainllm → HTTP Request 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 →
{
"id": "1V2xmcVCSer_6vcdHn6EG",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "AI LinkedIn Reply Agent for Aimfox: Automated Outreach Responses",
"tags": [],
"nodes": [
{
"id": "43bd108b-0dbf-4dfb-abae-e8dc0616b483",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-176,
1648
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "62e4e518-af18-4e46-8b34-db03e94d0deb",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
848,
1440
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "c1e75567-245f-47a3-8be4-8223df9e3eac",
"name": "AI Message Router",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-240,
1424
],
"parameters": {
"text": "=Our profile is: {{ $('Preparing Aimfox Fields').item.json.recipient.first_name }}\n\nLatest reply from a lead - {{ $('Preparing Aimfox Fields').item.json.sendername }}:\n\n{{ $('Preparing Aimfox Fields').item.json.replymessage }}\n--------\nWhole conversation:\n\n{{ ($(\"Aggregating messages\").item.json.data || []).map(m => (m.sender?.full_name || \"Unknown\") + \": \" + (m.body || \"[Empty Message]\")).join('\\n\\n') }}\n--------\n",
"batching": {},
"messages": {
"messageValues": [
{
"message": "=## Role\nYou are a Lead Qualification Analyst. Your sole purpose is to analyze the latest reply message from a LinkedIn prospect and categorize their intent to determine the next step in an automated sales workflow.\n\n## Objectives\nAnalyze the \"Latest reply message\" provided by the user. You must classify the lead into exactly one of three categories:\n\n1. **INTERESTED**: The lead shows clear positive intent. \n - Examples: \"Tell me more,\" \"Send a link,\" \"I'm interested,\" \"Let's hop on a call,\" \"How much does it cost?\", or asking a specific clarifying question about the offer.\n \n2. **NOT_INTERESTED**: The lead explicitly declines, asks to be removed, or shows hostility.\n - Examples: \"No thanks,\" \"Not for me,\" \"Stop messaging me,\" \"Please unsubscribe,\" \"We already have a solution,\" or \"I'm not the right person\" (without pointing to someone else).\n\n3. **NEEDS_REVIEW**: Use for ambiguous intent, \"soft\" stalls, or complex pivots.\n - **Examples**: \"Circle back in Q4,\" \"Not the right person (no referral),\" \"How do you know me?\", or specific technical questions.\n - **Rule**: If the message is a \"polite maybe,\" a social pivot, or requires a human to navigate a nuanced relationship, default here.\n\n## Rules & Constraints\n- **Response Format**: You must output ONLY the category name in uppercase: `INTERESTED`, `NOT_INTERESTED`, or `NEEDS_REVIEW`. \n- **No Prose**: Do not include explanations, greetings, or punctuation.\n- **Sentiment over Keywords**: Look for intent. A lead saying \"I'd love to but I'm busy\" should be `NEEDS_REVIEW`, whereas \"I'd love to, send the link\" is `INTERESTED`.\n- **Default**: If you are truly unsure, default to `NEEDS_REVIEW`.\n\n## Classification Logic\n- If the lead asks a question about our offer or product -> `INTERESTED`.\n- If the lead replies positively -> `INTERESTED`.\n- If the lead says \"Not interested\" or \"No\" -> `NOT_INTERESTED`.\n- If the lead says \"Check back in 6 months\" -> `NEEDS_REVIEW`.\n- If the lead asks \"How did you find me?\" -> `NEEDS_REVIEW`."
}
]
},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "9e6aaa2a-6a09-4b1d-b869-5d73a4913f87",
"name": "AI Reply Agent",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
784,
1232
],
"parameters": {
"text": "=Our profile is: {{ $('Preparing Aimfox Fields').item.json.recipient.first_name }} \n\nLatest reply from a lead - {{ $('Preparing Aimfox Fields').item.json.sendername }}:\n\n{{ $('Preparing Aimfox Fields').item.json.replymessage }}\n--------\nWhole conversation:\n\n{{ ($(\"Aggregating messages\").item.json.data || []).map(m => (m.sender?.full_name || \"Unknown\") + \": \" + (m.body || \"[Empty Message]\")).join('\\n\\n') }}\n--------\n",
"batching": {},
"messages": {
"messageValues": [
{
"message": "=## Role & Identity\nYou our AI agent that responds to LinkedIn leads for n8nlab.io. You are communicating directly with a prospect on LinkedIn. \n\nYour sole output must be the raw, direct text of your reply to the prospect. Do not include any conversational filler to the user, introduction markdown, brackets, greetings to the AI, or meta-commentary (e.g., Do NOT write \"Here is the response:\" or \"Message:\").\n\n## Core Philosophy (For Context Only)\nWe do not sell features; we eliminate operational bottlenecks using n8n. We build custom integrations, CRM syncs, and AI automation for sales ops and marketing teams. Do not dump this context into your replies; use it only to understand what we do.\n\n## Objectives\n2. **Be Helpful, Not Salesy**: Do not brag about n8n Lab stats, metrics, or architecture patterns. \n3. **The Micro-CTA**: Keep the conversation moving forward with a low-friction question at the end.\n\n## Tone & Writing Style (The LinkedIn \"Mobile Executive\" Vibe)\n- **Sentence Count & Length**: Keep it short, ranging from 1 to 2 sentences maximum. If a short single sentence is enough to answer them, stop there. \n- **Sentence Spacing**: Use exactly one new row after a line before starting the next sentence to keep the message structure clean and natural.\n- **Punctuation Lockdown**: Never use em-dashes (\u2014) or en-dashes (\u2013). Use if commas if needed to separate thoughts. Never use more than one exclamation mark. No emojis, no bullet points, and no bold text, no dots.\n- **The \"Unpolished\" Human Touch**: Write like a busy founder texting a colleague from a phone. Grammatically correct but relaxed and unforced. \n- **Absolute No-Fly Zone**: Never use robotic email openings (\"Hi [Name], I hope this finds you well\", \"Thanks for connecting!\"). Dive straight into the point. Do not use corporate fluff (\"streamline\", \"synergy\", \"supercharge\", \"bespoke\", \"tailored to your exact ops\"). No formal sign-offs (\"Best regards\", \"Sincerely\").\n\n## Operational Knowledge Base (How to speak about what we do)\n- **What We Do**: If asked what we do, keep it simple. We build AI workflows for business ops, sales, marketing...\n\n## Guardrails\n- **CRITICAL**: Output ONLY the exact message to be sent to the prospect. If you output anything else, the automation breaks.\n- **Value Over Velocity**: Never say you are \"just checking in\" or \"following up.\" Always answer their specific point.\n\n## Example replies:\n\nlead-\nI appreciate it, Nemanja. \n\nAre these workflows easy to use even if you're not super technical? \n\nYou-\n\nMostly yes, you can follow the notes on the side and ofc be free to reach out if you need help. \n\nWhat's your experience with n8n? "
}
]
},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "40e3c571-7c49-4ed8-ab72-c56b30374aae",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2064,
1248
],
"parameters": {
"color": 7,
"width": 502,
"height": 432,
"content": "## 0. Trigger & Initialization\nReceives incoming payload data from the Aimfox webhook and maps the initial fields."
},
"typeVersion": 1
},
{
"id": "30d8edae-0846-450d-9b3f-c9957a468b01",
"name": "Preparing Aimfox Fields",
"type": "n8n-nodes-base.set",
"position": [
-1712,
1424
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a1bd6f48-d9fa-46fa-a39f-b5d806e628d4",
"name": "replymessage",
"type": "string",
"value": "={{ $json.body.event.body }}"
},
{
"id": "6782f58f-b6f6-40e4-bcfb-9dc0ae324ef9",
"name": "sender.public_identifier",
"type": "string",
"value": "={{ $json.body.event.sender.public_identifier }}"
},
{
"id": "b93e5fcb-a6f3-497e-bf1a-0f7fd627c901",
"name": "sendername",
"type": "string",
"value": "={{ $json.body.event.sender.first_name }} {{ $json.body.event.sender.last_name }}"
},
{
"id": "2944c83e-dc9c-4f69-b678-7da0b8df3ef8",
"name": "sender.email",
"type": "string",
"value": "={{ $json.body.event.sender.email }}"
},
{
"id": "8d464633-eeec-4405-b977-8a735a99938b",
"name": "recipient.first_name",
"type": "string",
"value": "={{ $json.body.event.recipient.first_name }} {{ $json.body.event.recipient.last_name }}"
},
{
"id": "77902213-702b-4bcd-bd63-70153aa48b7c",
"name": "body.event.recipient.id",
"type": "number",
"value": "={{ $json.body.event.recipient.id }}"
},
{
"id": "4fc818cc-dca9-4207-b70b-d16365a03ed0",
"name": "campaign.name",
"type": "string",
"value": "={{ $json.body.event.campaign.name }}"
},
{
"id": "b7a1efec-dcb5-4550-918f-393272ee83d7",
"name": "conversation_urn",
"type": "string",
"value": "={{ $json.body.event.conversation_urn }}"
},
{
"id": "ad718932-3de6-4810-abbf-82d6f6251757",
"name": ".message_urn",
"type": "string",
"value": "={{ $json.body.event.message_urn }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d2208c47-8e8a-4804-b8bb-2e42c287727e",
"name": "Setting messages",
"type": "n8n-nodes-base.set",
"position": [
-944,
1424
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4a5ad230-d862-46ac-bf61-edccb2b06fb5",
"name": "body",
"type": "string",
"value": "={{ $json.body }}"
},
{
"id": "64018022-564f-40fe-ab53-b2a3b6fd7b0b",
"name": "sender.full_name",
"type": "string",
"value": "={{ $json.sender.full_name }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "756b1d52-6e6a-4bf3-b89b-5fda3f682858",
"name": "Formatting messages",
"type": "n8n-nodes-base.code",
"position": [
-704,
1424
],
"parameters": {
"jsCode": "// This code reverses the order of the incoming items \n// so the conversation flows from oldest to newest.\n\nconst items = $input.all();\n\nif (!items || items.length === 0) {\n return [];\n}\n\n// We reverse the array of items to fix the AimFox order\nreturn items.reverse();"
},
"typeVersion": 2
},
{
"id": "a6f4e2d2-a43b-46f1-ba73-0543fe73e3bf",
"name": "Aggregating messages",
"type": "n8n-nodes-base.aggregate",
"position": [
-464,
1424
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "4c331538-bb70-4c46-8d90-0240bca12817",
"name": "Message Routing",
"type": "n8n-nodes-base.switch",
"position": [
48,
1408
],
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "4fd04559-ab91-4a92-ac1c-b245a649dc65",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.text }}",
"rightValue": "INTERESTED"
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7d28b1b7-1f4f-4354-9e2f-58d085a1b843",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.text }}",
"rightValue": "NOT"
}
]
}
},
{
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7963f276-5856-439e-9b2d-50065df11480",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.text }}",
"rightValue": "REVIEW"
}
]
}
}
]
},
"options": {}
},
"typeVersion": 3.4
},
{
"id": "c14ad8cd-aaf9-4375-9785-733f55e1b2a6",
"name": "Random number between 3 and 15",
"type": "n8n-nodes-base.code",
"position": [
336,
1232
],
"parameters": {
"jsCode": "// Generates a random integer between 3 and 15 inclusive\nconst min = 3;\nconst max = 15;\nconst delayMinutes = Math.floor(Math.random() * (max - min + 1)) + min;\n\nreturn [\n {\n json: {\n delay: delayMinutes\n }\n }\n];"
},
"typeVersion": 2
},
{
"id": "1ce88a6f-7a4c-4636-b355-69506d21157c",
"name": "Delay",
"type": "n8n-nodes-base.wait",
"position": [
544,
1232
],
"parameters": {
"amount": "={{ $json.delay }}"
},
"typeVersion": 1.1
},
{
"id": "ca8181d3-72fc-4218-b2c9-00bd9b2c05e3",
"name": "Send message through Aimfox",
"type": "n8n-nodes-base.httpRequest",
"position": [
1136,
1232
],
"parameters": {
"url": "=https://api.aimfox.com/api/v2/accounts/{{ $('Preparing Aimfox Fields').item.json.body.event.recipient.id }}/conversations/{{ $('Preparing Aimfox Fields').item.json.conversation_urn }}",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "message",
"value": "={{ $json.text }}"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "83cc30c7-d90d-4eeb-91df-9f7f0ecd4107",
"name": "Get a conversation through Aimfox",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1456,
1424
],
"parameters": {
"url": "=https://api.aimfox.com/api/v2/accounts/{{ $json.body.event.recipient.id }}/conversations/{{ $json.conversation_urn }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.3
},
{
"id": "c9aff877-9093-4bf6-8505-d2dc6930a25e",
"name": "Notify that the message was sent",
"type": "n8n-nodes-base.slack",
"position": [
1360,
1232
],
"parameters": {
"text": "=\ud83e\udd8a AI sent a message to *{{ $('Preparing Aimfox Fields').item.json.sendername }}*\n\nMessage:\n{{ $('AI Reply Agent').item.json.text }}\n\nView prospect here:\nhttps://www.linkedin.com/in/{{ $('Preparing Aimfox Fields').item.json.sender.public_identifier }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0B4NEHL18T",
"cachedResultName": "test-aimfox-n8n"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "6d6128de-21be-4b1b-bc42-f78897685ce5",
"name": "Notify that the lead is not interested",
"type": "n8n-nodes-base.slack",
"position": [
352,
1568
],
"parameters": {
"text": "=\ud83d\udc4e *{{ $('Preparing Aimfox Fields').item.json.sendername }}* is not interested\n\nReply:\n{{ $('Preparing Aimfox Fields').item.json.replymessage }}\n\nView prospect here:\nhttps://www.linkedin.com/in/{{ $('Preparing Aimfox Fields').item.json.sender.public_identifier }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0B4NEHL18T",
"cachedResultName": "test-aimfox-n8n"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "090de86d-fa55-4c18-8e45-b658255469ec",
"name": "Notify that human review is needed",
"type": "n8n-nodes-base.slack",
"position": [
352,
1840
],
"parameters": {
"text": "=\ud83d\udc40 AI needs a human review for this message from *{{ $('Preparing Aimfox Fields').item.json.sendername }}*\n\nReply:\n{{ $('Preparing Aimfox Fields').item.json.replymessage }}\n\nView prospect here:\nhttps://www.linkedin.com/in/{{ $('Preparing Aimfox Fields').item.json.sender.public_identifier }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0B4NEHL18T",
"cachedResultName": "test-aimfox-n8n"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "c0a56580-46ec-4f9a-aa51-5ae88785708e",
"name": "Splitting out messages",
"type": "n8n-nodes-base.splitOut",
"position": [
-1200,
1424
],
"parameters": {
"options": {},
"fieldToSplitOut": "messages"
},
"typeVersion": 1
},
{
"id": "ffa5885c-91c0-4a26-b692-2f8256c213c1",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
1248
],
"parameters": {
"color": 7,
"width": 1238,
"height": 432,
"content": "## 1. Context Retrieval\nFetches, splits, formats, and aggregates the historic chat log to give the AI context."
},
"typeVersion": 1
},
{
"id": "479e2153-4364-449a-aa65-5fd214b2618a",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-272,
1248
],
"parameters": {
"color": 7,
"width": 438,
"height": 432,
"content": "## 2. Intent Classification\nOpenAI analyzes the lead's intent and routes them down the correct action path."
},
"typeVersion": 1
},
{
"id": "3aa43184-ec7c-4e75-9f27-6abe6337d361",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
208,
1056
],
"parameters": {
"color": 7,
"width": 1382,
"height": 352,
"content": "## 3. Humanized AI Reply\nGenerates a 3-15 min delay to mimic human behavior before crafting the AI response."
},
"typeVersion": 1
},
{
"id": "de2a111a-a67e-41d2-8e3e-33597dbe305c",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
208,
1424
],
"parameters": {
"color": 7,
"width": 422,
"height": 624,
"content": "## 5. Team Notifications\nAlerts the team via Slack if a lead requires manual human review or is marked as not interested."
},
"typeVersion": 1
},
{
"id": "9a6359fa-836a-4c2d-9361-de37d17b3ebe",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1088,
1376
],
"parameters": {
"color": 7,
"width": 208,
"height": 224,
"content": ""
},
"typeVersion": 1
},
{
"id": "5fd26075-2217-40dd-9898-531c9c75eac9",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1520,
1568
],
"parameters": {
"color": 7,
"width": 208,
"height": 224,
"content": ""
},
"typeVersion": 1
},
{
"id": "547aa2a2-2182-47ad-bb86-918e3e3ef421",
"name": "Aimfox Webhook on first reply",
"type": "n8n-nodes-base.webhook",
"position": [
-1968,
1424
],
"parameters": {
"path": "2aaed621-9877-4506-b315-38a9afc4fdad",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "c3b4ef5e-b4f8-49c0-89a4-e4b3a300568a",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2880,
1040
],
"parameters": {
"color": 7,
"width": 736,
"height": 1552,
"content": "# [Aimfox](https://aimfox.com) & [n8n Lab](https://n8nlab.io): AI Agent That Replies to Messages \n\nThis system blueprint, developed by [n8n Lab](https://n8nlab.io) and [Aimfox](https://aimfox.com), introduces an automated, human-like response layer to your LinkedIn outreach campaigns. Instead of letting hot leads sit or manually filtering through rejections, this workflow orchestrates the entire frontline response process using advanced AI logic.\n\n--\n\n## Core Purpose & Value\nThe workflow acts as an intelligent assistant that monitors your campaigns. It immediately checks incoming interest, filters out non-interested prospects, flags complex scenarios for your human team, and drafts tailored, on-brand responses to valid inquiries - all while maintaining a natural, humanized communication pace.\n\n--\n\n## Key Operational Steps\n* **The Campaign First-Reply Trigger:** The workflow triggers *only* on a prospect's first reply within an Aimfox campaign. This is a deliberate design choice to prevent infinite AI messaging loops on subsequent conversations.\n* **Context Aggregation:** It automatically pulls the entire historic conversation thread via the Aimfox API, structuring the raw chat logs so the AI can understand the complete context.\n* **AI Intent Routing:** The AI Message Router reads the inbound message and instantly splits the workflow into three distinct paths:\n * **Interested:** Keeps the lead in the automated loop.\n * **Not Interested:** Drops a quick update in Slack and ends the execution.\n * **Human Review Needed:** Stops the AI and pings Slack so a team member can take over.\n* **Humanized Delay Engine:** For interested leads, the system generates a random delay between 3 and 15 minutes before drafting a reply. This removes the \"instant robot\" giveaway and ensures your outreach looks authentic.\n* **Contextual Response Generation:** The AI Reply Agent combines your conversation history with your specific company details to write a natural, context-aware reply.\n* **Fulfillment & Log:** The message is pushed straight back to LinkedIn via Aimfox's API, and a final Slack notification confirms to your team that the AI successfully handled the reply.\n\n---\n\n## Critical Setup Checklist for Users\nBefore turning this workflow on, ensure you complete these essential configurations:\n\n1. **Configure Your Aimfox Webhook:** You must set up a webhook within your Aimfox dashboard specifically configured to fire only on the first prospect reply.\n2. **Locate Your Account ID & Set Headers:** You need your Account ID to authenticate your requests. Look up your ID through the Aimfox API documentation, or utilize the pre-configured parameters directly inside the template's HTTP nodes to quickly connect your headers.\n3. **Tailor Your Prompts:** The AI agents use placeholder prompts. To make this work for your business, you must change the prompts to reflect your brand's unique tone of voice, offer, and target audience.\n4. **Upgrade to a RAG (Optional):** For highly technical or information-dense industries, we highly recommend connecting a vector database or Knowledge Base (RAG) to the AI Reply Agent so it can fetch precise documentation, pricing, or FAQ sheets dynamically.\n5. **Switch to Production Mode:** The workflow will not continuously monitor live incoming webhooks in test mode. Once your API credentials and prompts are successfully tested, you must toggle the workflow to **Production Mode** to go live."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "9994c3fc-1ea3-43ff-b617-da50aa6f373e",
"connections": {
"Delay": {
"main": [
[
{
"node": "AI Reply Agent",
"type": "main",
"index": 0
}
]
]
},
"AI Reply Agent": {
"main": [
[
{
"node": "Send message through Aimfox",
"type": "main",
"index": 0
}
]
]
},
"Message Routing": {
"main": [
[
{
"node": "Random number between 3 and 15",
"type": "main",
"index": 0
}
],
[
{
"node": "Notify that the lead is not interested",
"type": "main",
"index": 0
}
],
[
{
"node": "Notify that human review is needed",
"type": "main",
"index": 0
}
]
]
},
"Setting messages": {
"main": [
[
{
"node": "Formatting messages",
"type": "main",
"index": 0
}
]
]
},
"AI Message Router": {
"main": [
[
{
"node": "Message Routing",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Message Router",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Reply Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Formatting messages": {
"main": [
[
{
"node": "Aggregating messages",
"type": "main",
"index": 0
}
]
]
},
"Aggregating messages": {
"main": [
[
{
"node": "AI Message Router",
"type": "main",
"index": 0
}
]
]
},
"Splitting out messages": {
"main": [
[
{
"node": "Setting messages",
"type": "main",
"index": 0
}
]
]
},
"Preparing Aimfox Fields": {
"main": [
[
{
"node": "Get a conversation through Aimfox",
"type": "main",
"index": 0
}
]
]
},
"Send message through Aimfox": {
"main": [
[
{
"node": "Notify that the message was sent",
"type": "main",
"index": 0
}
]
]
},
"Aimfox Webhook on first reply": {
"main": [
[
{
"node": "Preparing Aimfox Fields",
"type": "main",
"index": 0
}
]
]
},
"Random number between 3 and 15": {
"main": [
[
{
"node": "Delay",
"type": "main",
"index": 0
}
]
]
},
"Notify that the message was sent": {
"main": [
[]
]
},
"Get a conversation through Aimfox": {
"main": [
[
{
"node": "Splitting out messages",
"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.
httpHeaderAuthopenAiApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow receives first-reply LinkedIn webhook events from Aimfox, fetches the full conversation for context, uses OpenAI to classify lead intent and draft a short reply for interested leads, sends the reply back via Aimfox, and posts outcome notifications to Slack.…
Source: https://n8n.io/workflows/15957/ — 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.
This n8n workflow orchestrates a powerful suite of AI Agents and automations to manage and optimize various aspects of an e-commerce operation, particularly for platforms like Shopify. It leverages La
This workflow transforms natural language queries into research reports through a five-stage AI pipeline. When triggered via webhook (typically from Google Sheets using the companion [](https://gist.g
[](https://www.youtube.com/watch?v=NAn5BSr15Ks) > This workflow connects a Slack chatbot with AI agents and Google Sheets to automate candidate resume evaluation. It extracts resume details, identi
CLINICAINTEGRAL_secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 89 nodes.
my-secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 86 nodes.