This workflow follows the Agent → 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 →
{
"name": "Github - Auto-reply to comments",
"nodes": [
{
"parameters": {
"content": "# Auto-Reply to Comments\n\n**What this does:** Listens for new Facebook/Instagram comments (via Zernio webhooks), classifies each one with AI, and replies automatically \u2014 except abusive/bait comments (skipped) and sensitive ones (sent to a human on Telegram for approval first).\n\n**High-level flow:**\n```\nWebhook \u2192 Normalize fields \u2192 AI classify\n \u2502\n \u251c\u2500 spam_or_abusive \u2192 Skip (no reply)\n \u251c\u2500 sensitive \u2192 Telegram approval \u2192 Generate Reply (if approved)\n \u2514\u2500 lead/question/praise \u2192 Generate Reply directly\n\nGenerate Reply \u2192 random delay (1-5 min) \u2192 Post reply via Zernio API\n```\n\n**Required credentials** :\n- OpenAI API key\n- Telegram Bot token + chat ID (for sensitive-comment review)\n- Zernio bearer token (to read post context and post replies)",
"height": 820,
"width": 900
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
0,
592
],
"id": "4aed2922-449f-4328-91e2-3127f4b6cb77",
"name": "Sticky - Overview"
},
{
"parameters": {
"content": "### Trigger\n**recieveCommentFromZernio** receives Zernio's `comment.received` event whenever someone comments on a connected Facebook or Instagram post.\n\n**getInfo** flattens the nested payload into flat fields the rest of the workflow uses:\n`comment_id`, `post_id`, `platform`, `comment_content`, `comment_author_name`, `account_id`.\n",
"height": 484,
"width": 572,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
976,
608
],
"id": "5f9fd62a-c369-420a-9395-a3eeced5fc64",
"name": "Sticky - Trigger & Normalize"
},
{
"parameters": {
"content": "### Classification\n**Classify Comment** (AI agent, no tools) reads the comment and returns strict JSON:\n```json\n{ \"category\": \"lead | question | praise | spam_or_abusive | sensitive\", \"reasoning\": \"...\" }\n```\nAll categories and their criteria are customizable \n\n**Parse Classification** (Code node) safely parses that JSON.\n\n\ud83d\udee1\ufe0f **Fail-safe rule:** if the AI's output can't be parsed as valid JSON, category defaults to `sensitive` so it always routes to a human.",
"height": 476,
"width": 508,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1632,
608
],
"id": "ad683800-5e07-4ed8-8973-9f38c6ce45fa",
"name": "Sticky - Classification"
},
{
"parameters": {
"content": "### Routing\n**Route by Category** (Switch node) sends the item down one of three paths based on `category`:\n\n| category | output |\n|---|---|\n| `spam_or_abusive` | \u2192 Skip |\n| `sensitive` | \u2192 Telegram HITL |\n| anything else (fallback) | \u2192 Generate Reply directly |\n\nNo human approval is needed for spam/bait \u2014 it's just dropped. No approval is needed for leads/questions/praise either \u2014 only genuinely sensitive comments go to a human.",
"height": 484,
"width": 452,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2192,
608
],
"id": "eee41e45-201b-4e85-855b-84d9af494d94",
"name": "Sticky - Routing"
},
{
"parameters": {
"content": "### \ud83d\udeab Skip path\nComments classified `spam_or_abusive` dead-end here. No reply is sent, no human is pinged ",
"height": 196,
"width": 444,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2752,
608
],
"id": "98015e3d-af88-4101-818d-57c313935a7d",
"name": "Sticky - Skip Path"
},
{
"parameters": {},
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
2880,
944
],
"id": "6181d1b4-eff7-4baf-a866-048a0e8d2ce4",
"name": "Skip - Abusive or Bait"
},
{
"parameters": {
"content": "### \ud83d\ude4b Human-in-the-loop (sensitive comments)\n**Telegram - Sensitive Review** pauses the workflow (`sendAndWait`) and posts the comment + why it was flagged to a Telegram chat with two buttons:\n\n- \u2705 **Approve** \u2192 the AI generates and posts a reply, same as normal\n- \u274c **Decline** \u2192 dead-ends at \"Declined - No Reply\"; you handle it manually outside n8n\n\nThe **Approved?** IF node reads `$json.data.approved` from Telegram's response to branch.\n",
"height": 324,
"width": 500,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
3328,
1040
],
"id": "941de000-1804-447b-95bb-ab8585d0f844",
"name": "Sticky - Human in the Loop"
},
{
"parameters": {
"operation": "sendAndWait",
"chatId": "=YOUR_TELEGRAM_ID_HERE",
"message": "=\u26a0\ufe0f Sensitive comment needs review\n\nPlatform: {{ $('getInfo').item.json.platform }}\nAuthor: {{ $('getInfo').item.json.comment_author_name }}\nComment: \"{{ $('getInfo').item.json.comment_content }}\"\n\nWhy flagged: {{ $json.reasoning }}\n\nApprove to let the AI reply automatically, or Decline to skip and handle it yourself.",
"approvalOptions": {
"values": {
"approvalType": "double"
}
},
"options": {
"appendAttribution": false
}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
2736,
1216
],
"id": "7c6e926b-32aa-4d21-a21b-44816aa2de2d",
"name": "Telegram - Sensitive Review",
"retryOnFail": true,
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {},
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
3168,
1232
],
"id": "92a8adbc-6a04-45e2-8f56-d89d247d1a38",
"name": "Declined - No Reply"
},
{
"parameters": {
"content": "### \u270d\ufe0f Reply generation\n**Generate Reply** is the same AI agent for every approved path (auto or human-approved).\n\n\nFor `lead` comments, the prompt nudges the AI to invite a DM.",
"height": 260,
"width": 488,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2880,
1968
],
"id": "1ded2a57-a97e-478d-ae82-19e856da7955",
"name": "Sticky - Reply Generation"
},
{
"parameters": {
"content": "### \u23f3 Anti-bot-pattern delay\n**Compute Random Delay** picks a random 60\u2013300 second wait and stores it in `delaySeconds`.\n**Natural Delay** (Wait node) pauses the execution for that long before posting \u2014 so it is less obviously automated.",
"height": 264,
"width": 412,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
3456,
1728
],
"id": "eefdd187-d983-4bfd-9222-10df4c704678",
"name": "Sticky - Delay"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "delay-seconds-id",
"name": "delaySeconds",
"value": "={{ Math.floor(Math.random() * (300 - 60 + 1)) + 60 }}",
"type": "number"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
3520,
1520
],
"id": "0d26983a-4756-496d-8b6a-25155a41e85e",
"name": "Compute Random Delay"
},
{
"parameters": {
"content": "### Post the reply\n**Send Reply** POSTs the final AI-generated text back to Zernio's inbox API, tied to the exact `commentId` and `accountId` captured back in step 1. This is the last node for every non-skipped, non-declined path.",
"height": 264,
"width": 348,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
3920,
1728
],
"id": "fd4c561e-089f-434f-8b16-41e7e2779a9f",
"name": "Sticky - Send Reply"
},
{
"parameters": {
"method": "POST",
"url": "=https://zernio.com/api/v1/inbox/comments/{{ $('getInfo').item.json.post_id }}",
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"accountId\": \"{{ $('getInfo').item.json.account_id }}\",\n \"commentId\": \"{{ $('getInfo').item.json.comment_id }}\",\n \"message\": \"{{ $('Generate Reply1').item.json.output }}\"\n }",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
4048,
1520
],
"id": "99070907-a568-46a3-9312-0b9ada32b444",
"name": "Send Reply",
"retryOnFail": true,
"credentials": {
"httpBearerAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 1
},
"combinator": "and",
"conditions": [
{
"id": "if-approved",
"leftValue": "={{ $json.data.approved }}",
"rightValue": true,
"operator": {
"type": "boolean",
"operation": "equals"
}
}
]
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
2896,
1216
],
"id": "4744fbec-b5f6-43c3-af83-8eeb608996db",
"name": "Approved?1"
},
{
"parameters": {
"promptType": "define",
"text": "=Write a reply to this {{ $('getInfo').first().json.platform }} follower's comment.\n\nUser name: {{ $('getInfo').first().json.comment_author_name }}\nComment content: {{ $('getInfo').first().json.comment_content }}\nDetected category: {{ $('parseClassification').first().json.category }}\n\nIf this is a \"lead\" (someone interested in buying/building something), warmly invite them to send a DM so you can help them directly - don't try to close the sale in the comment.\njust reply naturally like a human being.\n\nRequirements:\n- Keep the reply short\n- Be kind and encouraging\n- Do NOT include any preamble like \"Here is your reply:\" \u2014 return ONLY the reply text",
"options": {
"systemMessage": "You are an expert social media moderator replying on behalf of the page \"YOUR_PAGE_NAME\".\n\nYou will receive the follower's name, their comment, and a detected category (lead, question, praise, or complaint that was human-approved).\n\nWRITE_YOUR_SPECIFICATIONS_HERE \n\n- NO hashtags\n- Use emojis for warmth, matching the platform's typical tone\n- Keep it short\n- Sound human, not like AI wrote it\n- Match the tone of the original comment\n\nOutput ONLY the reply text. No explanations, no preamble, no \"Here is your reply:\"."
}
},
"id": "44d7d0c3-cb02-455d-bd65-10aa8de54f02",
"name": "Generate Reply1",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3.1,
"position": [
3072,
1520
],
"retryOnFail": true
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "55fdb8e1-c405-4dc1-bece-1efacf1c616a",
"name": "comment_id",
"value": "={{ $json.body.comment.id }}",
"type": "string"
},
{
"id": "8a7b236c-95ee-4139-bc31-520fec493bb6",
"name": "post_id",
"value": "={{ $json.body.comment.platformPostId }}",
"type": "string"
},
{
"id": "2b1658c3-0c23-4fca-a0da-4c1a9f41bb66",
"name": "platform",
"value": "={{ $json.body.comment.platform }}",
"type": "string"
},
{
"id": "621619ab-279f-4843-b531-510c4b4b2a76",
"name": "comment_content",
"value": "={{ $json.body.comment.text }}",
"type": "string"
},
{
"id": "18cb58ec-89d6-4eb4-a7ba-d5eda891a4c3",
"name": "comment_author_name",
"value": "={{ $json.body.comment.author.name || $json.body.comment.author.username }}",
"type": "string"
},
{
"id": "e0875c2b-6d12-469c-9a33-7bb16ac24ff6",
"name": "account_id",
"value": "={{ $json.body.account.id }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1344,
1216
],
"id": "d473fae9-2cec-4479-85ca-ee71c83689bc",
"name": "getInfo"
},
{
"parameters": {
"content": "",
"height": 276,
"width": 572,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
976,
1120
],
"id": "d83a5431-0f59-4148-8cf9-8d1f8a309f3a",
"name": "Sticky - Trigger & Normalize1"
},
{
"parameters": {
"httpMethod": "POST",
"path": "reply-to-comments",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
1072,
1216
],
"id": "18304af8-a5e3-49ca-ae37-665936819ccf",
"name": "recieveCommentFromZernio"
},
{
"parameters": {
"content": "",
"height": 276,
"width": 508,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
1632,
1120
],
"id": "f72b8280-6003-4b1f-a92c-07b9cc32bf12",
"name": "Sticky - Trigger & Normalize2"
},
{
"parameters": {
"jsCode": "let category = 'sensitive';\nlet reasoning = '';\n\ntry {\n const raw = ($input.item.json.output || $input.item.json.text || '').toString();\n const cleaned = raw.replace(/```json|```/g, '').trim();\n const parsed = JSON.parse(cleaned);\n const allowed = ['spam_or_abusive', 'sensitive', 'lead', 'question', 'praise'];\n category = allowed.includes(parsed.category) ? parsed.category : 'sensitive';\n reasoning = parsed.reasoning || '';\n} catch (e) {\n // Fail safe: if we can't parse the classification, route to a human rather than\n // auto-skipping or auto-replying.\n category = 'sensitive';\n reasoning = 'Could not parse classifier output - routed to human review';\n}\nlet post_id = $('getInfo').first().json.post_id;\nreturn [{ json: { category, reasoning, post_id } }];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2000,
1216
],
"id": "f3f08ab1-829f-4fca-8e3b-1f1c251c97f4",
"name": "parseClassification"
},
{
"parameters": {
"content": "",
"height": 276,
"width": 444,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2192,
1120
],
"id": "67ec08f4-19a5-43f8-9d3c-a0c85dadef78",
"name": "Sticky - Trigger & Normalize3"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "sw-cond-skip",
"leftValue": "={{ $json.category }}",
"rightValue": "spam_or_abusive",
"operator": {
"type": "string",
"operation": "equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Skip"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "sw-cond-sensitive",
"leftValue": "={{ $json.category }}",
"rightValue": "sensitive",
"operator": {
"type": "string",
"operation": "equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Sensitive - HITL"
}
]
},
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "Normal - Auto Reply"
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
2320,
1200
],
"id": "99fa0938-7709-43aa-baa9-b06f3e935d59",
"name": "routeByCategory"
},
{
"parameters": {
"content": "",
"height": 276,
"width": 444,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2752,
832
],
"id": "3397311f-b90a-4291-b60b-a759280ecfc7",
"name": "Sticky - Trigger & Normalize4"
},
{
"parameters": {
"content": "",
"height": 276,
"width": 544,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
2864,
1424
],
"id": "b2b371db-48bb-4d84-a9b1-d44aa3ff6f83",
"name": "Sticky - Trigger & Normalize5"
},
{
"parameters": {
"model": {
"__rl": true,
"value": "gpt-4.1-mini",
"mode": "list",
"cachedResultName": "gpt-4.1-mini"
},
"builtInTools": {},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.3,
"position": [
3072,
1808
],
"id": "7127cbb8-bc35-409d-9eef-0bc9a66a1a67",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"content": "",
"height": 276,
"width": 412,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
3456,
1424
],
"id": "12ed0a05-3e59-4aec-a8bc-9fe137c68baa",
"name": "Sticky - Trigger & Normalize6"
},
{
"parameters": {
"content": "",
"height": 276,
"width": 348,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
3920,
1424
],
"id": "462c3b59-deb0-4bb3-81d2-aa76c619a026",
"name": "Sticky - Trigger & Normalize7"
},
{
"parameters": {
"amount": "={{ $json.delaySeconds }}"
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
3744,
1520
],
"id": "fb9f1a2b-c321-4cde-81a5-368513681783",
"name": "Natural Delay"
},
{
"parameters": {
"content": "",
"height": 580,
"width": 1380
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
0,
0
],
"id": "ef3813fc-211b-4cf2-aad8-d5194d1f8dcd",
"name": "Sticky - Overview1"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "1d57ffeb-f663-4f09-9039-b454381de035",
"name": "post_description",
"value": "={{ $json.post.content }}",
"type": "string"
},
{
"id": "2ff40a15-7be0-4860-ab13-65c8d7ce88b0",
"name": "image_url",
"value": "",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
2880,
1520
],
"id": "3ab6959a-b34a-4175-ade7-84770457949d",
"name": "Edit Fields"
},
{
"parameters": {
"promptType": "define",
"text": "=platform: {{ $json.platform }}\nauthor: {{ $json.comment_author_name }}\ncomment: {{ $json.comment_content }}",
"options": {
"systemMessage": "You are a comment triage classifier for the Facebook/Instagram page \"YOUR_PAGE_NAME\".\n\nClassify the incoming comment into EXACTLY one category:\n- \"spam_or_abusive\": spam, scams, hate speech, harassment, explicit content, bot bait, irrelevant promo links\n- \"sensitive\": complaints, refund/payment/legal issues, a bad experience, angry tone, or anything you are not fully confident replying to safely\n- \"lead\": interest in buying, building, pricing, or working with the company. \n- \"question\": a genuine question that is not a lead\n- \"praise\": a positive comment/compliment with no question\n\nMODIFY_CATEGORY_AND_CRITERIA_AS_YOU_SEE_FIT\n\nRespond with ONLY valid JSON, no markdown fences, no explanation:\n{\"category\": \"one_of_the_above\", \"reasoning\": \"one short sentence\"}"
}
},
"id": "7824aa15-236d-47ac-b44a-7997e0328d1d",
"name": "Classify Comment",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3.1,
"position": [
1680,
1216
],
"retryOnFail": true
},
{
"parameters": {
"model": {
"__rl": true,
"value": "gpt-4.1-mini",
"mode": "list",
"cachedResultName": "gpt-4.1-mini"
},
"builtInTools": {},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.3,
"position": [
1680,
1424
],
"id": "80596d54-e2b0-4467-add4-75ca50c5cbde",
"name": "OpenAI",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Telegram - Sensitive Review": {
"main": [
[
{
"node": "Approved?1",
"type": "main",
"index": 0
}
]
]
},
"Compute Random Delay": {
"main": [
[
{
"node": "Natural Delay",
"type": "main",
"index": 0
}
]
]
},
"Approved?1": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
],
[
{
"node": "Declined - No Reply",
"type": "main",
"index": 0
}
]
]
},
"Generate Reply1": {
"main": [
[
{
"node": "Compute Random Delay",
"type": "main",
"index": 0
}
]
]
},
"getInfo": {
"main": [
[
{
"node": "Classify Comment",
"type": "main",
"index": 0
}
]
]
},
"recieveCommentFromZernio": {
"main": [
[
{
"node": "getInfo",
"type": "main",
"index": 0
}
]
]
},
"parseClassification": {
"main": [
[
{
"node": "routeByCategory",
"type": "main",
"index": 0
}
]
]
},
"routeByCategory": {
"main": [
[
{
"node": "Skip - Abusive or Bait",
"type": "main",
"index": 0
}
],
[
{
"node": "Telegram - Sensitive Review",
"type": "main",
"index": 0
}
],
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate Reply1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Natural Delay": {
"main": [
[
{
"node": "Send Reply",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Generate Reply1",
"type": "main",
"index": 0
}
]
]
},
"Classify Comment": {
"main": [
[
{
"node": "parseClassification",
"type": "main",
"index": 0
}
]
]
},
"OpenAI": {
"ai_languageModel": [
[
{
"node": "Classify Comment",
"type": "ai_languageModel",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate"
},
"versionId": "1a81ecb1-61f6-4673-ab23-07c396ee3f79",
"nodeGroups": [],
"id": "3w6flLEnF7bWhd2n",
"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.
httpBearerAuthopenAiApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Github - Auto-reply to comments. Uses telegram, httpRequest, agent, lmChatOpenAi. Webhook trigger; 33 nodes.
Source: https://github.com/mojtabamahdy2-cloud/comment_auto-reply/blob/main/Auto-reply_to_comments.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.
leads. Uses supabase, gmail, formTrigger, httpRequest. Webhook trigger; 62 nodes.
🧠 Gwen – The AI Voice Marketing Agent Gwen is your intelligent voice-powered marketing assistant built in n8n. She combines the power of OpenAI, ElevenLabs, and automation workflows to handle content
|Overview |Sample| |-|-| |This template is the first of its kind: it automatically generates both the caption and the image for your Instagram posts by analysing your existing feed, with zero spreadsh
🔍🛠️Perplexity Researcher to HTML Web Page. Uses stickyNote, lmChatOpenAi, outputParserStructured, respondToWebhook. Webhook trigger; 47 nodes.
Transform simple queries into comprehensive, well-structured content with this n8n workflow that leverages Perplexity AI for research and GPT-4 for content transformation. Create professional blog pos