AI와 WAVE를 사용하여 법률 웹사이트 접근성 선언서 생성
중급
이것은AI, Marketing분야의자동화 워크플로우로, 13개의 노드를 포함합니다.주로 Set, Code, Html, Gmail, HttpRequest 등의 노드를 사용하며인공지능 기술을 결합하여 스마트 자동화를 구현합니다. AI와 WAVE를 사용하여 법률 웹사이트 접근성 선언 생성
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Gemini API Key
사용된 노드 (13)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "4970c3bf8a443f2d4c35b388ef96894f5ae52e32fa83fc8da098b824d939fbd9"
},
"nodes": [
{
"id": "7d80a2b6-225b-41c3-9723-b1c533176dcd",
"name": "웹사이트 HTML 가져오기",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1680,
180
],
"parameters": {
"url": "={{ $json['URL to analyze'] }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "598f30d8-ca38-469e-978b-c521b2163e6c",
"name": "WAVE 리포트 가져오기",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1420,
180
],
"parameters": {
"url": "=https://wave.webaim.org/api/request?key={{ $('CHANGE THESE: dependencies').item.json.wave_api_key }}&reporttype=4&url={{ $('CHANGE THESE: dependencies').item.json['URL to analyze'] }}\n",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "0e6c3a12-ad82-4b84-85b2-b0d5a3ebe055",
"name": "구조화된 출력 파서",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-600,
400
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"Accessibility Statement\": {\n\t\t\t\"type\": \"string\",\n \"description\": \"output the HTML code for the accessibility statement here. The statement should use the specified language\"\n\t\t}\n\t}\n}"
},
"typeVersion": 1.2
},
{
"id": "3ceda0aa-662d-49c8-a009-520889c54332",
"name": "접근성 선언문 생성기",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-860,
180
],
"parameters": {
"text": "=You are an expert legal-tech assistant. Your specialty is European digital accessibility law, specifically the **European Accessibility Act (EAA)** and the **Web Content Accessibility Guidelines (WCAG)**.\n\nYour task is to generate a formal **\"Accessibility Statement\"**.\n\nThe final statement must be written **in English** and formatted as a **clean, professional HTML document**. The content must be factually based on the provided data and compliant with the EAA's requirements.\n\n\nPlease generate a compliant Accessibility Statement by following these instructions precisely.\n\n**PART 1: INPUT DATA**\n\nYou will use the following information to construct the statement:\n\n* **Company Name:** `{{ $('CHANGE THESE: dependencies').item.json['Company Name'] }}`\n* **Company Country:** `{{ $('CHANGE THESE: dependencies').item.json['Country of the Company (used to apply local law)'] }}`\n* **Website URL:** `{{ $('CHANGE THESE: dependencies').item.json['URL to analyze'] }}`\n* **Accessibility Scan Results:** A JSON list of all accessibility problems detected on the website.\n ```json\n {{ $('Map WAVE Report Items to Website selectors.').item.json.analysisItems.toJsonString() }}\n ```\n\n**PART 2: YOUR TASK & INSTRUCTIONS**\n\nCreate the HTML code for the \"Accessibility Statement\" by completing the following steps:\n\n**Step 1: Determine Compliance Status**\nAnalyze the `Accessibility Scan Results`. Since the data contains multiple items with an `issue_type` of \"error\", you **must** classify the website's status as **\"partially compliant\"**.\n\n**Step 2: Summarize Non-Accessible Content**\nFrom the `Accessibility Scan Results`, identify the main **categories** of problems. In the final statement, list 2-4 of these general categories. Do **not** list every single error. Good examples are:\n* \"Missing alternative text for images and graphics\"\n* \"Insufficient color contrasts between text and background\"\n* \"Form elements without associated labels\"\n* \"Menus or interactive elements not fully operable by keyboard\"\n\n**Step 3: Construct the Final HTML Document**\nGenerate a complete HTML document in English. The document **must** include the following sections, using the provided English titles:\n\n1. **`Accessibility Statement`**: The main title of the page.\n2. **`Commitment to Accessibility`**: A brief, professional introduction stating the company's commitment to digital accessibility in the name of `{{ $('CHANGE THESE: dependencies').item.json['Company Name'] }}`.\n3. **`Conformance Status`**: State that the website is \"partially conformant with the Web Content Accessibility Guidelines (WCAG) 2.1 level AA\" due to the non-compliances listed below.\n4. **`Non-Accessible Content`**: List the general problem categories you identified in Step 2.\n5. **`Preparation of this Accessibility Statement`**: State that the assessment method was a `self-assessment` conducted with automated tools and that the statement was created on `{{ $now.toFormat('MMMM d, yyyy') }}`.\n6. **`Feedback and Contact Information`**: Provide a section for users to report barriers. **Crucially, use a clear placeholder text** like `[Please insert your contact email address or a link to your contact form here]` so the end-user knows this part must be manually replaced.\n7. **`Enforcement Procedure`**: This section is country-specific. **You must insert a clear placeholder** informing the user that they need to add the details of their country's official national enforcement body. Use placeholder text like: `[The website owner must insert the name, contact details, and web link for the official national enforcement/arbitration body for their country here.]`\n\n**Step 4: Final Output Requirement**\nYour final response must ONLY be the complete, raw HTML code for the statement in the required JSON format. The Accesibility Statement MUST be in {{ $('CHANGE THESE: dependencies').item.json['Desired Output Language'] }} language!!",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2
},
{
"id": "70f20556-12de-4b43-8950-c3409be30e27",
"name": "gemini 2.5 pro",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-920,
400
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.5-pro-preview-06-05"
},
"credentials": {
"googlePalmApi": {
"id": "srw1vvQUiWhObvtc",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "f16e7f9a-357f-4493-8b2f-677e5c3b3a97",
"name": "출력을 HTML로 파싱",
"type": "n8n-nodes-base.html",
"position": [
-480,
180
],
"parameters": {
"html": "{{ $json.output['Accessibility Statement'] }}"
},
"typeVersion": 1.2
},
{
"id": "c71c1911-4de6-42f9-a804-477237962e47",
"name": "접근성 선언문 HTML 파일 생성",
"type": "n8n-nodes-base.moveBinaryData",
"position": [
-180,
180
],
"parameters": {
"mode": "jsonToBinary",
"options": {
"fileName": "=accessibility_statement_{{ $('CHANGE THESE: dependencies').item.json['Company Name'].toSnakeCase() }}.html",
"mimeType": "text/html",
"useRawData": true
},
"sourceKey": "html",
"convertAllData": false
},
"typeVersion": 1
},
{
"id": "a7b3c3c8-f6b5-42ce-bf7e-b321cb68906c",
"name": "WAVE 리포트 항목을 웹사이트 선택자에 매핑",
"type": "n8n-nodes-base.code",
"position": [
-1200,
180
],
"parameters": {
"jsCode": "// --- Corrected Script ---\n\nconsole.log(\"--- 1. SCRIPT INITIALIZING ---\");\nconst cheerio = require('cheerio');\nconsole.log(\"Cheerio library loaded.\");\n\nconst fullHtml = $('Get Website HTML').first().json.data;\nconst waveCategories = $('Get WAVE Report').first().json.categories;\nconsole.log(`Input data loaded. HTML Length: ${fullHtml.length}`);\n\n// --- 3. INITIALIZING CHEERIO ---\nconst $$ = cheerio.load(fullHtml);\nconsole.log(`Cheerio loaded HTML successfully. Document title: \"${$$('title').text()}\"`);\n\nconst analysisItems = [];\n\n// --- 4. PROCESSING LOOP ---\nif (waveCategories && typeof waveCategories === 'object') {\n for (const categoryName in waveCategories) {\n const category = waveCategories[categoryName];\n if (category && category.items && typeof category.items === 'object') {\n for (const itemId in category.items) {\n const item = category.items[itemId];\n if (item.selectors && Array.isArray(item.selectors)) {\n \n // Loop through the array of selector strings\n for (const selectorString of item.selectors) {\n \n // --- THIS IS THE CORRECTED LINE ---\n // The selector is the string itself from the array.\n const selector = selectorString;\n\n // Ensure the selector is a valid string before using it\n if (typeof selector === 'string' && selector) {\n console.log(` -> Searching for selector: \"${selector.substring(0, 80)}...\"`);\n const elementNode = $$(selector).first();\n \n if (elementNode.length > 0) {\n console.log(` -> SUCCESS: Found element!`);\n let contextHtml = elementNode.parent().html();\n \n if (contextHtml && contextHtml.length > 2000) {\n contextHtml = $$.html(elementNode);\n }\n\n analysisItems.push({\n issue_type: categoryName,\n description: item.description,\n selector: selector,\n context_html: contextHtml ? contextHtml.trim() : \"\"\n });\n } else {\n console.log(` -> WARNING: Could not find element for selector.`);\n }\n }\n }\n }\n }\n }\n }\n}\n\n// --- 5. FINAL OUTPUT ---\nconsole.log(`\\n--- PROCESSING COMPLETE ---`);\nconsole.log(`Total items collected for AI: ${analysisItems.length}`);\n\nreturn {\n json: {\n analysisItems\n }\n};"
},
"typeVersion": 2
},
{
"id": "e8750f9c-778f-41fd-aead-270d33e255e4",
"name": "CHANGE THESE: dependencies",
"type": "n8n-nodes-base.set",
"position": [
-1880,
-100
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "678e5308-808a-46c5-89b4-c68b272e03c6",
"name": "wave_api_key",
"type": "string",
"value": ""
},
{
"id": "470042c1-8609-41ab-ab1e-bf817035d426",
"name": "URL to analyze",
"type": "string",
"value": "="
},
{
"id": "d3c198ec-2bba-45d1-8687-b918fc2f2499",
"name": "Email for summary",
"type": "string",
"value": "example@gmail.com"
},
{
"id": "f15f810e-ce67-463e-8b99-61de6f1bcb6c",
"name": "Desired Output Language",
"type": "string",
"value": "english"
},
{
"id": "219c0199-a819-4e45-bd9e-aa7197060da1",
"name": "Company Name",
"type": "string",
"value": "Tiro"
},
{
"id": "9423eed7-e169-4312-8293-149d305d156e",
"name": "Country of the Company (used to apply local law)",
"type": "string",
"value": "Germany"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "510ed358-75a8-4842-a8aa-0b2fa95144b6",
"name": "워크플로우 실행 시",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-2080,
180
],
"parameters": {},
"typeVersion": 1
},
{
"id": "1ebee155-5b9a-4da3-8e63-054bf14b945a",
"name": "이메일로 접근성 선언문 발송",
"type": "n8n-nodes-base.gmail",
"position": [
80,
180
],
"webhookId": "69c88d00-ad22-4a8b-9f6a-f8d81f84c617",
"parameters": {
"sendTo": "={{ $('CHANGE THESE: dependencies').item.json['Email for summary'] }}",
"message": "=This Email contains your Accessibility Statement. Check the attached files.",
"options": {
"attachmentsUi": {
"attachmentsBinary": [
{}
]
}
},
"subject": "=Accessibility Statement for {{ $('CHANGE THESE: dependencies').item.json['Company Name'] }}"
},
"credentials": {
"gmailOAuth2": {
"id": "ExhDKVxieYxsG75E",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "cdda9066-42d8-4d9f-97a8-9a5184bd58e6",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3020,
-280
],
"parameters": {
"color": 5,
"width": 880,
"height": 920,
"content": "# 🚀 Automatically Generate Your EU Accessibility Statement\n\n**What This Template Does:**\nThis workflow scans any website, analyzes its accessibility issues, and uses an AI agent to automatically generate a formal Accessibility Statement (Erklärung zur Barrierefreiheit). This document is a legal requirement for most EU businesses under the **European Accessibility Act (EAA)**, with a compliance deadline of **June 28, 2025**.\n\n**How It Works:**\nIt uses the **WAVE API** to find accessibility issues and **Google Gemini** to write the statement based on a specialized legal prompt, creating a ready-to-use `.html` file.\n\n---\n\n### **Setup in 3 Steps:**\n\n**1. Configure All Variables ✏️**\n* Click the **'CHANGE THESE: dependencies'** node. This is your central control panel.\n* Fill in all the values, including your WAVE API Key, the URL to analyze, company details, and desired output language.\n\n**2. Set Up Credentials ✨**\n* You need to connect your Google accounts for this workflow to run.\n* **Gemini:** Click the **'gemini2.5 pro'** node and connect your Google Gemini (or Google AI Studio) API credentials. You can swap this out for any other language model as well.\n* **Gmail:** Click the **'Send report by email'** node and connect your Gmail account to allow sending the final report.\n\n**3. Run the Workflow ▶️**\n* Click **'Execute workflow'** to run the analysis. The generated `.html` statement will be sent to the email address you specified."
},
"typeVersion": 1
},
{
"id": "f3a66efe-8bce-4f08-871d-9a9a70f8ab9e",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1980,
-380
],
"parameters": {
"color": 4,
"width": 320,
"height": 460,
"content": "# ⚙️ Step 1: Start Here!\n\nThis is the main configuration node for the workflow.\n\nClick on this node and fill in all the required fields on the right-hand panel before running the workflow."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"70f20556-12de-4b43-8950-c3409be30e27": {
"ai_languageModel": [
[
{
"node": "3ceda0aa-662d-49c8-a009-520889c54332",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"598f30d8-ca38-469e-978b-c521b2163e6c": {
"main": [
[
{
"node": "a7b3c3c8-f6b5-42ce-bf7e-b321cb68906c",
"type": "main",
"index": 0
}
]
]
},
"7d80a2b6-225b-41c3-9723-b1c533176dcd": {
"main": [
[
{
"node": "598f30d8-ca38-469e-978b-c521b2163e6c",
"type": "main",
"index": 0
}
]
]
},
"f16e7f9a-357f-4493-8b2f-677e5c3b3a97": {
"main": [
[
{
"node": "c71c1911-4de6-42f9-a804-477237962e47",
"type": "main",
"index": 0
}
]
]
},
"0e6c3a12-ad82-4b84-85b2-b0d5a3ebe055": {
"ai_outputParser": [
[
{
"node": "3ceda0aa-662d-49c8-a009-520889c54332",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"e8750f9c-778f-41fd-aead-270d33e255e4": {
"main": [
[
{
"node": "7d80a2b6-225b-41c3-9723-b1c533176dcd",
"type": "main",
"index": 0
}
]
]
},
"3ceda0aa-662d-49c8-a009-520889c54332": {
"main": [
[
{
"node": "f16e7f9a-357f-4493-8b2f-677e5c3b3a97",
"type": "main",
"index": 0
}
]
]
},
"510ed358-75a8-4842-a8aa-0b2fa95144b6": {
"main": [
[
{
"node": "e8750f9c-778f-41fd-aead-270d33e255e4",
"type": "main",
"index": 0
}
]
]
},
"c71c1911-4de6-42f9-a804-477237962e47": {
"main": [
[
{
"node": "1ebee155-5b9a-4da3-8e63-054bf14b945a",
"type": "main",
"index": 0
}
]
]
},
"a7b3c3c8-f6b5-42ce-bf7e-b321cb68906c": {
"main": [
[
{
"node": "3ceda0aa-662d-49c8-a009-520889c54332",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 인공지능, 마케팅
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Meta 광고 라이브러리 스크래핑 및 Gemini를 사용한 비디오 광고 분석, 데이터를 Google Sheets에 저장
Gemini를 사용하여 Meta 광고 라이브러리 동영상 광고 분석 및 결과를 Google Sheets에 저장
Set
Code
Sort
+
Set
Code
Sort
24 노드Daniel Setzermann
인공지능
자동화 블로그 작성 및 소셜 미디어 프로모션 에이전트
GPT-4, Perplexity 및 WordPress를 사용한 SEO 블로그 생성 + 소셜 미디어 자동화
Set
Code
Gmail
+
Set
Code
Gmail
79 노드LukaszB
디자인
✨🤖 X + Facebook + Instagram + LinkedIn에 적합한 자동화 AI 추동 소셜 미디어 콘텐츠 공장
✨🤖 AI를 사용하여 다중 플랫폼 소셜 미디어 콘텐츠 생성 자동화
If
Set
Code
+
If
Set
Code
57 노드Joseph LePage
인공지능
🗞️ AI로운 지속 가능한 마케팅 브리핑(gmail, GPT-4o 사용)
🗞️ AI 주도의 지속 가능성 마케팅 브리핑( Gmail, GPT-4o 사용)
If
Set
Code
+
If
Set
Code
21 노드Samir Saci
인공지능
전사 평가기
DeepGram 및 GPT-4o를 사용한 오디오 대화 분석 및 시각화
Set
Code
Html
+
Set
Code
Html
54 노드RealSimple Solutions
인공지능
트랜스크립션 평가자 V2
🔊 브라우저 녹음 오디오 전취와 AI 분석(Deepgram과 GPT-4o 사용)
Set
Code
Html
+
Set
Code
Html
54 노드RealSimple Solutions
인공지능
워크플로우 정보
난이도
중급
노드 수13
카테고리2
노드 유형11
저자
Lukas Kunhardt
@lukaskunhardtAutomation Expert with a focus on structured data extraction from messy inputs.
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유