Describe the problem/error/question
l am creating a workflow that involves using a sendAndWait Gmail node with a form to ask questions and record responses. The form works fine and i get the form responses submitted by the users but at the form it just keeps on showing loading spinner forever.
My Workflow
{“nodes”: [{“parameters”: {“workflowInputs”: {“values”: [{“name”: “name”},{“name”: “email”},{“name”: “tasks”,“type”: “object”},{“name”: “spreadsheetId”},{“name”: “sheetTitle”}]}},“id”: “c055762a-8fe7-4141-a639-df2372f30060”,“typeVersion”: 1.1,“name”: “When Executed by Another Workflow”,“type”: “n8n-nodes-base.executeWorkflowTrigger”,“position”: [-16,352]},{“parameters”: {“operation”: “sendAndWait”,“sendTo”: “[email protected]”,“subject”: “={{ $json.output.subject }}”,“message”: “={{ $json.output.body }}”,“responseType”: “customForm”,“defineForm”: “json”,“jsonOutput”: “={{ $json.output.n8n_form_fields }}”,“options”: {“appendAttribution”: false}},“type”: “n8n-nodes-base.gmail”,“typeVersion”: 2.2,“position”: [560,352],“id”: “33151286-ec1d-4127-8ab0-2dcdf41c255e”,“name”: “Ask Updates”,“webhookId”: “a35e78d7-3049-4736-a30d-8c1d6ed697c2”,“credentials”: {“gmailOAuth2”: {“id”: “D9bJb5hA7wjcUWVm”,“name”: “hellorobot - Gmail”}}},{“parameters”: {“operation”: “append”,“documentId”: {“__rl”: true,“value”: “=https://docs.google.com/spreadsheets/d/1SgoUgPT_11Q_1MJ0RgGUJkQhiP5Talo9eAhR-glgYAA/edit?usp=sharing”,“mode”: “url”},“sheetName”: {“__rl”: true,“value”: “=19 Jan”,“mode”: “name”},“columns”: {“mappingMode”: “defineBelow”,“value”: {“Updates”: “={{ $json.output[0].content[0].text }}”,“Name”: “={{ $(‘When Executed by Another Workflow’).item.json.name }}”},“matchingColumns”: ,“schema”: [{“id”: “Name”,“displayName”: “Name”,“required”: false,“defaultMatch”: false,“display”: true,“type”: “string”,“canBeUsedToMatch”: true,“removed”: false},{“id”: “Updates”,“displayName”: “Updates”,“required”: false,“defaultMatch”: false,“display”: true,“type”: “string”,“canBeUsedToMatch”: true,“removed”: false}],“attemptToConvertTypes”: false,“convertFieldsToString”: false},“options”: {}},“type”: “n8n-nodes-base.googleSheets”,“typeVersion”: 4.7,“position”: [2544,368],“id”: “c162ade2-322e-41ae-a6e4-4435e0fc3e0e”,“name”: “Update Sheet”,“credentials”: {“googleSheetsOAuth2Api”: {“id”: “NF75fSdn5GiTveh6”,“name”: “hellorobot - Sheets”}}},{“parameters”: {“jsCode”: “// Get the input data (assuming it’s the first item)\nconst dataObject = items[0].json.data;\n\nlet combinedString = “”;\nlet counter = 1;\n\nfor (const key in dataObject) {\n if (dataObject.hasOwnProperty(key)) {\n \n // Add the formatted Question and Answer to the string\n // \n adds a new line for readability\n combinedString += `Question ${counter}: ${key}\n`;\n combinedString += `Answer ${counter}: ${dataObject[key]}\n\n`;\n \n counter++;\n }\n}\n\n// Return the result as a single item\nreturn [\n {\n json: {\n text: combinedString\n }\n }\n];”},“type”: “n8n-nodes-base.code”,“typeVersion”: 2,“position”: [1392,352],“id”: “07978278-0dd6-4ae2-89dd-d961d8a87cf0”,“name”: “Format Data”},{“parameters”: {“promptType”: “define”,“text”: “=Generate a email to ask these updates from the employee.\n\n{{ $json.name }}\n{{ $json.email }}\n{{ JSON.stringify($json.tasks) }}”,“hasOutputParser”: true,“options”: {“systemMessage”: “=You are Orangewood Labs Project Manager assistant. Your task is to ask for updates from the respective task owners via Email.\n\nYou must generate a valid JSON response containing:\n1. “body”: HTML for the email (simple and minimal style).\n2. “subject”: A concise email subject.\n3. “n8n_form_fields”: A specific array that defines an n8n Form.\n\nINSTRUCTIONS FOR FORM GENERATION:\nThe form system cannot display nested groups or headers. It is a flat list. Therefore, when creating questions based on specific Project Tasks, you must format the “fieldLabel” to include context.\nFormat the fieldLabel as: “[Project Name - Task Name] The actual question?”\n\n- Use “fieldType”: “textarea” for qualitative questions (e.g., “What did you debug?”).\n- Use “fieldType”: “number” if asking for a specific metric (e.g., “How many units passed?”).\n- Mark critical questions as “requiredField”: true.\n- File Uploads: Use “fieldType”: “file” if the user needs to attach documents, logs, or images (e.g., “Upload the crash logs” or “Attach the CAD drawing”).”}},“type”: “/n8n-nodes-langchain.agent”,“typeVersion”: 3.1,“position”: [208,352],“id”: “966c259c-9c8f-46b3-a935-47084782cb1e”,“name”: “Email Generator”},{“parameters”: {“model”: “openai/gpt-oss-120b”,“options”: {}},“type”: “/n8n-nodes-langchain.lmChatGroq”,“typeVersion”: 1,“position”: [128,560],“id”: “d3770915-365d-4bdc-9fdc-ad82a193fed3”,“name”: “gpt-oss-120b”,“credentials”: {“groqApi”: {“id”: “UADF7Ijv0M59tqJW”,“name”: “tushar-litellm”}}},{“parameters”: {“schemaType”: “manual”,“inputSchema”: “{\n “subject”: “Update Request: PG ELECTROPLAST”,\n “body”: “…”,\n “n8n_form_fields”: [\n {\n “fieldLabel”: “[Rejection Logic] What did you ship or debug today?”,\n “fieldType”: “textarea”,\n “requiredField”: true,\n “placeholder”: “Describe debugging steps…”\n },\n {\n “fieldLabel”: “[Rejection Logic] Any hurdles with sensor timing?”,\n “fieldType”: “textarea”,\n “requiredField”: false\n },\n {\n “fieldLabel”: “[Camera 2 Teaching] What hand-off artifacts are ready?”,\n “fieldType”: “textarea”,\n “requiredField”: true\n },\n {\n “fieldLabel”: “[General] How many hours were spent on testing?”,\n “fieldType”: “number”,\n “requiredField”: false\n }\n ]\n}”},“type”: “/n8n-nodes-langchain.outputParserStructured”,“typeVersion”: 1.3,“position”: [384,560],“id”: “194f967f-7c30-4754-9b42-07ce99adbd5f”,“name”: “Structured Output Parser”},{“parameters”: {“model”: {“__rl”: true,“value”: “gpt-5.2”,“mode”: “list”,“cachedResultName”: “gpt-5.2”},“builtInTools”: {},“options”: {}},“type”: “/n8n-nodes-langchain.lmChatOpenAi”,“typeVersion”: 1.3,“position”: [2688,608],“id”: “a50ca220-30c2-447f-9432-290a66633c2b”,“name”: “gpt-5.2”,“credentials”: {“openAiApi”: {“id”: “IMB0Z40p5Dp06fWD”,“name”: “n8n - Orangewood”}}},{“parameters”: {“authentication”: “oAuth2”,“spaceId”: “={{ $fromAI(“space_id”, “The Space/Group ID in space/ format”, “string”, “newspaceid”) }}”,“messageUi”: {“text”: “={{ /n8n-auto-generated-fromAI-override/ $fromAI(‘Text’, ``, ‘string’) }}”},“additionalFields”: {}},“type”: “n8n-nodes-base.googleChatTool”,“typeVersion”: 1,“position”: [2896,608],“id”: “9660c294-d7a8-4c86-b19d-5f6fecf61cce”,“name”: “Send Message”,“webhookId”: “081f59ef-bc3e-4f93-9161-c6322df562c0”,“credentials”: {“googleChatOAuth2Api”: {“id”: “UiaftKP2sZ8yNgiB”,“name”: “admin@OWL”}}},{“parameters”: {“resource”: “object”,“operation”: “create”,“bucketName”: “n8n-project-automation”,“objectName”: “={{ $json.original_field_name }}.{{ $binary.data.fileExtension }}”,“createData”: {},“createQuery”: {},“encryptionHeaders”: {},“requestOptions”: {}},“type”: “n8n-nodes-base.googleCloudStorage”,“typeVersion”: 1,“position”: [992,544],“id”: “99e6f18e-18be-4424-9319-c684d80fc5ec”,“name”: “Upload to GCP”,“retryOnFail”: true,“credentials”: {“googleCloudStorageOAuth2Api”: {“id”: “1EOV8cjScWG642is”,“name”: “Google Cloud Storage account”}}},{“parameters”: {“jsCode”: “// Loop over all incoming items\nreturn items.map(item => {\n \n // Initialize default status\n let finalLink = “Not Uploaded”;\n \n // Check if ‘mediaLink’ exists and is not empty\n // Note: We use item.json[“mediaLink”] directly\n if (item.json && item.json[“mediaLink”]) {\n finalLink = item.json[“mediaLink”];\n } \n\n // Return the original data plus the new status field\n return {\n json: {\n …item.json, \n file_link_status: finalLink\n }\n };\n});”},“type”: “n8n-nodes-base.code”,“typeVersion”: 2,“position”: [1184,544],“id”: “51ad79e1-9dd2-4bef-a63b-4516618a01d5”,“name”: “Format Link”},{“parameters”: {“promptType”: “define”,“text”: “=Task Owner: {{ $(‘When Executed by Another Workflow’).item.json.name }}\n\nOriginal RAW Questions (You can extract Group IDs from here):\n{{ JSON.stringify($(‘When Executed by Another Workflow’).item.json.tasks) }}\n\nQuestions Asked and Updates:\n{{ JSON.stringify($(‘Format Data’).all()) }}\n”,“hasOutputParser”: true,“options”: {“systemMessage”: “=You are the AI Project Manager for Orangewood Labs. Your task is to analyze raw updates from team members, broadcast a summary to leadership via Google Chat, and generate an email receipt for the sender.\n\n### 1. ANALYZE THE INPUT\nRead the raw Questions and Answers provided. Determine:\n1. The Content: Extract actual progress, blockers, and next steps.\n2. The Status: Determine if the task is “Completed” or “Working on it”.\n3. The Score (0-10): Rate the quality based on the rubric below.\n\n### 2. SCORING RUBRIC (0-10)\n* 0-3 (Unacceptable): Rude, slang (e.g., “nhi bro”), dismissive, or zero effort.\n* 4-6 (Weak): Vague (“working on it”), lacks detail, misses questions.\n* 7-8 (Good): Professional, clear progress, specific details.\n* 9-10 (Excellent): Proactive, detailed metrics, clear blockers + solutions.\n\n### 3. ACTION 1: GOOGLE CHAT BROADCAST\nConstruct the message strictly following this format and use the Google Chat tool to send it immediately.\n"📢 Update: [Project Name - Task Name] | Owner: @[Name]\n• Status: [Completed | Working on it]\n• Progress: [Summarize achievement. If rude/empty: “No professional update provided.”]\n• Blocker: [Ommit if none]\n• Next Step: [Immediate action item]\n• Quality Score: [Score]/10"\n\n### 4. ACTION 2: EMAIL GENERATION (HTML)\nGenerate a professional HTML email body to send back to the user.\n* Tone: If Score < 4, the tone should be a firm warning about professional standards. If Score > 6, the tone should be appreciative.\n* Structure:\n * Greeting (“Hi [Name],”)\n * Acknowledgment of receipt.\n * A summary of what was recorded.\n * The Quality Score they received.\n * Closing.\n\n### 5. FINAL OUTPUT FORMAT (JSON)\nAfter sending the Google Chat message, you MUST return a valid JSON object. Do not return markdown text outside the JSON.\n\n{\n “email_subject”: “Update Receipt: [Project Name] - [Date]”,\n “email_html”: “Hi [Name], …”\n}\n\n### IMPORTANT CONSTRAINTS\n* Sanitize Inputs: If input is unprofessional (e.g., “nhi bro”), Score = 0. The HTML email must politely inform them the update was flagged as unprofessional.\n* Order of Operations: Call the Google Chat tool FIRST. Return the JSON SECOND.”}},“type”: “/n8n-nodes-langchain.agent”,“typeVersion”: 3.1,“position”: [2832,368],“id”: “e1225590-d697-4d54-8467-1a9f198a29b9”,“name”: “Updates Agent”},{“parameters”: {},“type”: “n8n-nodes-base.merge”,“typeVersion”: 3.2,“position”: [1680,368],“id”: “94bfc03e-7e10-4c88-8078-a20e5aaae0a6”,“name”: “Merge1”},{“parameters”: {“aggregate”: “aggregateAllItemData”,“options”: {}},“type”: “n8n-nodes-base.aggregate”,“typeVersion”: 1,“position”: [1952,368],“id”: “57ed0837-5b7b-4e69-9ba3-1b1617370305”,“name”: “Aggregate”},{“parameters”: {“jsCode”: “const results = ;\n\nfor (const item of $input.all()) {\n // Only look at the Binary tab (where the actual files live)\n if (item.binary) {\n const keys = Object.keys(item.binary);\n \n for (const key of keys) {\n // We push exactly one item per file found\n results.push({\n json: {\n // This captures the long key (e.g., “Project_PG…”) for your filename\n original_field_name: key \n },\n binary: {\n // This standardizes the file data into a key called ‘data’ for the GCP node\n data: item.binary[key]\n }\n });\n }\n }\n}\n\nreturn results;”},“type”: “n8n-nodes-base.code”,“typeVersion”: 2,“position”: [800,544],“id”: “75b8001c-1a49-4715-a1f4-26c3f818047b”,“name”: “Code in JavaScript”},{“parameters”: {“aggregate”: “aggregateAllItemData”,“destinationFieldName”: “files”,“options”: {}},“type”: “n8n-nodes-base.aggregate”,“typeVersion”: 1,“position”: [1392,544],“id”: “4f39f43e-2953-4df1-953a-d393d250916e”,“name”: “Aggregate1”},{“parameters”: {“modelId”: {“__rl”: true,“value”: “gpt-5-mini”,“mode”: “list”,“cachedResultName”: “GPT-5-MINI”},“responses”: {“values”: [{“content”: “=Here is my message text:\n{{ $json.data[0].text }}\n\nHere are my file upload links:\n{{ JSON.stringify($json.data[1].files) }}\n\nPlease replace the answer to file upload questions with the actual file links (use “file_link_status”)\n\nDon’t include “Here is my message text” or any filler text. Just give me output.”}]},“builtInTools”: {},“options”: {}},“type”: “/n8n-nodes-langchain.openAi”,“typeVersion”: 2.1,“position”: [2176,368],“id”: “7631b41a-b9b9-42b3-981b-eb3190fe163f”,“name”: “Replace File Links”,“credentials”: {“openAiApi”: {“id”: “IMB0Z40p5Dp06fWD”,“name”: “n8n - Orangewood”}}},{“parameters”: {“sendTo”: “={{ $(‘When Executed by Another Workflow’).item.json.email }}”,“subject”: “Send this to WhatsApp”,“message”: “={{ $json.output.email_html }}”,“options”: {}},“type”: “n8n-nodes-base.gmail”,“typeVersion”: 2.2,“position”: [3312,368],“id”: “f825e90c-1325-47d9-bd4e-bb58decc39a3”,“name”: “Send to Task Owner”,“webhookId”: “9d50f710-c509-4632-b514-5fb715cec3d6”,“credentials”: {“gmailOAuth2”: {“id”: “D9bJb5hA7wjcUWVm”,“name”: “hellorobot - Gmail”}}},{“parameters”: {“schemaType”: “manual”,“inputSchema”: “{\n “type”: “object”,\n “properties”: {\n “email_subject”: {\n “type”: “string”,\n “description”: “The subject line for the email. Format: ‘Update Receipt: [Project Name] - [Date]’”\n },\n “email_html”: {\n “type”: “string”,\n “description”: "The complete, professionally formatted HTML string for the email body. It must include the greeting, summary of the update, quality score, and appropriate closing tags (e.g., , , )."\n },\n “quality_score”: {\n “type”: “integer”,\n “description”: “The calculated quality score (0-10) for this update.”\n }\n },\n “required”: [\n “email_subject”,\n “email_html”,\n “quality_score”\n ]\n}”},“type”: “/n8n-nodes-langchain.outputParserStructured”,“typeVersion”: 1.3,“position”: [3104,608],“id”: “5b8c2e1f-dc97-4628-bee5-769b01817334”,“name”: “Structured Output Parser1”}],“connections”: {“When Executed by Another Workflow”: {“main”: [[{“node”: “Email Generator”,“type”: “main”,“index”: 0}]]},“Ask Updates”: {“main”: [[{“node”: “Format Data”,“type”: “main”,“index”: 0},{“node”: “Code in JavaScript”,“type”: “main”,“index”: 0}]]},“Update Sheet”: {“main”: [[{“node”: “Updates Agent”,“type”: “main”,“index”: 0}]]},“Format Data”: {“main”: [[{“node”: “Merge1”,“type”: “main”,“index”: 0}]]},“Email Generator”: {“main”: [[{“node”: “Ask Updates”,“type”: “main”,“index”: 0}]]},“gpt-oss-120b”: {“ai_languageModel”: [[{“node”: “Email Generator”,“type”: “ai_languageModel”,“index”: 0}]]},“Structured Output Parser”: {“ai_outputParser”: [[{“node”: “Email Generator”,“type”: “ai_outputParser”,“index”: 0}]]},“gpt-5.2”: {“ai_languageModel”: [[{“node”: “Updates Agent”,“type”: “ai_languageModel”,“index”: 0}]]},“Send Message”: {“ai_tool”: [[{“node”: “Updates Agent”,“type”: “ai_tool”,“index”: 0}]]},“Upload to GCP”: {“main”: [[{“node”: “Format Link”,“type”: “main”,“index”: 0}]]},“Format Link”: {“main”: [[{“node”: “Aggregate1”,“type”: “main”,“index”: 0}]]},“Updates Agent”: {“main”: [[{“node”: “Send to Task Owner”,“type”: “main”,“index”: 0}]]},“Merge1”: {“main”: [[{“node”: “Aggregate”,“type”: “main”,“index”: 0}]]},“Aggregate”: {“main”: [[{“node”: “Replace File Links”,“type”: “main”,“index”: 0}]]},“Code in JavaScript”: {“main”: [[{“node”: “Upload to GCP”,“type”: “main”,“index”: 0}]]},“Aggregate1”: {“main”: [[{“node”: “Merge1”,“type”: “main”,“index”: 1}]]},“Replace File Links”: {“main”: [[{“node”: “Update Sheet”,“type”: “main”,“index”: 0}]]},“Structured Output Parser1”: {“ai_outputParser”: [[{“node”: “Updates Agent”,“type”: “ai_outputParser”,“index”: 0}]]}},“pinData”: {“When Executed by Another Workflow”: [{“name”: “Tushar Gaurav”,“email”: “[email protected]”,“tasks”: [{“projectName”: “Project - PG ELECTROPLAST - C20-0012-020”,“spaceId”: “spaces/AAQA4BHlyYw”,“task”: “Internal testing: Rejection On Conveyor (Status: Delayed; Expected: 14-Jan-2026 → 15-Jan-2026)”,“questions”: [“Updates?”,“Any challange you observed that you want to convery to the team?”,“Please upload supporting documents.”,“Anything else I should know?”]},{“projectName”: “Project - PG ELECTROPLAST - C20-0012-020”,“spaceId”: “spaces/AAQA4BHlyYw”,“task”: “Internal testing: Camera 2 Teaching (Expected: 16-Jan-2026 → 21-Jan-2026)”,“questions”: [“Updates?”,“Any challange you observed that you want to convery to the team?”,“Please upload supporting documents.”,“Anything else I should know?”]},{“projectName”: “Project - Prokits Digital - C323-23-2332”,“spaceId”: “spaces/AAQAE9DMYQQ”,“task”: “Internal testing: Rejection On Conveyor (Status: Delayed; Expected: 14-Jan-2026 → 15-Jan-2026)”,“questions”: [“Updates?”,“Any challange you observed that you want to convery to the team?”,“Please upload supporting documents.”,“Anything else I should know?”]}],“spreadsheetId”: “1SgoUgPT_11Q_1MJ0RgGUJkQhiP5Talo9eAhR-glgYAA”,“sheetTitle”: “17 Jan”}]},“meta”: {“templateCredsSetupCompleted”: true,“instanceId”: “1ea27314adda8caa1ba068a42544950f99098b12e0ccfb09c744e377dcd31d2a”}}
Information on my n8n setup
- n8n version: 2.1.5
- Database : Postgres
- Running n8n via Docker
- Operating system: Ubuntu 25 Server


