lander 페이지 -> NDA Word 문서(Docx) -> 이메일
중급
이것은자동화 워크플로우로, 10개의 노드를 포함합니다.주로 Set, Html, Webhook, EmailSend, RespondToWebhook 등의 노드를 사용하며. 웹 폼에서 제출한 내용을 기반으로 맞춤형 NDA 문서를 생성하고 이메일로 발송합니다.
사전 요구사항
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
카테고리
-
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "kKj0sdENnEH9DPqg",
"meta": {
"instanceId": "b503899dfd9ae32bbf8e1f446a1f2c9b3c59f80c79b274c49b1606b7ae9579e1",
"templateCredsSetupCompleted": true
},
"name": "Landingpage -> NDA Word Document (Docx) -> Email",
"tags": [],
"nodes": [
{
"id": "4b6806d1-ef93-4132-9236-ac1a3e15f91d",
"name": "이메일 발송",
"type": "n8n-nodes-base.emailSend",
"position": [
-112,
-48
],
"webhookId": "5a491616-916d-41a0-a7bb-8e21dcfc33b2",
"parameters": {
"text": "Hello,\n\nHere is the requested NDA form.\n\nBest\nHenrik",
"options": {
"attachments": "data"
},
"subject": "NDA",
"toEmail": "test@testmail.com",
"fromEmail": "test@test.de",
"emailFormat": "text"
},
"credentials": {
"smtp": {
"id": "vvY03KbEvsdTVMXI",
"name": "SMTP account"
}
},
"typeVersion": 2.1
},
{
"id": "4f0d8d76-8d96-470e-b30f-ec7bfc140517",
"name": "FormData 엔드포인트",
"type": "n8n-nodes-base.webhook",
"position": [
-896,
-48
],
"webhookId": "e79fe93f-4909-4d1e-89fd-ec744edfd5e9",
"parameters": {
"path": "2f94bacb-f629-4053-a204-cab2ac8fd326",
"options": {
"responseData": "<h1>Hello World</h1>"
},
"httpMethod": "POST"
},
"typeVersion": 2.1
},
{
"id": "92960779-4b49-47a1-b934-000a64f922b6",
"name": "랜딩페이지 HTML",
"type": "n8n-nodes-base.html",
"position": [
-352,
-448
],
"parameters": {
"html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Request a NDA</title>\n <script src=\"https://cdn.tailwindcss.com\"></script>\n</head>\n<body class=\"bg-gray-50 min-h-screen flex flex-col items-center justify-center p-6\">\n\n <div class=\"w-full max-w-md bg-white shadow-xl rounded-2xl p-8\">\n <h1 class=\"text-2xl font-semibold text-gray-800 mb-4 text-center\">\n Request a NDA\n </h1>\n <p class=\"text-gray-500 text-center mb-6\">\n Fill in your personal details to receive your NDA.\n </p>\n\n <!-- Success Message -->\n <div id=\"success-message\" class=\"hidden bg-green-50 border border-green-200 text-green-700 p-4 rounded-xl text-center mb-4\">\n ✅ Your request has been successfully submitted!\n </div>\n\n <!-- Error Message -->\n <div id=\"error-message\" class=\"hidden bg-red-50 border border-red-200 text-red-700 p-4 rounded-xl text-center mb-4\">\n ❌ Something went wrong. Please try again.\n </div>\n\n <!-- Form -->\n <form id=\"quote-form\" class=\"space-y-4\">\n <div>\n <label class=\"block text-gray-700 font-medium mb-1\">First Name</label>\n <input\n type=\"text\"\n name=\"firstName\"\n required\n class=\"w-full border border-gray-300 rounded-xl px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n />\n </div>\n\n <div>\n <label class=\"block text-gray-700 font-medium mb-1\">Last Name</label>\n <input\n type=\"text\"\n name=\"lastName\"\n required\n class=\"w-full border border-gray-300 rounded-xl px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n />\n </div>\n\n <div>\n <label class=\"block text-gray-700 font-medium mb-1\">Address</label>\n <input\n type=\"text\"\n name=\"address\"\n required\n class=\"w-full border border-gray-300 rounded-xl px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n />\n </div>\n\n <div>\n <label class=\"block text-gray-700 font-medium mb-1\">House No.</label>\n <input\n type=\"text\"\n name=\"houseNo\"\n required\n class=\"w-full border border-gray-300 rounded-xl px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n />\n </div>\n\n <div>\n <label class=\"block text-gray-700 font-medium mb-1\">Postal Code</label>\n <input\n type=\"text\"\n name=\"postalCode\"\n required\n class=\"w-full border border-gray-300 rounded-xl px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n />\n </div>\n\n <div>\n <label class=\"block text-gray-700 font-medium mb-1\">City</label>\n <input\n type=\"text\"\n name=\"city\"\n required\n class=\"w-full border border-gray-300 rounded-xl px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n />\n </div>\n\n <div>\n <label class=\"block text-gray-700 font-medium mb-1\">Country</label>\n <input\n type=\"text\"\n name=\"country\"\n required\n class=\"w-full border border-gray-300 rounded-xl px-4 py-2 focus:ring-2 focus:ring-blue-500 focus:outline-none\"\n />\n </div>\n\n <button\n type=\"submit\"\n id=\"submit-btn\"\n class=\"w-full bg-blue-600 text-white py-3 rounded-xl hover:bg-blue-700 transition-all\"\n >\n Submit Request\n </button>\n </form>\n </div>\n\n <footer class=\"mt-6 text-gray-400 text-sm\">\n © <span id=\"year\"></span> SecureQuote Insurance Co.\n </footer>\n\n <script>\n document.getElementById('year').textContent = new Date().getFullYear();\n\n const form = document.getElementById('quote-form');\n const successMsg = document.getElementById('success-message');\n const errorMsg = document.getElementById('error-message');\n const submitBtn = document.getElementById('submit-btn');\n\n form.addEventListener('submit', async function (e) {\n e.preventDefault();\n successMsg.classList.add('hidden');\n errorMsg.classList.add('hidden');\n submitBtn.disabled = true;\n submitBtn.textContent = \"Submitting...\";\n\n const formData = {\n firstName: form.firstName.value,\n lastName: form.lastName.value,\n address: form.address.value,\n houseNo: form.houseNo.value,\n postalCode: form.postalCode.value,\n city: form.city.value,\n country: form.country.value,\n };\n\n try {\n const response = await fetch(\"{{ $json.FormEndpoint }}\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(formData),\n });\n\n if (response.ok) {\n form.reset();\n successMsg.classList.remove('hidden');\n } else {\n throw new Error(\"Response not OK\");\n }\n } catch (err) {\n console.error(\"Form submit error:\", err);\n errorMsg.classList.remove('hidden');\n }\n\n submitBtn.disabled = false;\n submitBtn.textContent = \"Submit Request\";\n });\n </script>\n</body>\n</html>\n"
},
"typeVersion": 1.2
},
{
"id": "dc09be11-d81d-44ce-98fe-3d4c047a5e11",
"name": "랜딩페이지 엔드포인트",
"type": "n8n-nodes-base.webhook",
"position": [
-880,
-448
],
"webhookId": "2f94bacb-f629-4053-a204-cab2ac8fd326",
"parameters": {
"path": "2f94bacb-f629-4053-a204-cab2ac8fd326",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 2.1
},
{
"id": "529ff102-0807-4d68-9f6b-1ebe2b1d3758",
"name": "Respond to Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
-112,
-448
],
"parameters": {
"options": {},
"respondWith": "text",
"responseBody": "={{ $json.html }}"
},
"typeVersion": 1.4
},
{
"id": "5540ef36-3fb0-41a4-bed8-d65a5e7d36f1",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-944,
-560
],
"parameters": {
"width": 1024,
"height": 320,
"content": "## Landingpage Server\nYou can access the landing page at the webhook address."
},
"typeVersion": 1
},
{
"id": "cbdf6a73-557f-4037-8752-61a66bc06f2d",
"name": "폼 엔드포인트 설정",
"type": "n8n-nodes-base.set",
"position": [
-624,
-448
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "509804fc-dbfa-472d-87d3-1f683e146856",
"name": "FormEndpoint",
"type": "string",
"value": "={{ $json.webhookUrl }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "519070ad-6fab-4008-93c9-9fd904d3d92c",
"name": "HTML to Docx",
"type": "@custom-js/n8n-nodes-pdf-toolkit.Html2Docx",
"position": [
-352,
-48
],
"parameters": {
"htmlInput": "={{ $json.html }}"
},
"credentials": {
"customJsApi": {
"id": "BFGbk0a71fKWY967",
"name": "Coding Service"
}
},
"typeVersion": 1
},
{
"id": "02519104-5034-4e4c-845a-c8a56175aa83",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-944,
-144
],
"parameters": {
"width": 1024,
"height": 320,
"content": "## FormData Endpoint\nThe data for the form is received here from the landing page."
},
"typeVersion": 1
},
{
"id": "471c6774-3892-4ed3-9703-aff9b05ff2d2",
"name": "NDA (HTML 버전)",
"type": "n8n-nodes-base.html",
"position": [
-608,
-48
],
"parameters": {
"html": "<!DOCTYPE html>\n<html lang=\"de\">\n<head>\n <meta charset=\"UTF-8\">\n <title>Non-Disclosure Agreement</title>\n <style>\n body {\n font-family: 'Times New Roman', Times, serif;\n font-size: 12pt;\n line-height: 1.5;\n color: #000000;\n }\n .header p {\n margin: 0;\n padding: 0;\n line-height: 1.4;\n }\n h1 {\n text-align: center;\n font-size: 16pt;\n font-weight: bold;\n }\n p {\n margin: 0 0 0.5cm 0;\n }\n ul {\n list-style-type: disc;\n padding-left: 40px;\n }\n .clause-title {\n font-weight: bold;\n }\n </style>\n</head>\n<body>\n <div>\n <div class=\"header\" style=\"padding-bottom: 1cm; border-bottom: 1px solid #000; margin-bottom: 2cm;\">\n <p><b>SecureQuote Insurance Co.</b></p>\n <p>1234 Main Street, London, United Kingdom</p>\n <p>Telefon: +44 20 1234 5678 | E-Mail: contact@securequote.com</p>\n </div>\n\n <h1>Non-Disclosure Agreement (NDA)</h1>\n\n <p>This Non-Disclosure Agreement (“Agreement”) is entered into on <b>{{ $json.body.currentDate }}</b> between:</p>\n <p>\n <b>{{ $json.body.firstName }} {{ $json.body.lastName }}</b><br>\n {{ $json.body.address }} {{ $json.body.houseNo }}<br>\n {{ $json.body.postalCode }} {{ $json.body.city }}<br>\n {{ $json.body.country }}<br>\n (hereinafter referred to as “Recipient”)\n </p>\n <p>and</p>\n <p>\n <b>SecureQuote Insurance Co.</b><br>\n (hereinafter referred to as “Discloser”)\n </p>\n <p>The parties agree as follows:</p>\n\n <div>\n <p class=\"clause-title\">1. Definition of Confidential Information</p>\n <p>“Confidential Information” means all non-public information disclosed by the Discloser to the Recipient, whether in written, oral, electronic, or any other form, including but not limited to business plans, strategies, financial data, customer information, and technical details.</p>\n </div>\n <div>\n <p class=\"clause-title\">2. Obligations of the Recipient</p>\n <p>The Recipient agrees to:\n <ul>\n <li>Maintain the confidentiality of the Confidential Information;</li>\n <li>Not disclose it to any third party without prior written consent from the Discloser;</li>\n <li>Use the information solely for the purpose agreed upon by both parties.</li>\n </ul>\n </p>\n </div>\n <div>\n <p class=\"clause-title\">3. Exclusions</p>\n <p>The obligations under this Agreement shall not apply to information that:\n <ul>\n <li>Is or becomes publicly available without breach of this Agreement;</li>\n <li>Was lawfully received from a third party without restriction;</li>\n <li>Was independently developed without reference to the Confidential Information.</li>\n </ul>\n </p>\n </div>\n <div>\n <p class=\"clause-title\">4. Duration</p>\n <p>This Agreement shall commence on the date above and remain in effect for a period of two (2) years, unless terminated earlier by mutual written consent.</p>\n </div>\n <div>\n <p class=\"clause-title\">5. Return or Destruction</p>\n <p>Upon termination of this Agreement or upon request, the Recipient shall promptly return or destroy all Confidential Information.</p>\n </div>\n <div>\n <p class=\"clause-title\">6. Governing Law</p>\n <p>This Agreement shall be governed by and construed in accordance with the laws of England and Wales.</p>\n </div>\n \n <br><br>\n\n <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">\n <tr>\n <td width=\"50%\" valign=\"top\">\n <hr>\n <b>{{ $json.body.firstName }} {{ $json.body.lastName }}</b><br>\n Recipient\n </td>\n <td width=\"50%\" valign=\"top\">\n <hr>\n <b>SecureQuote Insurance Co.</b><br>\n Discloser\n </td>\n </tr>\n </table>\n </div>\n</body>\n</html>"
},
"typeVersion": 1.2
}
],
"active": true,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "380216fa-ff30-4bf5-9fef-55bad9c7775a",
"connections": {
"519070ad-6fab-4008-93c9-9fd904d3d92c": {
"main": [
[
{
"node": "4b6806d1-ef93-4132-9236-ac1a3e15f91d",
"type": "main",
"index": 0
}
]
]
},
"4f0d8d76-8d96-470e-b30f-ec7bfc140517": {
"main": [
[
{
"node": "471c6774-3892-4ed3-9703-aff9b05ff2d2",
"type": "main",
"index": 0
}
]
]
},
"cbdf6a73-557f-4037-8752-61a66bc06f2d": {
"main": [
[
{
"node": "92960779-4b49-47a1-b934-000a64f922b6",
"type": "main",
"index": 0
}
]
]
},
"471c6774-3892-4ed3-9703-aff9b05ff2d2": {
"main": [
[
{
"node": "519070ad-6fab-4008-93c9-9fd904d3d92c",
"type": "main",
"index": 0
}
]
]
},
"92960779-4b49-47a1-b934-000a64f922b6": {
"main": [
[
{
"node": "529ff102-0807-4d68-9f6b-1ebe2b1d3758",
"type": "main",
"index": 0
}
]
]
},
"dc09be11-d81d-44ce-98fe-3d4c047a5e11": {
"main": [
[
{
"node": "cbdf6a73-557f-4037-8752-61a66bc06f2d",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
랜딩 페이지 -> PDF 양식 작성 -> 이메일
웹 양식 및 이메일 발송을 사용한 자동화된 PDF 양식 처리
Set
Html
Webhook
+
Set
Html
Webhook
12 노드CustomJS
Google 스프레드시트 -> 인보이스 생성 -> 이메일
Airtable 및 CustomJS PDF 생성기를 활용한 인보이스 자동 생성 및 이메일 발송
Set
Airtable
Aggregate
+
Set
Airtable
Aggregate
18 노드CustomJS
CustomJS API를 사용하여 PDF 발행서 생성
CustomJS API를 사용하여 PDF 발행서 생성
Set
Code
Webhook
+
Set
Code
Webhook
5 노드CustomJS
금융
재무 및 회계를 위한 AI 기반 송장 알림 및 결제 추적기
재무 및 회계를 위해 설계된 AI 기반 송장 알림 및 결제 추적기
If
Set
Code
+
If
Set
Code
35 노드Oneclick AI Squad
청구서 처리
잠재 고객 자격 평가 및 라우팅 엔진
AI 기반 잠재 고객 자격 평가 및 라우팅: OpenAI, Slack 및 Airtable 활용
If
Set
Slack
+
If
Set
Slack
17 노드Xavier Tai
콘텐츠 제작
Bright Data, OpenAI 및 Redis 기반 고급 다중 소스 AI 연구
사용Bright Data、OpenAI및Redis进行高级多源AI研究
If
Set
Code
+
If
Set
Code
43 노드Daniel Shashko
시장 조사