{
  "name": "Atendente de IA 24h no WhatsApp com agenda (template Wobs Digital)",
  "nodes": [
    {
      "id": "ebab548b-f369-458e-9269-8db8f4a34999",
      "name": "Mensagem recebida no WhatsApp",
      "type": "n8n-nodes-base.whatsAppTrigger",
      "typeVersion": 1,
      "position": [
        0,
        200
      ],
      "parameters": {
        "updates": [
          "messages"
        ]
      }
    },
    {
      "id": "a52c1126-469a-4398-a781-ffd6ca9203fd",
      "name": "Dados da mensagem",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.5,
      "position": [
        240,
        200
      ],
      "parameters": {
        "mode": "manual",
        "assignments": {
          "assignments": [
            {
              "id": "telefone",
              "name": "telefone",
              "type": "string",
              "value": "={{ $json.contacts[0].wa_id }}"
            },
            {
              "id": "nome",
              "name": "nome",
              "type": "string",
              "value": "={{ $json.contacts[0].profile.name }}"
            },
            {
              "id": "tipo",
              "name": "tipo",
              "type": "string",
              "value": "={{ $json.messages[0].type }}"
            },
            {
              "id": "texto",
              "name": "texto",
              "type": "string",
              "value": "={{ $json.messages[0].text ? $json.messages[0].text.body : \"\" }}"
            },
            {
              "id": "audio_id",
              "name": "audio_id",
              "type": "string",
              "value": "={{ $json.messages[0].audio ? $json.messages[0].audio.id : \"\" }}"
            },
            {
              "id": "phone_number_id",
              "name": "phone_number_id",
              "type": "string",
              "value": "={{ $json.metadata.phone_number_id }}"
            }
          ]
        },
        "options": {}
      }
    },
    {
      "id": "5e22d97a-67a3-408e-9031-3d5cbb0d9aac",
      "name": "É áudio ou texto?",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.4,
      "position": [
        480,
        200
      ],
      "parameters": {
        "mode": "rules",
        "rules": {
          "values": [
            {
              "renameOutput": true,
              "outputKey": "Áudio",
              "conditions": {
                "options": {
                  "caseSensitive": false,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.tipo }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "audio"
                  }
                ],
                "combinator": "and"
              }
            },
            {
              "renameOutput": true,
              "outputKey": "Texto",
              "conditions": {
                "options": {
                  "caseSensitive": false,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.tipo }}",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "rightValue": "text"
                  }
                ],
                "combinator": "and"
              }
            }
          ]
        },
        "options": {}
      }
    },
    {
      "id": "5f3d6d22-87d7-4396-834e-7d71b608c0a3",
      "name": "Pegar o link do áudio",
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1.1,
      "position": [
        720,
        40
      ],
      "parameters": {
        "resource": "media",
        "operation": "mediaUrlGet",
        "mediaGetId": "={{ $json.audio_id }}"
      }
    },
    {
      "id": "568f0120-b566-483a-a2ad-a67820e7d067",
      "name": "Baixar o áudio",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.5,
      "position": [
        960,
        40
      ],
      "parameters": {
        "method": "GET",
        "url": "={{ $json.url }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "whatsAppApi",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      }
    },
    {
      "id": "6ae3ed94-09da-40bf-8a84-577aec6aaea7",
      "name": "Transcrever o áudio (OpenAI)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.5,
      "position": [
        1200,
        40
      ],
      "parameters": {
        "method": "POST",
        "url": "https://api.openai.com/v1/audio/transcriptions",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "openAiApi",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "parameterType": "formBinaryData",
              "name": "file",
              "inputDataFieldName": "data"
            },
            {
              "name": "model",
              "value": "gpt-4o-mini-transcribe"
            },
            {
              "name": "language",
              "value": "pt"
            }
          ]
        },
        "options": {}
      }
    },
    {
      "id": "656f36d3-26fa-4c2d-891b-20c4103317af",
      "name": "Texto do áudio",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.5,
      "position": [
        1440,
        40
      ],
      "parameters": {
        "mode": "manual",
        "assignments": {
          "assignments": [
            {
              "id": "texto",
              "name": "texto",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        },
        "options": {}
      }
    },
    {
      "id": "f0e82dbb-b5dc-4d9f-b1e2-afa4e30ad01f",
      "name": "Atendente de IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        1760,
        200
      ],
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.texto }}",
        "options": {
          "systemMessage": "=Você é a atendente virtual de uma clínica (EDITE AQUI o nome, o endereço e os serviços do seu negócio). Responda sempre em português do Brasil, em mensagens curtas e simpáticas, como no WhatsApp.\n\nHoje é {{ $now.setZone(\"America/Sao_Paulo\").toFormat(\"cccc, dd/MM/yyyy HH:mm\") }} (America/Sao_Paulo).\nNome do cliente: {{ $(\"Dados da mensagem\").first().json.nome }}.\n\nSeu trabalho:\n1. Entender o que o cliente quer (serviço e quando).\n2. Usar a ferramenta \"Ver horários ocupados\" para achar horários livres no período pedido. Funciona de segunda a sábado, das 9h às 19h, com atendimentos de 1 hora.\n3. Oferecer no máximo 2 horários livres e esperar o cliente escolher.\n4. Só depois da escolha, usar \"Marcar horário na agenda\" e confirmar o dia e a hora.\n\nRegras: nunca invente preço, horário ou serviço que não esteja nestas instruções. Se o cliente pedir algo fora do que você sabe, reclamar ou pedir para falar com uma pessoa, diga que a equipe vai responder em breve."
        }
      }
    },
    {
      "id": "1d1683de-4260-4c83-a14a-4717aeef3d09",
      "name": "Modelo de IA",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        1760,
        480
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini"
        },
        "options": {}
      }
    },
    {
      "id": "fee55a6c-c971-4c48-814c-a0f91765a113",
      "name": "Memória da conversa",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.4,
      "position": [
        1900,
        480
      ],
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Dados da mensagem').first().json.telefone }}",
        "contextWindowLength": 10
      }
    },
    {
      "id": "a0169d46-96cf-48fe-b15d-9f22aa266886",
      "name": "Ver horários ocupados",
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.3,
      "position": [
        2040,
        480
      ],
      "parameters": {
        "resource": "calendar",
        "operation": "availability",
        "calendar": {
          "__rl": true,
          "mode": "id",
          "value": "SEU_ID_DA_AGENDA@group.calendar.google.com"
        },
        "timeMin": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('inicio', 'Início do intervalo a consultar, em ISO 8601, fuso America/Sao_Paulo') }}",
        "timeMax": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fim', 'Fim do intervalo a consultar, em ISO 8601, fuso America/Sao_Paulo') }}",
        "options": {
          "outputFormat": "bookedSlots"
        }
      }
    },
    {
      "id": "8dbee55a-2c80-48b3-a320-1498b9eb9d3a",
      "name": "Marcar horário na agenda",
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.3,
      "position": [
        2180,
        480
      ],
      "parameters": {
        "resource": "event",
        "operation": "create",
        "calendar": {
          "__rl": true,
          "mode": "id",
          "value": "SEU_ID_DA_AGENDA@group.calendar.google.com"
        },
        "start": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('inicio', 'Início do atendimento, em ISO 8601, fuso America/Sao_Paulo') }}",
        "end": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('fim', 'Fim do atendimento, em ISO 8601, fuso America/Sao_Paulo') }}",
        "additionalFields": {
          "summary": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('titulo', 'Título: serviço e nome do cliente') }}",
          "description": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('descricao', 'Telefone do cliente e observações') }}"
        }
      }
    },
    {
      "id": "3eda28ad-da2d-4456-aa07-fec8b504c13e",
      "name": "Responder no WhatsApp",
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1.1,
      "position": [
        2120,
        200
      ],
      "parameters": {
        "resource": "message",
        "operation": "send",
        "phoneNumberId": "={{ $('Dados da mensagem').first().json.phone_number_id }}",
        "recipientPhoneNumber": "={{ $('Dados da mensagem').first().json.telefone }}",
        "messageType": "text",
        "textBody": "={{ $json.output }}"
      }
    },
    {
      "id": "a01067bf-ab97-418f-b0d9-c993f4f702b3",
      "name": "Como configurar",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -20,
        -420
      ],
      "parameters": {
        "content": "## Atendente de IA 24h no WhatsApp com agenda (template Wobs Digital)\nRecebe a mensagem (texto ou áudio), transcreve o áudio, deixa um agente de IA conversar com o cliente, consultar a Google Agenda, marcar o horário e responder no WhatsApp.\n\n**Antes de ativar, configure:**\n1. Credencial **WhatsApp** (Meta Cloud API) nos 3 nós de WhatsApp, no gatilho e no nó \"Baixar o áudio\".\n2. Credencial **OpenAI** no modelo e na transcrição.\n3. Credencial **Google Calendar** e a **agenda** (troque SEU_ID_DA_AGENDA) nas 2 ferramentas.\n4. Edite o texto do agente (nome do negócio, serviços, horários).\n\nSem credenciais incluídas. Passo a passo completo: wobsdigital.tech/blog",
        "color": 5,
        "width": 900,
        "height": 400
      }
    }
  ],
  "connections": {
    "Mensagem recebida no WhatsApp": {
      "main": [
        [
          {
            "node": "Dados da mensagem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Dados da mensagem": {
      "main": [
        [
          {
            "node": "É áudio ou texto?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "É áudio ou texto?": {
      "main": [
        [
          {
            "node": "Pegar o link do áudio",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Atendente de IA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pegar o link do áudio": {
      "main": [
        [
          {
            "node": "Baixar o áudio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Baixar o áudio": {
      "main": [
        [
          {
            "node": "Transcrever o áudio (OpenAI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcrever o áudio (OpenAI)": {
      "main": [
        [
          {
            "node": "Texto do áudio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Texto do áudio": {
      "main": [
        [
          {
            "node": "Atendente de IA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Atendente de IA": {
      "main": [
        [
          {
            "node": "Responder no WhatsApp",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Modelo de IA": {
      "ai_languageModel": [
        [
          {
            "node": "Atendente de IA",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Memória da conversa": {
      "ai_memory": [
        [
          {
            "node": "Atendente de IA",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Ver horários ocupados": {
      "ai_tool": [
        [
          {
            "node": "Atendente de IA",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Marcar horário na agenda": {
      "ai_tool": [
        [
          {
            "node": "Atendente de IA",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  }
}