Back to Catalog

Templates by Antonio Gasso

Build a WhatsApp assistant for text, audio & images using GPT-4o & Evolution API

Build an intelligent WhatsApp assistant that automatically responds to customer messages using AI. This template uses the Evolution API community node for WhatsApp integration and OpenAI for natural language processing, with built-in conversation memory powered by Redis to maintain context across messages. > ⚠️ Self-hosted requirement: This workflow uses the Evolution API community node, which is only available on self-hosted n8n instances. It will not work on n8n Cloud. What this workflow does Receives incoming WhatsApp messages via Evolution API webhook Filters and processes text, audio, and image messages Transcribes audio messages using OpenAI Whisper Analyzes images using GPT-4 Vision Generates contextual responses with conversation memory Sends replies back through WhatsApp Who is this for? Businesses wanting to automate customer support on WhatsApp Teams needing 24/7 automated responses with AI Developers building multimodal chat assistants Companies looking to reduce response time on WhatsApp Setup instructions Evolution API: Install and configure Evolution API on your server. Create an instance and obtain your API key and instance name. Redis: Set up a Redis instance for conversation memory. You can use a local installation or a cloud service like Redis Cloud. OpenAI: Get your API key from platform.openai.com with access to GPT and Whisper models. Webhook: Configure your Evolution API instance to send webhooks to your n8n webhook URL. Customization options Modify the system prompt in the AI node to change the assistant's personality and responses Adjust the Redis TTL to control how long conversation history is retained Add additional message type handlers for documents, locations, or contacts Integrate with your CRM or database to personalize responses Credentials required Evolution API credentials (self-hosted) OpenAI API key Redis connection

Antonio GassoBy Antonio Gasso
1686

Complete client onboarding: Form to Monday.com, Google Drive & Email

