Demandes d'aide pour l'onboarding client (Typeform vers Gmail et Sheets)
Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 28 nœuds.Utilise principalement des nœuds comme If, Code, Gmail, Slack, ClickUp. Demandes d'aide pour l'intégration clients (Typeform vers Gmail et Sheets)
- •Compte Google et informations d'identification Gmail API
- •Token Bot Slack ou URL Webhook
- •Informations d'identification Google Sheets API
- •Clé API OpenAI
Nœuds utilisés (28)
Catégorie
{
"id": "dXMSOO4Jr8OLjozm",
"meta": {
"instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
"templateCredsSetupCompleted": true
},
"name": "Customer Onboarding Help Requests (Typeform to Gmail & Sheets)",
"tags": [],
"nodes": [
{
"id": "9fa1fad1-085e-4a81-b561-1b9bcf13156b",
"name": "Déclencheur Typeform",
"type": "n8n-nodes-base.typeformTrigger",
"position": [
-576,
576
],
"webhookId": "typeform-webhook",
"parameters": {
"formId": "cXaYXrBp"
},
"credentials": {
"typeformApi": {
"id": "BZNYDuO6Ymg0Gql2",
"name": "Typeform account"
}
},
"typeVersion": 1
},
{
"id": "1a77e0ab-86e6-4ef8-8e72-fad93fc4827c",
"name": "Journaliser vers Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
-352,
576
],
"parameters": {
"columns": {
"value": {
"Urgency": "={{ $json[\"How urgent is this request?\"] }}",
"Full Name": "={{ $json[\"What's your full name?\"] }}",
"Company/Team": "={{ $json[\"Which company or team are you from?\"] }}",
"Email Address": "={{ $json[\"What's your email address?\"] }}",
"Issue Details": "={{ $json[\"Please describe the issue or help you need in detail.\"] }}",
"Product/Service": "={{ $json[\"Which product/service are you getting onboarded to?\"] }}",
"Onboarding Support Needed": "={{ $json[\"What type of onboarding support do you need?\"] }}"
},
"schema": [
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Address",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email Address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company/Team",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Company/Team",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Product/Service",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Product/Service",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Onboarding Support Needed",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Onboarding Support Needed",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Issue Details",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Issue Details",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Urgency",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Urgency",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ZOwioaHTLWKltq6UbxzZh02UEBKfypdv_GOhcPu4fHg/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1ZOwioaHTLWKltq6UbxzZh02UEBKfypdv_GOhcPu4fHg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ZOwioaHTLWKltq6UbxzZh02UEBKfypdv_GOhcPu4fHg/edit?usp=drivesdk",
"cachedResultName": "onboarding requests"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "kpPEOLCGn963qpoh",
"name": "automations@techdome.ai"
}
},
"typeVersion": 4
},
{
"id": "cd2d4992-4229-4081-8ab3-e757e4e3d896",
"name": "Vérifier l'existence de l'email",
"type": "n8n-nodes-base.if",
"position": [
-128,
576
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "email-check",
"operator": {
"type": "string",
"operation": "isNotEmpty"
},
"leftValue": "={{ $json.email }}",
"rightValue": ""
},
{
"id": "2c03e600-6592-4611-ba67-d68e7e610290",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.Email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "acb6dc41-37e1-4b4d-b850-a3b34ec43359",
"name": "Envoyer l'email de bienvenue",
"type": "n8n-nodes-base.gmail",
"position": [
432,
480
],
"webhookId": "f5b7a5e6-aa6a-46db-8115-a62f0784bb41",
"parameters": {
"sendTo": "={{ $json.email }}",
"message": "={{ $json.html }}",
"options": {},
"subject": "Welcome to [Your Company]! Here are your onboarding resources"
},
"credentials": {
"gmailOAuth2": {
"id": "gEIaWCTvGfYjMSb3",
"name": "Gmail credentials"
}
},
"typeVersion": 2
},
{
"id": "0631a301-2647-4ff4-af72-4cea1b6d4a58",
"name": "Générer l'email HTML professionnel",
"type": "n8n-nodes-base.code",
"position": [
96,
480
],
"parameters": {
"jsCode": "// Generate professional email HTML format\nlet htmlOutput = '';\n\nfor (const item of $input.all()) {\n // Professional email template\n htmlOutput += `\n<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <style>\n body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: #333; margin: 0; padding: 20px; }\n .email-container { max-width: 600px; margin: 0 auto; background: #ffffff; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }\n .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px 20px; text-align: center; }\n .header h1 { margin: 0; font-size: 24px; font-weight: 300; }\n .content { padding: 30px; }\n .greeting { font-size: 16px; margin-bottom: 20px; }\n .info-section { background: #f8f9fa; border-radius: 6px; padding: 20px; margin: 20px 0; }\n .info-title { font-size: 18px; font-weight: 600; color: #495057; margin-bottom: 15px; border-bottom: 2px solid #dee2e6; padding-bottom: 8px; }\n .info-row { display: flex; margin: 12px 0; padding: 8px 0; border-bottom: 1px solid #e9ecef; }\n .info-row:last-child { border-bottom: none; }\n .info-label { font-weight: 600; color: #6c757d; min-width: 180px; }\n .info-value { color: #495057; flex: 1; }\n .footer { background: #f8f9fa; padding: 20px; text-align: center; font-size: 14px; color: #6c757d; border-top: 1px solid #e0e0e0; }\n .signature { margin-top: 30px; padding-top: 20px; border-top: 1px solid #dee2e6; }\n </style>\n</head>\n<body>\n <div class=\"email-container\">\n <div class=\"header\">\n <h1>New Customer Inquiry</h1>\n </div>\n \n <div class=\"content\">\n <div class=\"greeting\">\n Dear Team,\n </div>\n \n <p>We have received a new customer inquiry through our contact form. Please find the details below and ensure appropriate follow-up action is taken.</p>\n \n <div class=\"info-section\">\n <div class=\"info-title\">Customer Details</div>`;\n \n // Loop through each key-value pair in the JSON object\n for (const [key, value] of Object.entries(item.json)) {\n htmlOutput += `\n <div class=\"info-row\">\n <div class=\"info-label\">${key}:</div>\n <div class=\"info-value\">${value}</div>\n </div>`;\n }\n \n htmlOutput += `\n </div>\n \n <p><strong>Next Steps:</strong></p>\n <ul>\n <li>Acknowledge receipt within 2 business hours</li>\n <li>Assign to appropriate team member based on product/service inquiry</li>\n <li>Schedule follow-up call if urgency is high</li>\n <li>Update CRM system with customer information</li>\n </ul>\n \n <div class=\"signature\">\n <p>Best regards,<br>\n <strong>Customer Service Team</strong><br>\n Email: support@company.com<br>\n Phone: +1 (555) 123-4567</p>\n </div>\n </div>\n \n <div class=\"footer\">\n <p>This is an automated notification. Please do not reply to this email.</p>\n <p>© 2024 Your Company Name. All rights reserved.</p>\n </div>\n </div>\n</body>\n</html>`;\n}\n\n// Return the professional email HTML\nreturn [{ \n json: {\n html: htmlOutput,\n htmlContent: htmlOutput,\n itemCount: $input.all().length,\n emailSubject: \"New Customer Inquiry - Action Required\"\n }\n}];"
},
"typeVersion": 2
},
{
"id": "6a89013b-35e3-440b-aad2-14b6c9d693ad",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-848,
320
],
"parameters": {
"height": 256,
"content": "🎯 **STEP 1: Form Capture**\n\nTriggers when someone submits your Typeform with onboarding help request.\n\n**Setup:**\n- Add your Typeform ID\n- Connect Typeform credentials\n- Webhook automatically configured"
},
"typeVersion": 1
},
{
"id": "cbed5a83-dbff-4c41-ad1b-ec06102acb76",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
336
],
"parameters": {
"height": 224,
"content": "📊 **STEP 2: Data Logging**\n\nAppends all form data to Google Sheets for tracking and analytics.\n\n**Setup:**\n- Replace with your Sheet ID\n- Map form fields to columns\n- Ensure headers match"
},
"typeVersion": 1
},
{
"id": "5c451fdb-d1c9-4315-bc77-4aa4bcbba11c",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-192,
608
],
"parameters": {
"height": 256,
"content": "✅ **STEP 3: Email Validation**\n\nChecks if valid email exists before sending welcome message.\n\n**Logic:**\n- TRUE: Proceed to email generation\n- FALSE: Log error and skip email"
},
"typeVersion": 1
},
{
"id": "a89bd006-d4a5-4980-bef9-a34e5a9b2ab9",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
176
],
"parameters": {
"height": 296,
"content": "🎨 **STEP 4: Email Template**\n\nGenerates professional HTML email with:\n- Company branding\n- Customer details\n- Next steps\n- Contact information\n\n**Customize:**\n- Colors and styling\n- Company information\n- Action items"
},
"typeVersion": 1
},
{
"id": "905fb062-da89-4c8c-9ffc-9ccc8b3a323d",
"name": "Note adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
480,
208
],
"parameters": {
"height": 240,
"content": "📧 **STEP 5: Send Email**\n\nDelivers welcome email using Gmail.\n\n**Important:**\n- Update sender email address\n- Test with internal emails first\n- Monitor delivery rates"
},
"typeVersion": 1
},
{
"id": "22f3915e-ceff-4489-9c43-8b6e814e6155",
"name": "Note adhésive6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-288,
976
],
"parameters": {
"height": 252,
"content": "⚠️ **Error Handler**\n\nLogs submissions without valid email addresses for manual follow-up.\n\n**Use case:**\n- Incomplete form submissions\n- Invalid email formats\n- Manual review needed"
},
"typeVersion": 1
},
{
"id": "fe9be2b3-c57f-4fec-a525-5f067f72b0ca",
"name": "Ajouter ou mettre à jour une ligne dans la feuille",
"type": "n8n-nodes-base.googleSheets",
"position": [
832,
672
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "Task ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Task ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Task Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Task Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Description",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status Color",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status Color",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Priority",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Priority",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date Created",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date Created",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date Updated",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date Updated",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date Closed",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date Closed",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date Done",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date Done",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Due Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Due Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Start Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Start Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Creator",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Creator",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Creator Email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Creator Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Assignees",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Assignees",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Watchers",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Watchers",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "List Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "List Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "List ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "List ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Project Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Project Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Project ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Project ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Folder Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Folder Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Space ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Space ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Team ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Team ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Points",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Points",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Time Estimate (Hours)",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Time Estimate (Hours)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Time Spent (Hours)",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Time Spent (Hours)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Index",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Order Index",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Archived",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Archived",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Tags",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Tags",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Custom Fields",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Custom Fields",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Has Dependencies",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Has Dependencies",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Has Linked Tasks",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Has Linked Tasks",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Has Checklists",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Has Checklists",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Task URL",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Task URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Public Sharing",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Public Sharing",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Permission Level",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Permission Level",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Data Processed At",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Data Processed At",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Processing Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Processing Status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1_aMeJ3avtD48dLkQxmgTtjDgbvhWp8a5v5wzgzIDd3o/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1_aMeJ3avtD48dLkQxmgTtjDgbvhWp8a5v5wzgzIDd3o",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1_aMeJ3avtD48dLkQxmgTtjDgbvhWp8a5v5wzgzIDd3o/edit?usp=drivesdk",
"cachedResultName": "TypeForm Form Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "kpPEOLCGn963qpoh",
"name": "automations@techdome.ai"
}
},
"typeVersion": 4.6
},
{
"id": "d7875033-c362-4d0e-9fb2-9c62d866dabe",
"name": "Azure OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
"position": [
256,
1120
],
"parameters": {
"model": "gpt-4o",
"options": {}
},
"credentials": {
"azureOpenAiApi": {
"id": "C3WzT18XqF8OdVM6",
"name": "Azure Open AI account"
}
},
"typeVersion": 1
},
{
"id": "4868a1af-06d1-4fe0-aa3f-9f1dca28163b",
"name": "Simple Memory1",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
400,
1136
],
"parameters": {
"sessionKey": "\"json_review\"",
"sessionIdType": "customKey",
"contextWindowLength": 7
},
"typeVersion": 1.3
},
{
"id": "031c5052-83c7-43ee-87d8-e9be9b23fd11",
"name": "Agent IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
288,
896
],
"parameters": {
"text": "={{ $json[\"First name\"] }}{{ $json[\"Last name\"] }}{{ $json[\"Phone number\"] }}{{ $json.Email }}{{ $json.Company }}{{ $json[\"Which tutorial did you complete?\"] }}{{ $json[\"How would you rate the clarity of the tutorial content?\"] }}{{ $json[\"How helpful was the tutorial in improving your development skills?\"] }}{{ $json[\"What topics would you like to see covered in future tutorials?\"] }}{{ $json[\"Did you encounter any issues or difficulties while following the tutorial?\"] }}{{ $json[\"If yes, please describe the issues or difficulties you faced.\"] }}{{ $json[\"Any additional comments or suggestions to improve our tutorials?\"] }}{{ $json[\"Would you recommend these tutorials to other developers?\"] }}",
"options": {
"systemMessage": "=You are an AI assistant that processes raw form submissions from surveys or onboarding forms. \nYour job is to read all the answers and generate a structured, professional summary. \n\nRules:\n- Always produce output as clean JSON (no free text).\n- Keep \"summary\" concise (2–3 sentences).\n- In \"insights\", list key observations or potential issues as bullet points (max 5).\n- In \"callToAction\", give one short, actionable recommendation for the internal team.\n- If answers are irrelevant, empty, or missing, clearly state \"Not provided\" instead of skipping.\n- Do not repeat raw text verbatim; rephrase into professional insights.\n"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
},
{
"id": "0d20f7f1-6c5a-4608-a22b-4c24800e5af4",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
512,
1152
],
"parameters": {
"jsonSchemaExample": "{\n \"output\": {\n \"summary\": \"…\",\n \"insights\": [ \"…\", \"…\" ],\n \"callToAction\": \"…\"\n }\n}\n"
},
"typeVersion": 1.3
},
{
"id": "46b1e8b2-4f27-4f90-bc3f-f04b9023d416",
"name": "Envoyer un message",
"type": "n8n-nodes-base.slack",
"position": [
640,
896
],
"webhookId": "16544571-1b96-4e02-80fb-eccd5d588aa8",
"parameters": {
"text": "=Summary: {{ $json.output.summary }} \n\nInsight: {{ $json.output.insights }} \n\nAction: {{ $json.output.callToAction }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09H21LK9BJ",
"cachedResultName": "reply-needed"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"id": "rNqvWj9TfChPVRYY",
"name": "Slack account vivek"
}
},
"typeVersion": 2.3
},
{
"id": "8ff6854e-2aa2-4ee4-92f1-6d2062e8430a",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
640
],
"parameters": {
"height": 240,
"content": "📌 **Create ClickUp Task**\n\nAutomatically creates a task in ClickUp for every valid submission.\n\n**Setup:**\n- Task name = tutorial completed\n- Assignee = customer name (or adjust to team member)\n"
},
"typeVersion": 1
},
{
"id": "b2ceca60-90b7-4fd3-b813-e517c21b80e9",
"name": "Note adhésive7",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
656
],
"parameters": {
"height": 240,
"content": "📊 **Save Task Data**\n\nAppends or updates ClickUp task details into a second Google Sheet.\n\n**Purpose:**\n- Maintain enriched task dataset\n- Easy reporting on support/onboarding requests\n"
},
"typeVersion": 1
},
{
"id": "3428b6c8-7cdd-4cb5-80b9-4d2cdcdcb8f7",
"name": "Note adhésive8",
"type": "n8n-nodes-base.stickyNote",
"position": [
304,
928
],
"parameters": {
"height": 272,
"content": "🤖 **AI Summarizer**\n\nReads full form submission and produces a clean structured JSON with:\n- Summary (2–3 sentences)\n- Insights (bullet points)\n- Call To Action (one next step)\n\nEnsures raw text is turned into actionable insights.\n"
},
"typeVersion": 1
},
{
"id": "8b837ce3-bad7-4746-853e-bf4e8a3da588",
"name": "Note adhésive9",
"type": "n8n-nodes-base.stickyNote",
"position": [
544,
624
],
"parameters": {
"height": 256,
"content": "🛠️ **Format ClickUp Data**\n\nCleans and structures task data from ClickUp before logging it into Google Sheets.\n\n**Includes:**\n- Dates (created, due, closed)\n- Assignees, watchers, tags\n- Priority, status, custom fields\n- Task URL and metadata\n"
},
"typeVersion": 1
},
{
"id": "52bd38b8-6b2a-453c-8c37-b0b2dc8c3119",
"name": "Note adhésive10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-32,
1248
],
"parameters": {
"height": 224,
"content": "🧠 **Language Model**\n\nPowers the AI Agent by providing GPT-4o capabilities from Azure OpenAI.\n\n**Setup:**\n- Connected with your Azure credentials\n- Model: gpt-4o\n"
},
"typeVersion": 1
},
{
"id": "33dedf53-430f-477c-8baa-fbe014630da2",
"name": "Note adhésive11",
"type": "n8n-nodes-base.stickyNote",
"position": [
288,
1296
],
"parameters": {
"height": 224,
"content": "🗂️ **Conversation Memory**\n\nProvides short-term memory to the AI Agent for context handling.\n\n**Config:**\n- Keeps last 7 turns\n- Session key = json_review\n"
},
"typeVersion": 1
},
{
"id": "34eafdd1-7527-46ab-8ac3-4992887b92d8",
"name": "Note adhésive12",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
1248
],
"parameters": {
"height": 224,
"content": "📦 **Structured Parser**\n\nValidates and enforces AI output into the required JSON format.\n\n**Schema:**\n- summary: string\n- insights: array of strings\n- callToAction: string\n"
},
"typeVersion": 1
},
{
"id": "f43e42ee-3424-4745-a405-edbf37bedcc6",
"name": "Note adhésive13",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
976
],
"parameters": {
"height": 224,
"content": "💬 **Slack Notification**\n\nPosts AI-generated summary, insights, and action items to a Slack channel.\n\n**Setup:**\n- Channel: reply-needed\n- Format: summary + insights + call to action\n"
},
"typeVersion": 1
},
{
"id": "351fd454-e8eb-450c-b6fe-f0ab1fa68962",
"name": "Formater les données client pour Sheets",
"type": "n8n-nodes-base.code",
"position": [
560,
656
],
"parameters": {
"jsCode": "// ClickUp Data Formatter for Google Sheets\n// This code formats ClickUp task data into a structured format for spreadsheet logging\n\nconst inputData = $input.all();\nconst formattedData = [];\n\nfor (const item of inputData) {\n const taskData = item.json;\n \n // Format dates for better readability\n const formatDate = (timestamp) => {\n if (!timestamp) return '';\n return new Date(parseInt(timestamp)).toLocaleString('en-US', {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n timeZone: 'UTC'\n });\n };\n \n // Extract assignee names\n const getAssignees = (assignees) => {\n if (!assignees || assignees.length === 0) return 'Unassigned';\n return assignees.map(assignee => assignee.username).join(', ');\n };\n \n // Extract watcher names\n const getWatchers = (watchers) => {\n if (!watchers || watchers.length === 0) return '';\n return watchers.map(watcher => watcher.username).join(', ');\n };\n \n // Extract tags\n const getTags = (tags) => {\n if (!tags || tags.length === 0) return '';\n return tags.map(tag => tag.name).join(', ');\n };\n \n // Extract custom fields\n const getCustomFields = (customFields) => {\n if (!customFields || customFields.length === 0) return '';\n return customFields.map(field => `${field.name}: ${field.value}`).join(' | ');\n };\n \n // Format priority\n const getPriority = (priority) => {\n if (!priority) return 'None';\n return priority.priority || 'None';\n };\n \n // Calculate time estimates and spent in hours\n const formatTime = (timeInMs) => {\n if (!timeInMs || timeInMs === 0) return '0';\n return (timeInMs / (1000 * 60 * 60)).toFixed(2); // Convert to hours\n };\n \n // Format the data for Google Sheets\n const formattedItem = {\n // Basic Task Information\n 'Task ID': taskData.id || '',\n 'Task Name': taskData.name || '',\n 'Description': taskData.description || taskData.text_content || '',\n 'Status': taskData.status?.status || '',\n 'Status Color': taskData.status?.color || '',\n 'Priority': getPriority(taskData.priority),\n \n // Dates\n 'Date Created': formatDate(taskData.date_created),\n 'Date Updated': formatDate(taskData.date_updated),\n 'Date Closed': formatDate(taskData.date_closed),\n 'Date Done': formatDate(taskData.date_done),\n 'Due Date': formatDate(taskData.due_date),\n 'Start Date': formatDate(taskData.start_date),\n \n // People\n 'Creator': taskData.creator?.username || '',\n 'Creator Email': taskData.creator?.email || '',\n 'Assignees': getAssignees(taskData.assignees),\n 'Watchers': getWatchers(taskData.watchers),\n \n // Organization\n 'List Name': taskData.list?.name || '',\n 'List ID': taskData.list?.id || '',\n 'Project Name': taskData.project?.name || '',\n 'Project ID': taskData.project?.id || '',\n 'Folder Name': taskData.folder?.name || '',\n 'Space ID': taskData.space?.id || '',\n 'Team ID': taskData.team_id || '',\n \n // Task Details\n 'Points': taskData.points || 0,\n 'Time Estimate (Hours)': formatTime(taskData.time_estimate),\n 'Time Spent (Hours)': formatTime(taskData.time_spent),\n 'Order Index': taskData.orderindex || '',\n 'Archived': taskData.archived ? 'Yes' : 'No',\n \n // Additional Information\n 'Tags': getTags(taskData.tags),\n 'Custom Fields': getCustomFields(taskData.custom_fields),\n 'Has Dependencies': taskData.dependencies && taskData.dependencies.length > 0 ? 'Yes' : 'No',\n 'Has Linked Tasks': taskData.linked_tasks && taskData.linked_tasks.length > 0 ? 'Yes' : 'No',\n 'Has Checklists': taskData.checklists && taskData.checklists.length > 0 ? 'Yes' : 'No',\n \n // URLs and Sharing\n 'Task URL': taskData.url || '',\n 'Public Sharing': taskData.sharing?.public ? 'Yes' : 'No',\n 'Permission Level': taskData.permission_level || '',\n \n // Metadata\n 'Data Processed At': new Date().toISOString(),\n 'Processing Status': 'Success'\n };\n \n formattedData.push({\n json: formattedItem,\n pairedItem: item.pairedItem\n });\n}\n\n// Return the formatted data\nreturn formattedData;"
},
"typeVersion": 2
},
{
"id": "ad96b89c-c380-44d6-a0ad-6a4504e79b35",
"name": "Créer une tâche d'intégration ClickUp",
"type": "n8n-nodes-base.clickUp",
"position": [
320,
656
],
"parameters": {
"list": "901411336526",
"name": "={{ $('Log to Google Sheets').item.json[\"Which tutorial did you complete?\"] }}",
"team": "9014871666",
"space": "90143681766",
"folderless": true,
"additionalFields": {
"assignees": "={{ $('Log to Google Sheets').item.json[\"First name\"] }}"
}
},
"credentials": {
"clickUpApi": {
"id": "gDQJASsbW56RbLoy",
"name": "ClickUp account vivek"
}
},
"typeVersion": 1
},
{
"id": "3f90bc74-ed0d-42f7-9761-644ee7cf7185",
"name": "Gérer l'email manquant et journaliser l'erreur",
"type": "n8n-nodes-base.function",
"position": [
-96,
816
],
"parameters": {},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "3e2c977e-4bfb-48da-bc5b-6248e2d719e4",
"connections": {
"031c5052-83c7-43ee-87d8-e9be9b23fd11": {
"main": [
[
{
"node": "46b1e8b2-4f27-4f90-bc3f-f04b9023d416",
"type": "main",
"index": 0
}
]
]
},
"4868a1af-06d1-4fe0-aa3f-9f1dca28163b": {
"ai_memory": [
[
{
"node": "031c5052-83c7-43ee-87d8-e9be9b23fd11",
"type": "ai_memory",
"index": 0
}
]
]
},
"9fa1fad1-085e-4a81-b561-1b9bcf13156b": {
"main": [
[
{
"node": "1a77e0ab-86e6-4ef8-8e72-fad93fc4827c",
"type": "main",
"index": 0
}
]
]
},
"cd2d4992-4229-4081-8ab3-e757e4e3d896": {
"main": [
[
{
"node": "0631a301-2647-4ff4-af72-4cea1b6d4a58",
"type": "main",
"index": 0
},
{
"node": "ad96b89c-c380-44d6-a0ad-6a4504e79b35",
"type": "main",
"index": 0
},
{
"node": "031c5052-83c7-43ee-87d8-e9be9b23fd11",
"type": "main",
"index": 0
}
],
[
{
"node": "3f90bc74-ed0d-42f7-9761-644ee7cf7185",
"type": "main",
"index": 0
}
]
]
},
"1a77e0ab-86e6-4ef8-8e72-fad93fc4827c": {
"main": [
[
{
"node": "cd2d4992-4229-4081-8ab3-e757e4e3d896",
"type": "main",
"index": 0
}
]
]
},
"d7875033-c362-4d0e-9fb2-9c62d866dabe": {
"ai_languageModel": [
[
{
"node": "031c5052-83c7-43ee-87d8-e9be9b23fd11",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"0d20f7f1-6c5a-4608-a22b-4c24800e5af4": {
"ai_outputParser": [
[
{
"node": "031c5052-83c7-43ee-87d8-e9be9b23fd11",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"ad96b89c-c380-44d6-a0ad-6a4504e79b35": {
"main": [
[
{
"node": "351fd454-e8eb-450c-b6fe-f0ab1fa68962",
"type": "main",
"index": 0
}
]
]
},
"351fd454-e8eb-450c-b6fe-f0ab1fa68962": {
"main": [
[
{
"node": "fe9be2b3-c57f-4fec-a525-5f067f72b0ca",
"type": "main",
"index": 0
}
]
]
},
"0631a301-2647-4ff4-af72-4cea1b6d4a58": {
"main": [
[
{
"node": "acb6dc41-37e1-4b4d-b850-a3b34ec43359",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Création de contenu, IA Multimodale
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Rahul Joshi
@rahul08Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.
Partager ce workflow