AutomationFlowsAI & RAG › Send AI Travel Quotations via Whatsapp with Gemini, Google Sheets and Docs

Send AI Travel Quotations via Whatsapp with Gemini, Google Sheets and Docs

Byiamvaar @iamvaar on n8n.io

This workflow responds to incoming WhatsApp messages with AI-generated travel package quotations by looking up clients in Google Sheets, loading pricing from Google Docs, generating a structured reply with Google Gemini, logging the interaction, and sending the response back via…

Event trigger★★★★☆ complexityAI-powered20 nodesWhatsApp TriggerHTTP RequestAgentGoogle Gemini ChatOutput Parser StructuredGoogle SheetsGoogle DocsWhatsApp
AI & RAG Trigger: Event Nodes: 20 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #17573 — we link there as the canonical source.

This workflow follows the Agent → Google Docs recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "73bb1jMtMWSR2E0r",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI-Powered WhatsApp Quotation Agent",
  "tags": [],
  "nodes": [
    {
      "id": "3a58109f-d44a-4fb0-b3a5-95640bce58db",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        912,
        -352
      ],
      "parameters": {
        "width": 480,
        "height": 896,
        "content": "## AI-Powered WhatsApp Quotation Agent\n\n### How it works\n\nThe workflow triggers when a new message is received via WhatsApp.\nIt looks up existing client details in Google Sheets or creates a new client record if they are messaging for the first time.\nPricing details are retrieved from a Google Doc to provide the AI with accurate business context.\nAn AI Agent powered by Gemini processes the message and generates a structured response while displaying a typing indicator.\nThe final response and interaction logs are recorded in Google Sheets.\nThe workflow concludes by sending the generated response back to the user via WhatsApp.\n\n### Setup steps\n\n- [ ] Connect your WhatsApp Business API credentials in the WhatsApp trigger and Send Message nodes.\n- [ ] Authenticate your Google account to enable access for Google Sheets and Google Docs.\n- [ ] Update the Google Sheets and Google Docs nodes to point to your specific files and worksheets.\n- [ ] Connect your Google Gemini API credentials for the AI Agent.\n- [ ] Set up a Redis instance and configure the Redis Chat Memory node to maintain conversation history.\n- [ ] Update the Facebook Graph API URL and token in the HTTP Request node to ensure the typing indicator works correctly.\n\n### Customization\n\nYou can modify the AI Agent's system prompt to adjust its persona, or replace the Gemini model with OpenAI or Anthropic if preferred."
      },
      "typeVersion": 1
    },
    {
      "id": "2624b308-6b5d-42d3-9474-3bbe2cd3329f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1472,
        -256
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 304,
        "content": "## Receive WhatsApp message\n\nTriggers the workflow on a new WhatsApp message and checks its type."
      },
      "typeVersion": 1
    },
    {
      "id": "ad0c681d-02fb-4a31-b85a-f779bd25da3d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1920,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 864,
        "height": 368,
        "content": "## Fetch client and context\n\nChecks for an existing client in Google Sheets, creates one if missing, and retrieves pricing info."
      },
      "typeVersion": 1
    },
    {
      "id": "0bc3d433-6f5f-43f9-b9db-18f1a44a1515",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2816,
        -256
      ],
      "parameters": {
        "color": 7,
        "width": 656,
        "height": 512,
        "content": "## Generate AI response\n\nSends a typing indicator and processes the user's message using a Gemini-powered AI agent."
      },
      "typeVersion": 1
    },
    {
      "id": "def72ff4-ac4c-45a8-a56f-50607eb358a1",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3504,
        -352
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 496,
        "content": "## Log and send reply\n\nEvaluates the structured AI output, logs the interaction in Google Sheets, and sends the final reply."
      },
      "typeVersion": 1
    },
    {
      "id": "e960ed41-36a1-44f3-b1fc-8dd4321c2d99",
      "name": "When WhatsApp Message Received",
      "type": "n8n-nodes-base.whatsAppTrigger",
      "position": [
        1520,
        -128
      ],
      "parameters": {
        "options": {
          "messageStatusUpdates": [
            "sent"
          ]
        },
        "updates": [
          "messages"
        ]
      },
      "credentials": {
        "whatsAppTriggerApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a6fe10bf-c38d-4773-b369-81806c46c222",
      "name": "Check Message Type",
      "type": "n8n-nodes-base.if",
      "position": [
        1744,
        -128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "6fb4f0ef-b870-439c-85ad-668d3103e0d6",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.messages[0].type }}",
              "rightValue": "text"
            },
            {
              "id": "b8477ca9-176b-430e-bce8-15eae94b8128",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.messages[0].text.body }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "f8bab7d0-a710-46a2-b7a7-9e39355c1393",
      "name": "If Client Found",
      "type": "n8n-nodes-base.if",
      "position": [
        2192,
        -128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "546fe885-3683-429d-a67d-30d2c7226029",
              "operator": {
                "type": "number",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.row_number }}",
              "rightValue": 0
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "c7cd74e7-9e9f-4803-8774-26d400771076",
      "name": "Post WhatsApp Typing Indicator",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2864,
        -128
      ],
      "parameters": {
        "url": "https://graph.facebook.com/v20.0/1083481144853090/messages",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"messaging_product\": \"whatsapp\",\n  \"status\": \"read\",\n  \"message_id\": \"{{ $('When WhatsApp Message Received').item.json.messages[0].id }}\",\n  \"typing_indicator\": {\n    \"type\": \"text\"\n  }\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "whatsAppApi"
      },
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "b6d8b38c-4b0a-4ddd-9574-ecd29c8a1fa5",
      "name": "Travel Support Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        3152,
        -128
      ],
      "parameters": {
        "text": "=User Message: {{ $('When WhatsApp Message Received').item.json.messages[0].text.body }}\n\nTravel Agency Plans & Info:\n{{ $('Fetch Pricing from Docs').item.json.content }}",
        "options": {
          "systemMessage": "You are an elite, professional, and welcoming Travel Consultant AI for our agency. Your sole objective is to read customer inquiries, match them against our official Travel Packages & Pricing Document, and provide a clear, enticing, and mathematically accurate quotation.\n\nCore Instructions:\n\nAnalyze the Request: Identify the customer's desired destination, number of travelers, travel dates (if mentioned), and preferred package tier (e.g., Standard, Luxury).\n\nCross-Reference Pricing: You must strictly use the provided official Pricing Document. Do not invent packages, hotels, or prices.\n\nCalculate: Multiply the per-person package price by the number of travelers. Include any explicitly stated taxes or fees from the document.\n\nFormat the Output: Craft a warm, exciting response. Clearly list the package name, what is included (briefly), the per-person cost, and the grand total.\n\nAssess Confidence (Crucial):\n\nScore 100 ONLY if the customer requests a destination and package that exists perfectly in the Pricing Document and you have enough information (like group size) to quote it accurately.\n\nScore below 100 (e.g., 50) if the customer asks for a custom itinerary, a destination not on the list, a massive group booking that requires a discount, or if their request is too vague.\n\nTone: Enthusiastic, luxurious, and highly professional. If a destination is unavailable in the document, politely state that a specialized human agent will curate a custom quote for them.\n\nNOTE: PLEASE FORMAT THE OUTPUT AS WHATSAPP MARKDOWN FORMATTED"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3.1
    },
    {
      "id": "97fc66a5-6e1c-4ec4-abd3-e1486edfb07d",
      "name": "Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        3008,
        96
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-3.1-flash-lite"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "e3a1b2ac-ac84-45f3-b256-824db960626c",
      "name": "Parse Structured Output",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        3344,
        96
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"reply_message\": \"Hello Vaar! A trip to Bali sounds amazing. Our 5-Night Tropical Escape package is $899 per person. For 2 travelers, your total quotation is $1,798. Let me know if you would like to proceed with booking!\",\n  \"quoted_package_name\": \"5-Night Tropical Escape\",\n  \"confidence_score\": 100\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "e96cf7f3-ea47-40e2-a3f4-da9d0e7c17cd",
      "name": "Fetch Client from Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1968,
        -128
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.contacts[0].wa_id }}",
              "lookupColumn": "wa_id"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WeV8DUJnd2f6NLabaQxZd_C9ltkP4XKKzU_Imp2-JLs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1WeV8DUJnd2f6NLabaQxZd_C9ltkP4XKKzU_Imp2-JLs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WeV8DUJnd2f6NLabaQxZd_C9ltkP4XKKzU_Imp2-JLs/edit?usp=drivesdk",
          "cachedResultName": "Travel Agency Clients"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "5880f946-a526-4500-9daa-78a584010791",
      "name": "Add New Client to Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2416,
        -192
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $('When WhatsApp Message Received').item.json.contacts[0].profile.name }}",
            "wa_id": "={{ $('When WhatsApp Message Received').item.json.contacts[0].wa_id }}",
            "user_id": "={{ $('When WhatsApp Message Received').item.json.messages[0].from_user_id }}"
          },
          "schema": [
            {
              "id": "wa_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "wa_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "user_id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "user_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "first_interaction_time",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "first_interaction_time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "wa_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WeV8DUJnd2f6NLabaQxZd_C9ltkP4XKKzU_Imp2-JLs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1WeV8DUJnd2f6NLabaQxZd_C9ltkP4XKKzU_Imp2-JLs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1WeV8DUJnd2f6NLabaQxZd_C9ltkP4XKKzU_Imp2-JLs/edit?usp=drivesdk",
          "cachedResultName": "Travel Agency Clients"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "8e4bb2f0-e416-486b-93ca-c047a9ce12e2",
      "name": "Fetch Pricing from Docs",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        2640,
        -128
      ],
      "parameters": {
        "operation": "get",
        "documentURL": "https://docs.google.com/document/d/1jZpIbOM3i3n4bbsIW4QJ9v5MINAwvljaSUkItbGz6O4/edit?tab=t.0#heading=h.bwjjmtch4d7g",
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "0a3809a0-5d4a-4cc0-8693-c0054f49506c",
      "name": "Send WhatsApp Reply",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        4000,
        -224
      ],
      "parameters": {
        "textBody": "={{ $json.ai_reply }}",
        "operation": "send",
        "phoneNumberId": "1083481144853090",
        "additionalFields": {},
        "recipientPhoneNumber": "={{ $('When WhatsApp Message Received').item.json.contacts[0].wa_id }}"
      },
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "65feb8d9-5920-4a2d-b609-93bae03cc0fd",
      "name": "Load Redis Chat Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryRedisChat",
      "position": [
        3184,
        96
      ],
      "parameters": {
        "sessionKey": "={{ $('When WhatsApp Message Received').item.json.contacts[0].wa_id }}",
        "sessionIdType": "customKey"
      },
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.6
    },
    {
      "id": "7277ba95-15f7-4f15-b56e-73e7dc149963",
      "name": "If High Confidence",
      "type": "n8n-nodes-base.if",
      "position": [
        3552,
        -128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "56e0fd87-3591-4293-97cf-4844b69a0a46",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.output.confidence_score }}",
              "rightValue": 20
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "7346ddd9-c9a1-4782-932c-6439561e9daf",
      "name": "Log Successful Response",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3776,
        -224
      ],
      "parameters": {
        "columns": {
          "value": {
            "text": "={{ $('When WhatsApp Message Received').item.json.messages[0].text.body }}",
            "wa_id": "={{ $('When WhatsApp Message Received').item.json.contacts[0].wa_id }}",
            "ai_reply": "={{ $('Travel Support Agent').item.json.output.reply_message }}",
            "confidence_score": "={{ $('Travel Support Agent').item.json.output.confidence_score }}",
            "suggested_package": "={{ $('Travel Support Agent').item.json.output.quoted_package_name }}"
          },
          "schema": [
            {
              "id": "wa_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "wa_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "text",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ai_reply",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ai_reply",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "suggested_package",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "suggested_package",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "confidence_score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "confidence_score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "wa_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/19RHOI_SKnHh_r3L6Azpuz0dwwf95_Im6xzmIiY04haY/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "19RHOI_SKnHh_r3L6Azpuz0dwwf95_Im6xzmIiY04haY",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/19RHOI_SKnHh_r3L6Azpuz0dwwf95_Im6xzmIiY04haY/edit?usp=drivesdk",
          "cachedResultName": "Travel Agency Log"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e0c6610d-0862-4a5b-a81e-b0dc3c2590b5",
      "name": "Log Low Confidence Event",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3776,
        -32
      ],
      "parameters": {
        "columns": {
          "value": {
            "text": "={{ $('When WhatsApp Message Received').item.json.messages[0].text.body }}",
            "wa_id": "={{ $('When WhatsApp Message Received').item.json.contacts[0].wa_id }}",
            "ai_reply": "={{ $('Travel Support Agent').item.json.output.reply_message }}",
            "confidence_score": "={{ $('Travel Support Agent').item.json.output.confidence_score }}",
            "suggested_package": "={{ $('Travel Support Agent').item.json.output.quoted_package_name }}"
          },
          "schema": [
            {
              "id": "wa_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "wa_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "text",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "text",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ai_reply",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ai_reply",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "suggested_package",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "suggested_package",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "confidence_score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "confidence_score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "wa_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/19RHOI_SKnHh_r3L6Azpuz0dwwf95_Im6xzmIiY04haY/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "19RHOI_SKnHh_r3L6Azpuz0dwwf95_Im6xzmIiY04haY",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/19RHOI_SKnHh_r3L6Azpuz0dwwf95_Im6xzmIiY04haY/edit?usp=drivesdk",
          "cachedResultName": "Travel Agency Log"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "af91559c-8df0-4cfb-b540-c3ec7d42be6c",
  "nodeGroups": [],
  "connections": {
    "If Client Found": {
      "main": [
        [
          {
            "node": "Add New Client to Sheets",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Fetch Pricing from Docs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Travel Support Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Check Message Type": {
      "main": [
        [
          {
            "node": "Fetch Client from Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If High Confidence": {
      "main": [
        [
          {
            "node": "Log Successful Response",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Log Low Confidence Event",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Travel Support Agent": {
      "main": [
        [
          {
            "node": "If High Confidence",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Load Redis Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "Travel Support Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Pricing from Docs": {
      "main": [
        [
          {
            "node": "Post WhatsApp Typing Indicator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Successful Response": {
      "main": [
        [
          {
            "node": "Send WhatsApp Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Structured Output": {
      "ai_outputParser": [
        [
          {
            "node": "Travel Support Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Add New Client to Sheets": {
      "main": [
        [
          {
            "node": "Fetch Pricing from Docs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Client from Sheets": {
      "main": [
        [
          {
            "node": "If Client Found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post WhatsApp Typing Indicator": {
      "main": [
        [
          {
            "node": "Travel Support Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When WhatsApp Message Received": {
      "main": [
        [
          {
            "node": "Check Message Type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow responds to incoming WhatsApp messages with AI-generated travel package quotations by looking up clients in Google Sheets, loading pricing from Google Docs, generating a structured reply with Google Gemini, logging the interaction, and sending the response back via…

Source: https://n8n.io/workflows/17573/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Transform your salon/service business with this streamlined WhatsApp automation system featuring Claude integration, zero-setup database management, and intelligent conversation handling. Claude MCP I

WhatsApp Trigger, WhatsApp, Redis +11
AI & RAG

WhatsApp AI Assistant for Clinic Appointment Booking Automate your entire appointment lifecycle with an intelligent AI assistant that lives on WhatsApp. This workflow empowers any clinic or independen

Google Gemini Chat, WhatsApp Trigger, Memory Buffer Window +9
AI & RAG

This workflow answers WhatsApp support messages using Google Gemini with company context from Google Docs, and automatically creates Cal.com bookings when users provide enough scheduling details, then

Agent, WhatsApp Trigger, WhatsApp +5
AI & RAG

Youtube Video: https://youtu.be/q2vPN9eub1o?si=lSo4c0kQMNQd_Aad

WhatsApp Trigger, Google Sheets, Agent +6
AI & RAG

This workflow responds to incoming WhatsApp messages, validates the sender in HighLevel, uses Google Gemini with Redis chat memory to collect shipment details, fetches multi-carrier rates from ShipEng

Memory Redis Chat, WhatsApp, HTTP Request +7