8
n8n 中文网amn8n.com

带审批流程的AI广告文案生成器

高级

这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 20 个节点。主要使用 If, Set, Slack, FormTrigger, OpenAi 等节点。 使用OpenAI和Slack审批流程生成Meta和TikTok广告文案

前置要求
  • Slack Bot Token 或 Webhook URL
  • OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "34PvJdDlpImfxGsS",
  "meta": {
    "instanceId": "efe08e2da7cae43f565dfacaafdb0e67025886141ccd3ddbe001880f7b5ecf5b"
  },
  "name": "带审批流程的 AI 广告文案生成器",
  "tags": [],
  "nodes": [
    {
      "id": "1e70ec29-68b3-441b-9e18-3c8cf6d3e999",
      "name": "适用于时尚品牌",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        0,
        0
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=\"You are the “Fashion Brand Copy Strategist,” trained to write subtle, stylish, brand-aligned ad copy for fashion labels. This is not direct-response ecommerce. Your copy should reflect the tone, world, and aesthetics of the brand—not just the product benefits.\nHere’s what you need to know to build a winning ad:\n📌 Brand/Product Info\nWebsite/Product collection: {{ $json['Product Name'] }}\nDescription: {{ $json['Product Page Link'] }}\nKey differentiators (if any): {{ $json['USP - 1 liner'] }}. Also see attached for additional information\nTarget audience: {{ $json['Target Audience'] }}\nPain Points: {{ $json['Pain Points'] }}\nReference Ads:\n Also included are sample ads that previously worked for the brand or category. Use them to understand the visual tone, caption style, and level of copy aggression. (Avoid being too pushy. Fashion = allure, not pressure.) - {{ $json['\\'Proven Winners\\' Ad Samples'] }}\nAnother set of ad copies from competitors for additional data - {{ $json['Ad Copies from Competitors'] }}\n\nCustomer Review - {{ $json['Customer Review (optional)'] }}\n\n⚠️ Key Guidelines to Follow:\nKeep it cool – Never sound desperate for a sale. Cool > Clear.\nLess is more – One-liner captions often perform best. Silence is power.\nBrand comes first – The tone should sound like it’s from the brand’s own Instagram, not a sales rep.\nDirect-response formats (problem → solution) rarely work in fashion.\nVisuals do the heavy lifting – Sometimes, the best copy is no copy. Keep that in mind.\nStay aligned with the fashion ecosystem – If it wouldn’t be seen on a Dior, Moshi, or Reformation ad, don’t say it here.\n✅ Deliverables:\n3–5 ad copy variations (60 characters to 90 words max)\nUse the format: Hook (optional) + Vibe Copy (brand voice) + Optional Tagline (if needed)\nKeep it minimal, editorial, and always in-brand.\n\n{{ $json['Attach Research Brief and other references'] }}\n"
            }
          ]
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "f36aa2d0-cdd9-4604-b6b0-3cc98426cfc7",
      "name": "适用于问题解决型品牌",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        0,
        416
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are the \"Winning-Ad Generator,\" trained to write 3 ad copies designed for Meta or TikTok.\n\n🔹 Format: Hook + Benefits + Call to Action (Casual, benefit-driven, VoC language, fun emojis)\n🔹 Tone: Conversational, playful, Gen Z/Millennial-friendly\n🔹 Output: 3 ad variations, 60–90 words each\n\nHere’s the product info:\n- Product Name: {{ $json['Product Name'] }}\n- Description/Product link: {{ $json['Product Page Link'] }}\n- Target Audience: {{ $json['Target Audience'] }}\n- Pain Points: {{ $json['Pain Points'] }}\n- Unique Selling Point: {{ $json['USP - 1 liner'] }}\n- Optional Customer Review: {{ $json['Customer Review (optional)'] }}\n - Previous successful ads - {{ $json['\\'Proven Winners\\' Ad Samples'] }}\n - Competitors' successful ads - {{ $json['Ad Copies from Competitors'] }}\n - Research Brief and other information - {{ $json['Attach Research Brief and other references'] }}\nUse one of these hook styles for each ad:\n1. Testimonial lead\n2. Pain point or \"ditch the old way\"\n3. Demographic call-out\n\nInclude emojis. End with hype + CTA."
            }
          ]
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "d0f1d89d-c6cc-4a39-b6f7-35d6f90373a0",
      "name": "表单提交时",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -480,
        208
      ],
      "webhookId": "24964cef-aba3-4c93-b56a-3be0af0448ae",
      "parameters": {
        "options": {},
        "formTitle": "Create Ad Copies",
        "formFields": {
          "values": [
            {
              "fieldType": "dropdown",
              "fieldLabel": "Brand Name",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Fashion Brand"
                  },
                  {
                    "option": "Problem-Solution Brand"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "file",
              "fieldLabel": "Attach Research Brief and other references",
              "requiredField": true
            },
            {
              "fieldLabel": "Product Name",
              "requiredField": true
            },
            {
              "fieldLabel": "Product Page Link",
              "placeholder": "Paste product page link here",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Target Audience",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Pain Points"
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "USP - 1 liner",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Customer Review (optional)"
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "'Proven Winners' Ad Samples",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Ad Copies from Competitors",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Create Winning Ad copies in seconds!"
      },
      "typeVersion": 2.2
    },
    {
      "id": "26d3885d-2b2a-4334-9387-7bf0c1de492b",
      "name": "Slack:发送并审核广告文案",
      "type": "n8n-nodes-base.slack",
      "position": [
        608,
        176
      ],
      "webhookId": "0859d0d9-69c7-41a3-b3ea-206adce81ecc",
      "parameters": {
        "select": "channel",
        "message": "=Suggested Ad Copies for {{ $('On form submission').item.json['Product Name'] }} of {{ $('On form submission').item.json['Brand Name'] }}\n\n{{ $json.message.content }}",
        "options": {},
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double",
            "disapproveLabel": "Try again!"
          }
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "b45a3f11-9078-4eb9-b9bf-b4ffcdde47bd",
      "name": "如果:品牌类型",
      "type": "n8n-nodes-base.if",
      "position": [
        -224,
        208
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "87fd45fb-42d7-48d1-b435-48ed158a525e",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json['Brand Name'] }}",
              "rightValue": "Fashion Brand"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "06120531-7647-49d8-9312-42c4e95dadba",
      "name": "如果:广告文案是否批准",
      "type": "n8n-nodes-base.if",
      "position": [
        816,
        176
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "4629180e-de2a-4cf2-b97b-744fdf2140ba",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": "approved"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "613fa585-dc2f-4a7b-b86c-1b21f4181eaa",
      "name": "Slack:恭喜您的广告文案获得批准",
      "type": "n8n-nodes-base.slack",
      "position": [
        2896,
        160
      ],
      "webhookId": "973a98d6-4d56-4d76-bc19-0d48363622bf",
      "parameters": {
        "text": "Congratulations! You now have your Ad Copies for {{ $('On form submission').item.json['Product Name'] }} of {{ $('On form submission').item.json['Brand Name'] }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "706f4e3f-d0c6-423c-9f55-31fc07ffc31a",
      "name": "Slack:接收修订反馈",
      "type": "n8n-nodes-base.slack",
      "position": [
        1056,
        464
      ],
      "webhookId": "b4de3f96-ca54-4a1d-ae13-2a8dc673b2ae",
      "parameters": {
        "select": "channel",
        "message": "Alright! Can you give us some feedback on the ad copies - what is off, what should be changed etc. and we will pass it to chatgpt? Click Respond now!",
        "options": {},
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "operation": "sendAndWait",
        "responseType": "freeText"
      },
      "typeVersion": 2.3
    },
    {
      "id": "b2b9acb7-e8de-4d86-9bf7-465ec2f405f2",
      "name": "OpenAI:修订广告文案",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1760,
        480
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=The initial batch of ad copies for {{ $('If: Type of Brand').item.json['Product Name'] }} of {{ $('If: Type of Brand').item.json['Brand Name'] }} is NOT APPROVED. Our head of marketing is requesting for revision. \n\nHere's the feedback - {{ $json.data.text }}\n\nUse that feedback to generate another batch of 3-5 ad copies.\n\nYou may need the data previously influded on the initial ad request. Here you go:\nInitial Ad copies that needs to be revised - {{\n  $('For Fashion Brands').item?.json?.message?.content || \n  $('For Problem Solution Brands').item?.json?.message?.content\n}}\n\nProduct: {{ $('If: Type of Brand').item.json['Product Name'] }} of {{ $('If: Type of Brand').item.json['Brand Name'] }}\nProduct Link: {{ $('If: Type of Brand').item.json['Product Page Link'] }}\nTarget Audience: {{ $('If: Type of Brand').item.json['Target Audience'] }}\nPain Points: {{ $('If: Type of Brand').item.json['Pain Points'] }}\nUSP:{{ $('If: Type of Brand').item.json['USP - 1 liner'] }}\nCustomer Review: {{ $('If: Type of Brand').item.json['Customer Review (optional)'] }}\nProven Winner Ads:{{ $('If: Type of Brand').item.json['\\'Proven Winners\\' Ad Samples'] }}\nCompetitor winning ads:{{ $('If: Type of Brand').item.json['Ad Copies from Competitors'] }}\nResearch and other notes: {{ $('If: Type of Brand').item.json['Attach Research Brief and other references'][0].filename }}\n\n"
            }
          ]
        }
      },
      "executeOnce": false,
      "typeVersion": 1.8,
      "alwaysOutputData": true
    },
    {
      "id": "55fc1aa6-56a3-44c2-8c78-96783dd38938",
      "name": "Slack:感谢您的反馈",
      "type": "n8n-nodes-base.slack",
      "position": [
        1280,
        256
      ],
      "webhookId": "b93d20ef-3da7-42e9-9148-6a51e3528799",
      "parameters": {
        "text": "Thank you for your feedback... Currently working on the revisions...",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "d2c1f8f5-3208-4da2-9e9d-7a672ab832ec",
      "name": "如果",
      "type": "n8n-nodes-base.if",
      "position": [
        2416,
        480
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "e8632a89-32d4-454f-bc06-8fab551151c6",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.data.approved }}",
              "rightValue": "approved"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2d998128-7307-47e1-b595-370097ac0565",
      "name": "Slack:发送修订后的广告文案",
      "type": "n8n-nodes-base.slack",
      "position": [
        2208,
        480
      ],
      "webhookId": "d64e54b7-6ed5-468f-a155-76f5ed5b03c7",
      "parameters": {
        "select": "channel",
        "message": "=Here's the new version of Ad copies \n\n {{ $json.message.content }}",
        "options": {},
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double",
            "disapproveLabel": "Try again!"
          }
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "227e34be-3865-4451-9385-015c0bd7d589",
      "name": "编辑字段:修订计数器最大为 3",
      "type": "n8n-nodes-base.set",
      "position": [
        1280,
        464
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "90f59bde-b04b-4c41-b578-ca43102f3a29",
              "name": "revisionCount",
              "type": "number",
              "value": "={{ $json[\"revisionCount\"] ? $json[\"revisionCount\"] + 1 : 1 }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "e7694ae4-8525-4158-8793-a57192db5682",
      "name": "如果:继续修订或停止",
      "type": "n8n-nodes-base.if",
      "position": [
        1504,
        464
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c2d54c5b-5e45-4135-b8ed-ada5abfb90ca",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{$json[\"revisionCount\"]}}",
              "rightValue": 3
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "1105ab26-1006-4dba-a9d3-d8112cca9246",
      "name": "Slack:已达到最大修订次数",
      "type": "n8n-nodes-base.slack",
      "position": [
        1760,
        256
      ],
      "webhookId": "1e5ce4c4-dafd-4b1c-952c-912af05ba69b",
      "parameters": {
        "text": "Too many revisions! Sorry, I wont be able to help you anymore. Please check with ChatGPT or Claude. ",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "otherOptions": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "e5633eb5-2b66-43f2-9bb5-ed7aa71f3501",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        -272
      ],
      "parameters": {
        "width": 784,
        "height": 880,
        "content": "# 带审批流程的 AI 广告文案生成器"
      },
      "typeVersion": 1
    },
    {
      "id": "f0d82f05-10e6-4b24-9e8c-a461d052120d",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        336
      ],
      "parameters": {
        "color": 7,
        "height": 80,
        "content": "步骤 1:收集品牌信息和需求"
      },
      "typeVersion": 1
    },
    {
      "id": "0f97bc32-395d-4f68-9f25-0795e30cbddf",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -96
      ],
      "parameters": {
        "color": 7,
        "height": 80,
        "content": "步骤 2:根据品牌类型生成初始广告文案"
      },
      "typeVersion": 1
    },
    {
      "id": "91b9902d-41b8-4594-81d9-d7b0f690546c",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        80
      ],
      "parameters": {
        "color": 7,
        "height": 80,
        "content": "步骤 3:团队审核和批准流程"
      },
      "typeVersion": 1
    },
    {
      "id": "a108d24c-f51e-4c4c-9362-c7e910284f90",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        464
      ],
      "parameters": {
        "color": 7,
        "height": 80,
        "content": "步骤 4:修订循环(最多 3 次迭代)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d3901d5c-3c3f-493a-8d2d-ee72fe9d9294",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Slack: Congrats on your approve Ad Copies",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack: Receive feedback for revision",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If: Type of Brand": {
      "main": [
        [
          {
            "node": "For Fashion Brands",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "For Problem Solution Brands",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "For Fashion Brands": {
      "main": [
        [
          {
            "node": "Slack: Send and Review Ad Copies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "If: Type of Brand",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI: Revise Ad Copies": {
      "main": [
        [
          {
            "node": "Slack: Send Revise Ad Copies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "For Problem Solution Brands": {
      "main": [
        [
          {
            "node": "Slack: Send and Review Ad Copies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If: Continue Revise or Stop": {
      "main": [
        [
          {
            "node": "Slack: Maxed Out Revision Count",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "OpenAI: Revise Ad Copies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack: Send Revise Ad Copies": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If: Ad Copy is Approve or not": {
      "main": [
        [
          {
            "node": "Slack: Congrats on your approve Ad Copies",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Slack: Receive feedback for revision",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack: Send and Review Ad Copies": {
      "main": [
        [
          {
            "node": "If: Ad Copy is Approve or not",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields: Revision Counter Max 3": {
      "main": [
        [
          {
            "node": "If: Continue Revise or Stop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Slack: Receive feedback for revision": {
      "main": [
        [
          {
            "node": "Slack: Thank you for the feedback",
            "type": "main",
            "index": 0
          },
          {
            "node": "Edit Fields: Revision Counter Max 3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - 内容创作, 多模态 AI

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量20
分类2
节点类型6
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Chris Rudy

Chris Rudy

@chrisrudy

DTC Marketing consultant with over 6 years of experience and over $25m in ad spend managed

外部链接
在 n8n.io 查看

分享此工作流