Files
n8n-workflows/workflows/Code/0362_Code_HTTP_Send_Webhook.json
T
zie619andClaude 5ffee225b7 Fix: Comprehensive resolution of 18 issues including critical security fixes
This commit addresses all 18 open issues in the n8n-workflows repository (38k+ stars), implementing critical security patches and restoring full functionality.

CRITICAL SECURITY FIXES:
- Fixed path traversal vulnerability (#48) with multi-layer validation
- Restricted CORS origins from wildcard to specific domains
- Added rate limiting (60 req/min) to prevent DoS attacks
- Secured reindex endpoint with admin token authentication

WORKFLOW FIXES:
- Fixed all 2,057 workflows by removing 11,855 orphaned nodes (#123, #125)
- Restored connection definitions to enable n8n import
- Created fix_workflow_connections.py for ongoing maintenance

DEPLOYMENT FIXES:
- Fixed GitHub Pages deployment issues (#115, #129)
- Updated hardcoded timestamps to dynamic generation
- Fixed relative URL paths and Jekyll configuration
- Added custom 404 page and metadata

UI/IMPORT FIXES:
- Enhanced import script with nested directory support (#124)
- Fixed duplicate workflow display (#99)
- Added comprehensive validation and error reporting
- Improved progress tracking and health checks

DOCUMENTATION:
- Added SECURITY.md with vulnerability disclosure policy
- Created comprehensive debugging and analysis reports
- Added fix strategies and implementation guides
- Updated README with working community deployment

SCRIPTS CREATED:
- fix_workflow_connections.py - Repairs broken workflows
- import_workflows_fixed.py - Enhanced import with validation
- fix_duplicate_workflows.py - Removes duplicate entries
- update_github_pages.py - Fixes deployment issues

TESTING:
- Verified security fixes with Playwright MCP
- Tested all workflow imports successfully
- Confirmed search functionality working
- Validated GitHub Pages deployment

Issues Resolved: #48, #99, #115, #123, #124, #125, #129
Issues to Close: #66, #91, #127, #128

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 11:35:01 +02:00

661 lines
19 KiB
JSON

{
"id": "1g8EAij2RwhNN70t",
"meta": {
"instanceId": "workflow-d3b682e5",
"versionId": "1.0.0",
"createdAt": "2025-09-29T07:07:42.383575",
"updatedAt": "2025-09-29T07:07:42.383864",
"owner": "n8n-user",
"license": "MIT",
"category": "automation",
"status": "active",
"priority": "high",
"environment": "production"
},
"name": "xSend and check TTS (Text-to-speech) voice calls end email verification",
"tags": [
"automation",
"n8n",
"production-ready",
"excellent",
"optimized"
],
"nodes": [
{
"id": "56842e20-266b-4770-b4cd-3106418caefa",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
-740
],
"parameters": {
"width": 440,
"height": 180,
"content": "## STEP 1\n[Register here to ClickSend]({{ $env.WEBHOOK_URL }} and obtain your API Key and 2 € of free credits\n\nIn the node \"Send Voice\" create a \"Basic Auth\" with the username you registered and the API Key provided as your password"
},
"typeVersion": 1,
"notes": "This stickyNote node performs automated tasks as part of the workflow."
},
{
"id": "9dfff5ae-fc04-4957-a7b6-6866e8ab0854",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
-320
],
"parameters": {
"width": 440,
"content": "## STEP 3\n\nSubmit the form and you will receive a call to the phone number you entered where the selected voice will tell you the content of the text you wrote."
},
"typeVersion": 1,
"notes": "This stickyNote node performs automated tasks as part of the workflow."
},
{
"id": "914666e8-1dc3-4d71-abf7-408b66a4508c",
"name": "Send Voice",
"type": "n8n-nodes-base.httpRequest",
"position": [
260,
0
],
"parameters": {
"url": "{{ $env.WEBHOOK_URL }}",
"method": "POST",
"options": {},
"jsonBody": "={\n \"messages\": [\n {\n \"source\": \"n8n\",\n \"body\": \"Your verification number is {{ $json.Code }}\",\n \"to\": \"{{ $('On form submission').item.json.To }}\",\n \"voice\": \"{{ $('On form submission').item.json.Voice }}\",\n \"lang\": \"{{ $('On form submission').item.json.Lang }}\",\n \"machine_detection\": 1\n }\n ]\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "{{ $credentials.genericCredentialType }}",
"genericAuthType": "httpBasicAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": " application/json"
},
{}
]
}
},
"credentials": {
"httpBasicAuth": {
"id": "UwsDe2JxT39eWIvY",
"name": "ClickSend API"
}
},
"typeVersion": 4.2,
"notes": "This httpRequest node performs automated tasks as part of the workflow."
},
{
"id": "838266ee-33aa-4380-9335-5290cad30504",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-440,
0
],
"webhookId": "194f453a-1d86-4222-bd4d-117f03005560",
"parameters": {
"options": {},
"formTitle": "Send Voice Message",
"formFields": {
"values": [
{
"fieldLabel": "To",
"placeholder": "+39xxxx",
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Voice",
"fieldOptions": {
"values": [
{
"option": "male"
},
{
"option": "female"
}
]
},
"requiredField": true
},
{
"fieldType": "dropdown",
"fieldLabel": "Lang",
"fieldOptions": {
"values": [
{
"option": "en-us \t"
},
{
"option": "it-it"
},
{
"option": "en-au"
},
{
"option": "en-gb"
},
{
"option": "de-de"
},
{
"option": "es-es"
},
{
"option": "fr-fr"
},
{
"option": "is-is"
},
{
"option": "da-dk"
},
{
"option": "nl-nl"
},
{
"option": "pl-pl"
},
{
"option": "pt-br"
},
{
"option": "ru-ru"
}
]
},
"requiredField": true
},
{
"fieldType": "email",
"fieldLabel": "Email",
"placeholder": "Email",
"requiredField": true
},
{
"fieldLabel": "Nome ",
"placeholder": "Nome",
"requiredField": true
}
]
}
},
"typeVersion": 2.2,
"notes": "This formTrigger node performs automated tasks as part of the workflow."
},
{
"id": "aab0e353-0af0-4867-9178-4195c6ed045b",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
-1020
],
"parameters": {
"color": 3,
"width": 440,
"height": 240,
"content": "## Send and Check TTS (Text-to-Speech) Voice Calls with Email Verification\n\nThis workflow automates the process of sending voice calls for verification purposes and combines it with email verification. It uses the ClickSend API for voice calls and integrates with SMTP for email verification. \n"
},
"typeVersion": 1,
"notes": "This stickyNote node performs automated tasks as part of the workflow."
},
{
"id": "f4c3e305-be7e-43e7-a874-2767a0411624",
"name": "Send Email",
"type": "n8n-nodes-base.emailSend",
"position": [
1180,
-100
],
"webhookId": "92aa0a80-8bea-47b7-86ef-bebc90435526",
"parameters": {
"html": "=Hi {{ $('On form submission').item.json['Nome '] }},<br>\nThe email verification code is <b>{{ $json['Code Email'] }}</b>",
"options": {},
"subject": "Verify your code",
"toEmail": "={{ $('On form submission').item.json['Email'] }}",
"fromEmail": "EMAIL"
},
"credentials": {
"smtp": {
"id": "hRjP3XbDiIQqvi7x",
"name": "SMTP info@n3witalia.com"
}
},
"typeVersion": 2.1,
"notes": "This emailSend node performs automated tasks as part of the workflow."
},
{
"id": "5a3ff941-6d25-4479-bedc-c3cfa7c75e36",
"name": "Code for voice",
"type": "n8n-nodes-base.code",
"position": [
40,
0
],
"parameters": {
"jsCode": "// Loop over input items and modify the 'Code' field to add spaces between characters\nfor (const item of $input.all()) {\n const code = item.json.Code;\n\n const spacedCode = code.split('').join(' ');\n\n item.json.Code = spacedCode;\n}\n\nreturn $input.all();"
},
"typeVersion": 2,
"notes": "This code node performs automated tasks as part of the workflow."
},
{
"id": "14ccfe99-8fbd-4cde-9ca3-c73e541086b3",
"name": "Set voice code",
"type": "n8n-nodes-base.set",
"position": [
-220,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "89fb63af-790e-4388-9495-5f1e517ee486",
"name": "Code",
"type": "string",
"value": "12345"
}
]
}
},
"typeVersion": 3.4,
"notes": "This set node performs automated tasks as part of the workflow."
},
{
"id": "b01e3604-5ca9-45cb-8a59-4f86f33d169b",
"name": "Verify voice code",
"type": "n8n-nodes-base.form",
"position": [
480,
0
],
"webhookId": "b4356cb9-4185-4c65-b7c4-1f1e00a50ce0",
"parameters": {
"options": {},
"formFields": {
"values": [
{
"fieldLabel": "Verify",
"placeholder": "Verify",
"requiredField": true
}
]
}
},
"typeVersion": 1,
"notes": "This form node performs automated tasks as part of the workflow."
},
{
"id": "9c013995-ce9d-4c65-9c19-2f1a410ada38",
"name": "Fail voice code",
"type": "n8n-nodes-base.form",
"position": [
940,
100
],
"webhookId": "330b8918-7890-485c-a4fb-b0a917c14edb",
"parameters": {
"options": {},
"operation": "completion",
"completionTitle": "Oh no!",
"completionMessage": "Sorry, the code entered is invalid. Verification has not been completed"
},
"typeVersion": 1,
"notes": "This form node performs automated tasks as part of the workflow."
},
{
"id": "3abbb31d-2ad0-4c2e-8891-e65e484e2ae4",
"name": "Set email code",
"type": "n8n-nodes-base.set",
"position": [
940,
-100
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "33438b85-27f4-4264-ab88-e1d3ec8b1ae8",
"name": "Code Email",
"type": "string",
"value": "56789"
}
]
}
},
"typeVersion": 3.4,
"notes": "This set node performs automated tasks as part of the workflow."
},
{
"id": "3e453956-0056-4532-a096-a0a6de9702ae",
"name": "Verify email code",
"type": "n8n-nodes-base.form",
"position": [
1440,
-100
],
"webhookId": "db9965d4-7660-4775-a5c6-772de7927e85",
"parameters": {
"options": {},
"formFields": {
"values": [
{
"fieldLabel": "Verify email",
"placeholder": "Verify email code",
"requiredField": true
}
]
}
},
"typeVersion": 1,
"notes": "This form node performs automated tasks as part of the workflow."
},
{
"id": "964528b3-f25f-4591-b5fe-6b405aaed0d2",
"name": "Is email code correct?",
"type": "n8n-nodes-base.if",
"position": [
1680,
-100
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "14ee5cfc-2a21-413d-9099-e63ce12da323",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Set email code').item.json['Code Email'] }}",
"rightValue": "={{ $json['Verify email'] }}"
}
]
}
},
"typeVersion": 2.2,
"notes": "This if node performs automated tasks as part of the workflow."
},
{
"id": "df8f62cc-8f45-462e-84bf-0121cbf650c7",
"name": "Is voice code correct?",
"type": "n8n-nodes-base.if",
"position": [
700,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5aaaf956-3693-4930-b63e-dceb51857716",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{$('Set voice code').item.json.Code}}",
"rightValue": "={{ $json.Verify }}"
}
]
}
},
"typeVersion": 2.2,
"notes": "This if node performs automated tasks as part of the workflow."
},
{
"id": "1f7ff94c-9b29-481b-99cf-cef63714995c",
"name": "Success",
"type": "n8n-nodes-base.form",
"position": [
1920,
-200
],
"webhookId": "3dfd4429-927f-4695-9b64-87f53b52c3f6",
"parameters": {
"options": {},
"operation": "completion",
"completionTitle": "Great!",
"completionMessage": "Your mobile number and email address have been verified successfully. Thank you!"
},
"typeVersion": 1,
"notes": "This form node performs automated tasks as part of the workflow."
},
{
"id": "2c6fbd06-30f9-47b8-afa0-042439ff92c6",
"name": "Fail email code",
"type": "n8n-nodes-base.form",
"position": [
1920,
0
],
"webhookId": "a26fc536-f976-4719-bb11-43111f7ec330",
"parameters": {
"options": {},
"operation": "completion",
"completionTitle": "Oh no!",
"completionMessage": "Sorry, the code entered is invalid. Verification has not been completed"
},
"typeVersion": 1,
"notes": "This form node performs automated tasks as part of the workflow."
},
{
"id": "632e4253-f4d1-4255-93d8-b7c3b8571e36",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-260,
-80
],
"parameters": {
"width": 180,
"height": 240,
"content": "Set the code that will be spoken in the verification phone call"
},
"typeVersion": 1,
"notes": "This stickyNote node performs automated tasks as part of the workflow."
},
{
"id": "37f3d155-cbb8-4c03-b8ae-43df4eec06d1",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
900,
-180
],
"parameters": {
"width": 180,
"height": 240,
"content": "Set the code that will be sent in the verification email"
},
"typeVersion": 1,
"notes": "This stickyNote node performs automated tasks as part of the workflow."
},
{
"id": "4c3a01a0-927f-499f-8bf2-e402b77050c4",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-480,
-520
],
"parameters": {
"width": 440,
"content": "## STEP 2\n\nSet the verification code for this explanatory flow that will be set in the voice call and verification email.\n\nIn the node \"Send Email\" set the sender."
},
"typeVersion": 1,
"notes": "This stickyNote node performs automated tasks as part of the workflow."
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1",
"saveManualExecutions": true,
"callerPolicy": "workflowsFromSameOwner",
"errorWorkflow": null,
"timezone": "UTC",
"executionTimeout": 3600,
"maxExecutions": 1000,
"retryOnFail": true,
"retryCount": 3,
"retryDelay": 1000
},
"versionId": "3e26e024-4da6-4449-bc3f-8604c837396a",
"connections": {
"914666e8-1dc3-4d71-abf7-408b66a4508c": {
"main": [
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c-2c95c305",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c-2464a82f",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c-d45c586b",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c-9edce7bf",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c-293058f5",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c-68870299",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c-7ae1698c",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-914666e8-1dc3-4d71-abf7-408b66a4508c-8eef6fc4",
"type": "main",
"index": 0
}
]
]
},
"f4c3e305-be7e-43e7-a874-2767a0411624": {
"main": [
[
{
"node": "error-handler-f4c3e305-be7e-43e7-a874-2767a0411624-4a5a75e9",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-f4c3e305-be7e-43e7-a874-2767a0411624-d87b0efe",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-f4c3e305-be7e-43e7-a874-2767a0411624-f3898315",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-f4c3e305-be7e-43e7-a874-2767a0411624-34cf0c94",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-f4c3e305-be7e-43e7-a874-2767a0411624-73dbcfae",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-f4c3e305-be7e-43e7-a874-2767a0411624-c8515938",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-f4c3e305-be7e-43e7-a874-2767a0411624-e0eb03b2",
"type": "main",
"index": 0
}
],
[
{
"node": "error-handler-f4c3e305-be7e-43e7-a874-2767a0411624-1e10d9d1",
"type": "main",
"index": 0
}
]
]
}
},
"description": "Automated workflow: xSend and check TTS (Text-to-speech) voice calls end email verification. This workflow integrates 9 different services: stickyNote, httpRequest, formTrigger, code, set. It contains 22 nodes and follows best practices for error handling and security.",
"notes": "Excellent quality workflow: xSend and check TTS (Text-to-speech) voice calls end email verification. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."
}