Guia Completo do Sistema de Agendamento de Consultas com IA no WhatsApp usando N8n

4 de julho de 2025

Crie um Bot de Agendamento Automático no WhatsApp com Google Calendar, Sheets e OpenAI

Transforme o seu negócio de serviços com um agendador inteligente que funciona através do WhatsApp. Este tutorial completo mostra como criar um sistema de agendamento totalmente automatizado usando a automação de workflows do n8n, eliminando o agendamento manual e proporcionando experiências contínuas para os clientes.

Perfeito para prestadores de serviços de saúde, consultores, salões de beleza e qualquer empresa baseada em agendamento que queira simplificar seu processo sem complexidade técnica.

Baixe o JSON do workflow e use-o!

🔧 Ferramentas Necessárias

  • Wassenger: Para receber e enviar mensagens do WhatsApp
  • Google Calendar: Para gerenciar e verificar disponibilidade
  • Google Sheets: Para armazenar dados de clientes e detalhes de agendamentos
  • Gmail: Para enviar e-mails de confirmação
  • OpenAI (ChatGPT): Para conversação e transcrição de voz para texto

Visão geral da arquitetura do sistema

O fluxo de agendamento automatizado funciona através destes passos sequenciais:

  1. Mensagem recebida: Mensagens do WhatsApp disparam o workflow
  2. Análise de conteúdo: O sistema identifica mensagens de texto ou voz
  3. Processamento de voz: Mensagens de áudio são transcritas automaticamente
  4. Conversa com IA: Assistente inteligente lida com a interação do cliente
  5. Coleta de dados: Informações do cliente são armazenadas no Google Sheets
  6. Verificação de disponibilidade: Consulta em tempo real ao calendário por horários livres
  7. Confirmação do agendamento: Criação do evento no calendário e notificação por e-mail

Comece a transformar como seu negócio gerencia agendamentos com WhatsApp e IA, sem necessidade de codificação.

Registre seu número do WhatsApp em Wassenger Baixe o workflow JSON completo para importar na sua instância n8n Comece a agendar compromissos automaticamente em minutos

Passo a passo da implementação

Passo 1: Tratamento de Mensagens do WhatsApp

Configure o nó trigger do Wassenger para monitorar mensagens recebidas na sua conta WhatsApp Business. Essa integração captura de forma transparente comunicações de texto e gravações de voz.

Passo 2: Detecção do Formato da Mensagem

Implemente um nó switch que determina o tipo de mensagem:

  • Mensagens de texto: Processar diretamente pelo agente de IA
  • Mensagens de voz: Baixar o arquivo de áudio e enviá-lo ao OpenAI Whisper para transcrição

Passo 3: Integração com IA Conversacional

Implemente um agente LangChain que:

  • Analisa a intenção do cliente a partir do contato inicial
  • Fornece respostas naturais e contextualizadas
  • Orienta os usuários durante o processo de agendamento
  • Coleta informações essenciais de forma sistemática

O assistente de IA coleta os dados do cliente nesta ordem específica:

  • Endereço de e-mail (serve como identificador único do cliente)
  • Nome completo
  • Verificação do número de telefone
  • Finalidade do agendamento ou tópicos a serem discutidos

Obtenha as instruções do Agente de IA gratuitamente no arquivo JSON disponível em nosso app

Comece a transformar como seu negócio gerencia agendamentos com WhatsApp e IA, sem necessidade de codificação.

Registre seu número do WhatsApp em Wassenger Baixe o workflow JSON completo para importar na sua instância n8n Comece a agendar compromissos automaticamente em minutos

Passo 4: Gerenciamento de Dados no Google Sheets

Configure o manuseio automático de dados:

  • Clientes novos: Criar novas entradas na planilha
  • Clientes recorrentes: Atualizar registros existentes com base na correspondência do e-mail
  • Atualizações em tempo real: As informações são salvas após cada interação

Passo 5: Sistema de Agendamento Inteligente

A integração com o calendário oferece horários disponíveis com base em:

Horário de funcionamento:

  • Segunda a sexta-feira
  • Manhã: 09:00 — 12:00
  • Tarde: 13:00 — 17:00
  • Exclusão automática do intervalo de almoço (12:00 — 13:00)
Here are the next available appointments:
- Thursday at 10:00 AM
- Friday at 11:30 AM
...

