Webhook de Chatbot

Avanzado

Este es unMiscellaneous, AI Chatbot, Multimodal AIflujo de automatización del dominio deautomatización que contiene 19 nodos.Utiliza principalmente nodos como Set, Webhook, GmailTool, DateTimeTool, Agent. Asistente de Gmail y Calendario basado en IA, integrado con la interfaz de chat Gemini

Requisitos previos
  • Punto final de HTTP Webhook (n8n generará automáticamente)
  • Cuenta de Google y credenciales de API de Gmail
  • 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": {
    "templateCredsSetupCompleted": true
  },
  "name": "Chatbot webhook",
  "tags": [],
  "nodes": [
    {
      "name": "Agente de IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        320,
        176
      ],
      "parameters": {
        "text": "={{ $json.input }}",
        "options": {
          "systemMessage": "\nYou are an advanced AI Personal Assistant operating within an n8n workflow. Your primary function is to serve as a cognitive engine that translates user requests into specific, executable tool calls. You are precise, methodical, and you do not act without sufficient information.\n\n---\n\n## Core Operating Principles\n\n1.  **Tool-Centric Operation:** You can only perform actions for which you have been explicitly provided a tool. Before acting, you will review the `Tool Manifest` to confirm you have the required capability. If a user's request does not map to any available tool, you **MUST** clearly state that you cannot perform the action and why. For example: \"I am sorry, but I cannot set a reminder as I do not have a tool for that function.\"\n2.  **Clarification Mandate:** If a user's request is ambiguous or is missing a required parameter for a tool, you **MUST** ask clarifying questions before proceeding. Never guess or assume details like email recipients or event durations.\n3.  **Single-Focus Execution:** Handle one primary task at a time. If a user asks to schedule a meeting and check emails, process the meeting first unless the user specifies otherwise.\n4.  **User Confirmation:** Before executing actions that create data or notify others (e.g., creating an event, sending an email), briefly state your plan of action for the user to confirm. Example: \"I will schedule an event titled 'Project Sync' for 3 PM tomorrow and invite 'bob@example.com'. Is that correct?\"\n\n---\n\n## Tool Manifest & Usage Protocols\n\nYou have access to the following tools. Adhere strictly to their parameters and usage triggers.\n\n#### Tool: `system_getCurrentTime`\n\n* **Description:** Retrieves the current date and time. This is often a dependency for other tools.\n* **When to Use:** When the user asks for the current time, date, or uses relative terms like \"today\", \"tomorrow\", \"this week\".\n* **Parameters:**\n    * `timezone` (string, optional): The IANA timezone identifier (e.g., 'America/New_York', 'Asia/Kolkata').\n* **Protocol:** If the `timezone` is not provided, you **MUST** ask the user for their location to infer it. For example: \"Certainly. To give you the correct time, could you let me know where you are located?\" If the user provides a location (e.g., \"India\", \"New York\"), use the corresponding IANA timezone. You will output the time in `HH:MM` format as requested.\n\n#### Tool: `googleCalendar_getEvents`\n\n* **Description:** Fetches a list of events from the user's Google Calendar within a specified date range.\n* **When to Use:** When the user asks \"What's on my schedule?\", \"Am I busy?\", or asks about events for a specific day, week, or month.\n* **Parameters:**\n    * `startDate` (string, ISO 8601 format, required): The start of the time period.\n    * `endDate` (string, ISO 8601 format, required): The end of the time period.\n* **Protocol:** Use `system_getCurrentTime` to establish the date for relative queries.\n    * **\"Today\"** means the last 24 hours from the current time.\n    * **\"This week\"** means from today's date for the next 7 days.\n    * **\"This month\"** means from today's date for the next 30 days.\n\n#### Tool: `googleCalendar_createEvent`\n\n* **Description:** Creates a new event on the user's Google Calendar.\n* **When to Use:** When the user asks to \"schedule\", \"book\", \"create\", or \"add\" an event, meeting, or appointment.\n* **Parameters:**\n    * `summary` (string, required): The title of the event.\n    * `startTime` (string, ISO 8601 format, required): The start time of the event.\n    * `endTime` (string, ISO 8601 format, required): The end time of the event.\n    * `attendees` (array of strings, optional): A list of attendee email addresses.\n* **Protocol:** If the user mentions other people in the scheduling request, automatically include their names/emails in the `attendees` parameter. You must have all required parameters before calling this tool.\n\n#### Tool: `gmail_sendMessage`\n\n* **Description:** Composes and sends an email via Gmail.\n* **When to Use:** When the user asks to \"email\", \"send a message\", or \"contact\" someone.\n* **Parameters:**\n    * `recipient` (string, required): The primary recipient's email address.\n    * `subject` (string, required): The email subject line.\n    * `body` (string, required): The content of the email.\n* **Protocol:** The `subject` must be detailed and relevant to the body's content. The `body` should be professionally written and clearly articulate the user's message without unnecessary embellishment.\n\n#### Tool: `gmail_getMessages`\n\n* **Description:** Retrieves a list of emails from the user's Gmail account.\n* **When to Use:** When the user asks to \"check my email\", \"see recent emails\", or \"find an email from someone\".\n* **Parameters:**\n    * `startDate` (string, ISO 8601 format, optional): The start date to filter emails from.\n    * `endDate` (string, ISO 8601 format, optional): The end date to filter emails to.\n    * `from` (string, optional): Filter emails from a specific sender.\n* **Protocol:** Use `system_getCurrentTime` to define date ranges for requests. For example, \"retrieve emails sent today\" means fetching emails from the last 24 hours.\n\n---\n\n## Defined Workflow: \"Schedule a Meeting and Send Invite\"\n\nWhen a user's request involves both scheduling a meeting and notifying the attendees, you **MUST** follow this exact sequence of tool calls:\n\n1.  **Acknowledge and Gather:** Acknowledge the request. Check if you have all the necessary information (`topic/summary`, `attendees`, `proposed time/date`, `duration`). If not, ask for the missing details.\n2.  **Step 1: Check Availability (`googleCalendar_getEvents`)**: Use the `googleCalendar_getEvents` tool to check the user's schedule for the proposed `startTime` and `endTime`.\n3.  **Step 2: Report & Decide**:\n    * **If Conflict Exists:** Report the scheduling conflict to the user, mentioning the existing event. State: \"You already have '[Existing Event Title]' scheduled at that time. Would you like to find a different time?\" Await further instructions.\n    * **If No Conflict:** Proceed to the next step.\n4.  **Step 3: Create Event (`googleCalendar_createEvent`)**: Once the time is confirmed to be free, call this tool with the gathered `summary`, `startTime`, `endTime`, and `attendees`.\n5.  **Step 4: Notify Attendees (`gmail_sendMessage`)**: After the event is successfully created, immediately call this tool to send an invitation email.\n    * `recipient`: The `attendees` from the event.\n    * `subject`: \"Meeting Invitation: [Event Summary]\".\n    * `body`: \"Hello,\\n\\nThis is an invitation to schedule '[Event Summary]' on [Date] at [Time]. Please check your calendar for the official Google Calendar invite.\\n\\nBest regards,\"\n6.  **Step 5: Final Confirmation**: Report to the user that the event has been scheduled and the invitation email has been sent."
        },
        "promptType": "define"
      },
      "retryOnFail": true,
      "typeVersion": 2.2,
      "id": "Agente-de-IA-0"
    },
    {
      "name": "Google Gemini Modelo de Chat",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -112,
        368
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "Google Gemini API Credentials [REDACTED]"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1,
      "id": "Google-Gemini-Modelo-de-Chat-1"
    },
    {
      "name": "Enviar un mensaje en Gmail",
      "type": "n8n-nodes-base.gmailTool",
      "position": [
        144,
        400
      ],
      "parameters": {
        "sendTo": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('To', ``, 'string') }}",
        "message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
        "options": {
          "appendAttribution": true
        },
        "subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Subject', ``, 'string') }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "Gmail Credentials [REDACTED]"
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.1,
      "id": "Enviar-un-mensaje-en-Gmail-2"
    },
    {
      "name": "Obtener múltiples mensajes en Gmail",
      "type": "n8n-nodes-base.gmailTool",
      "notes": "You Get Details Of the Mail of the User, You are able to Read through them and if the user says a time frame you only give for the specific time frame",
      "position": [
        272,
        400
      ],
      "parameters": {
        "limit": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Limit', `If the User Specifies a certain time frame, lets make it so that it returns it from that specific time frame and not from other than that time frame. ALSO IF IT ASKS FOR A CERTAIN TIME FRAME GIVE ALL IN THAT TIME FRAME `, 'number') }}",
        "simple": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Simplify', `Dont give a very short summary, give a more detailed Summary than a breif summary`, 'boolean') }}",
        "filters": {
          "q": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Search', ``, 'string') }}"
        },
        "options": {},
        "operation": "getAll"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "Gmail Credentials [REDACTED]"
        }
      },
      "notesInFlow": true,
      "typeVersion": 2.1,
      "id": "Obtener-m-ltiples-mensajes-en-Gmail-3"
    },
    {
      "name": "Obtener múltiples eventos en Calendario Google",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        400,
        400
      ],
      "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": "[REDACTED_EMAIL]",
          "cachedResultName": "[REDACTED_EMAIL]"
        },
        "operation": "getAll"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "Google Calendar Credentials [REDACTED]"
        }
      },
      "typeVersion": 1.3,
      "id": "Obtener-m-ltiples-eventos-en-Calendario-Google-4"
    },
    {
      "name": "Fecha y Hora",
      "type": "n8n-nodes-base.dateTimeTool",
      "position": [
        528,
        400
      ],
      "parameters": {
        "options": {
          "timezone": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Timezone', ``, 'string') }}"
        },
        "outputFieldName": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Output_Field_Name', ``, 'string') }}"
      },
      "typeVersion": 2,
      "id": "Fecha-y-Hora-5"
    },
    {
      "name": "Obtener disponibilidad en un calendario en Calendario Google",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        656,
        400
      ],
      "parameters": {
        "options": {},
        "timeMax": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('End_Time', ``, 'string') }}",
        "timeMin": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Start_Time', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "[REDACTED_EMAIL]",
          "cachedResultName": "[REDACTED_EMAIL]"
        },
        "resource": "calendar"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "Google Calendar Credentials [REDACTED]"
        }
      },
      "typeVersion": 1.3,
      "id": "Obtener-disponibilidad-en-un-calendario-en-Calendario-Google-6"
    },
    {
      "name": "Crear un evento en Calendario Google",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        784,
        400
      ],
      "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": "[REDACTED_EMAIL]",
          "cachedResultName": "[REDACTED_EMAIL]"
        },
        "additionalFields": {
          "attendees": [
            "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('attendees0_Attendees', `you add attendees here, add there email here`, 'string') }}"
          ],
          "description": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Description', ``, 'string') }}",
          "conferenceDataUi": {
            "conferenceDataValues": {
              "conferenceSolution": "hangoutsMeet"
            }
          }
        },
        "useDefaultReminders": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Use_Default_Reminders', ``, 'boolean') }}"
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "Google Calendar Credentials [REDACTED]"
        }
      },
      "notesInFlow": true,
      "typeVersion": 1.3,
      "id": "Crear-un-evento-en-Calendario-Google-7"
    },
    {
      "name": "Actualizar un evento en Calendario Google",
      "type": "n8n-nodes-base.googleCalendarTool",
      "position": [
        912,
        400
      ],
      "parameters": {
        "eventId": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Event_ID', ``, 'string') }}",
        "calendar": {
          "__rl": true,
          "mode": "list",
          "value": "[REDACTED_EMAIL]",
          "cachedResultName": "[REDACTED_EMAIL]"
        },
        "operation": "update",
        "updateFields": {}
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "Google Calendar Credentials [REDACTED]"
        }
      },
      "typeVersion": 1.3,
      "id": "Actualizar-un-evento-en-Calendario-Google-8"
    },
    {
      "name": "Nota Adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -688,
        144
      ],
      "parameters": {
        "color": 4,
        "content": "### 🗣️ Chat Node\nIf you wish to, you can switch to a different Messenger app like discord,Whatsapp and Telegram"
      },
      "typeVersion": 1,
      "id": "Nota-Adhesiva-9"
    },
    {
      "name": "Nota Adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        0
      ],
      "parameters": {
        "width": 320,
        "height": 144,
        "content": "### 🤖 AI Agent   \nThe “brain” of the workflow. Interprets your requests and chooses the right tool. Asks for clarification if details are missing and confirms before important actions."
      },
      "typeVersion": 1,
      "id": "Nota-Adhesiva1-10"
    },
    {
      "name": "Nota Adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        352
      ],
      "parameters": {
        "color": 5,
        "width": 272,
        "height": 192,
        "content": "### 🧠 Google Gemini Chat Model (or any LLM)   \nThe AI language model that powers the assistant. You can swap Gemini with OpenAI, Claude, or another model. (i have used gemini since its free and easy to setup here is the link to get your own [AI API Key](https://aistudio.google.com/apikey)"
      },
      "typeVersion": 1,
      "id": "Nota-Adhesiva2-11"
    },
    {
      "name": "Nota Adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -128,
        560
      ],
      "parameters": {
        "color": 6,
        "width": 272,
        "height": 128,
        "content": "### 📌 Simple Memory   \nKeeps short-term context of the last ~10 interactions so the agent remembers what “it” refers to in your requests."
      },
      "typeVersion": 1,
      "id": "Nota-Adhesiva3-12"
    },
    {
      "name": "Nota Adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        608
      ],
      "parameters": {
        "color": 7,
        "width": 1024,
        "height": 624,
        "content": "## Tools\nThe tools consists of the following\n\n\n### 📧 Send a message in Gmail   \nSends emails from your Gmail account. Requires recipient, subject, and body. Generates clear, professional text.\n\n### 📥 Get many messages in Gmail   \nChecks your inbox. Can filter by timeframe or sender. Returns detailed summaries, not just one-liners.\n\n### 📅 Get many events in Google Calendar   \nLists your events for a chosen date range. Useful for “What’s on my schedule this week?”\n\n### ⏰ Date & Time   \nConverts natural phrases like “tomorrow at 3 PM” into exact ISO date-time values.\n\n### ✅ Get availability in Google Calendar   \nChecks if you’re free during a specific time slot. Prevents double-booking before scheduling.\n\n### 📝 Create an event in Google Calendar   \nSchedules a new meeting. Adds title, start/end times, attendees, description, and Google Meet link.\n\n### ✏️ Update an event in Google Calendar   \nEdits an existing meeting. Change time, attendees, or details without creating a new event.\n"
      },
      "typeVersion": 1,
      "id": "Nota-Adhesiva4-13"
    },
    {
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -288,
        176
      ],
      "parameters": {
        "path": "chat",
        "options": {
          "allowedOrigins": "*"
        },
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2.1,
      "id": "Webhook-14"
    },
    {
      "name": "Preparar Respuesta",
      "type": "n8n-nodes-base.set",
      "position": [
        832,
        176
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "name": "reply",
              "type": "string",
              "value": "={{ $json.output }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4,
      "id": "Preparar-Respuesta-15"
    },
    {
      "name": "Establecer",
      "type": "n8n-nodes-base.set",
      "position": [
        16,
        176
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "name": "input",
              "type": "string",
              "value": "= {{$json[\"body\"]?.text || $json[\"text\"] || $json[\"body\"]?.input || $json[\"text\"]}}"
            }
          ]
        }
      },
      "typeVersion": 3.4,
      "id": "Establecer-16"
    },
    {
      "name": "Responder a Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1104,
        176
      ],
      "parameters": {
        "options": {
          "responseCode": 200
        }
      },
      "typeVersion": 1.4,
      "id": "Responder-a-Webhook-17"
    },
    {
      "name": "Memoria Simple",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        16,
        400
      ],
      "parameters": {
        "sessionKey": "=\"parameters\": {\n  \"memoryKey\": \"history\",\n  \"inputKey\": \"input\",\n  \"outputKey\": \"reply\"\n}\n",
        "sessionIdType": "customKey",
        "contextWindowLength": 10
      },
      "typeVersion": 1.3,
      "id": "Memoria-Simple-18"
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "Establecer-16": {
      "main": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook-14": {
      "main": [
        [
          {
            "node": "Establecer-16",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Agente-de-IA-0": {
      "main": [
        [
          {
            "node": "Preparar-Respuesta-15",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fecha-y-Hora-5": {
      "ai_tool": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Preparar-Respuesta-15": {
      "main": [
        [
          {
            "node": "Responder-a-Webhook-17",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Memoria-Simple-18": {
      "ai_memory": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Enviar-un-mensaje-en-Gmail-2": {
      "ai_tool": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Google-Gemini-Modelo-de-Chat-1": {
      "ai_languageModel": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Obtener-m-ltiples-mensajes-en-Gmail-3": {
      "ai_tool": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Crear-un-evento-en-Calendario-Google-7": {
      "ai_tool": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Obtener-m-ltiples-eventos-en-Calendario-Google-4": {
      "ai_tool": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Actualizar-un-evento-en-Calendario-Google-8": {
      "ai_tool": [
        [
          {
            "node": "Agente-de-IA-0",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Obtener-disponibilidad-en-un-calendario-en-Calendario-Google-6": {
      "ai_tool": [
        [
          {
            "node": "Agente-de-IA-0",
            "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 - Varios, Chatbot de IA, IA Multimodal

¿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.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos19
Categoría3
Tipos de nodos10
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