AutomationFlowsAI & RAG › Replace Your Call Center with an AI Agent Using Gohighlevel (ghl), Vapi & Twilio

Replace Your Call Center with an AI Agent Using Gohighlevel (ghl), Vapi & Twilio

ByȚugui Dragoș @tuguidragos on n8n.io

The AI Calling Agent is a fully automated phone assistant built with n8n, GoHighLevel (GHL), VAPI, and Twilio. This workflow allows you to: Trigger outbound calls from your CRM (GHL). Use a voice AI assistant (VAPI) to talk with leads in real time. Route calls through Twilio.…

Cron / scheduled trigger★★★★☆ complexity28 nodesHTTP RequestHigh Level
AI & RAG Trigger: Cron / scheduled Nodes: 28 Complexity: ★★★★☆ Added:

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

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": "2LmDZfiiWbiwfr3O",
  "name": "Replace Your Call Center with an AI Agent using GHL, VAPI & Twilio",
  "tags": [
    {
      "id": "7ASMGI4lVr4Eo8rL",
      "name": "tuguidragos.com",
      "createdAt": "2025-08-23T19:10:40.177Z",
      "updatedAt": "2025-08-23T19:10:40.177Z"
    }
  ],
  "nodes": [
    {
      "id": "87c2c60a-51e9-4770-b345-609654a8e61a",
      "name": "Step 1 - Create Customer",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1568,
        416
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "eac43602-e32b-483b-b083-1e7f3a521343",
      "name": "Step 2 - Initiate Call",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2032,
        416
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "b5f84758-e905-4318-aac1-ef40ee0a3f4d",
      "name": "Step 3 - Get Call Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        48,
        800
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "76b0d242-7903-489d-a881-92913f0f0047",
      "name": "Step 4 - Set (Parse Call Result)",
      "type": "n8n-nodes-base.set",
      "position": [
        480,
        800
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "bd6e0c9d-40b9-46a5-a1f5-df4419b20ab9",
      "name": "Step 5 - If (Call Answered?)",
      "type": "n8n-nodes-base.if",
      "position": [
        720,
        800
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "7890936a-3524-439e-ad9b-470b432f0108",
      "name": "Set Attempt Count + Init Status",
      "type": "n8n-nodes-base.code",
      "position": [
        1552,
        800
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "87d1c39d-93e8-4233-af70-d89b9f5cd0f8",
      "name": "Get Call Status from VAPI",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        1792,
        800
      ],
      "parameters": {},
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "65608f46-d233-4eb2-a3d7-d7840678c913",
      "name": "Check Final Status + shouldContinue Logic",
      "type": "n8n-nodes-base.code",
      "position": [
        2032,
        800
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "2076cd94-af6e-4a73-b19a-90ffbac9eec4",
      "name": "Prepare Loop Payload",
      "type": "n8n-nodes-base.set",
      "position": [
        2784,
        784
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "e7b46a53-8a57-4d1e-9741-4dc1056f0c67",
      "name": "Should Continue Loop?",
      "type": "n8n-nodes-base.if",
      "position": [
        2288,
        800
      ],
      "parameters": {},
      "typeVersion": 2.2
    },
    {
      "id": "a04b6957-a80c-4d70-b24e-a43dc5979777",
      "name": "Wait Before Retry",
      "type": "n8n-nodes-base.wait",
      "position": [
        2560,
        784
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "6563cd57-bc97-46c9-b4b8-4009d181d267",
      "name": "Filter Valid Leads",
      "type": "n8n-nodes-base.code",
      "position": [
        720,
        432
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "56d5586a-9e5b-4842-afe5-617d215bfedd",
      "name": "Has Leads to Process?",
      "type": "n8n-nodes-base.if",
      "position": [
        960,
        432
      ],
      "parameters": {},
      "executeOnce": false,
      "typeVersion": 2.2,
      "alwaysOutputData": false
    },
    {
      "id": "4e562af9-9fb2-4e53-bf74-b6eb3e2284d0",
      "name": "Loop Setup Variables",
      "type": "n8n-nodes-base.set",
      "position": [
        2288,
        416
      ],
      "parameters": {},
      "typeVersion": 3.4
    },
    {
      "id": "49f0f3d6-eeaf-4fb5-8164-237db332e1d6",
      "name": "Wait Before Contacts Refresh",
      "type": "n8n-nodes-base.wait",
      "position": [
        48,
        80
      ],
      "parameters": {},
      "executeOnce": false,
      "typeVersion": 1.1
    },
    {
      "id": "aceec85a-b410-4af7-80c7-94e50a183696",
      "name": "Add Call Status Tag",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        272,
        800
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "813de614-018b-40dc-a3c9-ec252d1f7576",
      "name": "Update Contact - Call Summary",
      "type": "n8n-nodes-base.highLevel",
      "position": [
        992,
        800
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "3787960c-7b84-419c-b958-09af52259681",
      "name": "Wait Before Refresh",
      "type": "n8n-nodes-base.wait",
      "position": [
        960,
        80
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "5442819c-12a6-4164-bfaf-1dacec9f9bfb",
      "name": "GHL Paginated Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        496,
        432
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "b419734c-9df6-47e8-a53b-c0a0c1c10cb2",
      "name": "Step 1.5 - Select Random Agent",
      "type": "n8n-nodes-base.code",
      "position": [
        1792,
        416
      ],
      "parameters": {},
      "typeVersion": 2
    },
    {
      "id": "e8e02d25-396c-4e67-90c9-79295e554258",
      "name": "GHL Paginated Updated",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        496,
        80
      ],
      "parameters": {},
      "typeVersion": 4.2
    },
    {
      "id": "9327ef48-0528-45c0-a57e-bb5c8473ad6d",
      "name": "Start Calls - 9AM EST",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        48,
        432
      ],
      "parameters": {},
      "typeVersion": 1.2
    },
    {
      "id": "7a7cf8dd-f84b-4b1c-83c5-4c1a6c9cdecb",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        720
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "6d9ed469-92ec-499c-8585-776ad30723b4",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1504,
        720
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "7ecbe991-add5-4f9b-b0d9-30fc6db5c544",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1504,
        320
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "7d6631d9-3ee3-44db-a668-a0282b871333",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        320
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "f842e9c2-b51c-49a1-bfc2-206cc7a9fce6",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "672cfaee-b7bf-4764-8863-01d25a5458cd",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        448,
        320
      ],
      "parameters": {
        "content": ""
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1d04251d-c977-4d1f-b41d-e8194ff948d6",
  "connections": {
    "Wait Before Retry": {
      "main": [
        [
          {
            "node": "Prepare Loop Payload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Valid Leads": {
      "main": [
        [
          {
            "node": "Has Leads to Process?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Call Status Tag": {
      "main": [
        [
          {
            "node": "Step 4 - Set (Parse Call Result)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait Before Refresh": {
      "main": [
        [
          {
            "node": "GHL Paginated Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Setup Variables": {
      "main": [
        [
          {
            "node": "Set Attempt Count + Init Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Loop Payload": {
      "main": [
        [
          {
            "node": "Set Attempt Count + Init Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Paginated Request": {
      "main": [
        [
          {
            "node": "Filter Valid Leads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GHL Paginated Updated": {
      "main": [
        [
          {
            "node": "Wait Before Refresh",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Has Leads to Process?": {
      "main": [
        [
          {
            "node": "Step 1 - Create Customer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Should Continue Loop?": {
      "main": [
        [
          {
            "node": "Wait Before Retry",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Step 3 - Get Call Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Calls - 9AM EST": {
      "main": [
        [
          {
            "node": "GHL Paginated Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 2 - Initiate Call": {
      "main": [
        [
          {
            "node": "Loop Setup Variables",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 3 - Get Call Data": {
      "main": [
        [
          {
            "node": "Add Call Status Tag",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 1 - Create Customer": {
      "main": [
        [
          {
            "node": "Step 1.5 - Select Random Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Call Status from VAPI": {
      "main": [
        [
          {
            "node": "Check Final Status + shouldContinue Logic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 5 - If (Call Answered?)": {
      "main": [
        [
          {
            "node": "Wait Before Contacts Refresh",
            "type": "main",
            "index": 0
          },
          {
            "node": "Update Contact - Call Summary",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait Before Contacts Refresh",
            "type": "main",
            "index": 0
          },
          {
            "node": "Update Contact - Call Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait Before Contacts Refresh": {
      "main": [
        [
          {
            "node": "GHL Paginated Updated",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 1.5 - Select Random Agent": {
      "main": [
        [
          {
            "node": "Step 2 - Initiate Call",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Attempt Count + Init Status": {
      "main": [
        [
          {
            "node": "Get Call Status from VAPI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Step 4 - Set (Parse Call Result)": {
      "main": [
        [
          {
            "node": "Step 5 - If (Call Answered?)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Final Status + shouldContinue Logic": {
      "main": [
        [
          {
            "node": "Should Continue Loop?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

The AI Calling Agent is a fully automated phone assistant built with n8n, GoHighLevel (GHL), VAPI, and Twilio. This workflow allows you to: Trigger outbound calls from your CRM (GHL). Use a voice AI assistant (VAPI) to talk with leads in real time. Route calls through Twilio.…

Source: https://n8n.io/workflows/8339/ — 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

This project is specifically built for an HVAC business to automatically upsell to old customers when their locality has a heatwave or snow wave forecast in the upcoming five days.

High Level, HTTP Request, WhatsApp +5
AI & RAG

Master Agent - Orchestrator. Uses httpRequest, telegram, telegramTrigger. Scheduled trigger; 46 nodes.

HTTP Request, Telegram, Telegram Trigger
AI & RAG

Reputation Engine — Content Research Agent. Uses httpRequest. Scheduled trigger; 45 nodes.

HTTP Request
AI & RAG

Master Agent - Orchestrator. Uses httpRequest, telegram, telegramTrigger. Scheduled trigger; 43 nodes.

HTTP Request, Telegram, Telegram Trigger
AI & RAG

Linkedin Workflow. Uses httpRequest, googleSheets. Scheduled trigger; 39 nodes.

HTTP Request, Google Sheets