Overview Streamline your entire client onboarding process with a single workflow. When a new client submits the intake form, this automation creates a Monday.com item, generates a complete Google Drive folder structure from your template, updates the Monday item with the folder link, and sends a personalized welcome email—all automatically. What This Workflow Does Displays a professional intake form (client name, email, project type) Creates a new item in your Monday.com board with all details Generates a Google Drive folder for the client Duplicates your template folder structure using Apps Script Updates the Monday.com item with the Google Drive folder link Sends a welcome email to the client with folder access Key Features End-to-end automation — From form submission to welcome email CRM integration — All client data captured in Monday.com Organized file storage — Consistent folder structure for every client Professional onboarding — Clients receive immediate welcome email with resources Fully customizable — Add more form fields, notifications, or integrations Prerequisites Monday.com account with API credentials Google Drive account with OAuth2 credentials Gmail account with OAuth2 credentials Google Apps Script deployment (code below) Template folder in Google Drive with {{NAME}} placeholders Setup Step 1: Get your Monday.com IDs Open your Monday.com board Board ID: Check the URL → monday.com/boards/BOARD_ID Group ID: Use Monday API Explorer or browser dev tools Column IDs: Found in column settings or via API Step 2: Create your Drive template folder 📁 {{NAME}} - Client Files ├── 📁 01. Contracts & Agreements ├── 📁 02. {{NAME}} - Assets ├── 📁 03. Deliverables ├── 📁 04. Communications └── 📄 {{NAME}} - Project Brief.gdoc Step 3: Deploy Apps Script Go to script.google.com Create new project → Paste code below Deploy → New deployment → Web app Execute as: Me | Access: Anyone Copy the deployment URL Step 4: Configure the workflow Replace these placeholders: YOURBOARDID — Monday.com board ID YOURGROUPID — Monday.com group ID DESTINATIONPARENTFOLDER_ID — Drive folder for new client folders YOURAPPSSCRIPT_URL — Apps Script deployment URL YOURTEMPLATEFOLDER_ID — Template folder to duplicate Step 5: Connect credentials Monday.com API credentials Google Drive OAuth2 Gmail OAuth2 --- Apps Script Code javascript function doPost(e) { try { var params = e.parameter; var templateFolderId = params.templateFolderId; var name = params.name; var destinationFolderId = params.destinationFolderId; if (!templateFolderId || !name) { return jsonResponse({ success: false, error: 'Missing required parameters: templateFolderId and name are required' }); } var templateFolder = DriveApp.getFolderById(templateFolderId); if (destinationFolderId) { var destinationFolder = DriveApp.getFolderById(destinationFolderId); copyContentsRecursively(templateFolder, destinationFolder, name); return jsonResponse({ success: true, id: destinationFolder.getId(), url: destinationFolder.getUrl(), name: destinationFolder.getName(), mode: 'copiedtoexisting', timestamp: new Date().toISOString() }); } else { var parentFolder = templateFolder.getParents().next(); var newFolderName = replacePlaceholders(templateFolder.getName(), name); var newFolder = parentFolder.createFolder(newFolderName); copyContentsRecursively(templateFolder, newFolder, name); return jsonResponse({ success: true, id: newFolder.getId(), url: newFolder.getUrl(), name: newFolder.getName(), mode: 'created_new', timestamp: new Date().toISOString() }); } } catch (error) { return jsonResponse({ success: false, error: error.toString() }); } } function replacePlaceholders(text, name) { var result = text; result = result.replace(/\{\{NAME\}\}/g, name); result = result.replace(/\{\{name\}\}/g, name.toLowerCase()); result = result.replace(/\{\{Name\}\}/g, name); return result; } function copyContentsRecursively(sourceFolder, destinationFolder, name) { var files = sourceFolder.getFiles(); while (files.hasNext()) { try { var file = files.next(); var newFileName = replacePlaceholders(file.getName(), name); file.makeCopy(newFileName, destinationFolder); Utilities.sleep(150); } catch (error) { Logger.log('Error copying file: ' + error.toString()); } } var subfolders = sourceFolder.getFolders(); while (subfolders.hasNext()) { try { var subfolder = subfolders.next(); var newSubfolderName = replacePlaceholders(subfolder.getName(), name); var newSubfolder = destinationFolder.createFolder(newSubfolderName); Utilities.sleep(200); copyContentsRecursively(subfolder, newSubfolder, name); } catch (error) { Logger.log('Error copying subfolder: ' + error.toString()); } } } function jsonResponse(data) { return ContentService .createTextOutput(JSON.stringify(data)) .setMimeType(ContentService.MimeType.JSON); } --- Use Cases Agencies — Automate client onboarding with CRM tracking Freelancers — Professional intake process for new projects Consulting firms — Standardized client setup workflow Creative studios — Organize assets and deliverables from day one Service businesses — Streamline customer setup and communication Customization Ideas Add more form fields: phone, company size, budget, deadline Add Slack notification to alert your team Create tasks in Monday.com sub-items Add to Google Calendar for kickoff meeting Integrate with invoicing (Stripe, QuickBooks) Notes Apps Script may take 30-60 seconds for large folder structures Monday.com column IDs must match your board's actual columns The welcome email can be customized with your branding Test with a single client before full deployment

Antonio GassoBy Antonio Gasso
185

Mistral OCR, GPT-4o-mini, and Google Sheets integration for enhanced data processing

Process multiple invoices automatically using Mistral's dedicated OCR model—at approximately $0.002 per page. Upload batches of PDF, PNG, or JPG invoices through a simple form, extract structured financial data with AI, validate results with confidence scoring, and save everything to Google Sheets. What this workflow does Accepts multiple invoice uploads via n8n Form Trigger Processes files in batch with rate limiting Converts each file to base64 and sends to Mistral OCR API Extracts 9 standard fields using GPT-4o-mini Information Extractor Validates data and assigns confidence scores (high/medium/low) Saves all results to Google Sheets with status tracking Fields extracted Invoice Number, Date, Vendor Name, Tax ID, Subtotal, Tax Rate, Tax Amount, Total Amount, Currency Use cases Accountants processing client invoices in bulk Small businesses digitizing paper receipts Bookkeepers automating repetitive data entry Finance teams building searchable invoice databases Setup requirements Mistral API Key (console.mistral.ai) — HTTP Header Auth credential OpenAI API Key (platform.openai.com) Google Sheets OAuth connection Google Sheet with 15 columns (template in workflow notes)

Antonio GassoBy Antonio Gasso
119

Template-based Google Drive folder generation with Forms and Apps Script