Filtragem Inteligente:

  • Apenas agendamentos futuros (reservas com pelo menos 24 horas de antecedência)
  • Blocos de 30 minutos para cada atendimento
  • Verificação de agendamento sem conflitos
  • Consideração do fuso horário do cliente

Comece a transformar como seu negócio gerencia agendamentos com WhatsApp e IA, sem necessidade de codificação.

Registre seu número do WhatsApp em Wassenger Baixe o workflow JSON completo para importar na sua instância n8n Comece a agendar compromissos automaticamente em minutos

Passo 6: Finalização do Agendamento

Uma vez que os clientes selecionem seu horário preferido:

  • Criação do evento no Google Calendar
  • Conclusão do registro na planilha com os detalhes confirmados
  • Envio de e-mail de confirmação profissional
  • Todos os carimbos de data/hora são armazenados no fuso horário do sistema para consistência

Configuração do Workflow JSON

Copie e salve este código como JSON e faça o upload na sua instância n8n

{
"name": "WhatsApp Appointment Setter", 
"nodes": [
{
"parameters": {
"events": [
"message:in:new"
]
}, 
"type": "n8n-nodes-wassenger.wassengerTrigger", 
"typeVersion": 1, 
"position": [
1080, 
700
], 
"id": "2c24ff1f-8b4d-4341-b2c7-c81ba4c2208c", 
"name": "Wassenger Trigger", 
"webhookId": "83130e74-a519-4153-b901-f03769d2f04f", 
"credentials": {
"wassengerApiKey": {
"id": "9du3UAbFSzEaTSQE", 
"name": "WhatsApp API key"
}
}
}, 
{
"parameters": {
"promptType": "define", 
"text": "={{ $json.data.body }}", 
"options": {
"systemMessage": "=You are a helpful assistant for a dental clinic based in London.\n\n# You have access to these tools:\n\n1.A Google Calendar Tool that allows you to create, reschedule, and delete events in the calendar.\n\n2.Google Sheets Tools:\n\n- Google Sheet - Add Row: Adds a new row to a Google Sheet.\n\n- Google Sheet - Update Row: Updates a row in the Google Sheet.\n\n- Google Sheet - Read: Reads content from the Google Sheet.\n\n3.Gmail - Send Confirmation User: Sends a confirmation email to the user after the appointment is confirmed.\n\nThe current time and date is in the German Time Zone:\n{{ $now }}\n\n# Your Task: \n\n1.When the conversation starts:\n\nAnalyze the first message sent by the user.\n\nRespond naturally based on its intent, tone, or content(for example: greeting, question, or request).\n\nKeep your reply short, polite, and friendly.\n\nThen, follow up with:\n\"Would you like to book an appointment?\"\n\nExamples:\n\nIf the user says: "Hi, how are you?"\n→ Respond: "I'm doing great, thanks for asking! Would you like to book an appointment?"\n\nIf the user says: "I need help with pricing"\n→ Respond: "Happy to help! Would you like to book an appointment so we can discuss it?"\n\nIf the user responds with yes, begin collecting their contact information.\n\nYou must collect the information in the following strict order:\n\n- First: Email address\n > This is used as the unique identifier for matching rows in the Google Sheet.\n > After receiving the email: Use \"Google Sheet - Read\" to check if the email exists.\n\nIf it exists, use Google Sheet - Update Row to update that row.\n\nIf it does not exist, use Google Sheet - Add Row to create a new one.\n\n- Then: Full name \n- Then: Confirm the phone number with the patient taken from:\n{{ $('Wassenger Trigger').item.json.data.fromNumber }}\n\nGuidelines:\n\n! Ask for only one piece of information at a time.\n! Wait for the user's response before asking the next question.\n! After every response, immediately update the Google Sheet using Google Sheet - Update Row, matched by the email address.\n\n2.You must always store all the user information(email address, name, phone number) in the Google Sheet.\n\nAfter collecting the information, ask the user:\n\"What would you like to discuss during your appointment?\"\n\n- Wait for their response.\n- Update the row in the Google Sheet with the topic or notes field using Google Sheet - Update Row to save the response as the appointment topic or notes.\n\n3.Offering Appointment Slots \nOnce the user's contact details and discussion topic have been collected:\n\nOffer 5 available time slots.\n\n- Use the assistant's local time zone(London) to determine available hours.\n\nOffice hours:\n\nMonday to Friday \nMorning: 09:00 to 12:00 \nAfternoon: 13:00 to 17:00\n\nDo not offer any times between 12:00 and 13:00.\n\nImportant:\n\n- Only offer time slots that fall within the office hours listed above.\n- You must check that a full 30-minute block is available:\n - The start and end time must not conflict with any existing calendar event.\n - The time slot must begin at least 24 hours in the future.\n\n- Always offer the next 5 available 30-minute time slots that meet the above criteria.\n\n- Only display the time slots in the user's time zone(London time).\n Do not mention time conversions or other time zones in your response.\n\n- Present the time slots in a simple, friendly format like: \n \"Here are the next available appointments for you: \n - Thursday at 10:00 AM \n - Friday at 11:30 AM \n...\"\n\n- If no valid slots match the user's requested period(e.g., afternoon), politely inform the user and offer the next closest options.\n\n- Never mention unavailable or already booked time slots.\n Only show the free ones.\n\n! You must not manually calculate or estimate time zone offsets.\nUse the Google Calendar tool to convert and format times.\n\n4.When the user confirms a preferred date and time, you must:\n\nCreate an event in the Google Calendar at the selected time.\n\nAppointments should always be scheduled for 30 minutes unless the user specifies otherwise.\n\nDo not create a new row in the Google Sheet.\n\nInstead, use \"Google Sheet - Update Row\" to update the existing row corresponding to the user(matched by email address), and add the selected date and time as the confirmed appointment.\n\nThe appointment time saved in the Google Sheet must always be in the assistant's local time(German time) - never in the user's time zone.\n\nAfter the booking is confirmed, send a confirmation email to the user using the \"Gmail - Send Confirmation User\" tool.\n\nThe email must include:\n\n- The confirmed appointment date and time(in London time) \n- The user's name and topic of discussion \n- A short, friendly message confirming the booking\n\nOnly send the confirmation email after the calendar event has been created and all data has been stored in the Google Sheet."
}
}, 
"type": "@n8n/n8n-nodes-langchain.agent", 
"typeVersion": 1.8, 
"position": [
2440, 
720
], 
"id": "2df07709-f74d-4816-8969-141a8502cc64", 
"name": "AI Agent"
}, 
{
"parameters": {
"model": {
"__rl": true, 
"mode": "list", 
"value": "gpt-4o-mini"
}, 
"options": {}
}, 
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi", 
"typeVersion": 1.2, 
"position": [
2040, 
960
], 
"id": "5b974204-0b48-483a-9306-9f8a53bf0aa7", 
"name": "OpenAI Chat Model"
}, 
{
"parameters": {
"sessionIdType": "customKey", 
"sessionKey": "={{ $('Message Type') }}", 
"contextWindowLength": 20
}, 
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow", 
"typeVersion": 1.3, 
"position": [
2200, 
960
], 
"id": "7f3c1455-c110-48f0-b330-7da555dce523", 
"name": "Simple Memory"
}, 
{
"parameters": {
"operation": "getAll", 
"calendar": {
"__rl": true, 
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Calendar', ``, 'string') }}", 
"mode": "id", 
"__regex": "(^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)"
}, 
"options": {}
}, 
"type": "n8n-nodes-base.googleCalendarTool", 
"typeVersion": 1.3, 
"position": [
2340, 
960
], 
"id": "a02cdef3-2958-4a31-b033-3c7472e6262e", 
"name": "Calendar Read", 
"credentials": {
"googleCalendarOAuth2Api": {
"id": "LL4HXXOSECspo8kd", 
"name": "Google Calendar account"
}
}
}, 
{
"parameters": {
"calendar": {
"__rl": true, 
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Calendar', ``, 'string') }}", 
"mode": "id"
}, 
"additionalFields": {}
}, 
"type": "n8n-nodes-base.googleCalendarTool", 
"typeVersion": 1.3, 
"position": [
2480, 
960
], 
"id": "5bf56efe-4e6a-496f-992e-9463184d5a31", 
"name": "Calendar Create"
}, 
{
"parameters": {
"operation": "delete", 
"calendar": {
"__rl": true, 
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Calendar', ``, 'string') }}", 
"mode": "id"
}, 
"eventId": "={{ fromAI(\"id\", \"the id of the event\") }}", 
"options": {}
}, 
"type": "n8n-nodes-base.googleCalendarTool", 
"typeVersion": 1.3, 
"position": [
2620, 
960
], 
"id": "3d4e631b-c9ef-43d7-b159-d5a677ee0e71", 
"name": "Calendar Delete"
}, 
{
"parameters": {
"documentId": {
"__rl": true, 
"value": "1CTk-H0P6-ca8NK3T79_KL6LS0_7Xq8bVOP1Ldun281Q", 
"mode": "list", 
"cachedResultName": "Appointment Setter", 
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CTk-H0P6-ca8NK3T79_KL6LS0_7Xq8bVOP1Ldun281Q/edit?usp=drivesdk"
}, 
"sheetName": {
"__rl": true, 
"value": "gid=0", 
"mode": "list", 
"cachedResultName": "Sheet1", 
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1CTk-H0P6-ca8NK3T79_KL6LS0_7Xq8bVOP1Ldun281Q/edit#gid=0"
}, 
"options": {
"dataLocationOnSheet": {
"values": {
"rangeDefinition": "detectAutomatically", 
"readRowsUntil": "firstEmptyRow"
}
}, 
"outputFormatting": {
"values": {
"general": "UNFORMATTED_VALUE", 
"date": "FORMATTED_STRING"
}
}
}
}, 
"type": "n8n-nodes-base.googleSheetsTool", 
"typeVersion": 4.5, 
"position": [
2760, 
960
], 
"id": "f405d7a1-b830-4030-87a4-c9726f012661", 
"name": "Google Sheets"
}, 
{
"parameters": {
"operation": "append", 
"documentId": {
"__rl": true, 
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Document', ``, 'string') }}", 
"mode": "id"
}, 
"sheetName": {
"__rl": true, 
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Sheet', ``, 'string') }}", 
"mode": "id"
}, 
"columns": {
"mappingMode": "defineBelow", 
"value": {
"Email": "={{ $fromAI(\"email\", \"the email address that the user tells you\") }}"
}, 
"matchingColumns": [], 
"schema": [
{
"id": "Appointment Date", 
"displayName": "Appointment Date", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": true
}, 
{
"id": "Booking Status", 
"displayName": "Booking Status", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": true
}, 
{
"id": "Time Zone", 
"displayName": "Time Zone", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": true
}, 
{
"id": "Name", 
"displayName": "Name", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": true
}, 
{
"id": "Phone", 
"displayName": "Phone", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": true
}, 
{
"id": "Email", 
"displayName": "Email", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true
}, 
{
"id": "Intake Form", 
"displayName": "Intake Form", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": true
}, 
{
"id": "Reminder Sent", 
"displayName": "Reminder Sent", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": true
}
], 
"attemptToConvertTypes": false, 
"convertFieldsToString": false
}, 
"options": {}
}, 
"type": "n8n-nodes-base.googleSheetsTool", 
"typeVersion": 4.5, 
"position": [
2900, 
960
], 
"id": "42769806-5ad3-4d01-b119-6002bd6e44aa", 
"name": "Google Sheets - Add rows"
}, 
{
"parameters": {
"operation": "update", 
"documentId": {
"__rl": true, 
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Document', ``, 'string') }}", 
"mode": "id"
}, 
"sheetName": {
"__rl": true, 
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Sheet', ``, 'string') }}", 
"mode": "id"
}, 
"columns": {
"mappingMode": "defineBelow", 
"value": {
"Email": "={{ $fromAI(\"email\", \"the email address that the user tells you\") }}", 
"Appointment Date": "={{ $fromAI(\"date\", \"the appointment date and time converted to Central European Time that the user confirmed as his appointment\") }}", 
"Booking Status": "={{ $fromAI(\"status\", \"the status of the appointment which is either confirmed or cancelled\") }}", 
"Time Zone": "={{ $fromAI(\"timeZone\", \"the time zone and location the the user tells you\") }}", 
"Name": "={{ $fromAI(\"name\", \"the name of the user\") }}", 
"Phone": "={{ $fromAI(\"phone\", \"the phone number that the user tells you.\") }}", 
"Intake Form": "={{ $fromAI(\"intake_form\", \"specific topics or issues the user likes to discuss during the appointment\") }}"
}, 
"matchingColumns": [
"Email"
], 
"schema": [
{
"id": "Appointment Date", 
"displayName": "Appointment Date", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": false
}, 
{
"id": "Booking Status", 
"displayName": "Booking Status", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": false
}, 
{
"id": "Time Zone", 
"displayName": "Time Zone", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": false
}, 
{
"id": "Name", 
"displayName": "Name", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": false
}, 
{
"id": "Phone", 
"displayName": "Phone", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": false
}, 
{
"id": "Email", 
"displayName": "Email", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": false
}, 
{
"id": "Intake Form", 
"displayName": "Intake Form", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": false
}, 
{
"id": "Reminder Sent", 
"displayName": "Reminder Sent", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"removed": true
}, 
{
"id": "row_number", 
"displayName": "row_number", 
"required": false, 
"defaultMatch": false, 
"display": true, 
"type": "string", 
"canBeUsedToMatch": true, 
"readOnly": true, 
"removed": true
}
], 
"attemptToConvertTypes": false, 
"convertFieldsToString": false
}, 
"options": {}
}, 
"type": "n8n-nodes-base.googleSheetsTool", 
"typeVersion": 4.5, 
"position": [
3060, 
960
], 
"id": "ad4b0c89-bfd2-4016-b9ff-599178632e75", 
"name": "Google Sheets - Update Row"
}, 
{
"parameters": {
"sendTo": "={{ $fromAI(\"email\", \"the email address provided by the user earlier\") }}", 
"subject": "={{ $fromAI(\"subject\", \"the email subjectline that just is [New Booking] + Booking date and time converted to Local Timezone that the user confirmed as this appointment\") }}", 
"message": "={{ $fromAI(\"body\", \"the email body taht contains the message that the booking if thge user was confirmed along with booking date, email, name, timezone, what user wants to discuss during the appointment\") }}", 
"options": {
"bccList": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('BCC', ``, 'string') }}"
}
}, 
"type": "n8n-nodes-base.gmailTool", 
"typeVersion": 2.1, 
"position": [
3180, 
960
], 
"id": "0510a247-2e16-4746-88ef-cf70a61ad409", 
"name": "Gmail", 
"webhookId": "6244c414-188e-4e55-a323-145b5238faf2"
}, 
{
"parameters": {
"url": "=https://api.wassenger.com{{ $('Wassenger Trigger').item.json.data.media.links.download }}", 
"authentication": "genericCredentialType", 
"genericAuthType": "httpHeaderAuth", 
"options": {}
}, 
"id": "d85d8848-4a0a-44e2-8f33-032a51302f98", 
"name": "Download Audio", 
"type": "n8n-nodes-base.httpRequest", 
"position": [
1640, 
360
], 
"typeVersion": 4.2, 
"credentials": {
"httpHeaderAuth": {
"id": "GTzBwI8uSTXV0UvT", 
"name": "Header Auth account"
}
}
}, 
{
"parameters": {
"resource": "audio", 
"operation": "transcribe", 
"options": {}
}, 
"id": "1637b236-94ea-4270-a0bf-980a8f3db218", 
"name": "Transcribe Audio", 
"type": "@n8n/n8n-nodes-langchain.openAi", 
"position": [
1880, 
360
], 
"typeVersion": 1.8, 
"credentials": {
"openAiApi": {
"id": "LOYODT0dLN0xy31E", 
"name": "OpenAi account"
}
}
}, 
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "219577d5-b028-48fc-90be-980f4171ab68", 
"name": "data.body", 
"type": "string", 
"value": "={{ $json.text }}"
}
]
}, 
"options": {}
}, 
"id": "ed7c9be2-bf82-4374-93af-3b40e9c0f1c1", 
"name": "Audio Info", 
"type": "n8n-nodes-base.set", 
"position": [
2120, 
360
], 
"typeVersion": 3.4
}, 
{
"parameters": {
"device": "device_id", 
"phone": "={{ $('Wassenger Trigger').item.json.data.fromNumber }}", 
"message": "={{ $json.output }}", 
"options": {}
}, 
"type": "n8n-nodes-wassenger.wassenger", 
"typeVersion": 1, 
"position": [
3020, 
720
], 
"id": "b2547711-f27a-43f0-8adb-f9d9e7606bd4", 
"name": "Send Message", 
"credentials": {
"wassengerApiKey": {
"id": "9du3UAbFSzEaTSQE", 
"name": "WhatsApp API key"
}
}
}, 
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true, 
"leftValue": "", 
"typeValidation": "strict", 
"version": 2
}, 
"conditions": [
{
"leftValue": "={{ $json.data.media.type }}", 
"rightValue": "audio", 
"operator": {
"type": "string", 
"operation": "equals"
}, 
"id": "94a56d29-cb88-4eb0-8d6b-07b1b91bfc3f"
}
], 
"combinator": "and"
}, 
"renameOutput": true, 
"outputKey": "Voice message"
}, 
{
"conditions": {
"options": {
"caseSensitive": true, 
"leftValue": "", 
"typeValidation": "strict", 
"version": 2
}, 
"conditions": [
{
"id": "6ce0d87f-bdfc-4c65-a3fb-8d86bb682c4e", 
"leftValue": "={{ $json.data.type }}", 
"rightValue": "text", 
"operator": {
"type": "string", 
"operation": "equals"
}
}
], 
"combinator": "and"
}, 
"renameOutput": true, 
"outputKey": "Text message"
}
]
}, 
"options": {}
}, 
"type": "n8n-nodes-base.switch", 
"typeVersion": 3.2, 
"position": [
1320, 
700
], 
"id": "3df50a7f-5ab3-421d-939b-ebb762a451ce", 
"name": "Message Type"
}, 
{
"parameters": {
"content": "📅 WhatsApp Appointment Booking Workflow(n8n)\nThis n8n workflow automates appointment scheduling through WhatsApp for any business offering time-based services(e.g.clinics, consultancies, salons, etc.).It combines AI-driven messaging with Google services to streamline the entire booking process.\n\n🔧 Tools & Services Used\nWassenger Trigger: Captures incoming WhatsApp messages.\n\nLangchain AI Agent: Manages the conversational flow, understands intent, and gathers required info.\n\nGoogle Calendar: Checks for availability and books appointments.\n\nGoogle Sheets: Stores and updates client records and booking info.\n\nGmail: Sends personalized appointment confirmations.\n\nOpenAI(gpt-4o-mini): Generates intelligent and friendly chat replies.\n\nAudio Transcription(Optional): Converts voice messages to text for processing.\n\n📋 Step-by-Step Workflow Description\n1.Trigger: Incoming WhatsApp Message\nThe flow starts when a new message(text or voice) is received via Wassenger.\n\n2.Message Type Detection\nThe system checks whether the message is:\n\nText: Processes it directly.\n\nVoice: Downloads and transcribes it using OpenAI.\n\n3.AI Agent Engagement\nThe AI assistant analyzes the first message and responds naturally.\n\nIt then asks if the user would like to book an appointment.\n\nIf the user agrees, it collects the following information in strict order:\n\nEmail address(used as a unique identifier)\n\nFull name\n\nPhone number\n\nAfter each input, the AI updates Google Sheets(adding or updating rows as needed).\n\n4.Purpose of Appointment\nThe assistant asks what the user would like to discuss during the appointment.\n\nThis input is recorded in the sheet as notes or discussion topic.\n\n5.Appointment Slot Offering\nThe system checks Google Calendar for available 30-minute time blocks.\n\nOnly time slots during business hours are offered:\n\nMonday to Friday\n\nMorning: 09:00–12:00\n\nAfternoon: 13:00–17:00(noon hour excluded)\n\nThe next 5 available slots(at least 24h in the future) are displayed in the user's local time(e.g., London).\n\n6.Appointment Confirmation\nOnce the user picks a time:\n\nA calendar event is created.\n\nThe associated Google Sheets row is updated with the confirmed date/time(stored in system time).\n\nA confirmation email is sent via Gmail.\n\n🕒 Timezone Notes\nUsers are assumed to be in a fixed known timezone(e.g., London).\n\nInternally, scheduling and calendar checks are based on a consistent system timezone(e.g., German time).\n\n✅ Key Benefits\nFully automated booking via WhatsApp - no human intervention needed.\n\nWorks with both text and voice messages.\n\nEliminates double bookings by checking calendar availability.\n\nCentralized data collection in Google Sheets.\n\nProfessional email confirmations sent instantly.", 
"height": 1700, 
"width": 700
}, 
"type": "n8n-nodes-base.stickyNote", 
"typeVersion": 1, 
"position": [
180, 
-100
], 
"id": "d5c7f667-e407-48e1-8403-91ed141bfb10", 
"name": "Sticky Note"
}
], 
"pinData": {}, 
"connections": {
"Wassenger Trigger": {
"main": [
[
{
"node": "Message Type", 
"type": "main", 
"index": 0
}
]
]
}, 
"AI Agent": {
"main": [
[
{
"node": "Send Message", 
"type": "main", 
"index": 0
}
]
]
}, 
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent", 
"type": "ai_languageModel", 
"index": 0
}
]
]
}, 
"Simple Memory": {
"ai_memory": [
[
{
"node": "AI Agent", 
"type": "ai_memory", 
"index": 0
}
]
]
}, 
"Calendar Read": {
"ai_tool": [
[
{
"node": "AI Agent", 
"type": "ai_tool", 
"index": 0
}
]
]
}, 
"Calendar Create": {
"ai_tool": [
[
{
"node": "AI Agent", 
"type": "ai_tool", 
"index": 0
}
]
]
}, 
"Calendar Delete": {
"ai_tool": [
[
{
"node": "AI Agent", 
"type": "ai_tool", 
"index": 0
}
]
]
}, 
"Google Sheets": {
"ai_tool": [
[
{
"node": "AI Agent", 
"type": "ai_tool", 
"index": 0
}
]
]
}, 
"Google Sheets - Add rows": {
"ai_tool": [
[
{
"node": "AI Agent", 
"type": "ai_tool", 
"index": 0
}
]
]
}, 
"Google Sheets - Update Row": {
"ai_tool": [
[
{
"node": "AI Agent", 
"type": "ai_tool", 
"index": 0
}
]
]
}, 
"Gmail": {
"ai_tool": [
[
{
"node": "AI Agent", 
"type": "ai_tool", 
"index": 0
}
]
]
}, 
"Download Audio": {
"main": [
[
{
"node": "Transcribe Audio", 
"type": "main", 
"index": 0
}
]
]
}, 
"Transcribe Audio": {
"main": [
[
{
"node": "Audio Info", 
"type": "main", 
"index": 0
}
]
]
}, 
"Audio Info": {
"main": [
[
{
"node": "AI Agent", 
"type": "main", 
"index": 0
}
]
]
}, 
"Message Type": {
"main": [
[
{
"node": "Download Audio", 
"type": "main", 
"index": 0
}
], 
[
{
"node": "AI Agent", 
"type": "main", 
"index": 0
}
]
]
}
}, 
"active": false, 
"settings": {
"executionOrder": "v1"
}
}

