Sistema de recepción de WhatsApp para hoteles

Avanzado

Este es unSupport Chatbot, AI Chatbotflujo de automatización del dominio deautomatización que contiene 18 nodos.Utiliza principalmente nodos como Code, Redis, WhatsApp, MySqlTool, Agent. Sistema de recepción de hotel integrando WhatsApp, cambio de modelo Gemini, Redis y Google Sheets

Requisitos previos
  • Información de conexión del servidor Redis
  • Información de conexión de la base de datos MySQL
  • Credenciales de API de Google Sheets
  • Clave de API de Google Gemini
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "07df66e33836083697e8bd7e53a57a2a1f404ad7aabcc82daa752a2b5a254167"
  },
  "nodes": [
    {
      "id": "2ccdee26-1db9-4717-b1ad-79651d7d65dc",
      "name": "Nota adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        -96
      ],
      "parameters": {
        "color": 4,
        "width": 336,
        "height": 224,
        "content": "💬 Workflow Overview\nThis workflow acts as an AI receptionist for hotels, built on n8n.\nGuests can message the hotel via WhatsApp, and the system automatically replies using AI with real booking or pricing details.\n\nIt combines WhatsApp → AI Agent → Database → WhatsApp in one seamless loop."
      },
      "typeVersion": 1
    },
    {
      "id": "750f8f4d-35dd-4a82-90fd-0ef01a89888b",
      "name": "Agente de IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1456,
        -16
      ],
      "parameters": {
        "text": "={{ $('WhatsApp Trigger').item.json.messages[0].text.body }}",
        "options": {
          "systemMessage": "You are a helpful AI assistant tasked with answering questions about hotel bookings.\nYou have access to a MySQL database with tables like 'bookings', 'guests', 'rooms', etc.\n\nIMPORTANT SECURITY RULE: YOU ARE STRICTLY FORBIDDEN FROM PERFORMING ANY DATABASE WRITE OPERATIONS (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, etc.).\nYou must ONLY generate valid SQL SELECT statements.\n\nWhen a user asks a question, translate it into an appropriate SQL SELECT query."
        },
        "promptType": "define"
      },
      "retryOnFail": false,
      "typeVersion": 2
    },
    {
      "id": "1a267886-51fa-4500-ab95-6200cc512a1a",
      "name": "Memoria simple",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        1600,
        192
      ],
      "parameters": {
        "sessionKey": "={{ $('WhatsApp Trigger').item.json.contacts[0].wa_id }}",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "75cab8e8-7d1d-4730-a4b4-f9ba7f4f651e",
      "name": "Modelo de chat Google Gemini",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1280,
        384
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "2CxiwuZKBBT7X4pw",
          "name": "Google Gemini(PaLM) Api account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c3229f34-a2d5-4472-b54d-9c960a3baa0f",
      "name": "Tarificación",
      "type": "n8n-nodes-base.googleSheetsTool",
      "position": [
        1728,
        192
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/13yvxKTOWC4lgMLPWtVW_RELRZWdZHwUon_xOk4rF1X0/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "13yvxKTOWC4lgMLPWtVW_RELRZWdZHwUon_xOk4rF1X0"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "CDun7Si7Sf8O9FcN",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "0ab80c8e-e0ae-48d3-ace7-7afa25cdadc1",
      "name": "Modelo de chat Google Gemini1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1456,
        384
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "Vhf40F3r42Vi7ZiS",
          "name": "akzzyforza Gemini"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1f14faf9-f819-4a3d-9ca5-8dd35d814e95",
      "name": "Activador WhatsApp",
      "type": "n8n-nodes-base.whatsAppTrigger",
      "position": [
        80,
        -16
      ],
      "webhookId": "dbb71091-820e-4c6f-b925-f1632b03d751",
      "parameters": {
        "options": {},
        "updates": [
          "messages"
        ]
      },
      "credentials": {
        "whatsAppTriggerApi": {
          "id": "c3SMCxa8j0SOP79z",
          "name": "WhatsApp OAuth account Magic"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "78022ecc-79b5-4f44-a209-155dd7c9e967",
      "name": "Decisor de modelo",
      "type": "n8n-nodes-base.code",
      "position": [
        752,
        -16
      ],
      "parameters": {
        "jsCode": "let data;\ntry {\n  data = $json.value ? JSON.parse($json.value) : null;\n} catch (e) {\n  data = null;\n}\n\nlet modelIndex;\nlet shouldSet = false;\n\nif (data && typeof data.modelIndex === 'number') {\n  // Alternate: flip the previous modelIndex\n  modelIndex = data.modelIndex === 0 ? 1 : 0;\n  shouldSet = true; // store the new one\n} else {\n  // If no data, default to model 0 and store it\n  modelIndex = 0;\n  shouldSet = true;\n}\n\nreturn [\n  {\n    json: {\n      modelIndex,\n      shouldSet\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "707df459-df55-4686-b64e-3d99c1380e03",
      "name": "Enviar mensaje",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        2016,
        -16
      ],
      "webhookId": "df4ef464-f28e-441d-a9da-cfcd5f64c9c2",
      "parameters": {
        "textBody": "={{ $json.output }}",
        "operation": "send",
        "phoneNumberId": "723548604171403",
        "additionalFields": {},
        "recipientPhoneNumber": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}"
      },
      "credentials": {
        "whatsAppApi": {
          "id": "9Il95VjdrW30AtrZ",
          "name": "WhatsApp account Magic valley"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8a9c3637-4e4d-4445-9c3b-c584e24dbdb5",
      "name": "Ejecutar consulta SQL en MySQL",
      "type": "n8n-nodes-base.mySqlTool",
      "position": [
        1856,
        192
      ],
      "parameters": {
        "query": "{{ $('AI Agent').item.json.query }}",
        "options": {},
        "operation": "executeQuery"
      },
      "credentials": {
        "mySql": {
          "id": "3bfA94Mi8Qx2AnYZ",
          "name": "MySQL account"
        }
      },
      "typeVersion": 2.4
    },
    {
      "id": "e1b30ed3-0ad7-417f-95de-752ab618c89a",
      "name": "Nota adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        -256
      ],
      "parameters": {
        "color": 5,
        "width": 544,
        "height": 176,
        "content": "⚙️ Model Switching System\nThe workflow uses Redis to track each user’s AI model assignment.\nEach user is automatically routed to a different Google Gemini model, helping:\nDistribute traffic evenly across models\nReduce overall API cost\nKeep performance fast and stable\nThis makes it ideal for large-scale or high-traffic hotel systems."
      },
      "typeVersion": 1
    },
    {
      "id": "13bbf86c-a3cb-4fec-b66f-9f8cd912f494",
      "name": "Nota adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1216,
        -272
      ],
      "parameters": {
        "color": 6,
        "width": 448,
        "height": 208,
        "content": "🧠 AI-Powered Hotel Assistant\nThe AI Agent interprets the user’s query and converts it into a read-only SQL SELECT statement.\n\nIt fetches information like room availability, guest check-ins, or booking data from MySQL, formats it naturally, and sends it back to the guest instantly on WhatsApp.\n\nThe workflow ensures safety (no write/delete queries) and delivers accurate, real-time hotel insights."
      },
      "typeVersion": 1
    },
    {
      "id": "448b3618-9ccd-45d1-b905-bedf5540d877",
      "name": "Verificar mensaje",
      "type": "n8n-nodes-base.code",
      "position": [
        304,
        -16
      ],
      "parameters": {
        "jsCode": "const msg = $json.messages?.[0]?.text;\n\nif (!msg) {\n  // Exit early if no text message\n  return [];\n}\n\nreturn items;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "f13bf318-7585-4787-a7ca-c083617a9e8f",
      "name": "Almacenar número de usuario",
      "type": "n8n-nodes-base.redis",
      "position": [
        976,
        -16
      ],
      "parameters": {
        "key": "=llm-user:{{ $('WhatsApp Trigger').item.json.contacts[0].wa_id }}",
        "ttl": 3600,
        "value": "={{ JSON.stringify({ modelIndex: $json.modelIndex }) }}",
        "expire": true,
        "operation": "set"
      },
      "credentials": {
        "redis": {
          "id": "7OPmbqMTy2N5aprY",
          "name": "Redis account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ca6ba30a-da25-42e2-b9c0-f30b0438ab8e",
      "name": "Verificar número de usuario",
      "type": "n8n-nodes-base.redis",
      "position": [
        528,
        -16
      ],
      "parameters": {
        "key": "=llm-user:{{ $json.contacts[0].wa_id }}",
        "options": {},
        "operation": "get"
      },
      "credentials": {
        "redis": {
          "id": "7OPmbqMTy2N5aprY",
          "name": "Redis account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "eeeac186-0627-45f9-a122-c5b0ac50a537",
      "name": "Seleccionar modelo",
      "type": "@n8n/n8n-nodes-langchain.modelSelector",
      "position": [
        1328,
        192
      ],
      "parameters": {
        "rules": {
          "rule": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "61173b3f-c09e-4efb-aae0-5af12aed3b1e",
                    "operator": {
                      "type": "number",
                      "operation": "equals"
                    },
                    "leftValue": "={{$json.modelIndex}}",
                    "rightValue": 0
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "6fd19391-2c15-42a6-82db-152976b1d6d3",
                    "operator": {
                      "type": "number",
                      "operation": "equals"
                    },
                    "leftValue": "={{$json.modelIndex}}",
                    "rightValue": 1
                  }
                ]
              },
              "modelIndex": 2
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a317cb5a-56a2-41e7-8ab8-3a0758c09c11",
      "name": "Nota adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        448,
        160
      ],
      "parameters": {
        "color": 3,
        "width": 288,
        "height": 192,
        "content": "Redis Get Node\n\n🧩 What it does\nWhen a WhatsApp message arrives, this node checks Redis for a record matching that user’s WhatsApp ID.\nThat stored record tells the workflow which AI model this user was last assigned to (e.g., model 0 or model 1)."
      },
      "typeVersion": 1
    },
    {
      "id": "86bfc5ea-e65c-4a6c-bd53-1ef3d473b97f",
      "name": "Nota adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        160
      ],
      "parameters": {
        "color": 3,
        "width": 288,
        "height": 192,
        "content": "Redis Set Node\n\n🧩 What it does\nAfter the Model Decider decides which model the user should use, this node stores that model index back into Redis.\nIt also sets an expiration (ttl = 3600 seconds → 1 hour), meaning the assignment lasts for one hour."
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "c3229f34-a2d5-4472-b54d-9c960a3baa0f": {
      "ai_tool": [
        [
          {
            "node": "750f8f4d-35dd-4a82-90fd-0ef01a89888b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "750f8f4d-35dd-4a82-90fd-0ef01a89888b": {
      "main": [
        [
          {
            "node": "707df459-df55-4686-b64e-3d99c1380e03",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "eeeac186-0627-45f9-a122-c5b0ac50a537": {
      "ai_languageModel": [
        [
          {
            "node": "750f8f4d-35dd-4a82-90fd-0ef01a89888b",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "448b3618-9ccd-45d1-b905-bedf5540d877": {
      "main": [
        [
          {
            "node": "ca6ba30a-da25-42e2-b9c0-f30b0438ab8e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "78022ecc-79b5-4f44-a209-155dd7c9e967": {
      "main": [
        [
          {
            "node": "f13bf318-7585-4787-a7ca-c083617a9e8f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1a267886-51fa-4500-ab95-6200cc512a1a": {
      "ai_memory": [
        [
          {
            "node": "750f8f4d-35dd-4a82-90fd-0ef01a89888b",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "1f14faf9-f819-4a3d-9ca5-8dd35d814e95": {
      "main": [
        [
          {
            "node": "448b3618-9ccd-45d1-b905-bedf5540d877",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ca6ba30a-da25-42e2-b9c0-f30b0438ab8e": {
      "main": [
        [
          {
            "node": "78022ecc-79b5-4f44-a209-155dd7c9e967",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f13bf318-7585-4787-a7ca-c083617a9e8f": {
      "main": [
        [
          {
            "node": "750f8f4d-35dd-4a82-90fd-0ef01a89888b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "75cab8e8-7d1d-4730-a4b4-f9ba7f4f651e": {
      "ai_languageModel": [
        [
          {
            "node": "eeeac186-0627-45f9-a122-c5b0ac50a537",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "0ab80c8e-e0ae-48d3-ace7-7afa25cdadc1": {
      "ai_languageModel": [
        [
          {
            "node": "eeeac186-0627-45f9-a122-c5b0ac50a537",
            "type": "ai_languageModel",
            "index": 1
          }
        ]
      ]
    },
    "8a9c3637-4e4d-4445-9c3b-c584e24dbdb5": {
      "ai_tool": [
        [
          {
            "node": "750f8f4d-35dd-4a82-90fd-0ef01a89888b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Chatbot de soporte, Chatbot de IA

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Flujos de trabajo relacionados recomendados

Manejo de consultas de clientes de WhatsApp con IA y enrutamiento de intenciones
Manejo de consultas de clientes de WhatsApp con IA y enrutamiento por intención
Code
Switch
Whats App
+
Code
Switch
Whats App
20 NodosHemanth Arety
Chatbot de soporte
Plugin de IA para respuestas automáticas en redes sociales (Instagram, Facebook y WhatsApp)
Sistema de respuesta automática para mensajes de redes sociales basado en Llama 3.2 (Instagram, Facebook, WhatsApp)
Code
Switch
Webhook
+
Code
Switch
Webhook
12 NodosOneclick AI Squad
Chatbot de soporte
Automatizar reservas de restaurante en WhatsApp y Google Sheets con IA
Usar IA en WhatsApp y Google Sheets para automatizar las reservas de restaurantes
If
Filter
Whats App
+
If
Filter
Whats App
23 NodosBasil Irfan
Chatbot de soporte
Asistente personal AI avanzado de múltiples agentes (250+ capacidades de tareas, WhatsApp + GPT)
Asistente personal de IA multi-agente avanzado (capaz de más de 250 tareas, WhatsApp + GPT)
Set
Switch
Whats App
+
Set
Switch
Whats App
213 NodosElectrabot
Productividad personal
Soporte al cliente automatizado de WhatsApp, con transcripción de voz, FAQ y programación de citas
Automatización del soporte al cliente de WhatsApp, con transcripción de voz, FAQ y programación de citas
If
Set
Switch
+
If
Set
Switch
23 NodosAureusR
Varios
Construir un asistente de WhatsApp con memoria, Google Workspace y múltiples imágenes de investigación de IA
Construir un asistente de WhatsApp con memoria, Google Workspace e investigación de imágenes de múltiples IAs
If
Set
Code
+
If
Set
Code
71 NodosIniyavan JC
Chatbot de IA
Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos18
Categoría2
Tipos de nodos11
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34