AutomationFlowsData & Sheets › Automate Travel Business Operations with Postgres, Google Sheets and Voice API

Automate Travel Business Operations with Postgres, Google Sheets and Voice API

ByOneclick AI Squad @oneclick-ai on n8n.io

This comprehensive n8n workflow automates the entire travel business call management process, from initial customer inquiries to trip bookings and marketing outreach. The system handles incoming calls, validates trip details, processes bookings, captures leads, and manages…

Webhook trigger★★★★☆ complexity16 nodesPostgresGoogle Sheets TriggerHTTP RequestGoogle Sheets
Data & Sheets Trigger: Webhook Nodes: 16 Complexity: ★★★★☆ Added:

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

This workflow follows the Google Sheets → Googlesheetstrigger 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": "s8WPaQ8NrHpG3Q4Z",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Complete Travel Call Management System - Call Tracking, Book Trips & Marketing",
  "tags": [],
  "nodes": [
    {
      "id": "af4dca79-fc8e-41d5-bbc6-be6a0af0ad3a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -460,
        -240
      ],
      "parameters": {
        "color": 3,
        "width": 1260,
        "height": 280,
        "content": "Automates handling of incoming calls and provides trip organizer details."
      },
      "typeVersion": 1
    },
    {
      "id": "8aa86c3e-d59d-44b2-a8cb-50db724fe6d3",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -460,
        60
      ],
      "parameters": {
        "color": 4,
        "width": 1260,
        "height": 240,
        "content": "Processes incoming call data and facilitates trip booking creation."
      },
      "typeVersion": 1
    },
    {
      "id": "488083fa-1c35-4a97-afc5-a34f41de7db2",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -460,
        320
      ],
      "parameters": {
        "width": 1260,
        "height": 240,
        "content": "Manages outbound marketing calls to promote trip organizer services."
      },
      "typeVersion": 1
    },
    {
      "id": "399c3e41-f02b-43a8-868e-e7e6e34cfb4d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -460,
        580
      ],
      "parameters": {
        "color": 6,
        "width": 1260,
        "height": 240,
        "content": "Captures incoming call data and stores it in an organized spreadsheet."
      },
      "typeVersion": 1
    },
    {
      "id": "a5761758-38de-45c0-b370-54c89ebc9a19",
      "name": "Detect Incoming Call",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -100,
        -120
      ],
      "parameters": {
        "path": "get-call",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "fbc65023-df99-4a59-9812-52c9248c4091",
      "name": "Validate Trip Details",
      "type": "n8n-nodes-base.postgres",
      "position": [
        120,
        -120
      ],
      "parameters": {
        "limit": 150,
        "table": {
          "__rl": true,
          "mode": "name",
          "value": "table_id"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "options": {},
        "operation": "select"
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "63210889-5513-4de4-99b1-6bd8c9fe646f",
      "name": "Deliver Organizer Info",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        340,
        -120
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={\n    \"results\": [\n        {\n            \"toolCallId\": \"{{ $('Detect Incoming Call').item.json.body.message.toolCalls[0].id }}\",\n            \"result\":  \"{{ $json.available }}\"\n        }\n    ]\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "d8a23c3d-ea59-4c70-a22a-17f3296880c8",
      "name": "Capture Voice Input",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -100,
        140
      ],
      "parameters": {
        "path": "input-data",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "72fdf7e7-e6be-42a9-92e3-81916a87d502",
      "name": "Update Booking Record",
      "type": "n8n-nodes-base.postgres",
      "position": [
        120,
        140
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "name",
          "value": "table_id"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "columns": {
          "value": {},
          "schema": [],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "upsert"
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "43775581-f2b5-41d3-8779-9554b308cc37",
      "name": "Send Booking Confirmation",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        340,
        140
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={\n    \"results\": [\n        {\n            \"toolCallId\": \"{{ $('Capture Voice Input').item.json.body.message.toolCalls[0].id }}\",\n            \"result\": \"{{ $json.status }}\"\n        }\n    ]\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "596e1ef1-6029-4c84-8dab-dc89675410bd",
      "name": "Detect New Lead",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -100,
        400
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "0oijhgfr456yujhnbvcdew23erfg"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "9iuhgft567ujm"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3bb67923-991a-4a6d-8caa-ae683d97e014",
      "name": "Format Lead Information",
      "type": "n8n-nodes-base.set",
      "position": [
        120,
        400
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a10873fa-0c01-46ed-a364-d31200e44e76",
              "name": "Phone_number",
              "type": "string",
              "value": "=+{{ $json.Phone }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "df04836b-262e-418d-9ed0-83424793be10",
      "name": "Initiate Marketing Outreach",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        340,
        400
      ],
      "parameters": {
        "url": "https://api.vapi.ai/call",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"assistantId\": \"add_id_here\",\n  \"phoneNumberId\": \"add_id_here\",\n  \"customers\": [\n    {\n      \"number\":\"{{ $json.Phone }}\"\n    }\n  ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "960ff7a4-e8ba-42c0-88ad-f35f4a197a0d",
      "name": "Receive Call Response",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -100,
        660
      ],
      "parameters": {
        "path": "call",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "67340244-b65a-4a72-a91d-1655660ea30e",
      "name": "Log User Input",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        120,
        660
      ],
      "parameters": {
        "columns": {
          "value": {
            "call_notes": "={{ $json.body.message.toolCalls[0].function.arguments.call_notes }}",
            "website_url": "={{ $json.body.message.toolCalls[0].function.arguments.website_url }}",
            "call_outcome": "={{ $json.body.message.toolCalls[0].function.arguments.call_outcome }}",
            "company_name": "={{ $json.body.message.toolCalls[0].function.arguments.company_name }}",
            "phone_number": "={{ $json.body.message.toolCalls[0].function.arguments.phone_number }}",
            "email_address": "={{ $json.body.message.toolCalls[0].function.arguments.email_address }}",
            "prospect_name": "={{ $json.body.message.toolCalls[0].function.arguments.prospect_name }}",
            "follow_up_date": "={{ $json.body.message.toolCalls[0].function.arguments.follow_up_date }}",
            "interest_level": "={{ $json.body.message.toolCalls[0].function.arguments.interest_level }}",
            "biggest_challenge": "={{ $json.body.message.toolCalls[0].function.arguments.biggest_challenge }}",
            "appointment_datetime": "={{ $json.body.message.toolCalls[0].function.arguments.appointment_datetime }}"
          },
          "schema": [
            {
              "id": "prospect_name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "prospect_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "prospect_role",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "prospect_role",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company_name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "company_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "website_url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "website_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "website_strength",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "website_strength",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone_number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "phone_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email_address",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email_address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "current_marketing_methods",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "current_marketing_methods",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "biggest_challenge",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "biggest_challenge",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "previous_digital_marketing",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "previous_digital_marketing",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "objections_raised",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "objections_raised",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "interest_level",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "interest_level",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "next_step",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "next_step",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "appointment_datetime",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "appointment_datetime",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "call_outcome",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "call_outcome",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "call_notes",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "call_notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "follow_up_date",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "follow_up_date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "opt_out_requested",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "opt_out_requested",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "phone_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "0oijht5tfcs3edfvgb"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "88197c5d-710f-43e7-871b-b152a64f5eab",
      "name": "Relay Response to System",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        340,
        660
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    }
  ],
  "active": false,
  "settings": {
    "timezone": "Asia/Kolkata",
    "callerPolicy": "workflowsFromSameOwner",
    "executionOrder": "v1"
  },
  "versionId": "a40c9c99-5c96-4096-bd86-fe5b8ce33ed8",
  "connections": {
    "Log User Input": {
      "main": [
        [
          {
            "node": "Relay Response to System",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detect New Lead": {
      "main": [
        [
          {
            "node": "Format Lead Information",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture Voice Input": {
      "main": [
        [
          {
            "node": "Update Booking Record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detect Incoming Call": {
      "main": [
        [
          {
            "node": "Validate Trip Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Receive Call Response": {
      "main": [
        [
          {
            "node": "Log User Input",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Booking Record": {
      "main": [
        [
          {
            "node": "Send Booking Confirmation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Trip Details": {
      "main": [
        [
          {
            "node": "Deliver Organizer Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Lead Information": {
      "main": [
        [
          {
            "node": "Initiate Marketing Outreach",
            "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 comprehensive n8n workflow automates the entire travel business call management process, from initial customer inquiries to trip bookings and marketing outreach. The system handles incoming calls, validates trip details, processes bookings, captures leads, and manages…

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

More Data & Sheets workflows → · Browse all categories →

Related workflows

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

Data & Sheets

Receive request via webhook with customer question Analyze sentiment and detect urgency using JavaScript Send urgent alerts to Slack for critical cases Search knowledge base and fetch conversation his

HTTP Request, Postgres, Email Send +1
Data & Sheets

AUTO MESSAGE NEW CONNECTION. Uses stickyNote, googleSheets, postgres, httpRequest. Webhook trigger; 13 nodes.

Google Sheets, Postgres, HTTP Request
Data & Sheets

BP_check. Uses googleSheets, @n-octo-n/n8n-nodes-json-database, httpRequest, itemLists. Webhook trigger; 99 nodes.

Google Sheets, @N Octo N/N8N Nodes Json Database, HTTP Request +2
Data & Sheets

This workflow acts as a junior finance research analyst for a UK boutique M&A or corporate finance team. It listens for Slack messages, classifies the request, gathers company or market data, and prod

HTTP Request, Google Drive, Google Docs +5
Data & Sheets

Scraping. Uses httpRequest, postgres, @apify/n8n-nodes-apify, respondToWebhook. Webhook trigger; 61 nodes.

HTTP Request, Postgres, @Apify/N8N Nodes Apify