Recursos Avançados e Personalização

Opções de Escalabilidade

  • Integração de múltiplos calendários para agendamentos em equipe
  • Regras de agendamento específicas por departamento
  • Configurações personalizadas de duração de atendimento
  • Exclusões para feriados e períodos de férias

Possibilidades de Integração

  • Conexões com sistemas CRM
  • Automação de processamento de pagamentos
  • Sistemas de lembretes por SMS
  • Geração de link para chamadas de vídeo

Monitoramento e Análises

  • Acompanhamento da conversão de agendamentos
  • Análise de interação com o cliente
  • Medição de tempo de resposta
  • Monitoramento de desempenho do sistema

Melhorias Futuras

Recursos planejados:

  • Capacidade de reagendamento de agendamentos
  • Notificações de lembrete automatizadas
  • Coleta de feedback dos clientes
  • Expansão do suporte multilíngue

Integrações avançadas:

  • Conexões com plataformas de videoconferência
  • Sistemas de gestão de relacionamento com o cliente
  • Desenvolvimento de painel de análises
  • Notificações em aplicativos móveis

Comece hoje

Pronto para implementar essa poderosa automação de agendamento? Siga estes passos:

  1. Registre seu número do WhatsApp: Configure seu perfil comercial no Wassenger
  2. Baixe o Workflow: Acesse o template completo para n8n
  3. Configure seu ambiente: Configure todas as integrações necessárias (Google, OpenAI, etc)
  4. Teste exaustivamente: Verifique se todos os recursos funcionam como esperado
  5. Ative seu workflow: Comece a aceitar agendamentos automatizados

Este sistema de agendamento por WhatsApp transforma a forma como empresas de serviços lidam com compromissos, oferecendo automação profissional sem exigir conhecimento técnico. A combinação de IA, integração com Google e acessibilidade via WhatsApp cria uma solução poderosa para operações empresariais modernas.

Suporte e Comunidade

Para assistência adicional, personalização do workflow ou implementação de recursos avançados, conecte-se com a comunidade n8n ou considere serviços de consultoria profissional em automação para maximizar o potencial do seu sistema.

🚀 Experimente o Wassenger Flows grátis | 📚 Ver documentação | 💬 Obter suporte

Ready to transform your WhatsApp communication?

Start automating your customer interactions today with Wassenger

Get Started Free