ランディングページ -> NDA Word文書(Docx) -> メール
中級
これは自動化ワークフローで、10個のノードを含みます。主にSet, Html, Webhook, EmailSend, RespondToWebhookなどのノードを使用。 ウェブフォームの入力に基づいてカスタムNDA文書を生成し、Gmailでメール送信する
前提条件
- •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フォームの自動処理、Webフォームおよびメール送信を使用
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リサーチ
高度なマルチソースAIリサーチの実装(Bright Data、OpenAI、Redis使用)
If
Set
Code
+
If
Set
Code
43 ノードDaniel Shashko
市場調査