{
  "id": "hSC68gkBlh2XuLpG",
  "name": "Demo- Whatsapp Voice Agent",
  "tags": [],
  "nodes": [
    {
      "id": "43b9c5a5-4d0b-4713-a9c5-ea00e24cc320",
      "name": "Supabase Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        1216,
        -32
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {},
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "toolDescription": "Retrieve this tool to get pricing Informatio or any other General Inquiry."
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "07c67c64-9390-472d-807c-3c0c4a0405a7",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        1216,
        112
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "15ee6172-40e2-439b-bfce-a64850fdf4d1",
      "name": "Create Calendar Event",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        -240,
        32
      ],
      "parameters": {
        "end": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End', ``, 'string') }}",
        "start": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "additionalFields": {}
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "e5a95d98-88ee-4557-84f7-ee3a4bf56ad1",
      "name": "Fetch Calendar Events",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        -96,
        32
      ],
      "parameters": {
        "options": {},
        "timeMax": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Before', ``, 'string') }}",
        "timeMin": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('After', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "operation": "getAll"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "f22f3c2d-1e22-45d8-9cfd-8895733b862b",
      "name": "Update Calendar Event",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        48,
        48
      ],
      "parameters": {
        "eventId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Event_ID', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "operation": "update",
        "updateFields": {}
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "d56e75ab-7086-45cb-bf2c-dca53cfbbe8d",
      "name": "Delete Calendar Event",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        176,
        80
      ],
      "parameters": {
        "eventId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Event_ID', ``, 'string') }}",
        "options": {},
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "user@example.com",
          "cachedResultName": "user@example.com"
        },
        "operation": "delete"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "d8c9f9d7-1fb2-4293-b411-1d72afd03c63",
      "name": "Send Email Notification",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        720,
        352
      ],
      "parameters": {
        "sendTo": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('To', ``, 'string') }}",
        "message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
        "options": {},
        "subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Subject', ``, 'string') }}",
        "emailType": "text"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "45496f90-c8a7-40a5-bbe3-2f0b183828e4",
      "name": "MCP Server \u2013 Calendar",
      "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
      "position": [
        -240,
        -240
      ],
      "parameters": {
        "path": "1902a1d2-f8a8-4601-b20c-90e824fe478d"
      },
      "typeVersion": 2
    },
    {
      "id": "9ebb9d32-59ea-4f52-ba5a-f6a57356ac8d",
      "name": "MCP Server \u2013 Gmail",
      "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
      "position": [
        576,
        160
      ],
      "parameters": {
        "path": "41a2ab5f-1a7d-440b-a1e3-1b2308dee744"
      },
      "typeVersion": 2
    },
    {
      "id": "566c8afb-cb1b-4216-a543-5b26cb5182e8",
      "name": "MCP Server \u2013 Knowledge Base",
      "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
      "position": [
        1152,
        -240
      ],
      "parameters": {
        "path": "3643c062-c554-43d8-84d1-692b886b780f"
      },
      "typeVersion": 2
    },
    {
      "id": "61ded9b5-737a-42bf-956e-60614c87fbe2",
      "name": "Incoming Webhook (VAPI)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        480,
        -112
      ],
      "parameters": {
        "path": "81e240fc-d3fb-4ccd-b91a-0aacbf2d8f2a",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "fe90d72c-fef0-4646-8d07-f90851015ed0",
      "name": "Respond to Webhook (VAPI)",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        816,
        -112
      ],
      "parameters": {
        "options": {
          "responseHeaders": {
            "entries": [
              {
                "name": "Content-Type",
                "value": "application/xml"
              }
            ]
          }
        },
        "respondWith": "text",
        "responseBody": "=<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Response>\n   <Dial>\n      <Sip>sip:15795503867@sip.vapi.ai</Sip>\n   </Dial>\n</Response>\n"
      },
      "typeVersion": 1.4
    },
    {
      "id": "2000941e-5340-4f44-91a2-4068a172f316",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        -432
      ],
      "parameters": {
        "color": 4,
        "width": 592,
        "height": 768,
        "content": "\ud83d\udcc5 Calendar MCP\nHandles Calendar actions:\n- Create\n- Fetch\n- Update\n- Delete\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e2af4a5c-aaac-4458-a26e-fda5db9c4fa5",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        64
      ],
      "parameters": {
        "color": 5,
        "width": 496,
        "height": 448,
        "content": "\ud83d\udce7 Gmail MCP\nSends confirmation/reminder emails\nbased on voice commands.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "68569b1b-a853-47f2-90b3-284594f44c53",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1088,
        -384
      ],
      "parameters": {
        "color": 6,
        "width": 400,
        "height": 656,
        "content": "\ud83d\udcda Knowledge Base MCP\nOpenAI generates embeddings from content.\nSupabase Vector Store saves/retrieves data\nfor knowledge base queries.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "36ab17f2-52f8-401b-af07-419cc50ccb4e",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -592
      ],
      "parameters": {
        "color": 2,
        "width": 640,
        "height": 624,
        "content": "## Entry Point \u2013 Incoming Webhook (VAPI)\n\nThis is the starting point of the workflow.  \n- A WhatsApp message or voice input is received via Twilio.  \n- Twilio routes the audio stream to VAPI through the TwiML app.  \n- VAPI processes the voice command and decides which MCP Server (Calendar, Gmail, Knowledge Base) should handle the request.  \n- The request is then passed into this webhook in n8n for execution.  \n\n### Flow:\nWhatsApp \u2192 Twilio (TwiML app) \u2192 VAPI \u2192 n8n Incoming Webhook  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "22d6f683-025c-4023-9151-c5ef3f9b0dc8",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        384,
        -304
      ],
      "parameters": {
        "color": 3,
        "width": 272,
        "height": 336,
        "content": "This webhook is triggered by VAPI when a WhatsApp voice command is received via Twilio. \nVAPI interprets the user\u2019s request and forwards it here. \nFrom this point, the workflow decides which MCP server (Calendar, Gmail, Knowledge Base) should process the action.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "74243893-60e4-4289-a9d5-8c9f363b897d",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        752,
        -304
      ],
      "parameters": {
        "color": 3,
        "width": 272,
        "height": 336,
        "content": "This node sends the processed response back to VAPI. \nIt ensures that the result of the MCP server execution (e.g., calendar update, email confirmation, knowledge base query) \nis returned to the user via WhatsApp.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "09fcb8e2-ec67-4f88-a908-d558030605fe",
  "connections": {
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Supabase Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Create Calendar Event": {
      "ai_tool": [
        [
          {
            "node": "MCP Server \u2013 Calendar",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Delete Calendar Event": {
      "ai_tool": [
        [
          {
            "node": "MCP Server \u2013 Calendar",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Calendar Events": {
      "ai_tool": [
        [
          {
            "node": "MCP Server \u2013 Calendar",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Supabase Vector Store": {
      "ai_tool": [
        [
          {
            "node": "MCP Server \u2013 Knowledge Base",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Update Calendar Event": {
      "ai_tool": [
        [
          {
            "node": "MCP Server \u2013 Calendar",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Incoming Webhook (VAPI)": {
      "main": [
        [
          {
            "node": "Respond to Webhook (VAPI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Email Notification": {
      "ai_tool": [
        [
          {
            "node": "MCP Server \u2013 Gmail",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}