Overview Stop manually creating folder structures for every new client or project. This workflow provides a simple form where users enter a name, and automatically duplicates your template folder structure in Google Drive—replacing all placeholders with the submitted name. What This Workflow Does Displays a form where users enter a name (client, project, event, etc.) Creates a new main folder in Google Drive Calls Google Apps Script to duplicate your entire template structure Replaces all {{NAME}} placeholders in files and folder names Key Features Simple form interface — No technical knowledge required to use Recursive duplication — Copies all subfolders and files Smart placeholders — Automatically replaces {{NAME}} everywhere Production-ready — Works immediately after setup Prerequisites Google Drive account with OAuth2 credentials in n8n Google Apps Script deployment (code below) Template folder in Drive using {{NAME}} as placeholder Setup Step 1: Create your template folder 📁 {{NAME}} - Project Files ├── 📁 01. {{NAME}} - Documents ├── 📁 02. {{NAME}} - Assets ├── 📁 03. Deliverables └── 📄 {{NAME}} - Brief.gdoc Step 2: Deploy Apps Script Go to script.google.com Create new project → Paste code below Deploy → New deployment → Web app Execute as: Me | Access: Anyone Copy the deployment URL Step 3: Configure workflow Replace these placeholders: DESTINATIONPARENTFOLDER_ID — Where new folders are created YOURAPPSSCRIPT_URL — URL from Step 2 YOURTEMPLATEFOLDER_ID — Folder to duplicate Step 4: Test Activate workflow → Open form URL → Submit a name → Check Drive! --- Apps Script Code javascript function doPost(e) { try { var params = e.parameter; var templateFolderId = params.templateFolderId; var name = params.name; var destinationFolderId = params.destinationFolderId; if (!templateFolderId || !name) { return jsonResponse({ success: false, error: 'Missing required parameters: templateFolderId and name are required' }); } var templateFolder = DriveApp.getFolderById(templateFolderId); if (destinationFolderId) { var destinationFolder = DriveApp.getFolderById(destinationFolderId); copyContentsRecursively(templateFolder, destinationFolder, name); return jsonResponse({ success: true, id: destinationFolder.getId(), url: destinationFolder.getUrl(), name: destinationFolder.getName(), mode: 'copiedtoexisting', timestamp: new Date().toISOString() }); } else { var parentFolder = templateFolder.getParents().next(); var newFolderName = replacePlaceholders(templateFolder.getName(), name); var newFolder = parentFolder.createFolder(newFolderName); copyContentsRecursively(templateFolder, newFolder, name); return jsonResponse({ success: true, id: newFolder.getId(), url: newFolder.getUrl(), name: newFolder.getName(), mode: 'created_new', timestamp: new Date().toISOString() }); } } catch (error) { return jsonResponse({ success: false, error: error.toString() }); } } function replacePlaceholders(text, name) { var result = text; result = result.replace(/\{\{NAME\}\}/g, name); result = result.replace(/\{\{name\}\}/g, name.toLowerCase()); result = result.replace(/\{\{Name\}\}/g, name); return result; } function copyContentsRecursively(sourceFolder, destinationFolder, name) { var files = sourceFolder.getFiles(); while (files.hasNext()) { try { var file = files.next(); var newFileName = replacePlaceholders(file.getName(), name); file.makeCopy(newFileName, destinationFolder); Utilities.sleep(150); } catch (error) { Logger.log('Error copying file: ' + error.toString()); } } var subfolders = sourceFolder.getFolders(); while (subfolders.hasNext()) { try { var subfolder = subfolders.next(); var newSubfolderName = replacePlaceholders(subfolder.getName(), name); var newSubfolder = destinationFolder.createFolder(newSubfolderName); Utilities.sleep(200); copyContentsRecursively(subfolder, newSubfolder, name); } catch (error) { Logger.log('Error copying subfolder: ' + error.toString()); } } } function jsonResponse(data) { return ContentService .createTextOutput(JSON.stringify(data)) .setMimeType(ContentService.MimeType.JSON); } --- Use Cases Agencies — Client folder structure on new signup Freelancers — Project folders from intake form HR Teams — Employee onboarding folders Schools — Student portfolio folders Event Planners — Event documentation folders Notes Apps Script may take +60 seconds for large structures Timeout is set to 5 minutes for complex templates Your Google account needs edit access to template and destination folders

Antonio GassoBy Antonio Gasso
88
All templates loaded