AutomationFlowsAI & RAG › Powertech Whatsapp

Powertech Whatsapp

Powertech Whatsapp. Uses whatsAppTrigger, whatsApp, httpRequest, googleGemini. Event-driven trigger; 36 nodes.

Event trigger★★★★★ complexityAI-powered36 nodesWhatsApp TriggerWhatsAppHTTP RequestGoogle GeminiChain LlmRedisAgentMemory Postgres Chat
AI & RAG Trigger: Event Nodes: 36 Complexity: ★★★★★ AI nodes: yes Added:

This workflow follows the Agent → Chainllm recipe pattern — see all workflows that pair these two integrations.

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
{
  "name": "Powertech Whatsapp",
  "nodes": [
    {
      "parameters": {
        "updates": [
          "messages"
        ],
        "options": {}
      },
      "id": "4d3a3bc7-0adb-4e8e-ae06-3a558ec74320",
      "name": "WhatsApp Trigger",
      "type": "n8n-nodes-base.whatsAppTrigger",
      "position": [
        -688,
        320
      ],
      "typeVersion": 1,
      "credentials": {
        "whatsAppTriggerApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "fieldToSplitOut": "=messages",
        "options": {}
      },
      "id": "6660caac-37a2-4245-989a-04ef2cc9bc9a",
      "name": "Filtrardor",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -496,
        320
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.type == 'audio' && Boolean($json.audio) }}",
                    "rightValue": "audio",
                    "id": "e04acfcd-cb7b-41d7-8c2c-73e0e0f3c8fe"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Audio"
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "82aa5ff4-c9b6-4187-a27e-c7c5d9bfdda0",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.type == 'video' && Boolean($json.video) }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true,
              "outputKey": "Video"
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "05b30af4-967b-4824-abdc-84a8292ac0e5",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ $json.type == 'image' && Boolean($json.image) }}",
                    "rightValue": ""
                  }
                ]
              },
              "renameOutput": true,
              "outputKey": "Imagen"
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra",
          "renameFallbackOutput": "Texto"
        }
      },
      "id": "0234c063-3f31-48ca-bb0b-7cdf1c01c221",
      "name": "Enrutar Mensajes",
      "type": "n8n-nodes-base.switch",
      "position": [
        -304,
        288
      ],
      "typeVersion": 3.2
    },
    {
      "parameters": {
        "resource": "media",
        "operation": "mediaUrlGet",
        "mediaGetId": "={{ $json.audio.id }}"
      },
      "id": "2379e7ca-f0ec-499d-9f27-57bf2d28be8b",
      "name": "Obtener URL | Audio",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        0,
        0
      ],
      "typeVersion": 1,
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "media",
        "operation": "mediaUrlGet",
        "mediaGetId": "={{ $json.video.id }}"
      },
      "id": "cfe83d47-fad7-4fa6-8521-87da2fec260b",
      "name": "Obtener URL | Video",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        0,
        208
      ],
      "typeVersion": 1,
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "media",
        "operation": "mediaUrlGet",
        "mediaGetId": "={{ $('Filtrardor').item.json.image.id }}"
      },
      "id": "d602669b-476e-4293-a5f1-89aab01dfa5a",
      "name": "Obtener URL | Imagen",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        0,
        400
      ],
      "typeVersion": 1,
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "url": "={{ $json.url }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "whatsAppApi",
        "options": {}
      },
      "id": "65c3dab5-2ad9-44ea-ae82-9f67efed4c76",
      "name": "Descargar Audio",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        192,
        0
      ],
      "typeVersion": 4.2,
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "url": "={{ $json.url }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "whatsAppApi",
        "options": {}
      },
      "id": "8768270d-fe9a-463e-a906-eef2b3432b05",
      "name": "Descargar Video",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        192,
        208
      ],
      "typeVersion": 4.2,
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "url": "={{ $json.url }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "whatsAppApi",
        "options": {}
      },
      "id": "f4c678d1-474d-4dab-8a47-e5df3c5b474d",
      "name": "Descargar Imagen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        192,
        400
      ],
      "typeVersion": 4.2,
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "audio",
        "modelId": {
          "__rl": true,
          "value": "models/gemini-2.5-flash",
          "mode": "list",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "inputType": "binary",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "typeVersion": 1.1,
      "position": [
        384,
        0
      ],
      "id": "789619a4-70a1-4bd5-a7fd-0977d8f37600",
      "name": "Transcribe a recording",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "video",
        "operation": "analyze",
        "modelId": {
          "__rl": true,
          "value": "models/gemini-2.5-flash",
          "mode": "list",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "text": "=# Contexto\n\nRecibes como input un video enviado por el usuario.\n\n# Tarea\n\nDescribe el video. Lo que m\u00e1s importa es lo que dice la persona en el video.\n\n# Especificaciones\n\nLo esencial es transcribir/parafrasear lo que dice la persona.\n",
        "inputType": "binary",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "typeVersion": 1,
      "position": [
        384,
        208
      ],
      "id": "bc600bd4-2585-4a39-b9ff-5b3781bfe10f",
      "name": "Analizar Video",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=# Contexto\n\nRecibes como input una imagen enviada por el usuario.",
        "messages": {
          "messageValues": [
            {
              "type": "HumanMessagePromptTemplate",
              "messageType": "imageBinary"
            },
            {
              "message": "=# Contexto\n\nEres parte de una automatizaci\u00f3n en N8N. Tu descripci\u00f3n ser\u00e1 procesada por un Agente de IA (ChatBot) para PowerTech Academy.\n\n# Tarea\n\nDescribe la imagen y transcribe cualquier texto visible.\n\n# Especificaciones\n\nTen en cuenta para qui\u00e9n trabajas. No a\u00f1adas detalles irrelevantes para el negocio."
            }
          ]
        }
      },
      "id": "a1a5c202-422f-41cf-a9b4-0fa32c612d53",
      "name": "Explicar Imagen",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        368,
        400
      ],
      "typeVersion": 1.4
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "1c1fbe32-c8c4-4416-9871-265321201c16",
              "name": "mensaje",
              "value": "={{ $json.content?.parts?.[0]?.text ?? $json.text ?? '' }}\n",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "f3eb60ce-2643-429e-871d-39e4c8fd506b",
      "name": "Obtener Video",
      "type": "n8n-nodes-base.set",
      "position": [
        672,
        160
      ],
      "typeVersion": 3.4
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "b688b35c-523e-4f0a-9201-770c92437519",
              "name": "content.parts[0].text",
              "value": "={{ $json.content?.parts?.[0]?.text ?? $json.text ?? $json.transcription ?? '' }}\n",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "d23651e4-18b8-49d0-ad22-c253419c8d1c",
      "name": "Obtener Mensaje",
      "type": "n8n-nodes-base.set",
      "position": [
        672,
        320
      ],
      "typeVersion": 3.4
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "d4b9efeb-9a68-43e3-bc4c-cd207510bddf",
              "name": "text",
              "value": "={{ $json.text.body }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        192,
        640
      ],
      "id": "1bae3ce3-4fa6-44b0-88aa-baec857793a4",
      "name": "Obtener Texto"
    },
    {
      "parameters": {
        "operation": "push",
        "list": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}",
        "messageData": "={{ $json.content.parts[0].text }}",
        "tail": true
      },
      "type": "n8n-nodes-base.redis",
      "typeVersion": 1,
      "position": [
        880,
        320
      ],
      "id": "c4a598f2-6212-47e3-840c-f54cca5e97f1",
      "name": "Push Data",
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "amount": 3
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        1040,
        320
      ],
      "id": "31f27331-808f-4361-9b69-f3906f8407f8",
      "name": "Pausa"
    },
    {
      "parameters": {
        "operation": "get",
        "propertyName": "Mensaje",
        "key": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}",
        "options": {}
      },
      "type": "n8n-nodes-base.redis",
      "typeVersion": 1,
      "position": [
        1200,
        320
      ],
      "id": "f35f9f2a-192a-406e-a893-9423e6194067",
      "name": "Get Data",
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "199b9525-b40c-4b2f-bdb2-e37166159ee2",
              "leftValue": "={{ $node[\"Get Data\"].json[\"Mensaje\"][$node[\"Get Data\"].json[\"Mensaje\"].length - 1] }}",
              "rightValue": "={{ $node[\"Get Data\"].json[\"Mensaje\"][0] }}",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1360,
        320
      ],
      "id": "4f633945-cc4f-4f4b-a8e7-cddcf1b0d658",
      "name": "Mismo Mensaje?"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "c6cd2b5c-67e3-4648-8c9c-26da4cb40091",
              "leftValue": "={{ $json.Mensaje }}",
              "rightValue": 0,
              "operator": {
                "type": "array",
                "operation": "lengthGt",
                "rightType": "number"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1520,
        320
      ],
      "id": "0e28cbd4-bf28-4a63-9aad-a33f0b32655b",
      "name": "\u00danico Mensaje?"
    },
    {
      "parameters": {
        "operation": "delete",
        "key": "={{ $('WhatsApp Trigger').item.json.messages[0].from }}"
      },
      "type": "n8n-nodes-base.redis",
      "typeVersion": 1,
      "position": [
        1680,
        320
      ],
      "id": "1e0d0b3e-e48e-4c30-b242-f76a6163c1c1",
      "name": "Delete Data",
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1680,
        496
      ],
      "id": "6411d016-74c0-4362-b7eb-2d9ce7de25b8",
      "name": "NoOp"
    },
    {
      "parameters": {
        "jsCode": "// Une los textos del array \"Mensaje\" del nodo \"Get Data\"\n// y devuelve un solo campo: \"Mensaje Completo\"\n\nconst mensajes = $node[\"Get Data\"].json[\"Mensaje\"];\n\nif (Array.isArray(mensajes)) {\n  return [\n    {\n      json: {\n        \"Mensaje Completo\": mensajes.join(', ')\n      }\n    }\n  ];\n} else {\n  return [\n    {\n      json: {\n        \"Mensaje Completo\": null\n      }\n    }\n  ];\n}\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1840,
        320
      ],
      "id": "9f86af75-d226-4e58-ae91-0d337e6a7162",
      "name": "Set Mensaje Completo"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $('Set Mensaje Completo').item.json['Mensaje Completo'] }}",
        "messages": {
          "messageValues": [
            {
              "message": "=# Rol\n\nEres un detector de idioma. Analizas el mensaje del usuario y devuelves \u00fanicamente el nombre del idioma detectado.\n\n# Contexto\n\nRecibes mensajes en texto libre y debes indicar el idioma principal. Normalmente ser\u00e1n:\n\n- Espa\u00f1ol\n- Ingl\u00e9s\n\n# Tarea\n\nDetectar el idioma predominante en el mensaje.\nDevolver \u00fanicamente el nombre del idioma, escrito tal cual en la lista anterior.\n\n# Especificaciones\n\nSi el idioma no est\u00e1 en la lista, devolver \"Desconocido\".\nSi el mensaje mezcla varios idiomas, devolver el que aparezca de forma m\u00e1s predominante.\nNo uses c\u00f3digos (es, en, etc.) ni explicaciones.\nNo a\u00f1adas puntuaci\u00f3n, comillas ni texto extra.\n\n# Ejemplos\n\n## Entrada: \"\u00bfPuedes ayudarme con el curso?\"\n## Salida: Espa\u00f1ol\n\n## Entrada: \"Can you tell me more about the program?\"\n## Salida: Ingl\u00e9s\n\n# Notas\n\n- Si recibes un idioma que no entiendes o no tiene sentido, di que es Espa\u00f1ol"
            }
          ]
        },
        "batching": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.7,
      "position": [
        2000,
        320
      ],
      "id": "bde786d7-d812-4823-8511-bc26ff919c3c",
      "name": "Traductor"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Recibes el siguiente mensaje: {{ $('Set Mensaje Completo').item.json['Mensaje Completo'] }}\n\n--\n\nResponde SIEMPRE en {{ $json.text }}",
        "options": {
          "systemMessage": "=# Rol\n\nEres Diana, Asesora de Admisiones de PowerTech Academy, una escuela t\u00e9cnica privada en Hollywood, Florida, especializada en fire & life safety.\n\nOperas como asistente de WhatsApp. Recibes mensajes de texto, audio transcrito, im\u00e1genes analizadas y videos analizados. Siempre respondes en el mismo canal en que el usuario se comunica contigo.\n\nTu misi\u00f3n es atender consultas, calificar prospectos y agendar el Virtual Advisory de 15 minutos \u2014 el paso obligatorio antes de cualquier matr\u00edcula o visita presencial al campus.\n\nNO te presentes como IA a menos que el usuario te lo pregunte directamente. Si te preguntan, responde con honestidad: \"Soy Diana, asistente virtual de PowerTech Academy\" y contin\u00faa con naturalidad.\n\n---\n\n# Tareas\n\n1. Responder consultas sobre el programa de PowerTech Academy.\n2. Calificar el perfil e inter\u00e9s del prospecto (t\u00e9cnico, profesional o empresario).\n3. Conseguir que el prospecto agende el Virtual Advisory gratuito de 15 minutos.\n4. Si el prospecto no quiere agendar a\u00fan, ofrecer el brochure por email como alternativa.\n5. Registrar los datos del prospecto cuando corresponda.\n6. Escalar a agente humano si la situaci\u00f3n lo requiere.\n\n---\n\n# Fecha Actual\n\nHoy es {{ $now.setLocale('es').toFormat('EEEE d') }} de {{ $now.setLocale('es').toFormat('MMMM') }} de {{ $now.year }}. Zona horaria: America/New_York (EST/EDT).\n\nREGLA DE FECHAS: Cuando el usuario diga fechas relativas ('pr\u00f3ximo lunes', 'esta semana', 'ma\u00f1ana', 'el viernes'), calcula la fecha exacta con d\u00eda num\u00e9rico + mes + a\u00f1o antes de llamar a la herramienta calendario. NUNCA pases solo el nombre del d\u00eda sin el a\u00f1o. Ejemplo: si hoy es jueves 10 de abril de 2026 y el usuario dice 'pr\u00f3ximo lunes', pasa '13 de abril de 2026'.\n\n---\n\n# Contexto\n\nPowerTech Academy es una escuela t\u00e9cnica privada especializada en fire & life safety en South Florida.\n\nPrograma: Fire Alarm Systems Technician \u2014 Fast Track\nDuraci\u00f3n: 2 a 3 meses (aproximadamente 90 d\u00edas), intensivo\nModalidad: Teor\u00eda virtual + Laboratorios f\u00edsicos presenciales\nRequisitos: Sin experiencia previa. Mayores de 17 a\u00f1os.\nCampus principal: 3803 N 29th Ave, Suite B, Hollywood, FL 33020\nHorario de oficina: Lunes a viernes, 8:00 AM a 5:00 PM EST\nTel\u00e9fono: +1 (786) 460-9020\nEmail: sales@powertech.academy\nSitio web: https://powertech.academy\n\nIMPORTANTE \u2014 Certificaci\u00f3n:\nPowerTech Academy NO otorga certificaci\u00f3n NFPA 72. El programa emite un Certificate of Attendance reconocido por empleadores del sector y facilita la colocaci\u00f3n laboral. NUNCA menciones \"certificaci\u00f3n NFPA 72\" como beneficio directo del programa.\n\n---\n\n# Manejo de Idioma\n\nDETECCI\u00d3N: El primer mensaje del usuario define el idioma para toda la conversaci\u00f3n.\n\nESPA\u00d1OL: Responde 100% en espa\u00f1ol.\nINGL\u00c9S: Responde 100% en ingl\u00e9s.\nCAMBIO: Si el usuario cambia de idioma, Diana cambia con \u00e9l sin comentarlo.\nMEZCLA: NUNCA mezcles idiomas en un mismo mensaje.\n\n---\n\n# Reglas de Respuesta\n\n## Canal Texto (WhatsApp)\n- Respuestas claras, directas y conversacionales.\n- M\u00e1ximo 3-4 oraciones por mensaje.\n- Puedes usar formato b\u00e1sico de WhatsApp: *negrita* para resaltar datos clave.\n- Termina siempre con una pregunta abierta para mantener la conversaci\u00f3n activa.\n\n## Canal Audio (ElevenLabs)\n- L\u00cdMITE ESTRICTO: M\u00e1ximo 110 palabras por respuesta.\n- Lenguaje completamente natural y conversacional. Sin bullets, sin listas, sin asteriscos.\n- Una sola idea por mensaje de audio.\n\n## Regla General\n- NUNCA generes respuestas que superen 150 palabras en total.\n- Una pregunta por turno.\n- Si el usuario mand\u00f3 un audio, video o imagen, acusa recibo brevemente antes de responder al contenido.\n\n---\n\n# Proceso de Admisi\u00f3n\n\n## 1. Saludo y Calificaci\u00f3n\nSaluda con calidez y pregunta por el motivo del mensaje. Identifica el perfil del prospecto.\n\n## 2. Responder y Conectar\nBasado en el perfil, presenta brevemente el beneficio m\u00e1s relevante del programa.\n\n## 3. Ofrecer el Virtual Advisory\nPresenta el Virtual Advisory de 15 minutos por Google Meet como el siguiente paso natural. Es gratuito y sin compromiso. Es obligatorio antes de matr\u00edcula o visita presencial.\n\nEjemplo:\n\"Te puedo agendar un Advisory gratuito de 15 min por Google Meet donde te explicamos todo en detalle. \u00bfQu\u00e9 d\u00eda te viene bien esta semana?\"\n\n## 4. Recoger Datos\nCuando el prospecto acepte, solicita: nombre completo, email, n\u00famero de tel\u00e9fono, fecha y hora preferida.\nPide los datos de uno en uno, no todos en el mismo mensaje.\n\n## 5. Agendar con la Herramienta\nLlama a la herramienta **calendario** con todos los datos recopilados.\nNUNCA confirmes el agendamiento sin haber llamado primero a la herramienta y recibido una respuesta exitosa.\n\n## 6. Confirmar al Prospecto\nSolo despu\u00e9s de que la herramienta confirme, comunica al prospecto:\n\"Listo, tu Advisory est\u00e1 agendado para el [d\u00eda y fecha] a las [hora]. Te llegar\u00e1 la invitaci\u00f3n de Google Meet a tu correo [email]. \u00a1Nos vemos ah\u00ed!\"\n\nSiempre menciona d\u00eda + fecha completa (ejemplo: \"martes 15 de abril de 2026\").\n\n---\n\n# Edge Cases\n\nPRECIO O COSTO:\nNUNCA des cifras. Redirige siempre al Virtual Advisory.\n\nCAMPUS O VISITA PRESENCIAL:\nInforma la ubicaci\u00f3n y redirige al Advisory como primer paso obligatorio.\n\nUSUARIO INDECISO:\nNo presiones. Ofrece el brochure: \"Si prefieres, te mando el brochure por email para que lo revises con calma. \u00bfTe lo env\u00edo?\"\n\n\u00bfERES IA? / \u00bfERES UN BOT?:\nResponde: \"Soy Diana, asistente virtual de PowerTech Academy. \u00bfEn qu\u00e9 te puedo ayudar?\"\n\nCERTIFICACI\u00d3N NFPA 72:\nAclara: \"El programa emite un Certificate of Attendance reconocido por empleadores top del sector.\"\n\nUSUARIO AGRESIVO O FUERA DE TEMA:\nMant\u00e9n un tono calmado. Si persiste, proporciona el email sales@powertech.academy.\n\n---\n\n# Herramientas\n\n## calendario\nAgenda el Virtual Advisory de 15 minutos v\u00eda Google Meet en Google Calendar.\nCu\u00e1ndo usarla: Cuando el prospecto confirme fecha, hora y haya dado su nombre, email y tel\u00e9fono.\nPar\u00e1metros requeridos: nombre, email, telefono, fecha, hora.\nREGLA CR\u00cdTICA: NUNCA confirmes el agendamiento al usuario sin haber llamado primero a esta herramienta.\n\n---\n\n# Restricciones Absolutas\n\n1. NUNCA des precios, tarifas o rangos de costo.\n2. NUNCA menciones \"certificaci\u00f3n NFPA 72\" como beneficio directo.\n3. NUNCA confirmes un agendamiento sin haber llamado primero a la herramienta calendario.\n4. NUNCA generes respuestas de m\u00e1s de 150 palabras en texto ni m\u00e1s de 110 en audio.\n5. NUNCA hagas m\u00e1s de una pregunta por mensaje.\n6. NUNCA uses formato escrito en respuestas de audio.\n7. NUNCA inventes datos del programa.\n8. SIEMPRE termina con una pregunta o llamada a la acci\u00f3n.\n9. SIEMPRE detecta el idioma del primer mensaje y mant\u00e9n ese idioma.\n10. SIEMPRE usa d\u00eda + fecha completa al confirmar un Advisory.\n\n---"
        }
      },
      "id": "a2bd15f0-5186-42b0-895d-0fc83dfad378",
      "name": "Agente de IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2288,
        320
      ],
      "typeVersion": 1.6
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "914cc274-6889-4bb2-97f5-24dc9b51228c",
              "leftValue": "={{ $('Filtrardor').item.json.type }}",
              "rightValue": "audio",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        2592,
        320
      ],
      "id": "7e227562-d6d7-4be2-a4fb-daa790a63948",
      "name": "If"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.output }}",
        "messages": {
          "messageValues": [
            {
              "message": "=# Contexto\n\nVas a recibir como input un mensaje adaptado a una conversaci\u00f3n por texto y debes adaptarla a una conversaci\u00f3n por audio.\n\n# Tarea\n\nTransforma el input recibido en formato plano.\n\n# Especificaciones\n\nElimina cualquier s\u00edmbolo como #@/-* etc. Solo devuelve texto plano.\nElimina signos de exclamaci\u00f3n e interrogaci\u00f3n.\nElimina saltos de l\u00ednea (\\n). El output debe ser texto plano continuo.\n\n# Ejemplo de Entrada:\n\nNuestro horario es:\\n\\n- Lunes a Viernes: 9:00 a 17:00\\n\\n\u00bfA qu\u00e9 hora te gustar\u00eda?\n\n# Ejemplo de Salida:\n\nNuestro horario es de lunes a viernes de 9 a 17. A qu\u00e9 hora te gustar\u00eda."
            }
          ]
        },
        "batching": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.7,
      "position": [
        2800,
        224
      ],
      "id": "41c0d92a-6c1e-40ee-ad23-a49c559f5eae",
      "name": "Eliminar Car\u00e1cteres"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.elevenlabs.io/v1/text-to-speech/CwhRBWXzGAHq8TQ4Fs17",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n    \"text\": \"{{ $json.text }}\"\n}",
        "options": {}
      },
      "id": "d53d3a14-40ed-4d54-83cd-6b0b97282b50",
      "name": "Elevenlabs",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3120,
        224
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "send",
        "phoneNumberId": "1040495995809229",
        "recipientPhoneNumber": "={{ $('Filtrardor').item.json.from }}",
        "messageType": "audio",
        "mediaPath": "useMedian8n",
        "additionalFields": {}
      },
      "id": "26cfc308-2222-4a90-8666-77162372c19b",
      "name": "Enviar Audio",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        3312,
        224
      ],
      "typeVersion": 1,
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "send",
        "phoneNumberId": "1040495995809229",
        "recipientPhoneNumber": "={{ $('Filtrardor').item.json.from }}",
        "textBody": "={{ $('Agente de IA').item.json.output }}",
        "additionalFields": {
          "previewUrl": false
        }
      },
      "id": "1e356b80-fa74-4907-8663-812280aceeca",
      "name": "Enviar Mensaje",
      "type": "n8n-nodes-base.whatsApp",
      "position": [
        2800,
        400
      ],
      "typeVersion": 1,
      "credentials": {
        "whatsAppApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Filtrardor').item.json.from }}",
        "tableName": "conversaciones",
        "contextWindowLength": 20
      },
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "typeVersion": 1.3,
      "position": [
        2224,
        576
      ],
      "id": "f0e52d62-672f-4302-986a-b222beb25f30",
      "name": "Postgres",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "name": "calendario",
        "description": "Agenda el Virtual Advisory de 15 minutos por Google Meet. \u00dasala SOLO cuando el prospecto haya confirmado los 5 datos: nombre completo, email, tel\u00e9fono, fecha y hora preferida. La herramienta verifica disponibilidad en tiempo real, crea el evento con Google Meet, guarda el lead en el CRM y env\u00eda emails de confirmaci\u00f3n autom\u00e1ticamente. Retorna el link de Meet y la confirmaci\u00f3n para compartir con el prospecto. Si el horario no est\u00e1 disponible, retorna 3 alternativas.",
        "workflowId": {
          "__rl": true,
          "value": "REEMPLAZA_CON_ID_DEL_SUBWORKFLOW_CALENDARIO",
          "mode": "id"
        },
        "workflowInputs": {
          "schema": [
            {
              "name": "nombre",
              "type": "string",
              "description": "Nombre completo del prospecto"
            },
            {
              "name": "email",
              "type": "string",
              "description": "Correo electr\u00f3nico del prospecto"
            },
            {
              "name": "telefono",
              "type": "string",
              "description": "N\u00famero de tel\u00e9fono con c\u00f3digo de pa\u00eds"
            },
            {
              "name": "fecha",
              "type": "string",
              "description": "Fecha deseada, ej: martes 15 de abril de 2026"
            },
            {
              "name": "hora",
              "type": "string",
              "description": "Hora deseada, ej: 10:00 AM"
            }
          ]
        }
      },
      "id": "tool-calendario",
      "name": "Tool: Calendario",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2,
      "position": [
        2224,
        736
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        512,
        608
      ],
      "id": "e08b47e6-6e26-4ee1-bd6f-4ecb4af2e783",
      "name": "Google Gemini Chat Model",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        2400,
        144
      ],
      "id": "93123fcc-758b-4e05-afae-ed3b824909b8",
      "name": "Google Gemini Chat Model1",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "## \u2b50 PowerTech Academy \u2014 Bot Diana\n\nFlujo WhatsApp con agendamiento autom\u00e1tico de Virtual Advisory.\n\n**Nuevo:** Tool Calendario conectado al subworkflow \ud83d\udcc5\n- Verifica disponibilidad en Google Calendar\n- Crea evento con Google Meet\n- Guarda lead en Postgres CRM\n- Env\u00eda emails de confirmaci\u00f3n al lead y al equipo\n\n**Credenciales a configurar:**\n- WhatsApp API\n- Google Gemini\n- Redis\n- Postgres\n- Gmail OAuth2 (en subworkflow)\n- Google Calendar OAuth2 (en subworkflow)\n- ElevenLabs Header Auth",
        "height": 280,
        "width": 480
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -2048,
        208
      ],
      "id": "ba22f7d2-c35c-4b13-8770-d0ffe2880afa",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "sendTo": "sales@powertech.academy",
        "subject": "={{ '\ud83d\udcac WhatsApp \u2014 ' + $('Filtrardor').item.json.from }}",
        "emailType": "html",
        "message": "=<div style=\"font-family:sans-serif;max-width:600px;padding:20px\"><h2 style=\"color:#FF4500;margin-bottom:4px\">Nueva conversaci\u00f3n WhatsApp</h2><p style=\"color:#888;margin-top:0\">Bot Diana \u00b7 PowerTech Academy</p><table style=\"width:100%;border-collapse:collapse;margin-bottom:20px\"><tr><td style=\"padding:8px 12px;background:#f5f5f5;font-weight:bold;width:140px\">Tel\u00e9fono</td><td style=\"padding:8px 12px\">{{ $('Filtrardor').item.json.from }}</td></tr><tr><td style=\"padding:8px 12px;background:#f5f5f5;font-weight:bold\">Fecha / Hora</td><td style=\"padding:8px 12px\">{{ $now.setZone('America/New_York').toFormat('dd/MM/yyyy HH:mm') }} EST</td></tr></table><h3 style=\"color:#2196F3;margin-bottom:8px\">\ud83d\udce9 Mensaje del prospecto</h3><div style=\"background:#e8f4fd;padding:14px;border-radius:6px;border-left:4px solid #2196F3;white-space:pre-wrap\">{{ $('Set Mensaje Completo').item.json['Mensaje Completo'] }}</div><h3 style=\"color:#4CAF50;margin-top:20px;margin-bottom:8px\">\ud83e\udd16 Respuesta de Diana</h3><div style=\"background:#f0f9f0;padding:14px;border-radius:6px;border-left:4px solid #4CAF50;white-space:pre-wrap\">{{ $('Agente de IA').item.json.output }}</div><hr style=\"margin-top:28px;border:none;border-top:1px solid #eee\"><p style=\"color:#bbb;font-size:12px;margin-bottom:0\">PowerTech Academy \u2014 Bot Diana \u00b7 Notificaci\u00f3n autom\u00e1tica</p></div>",
        "options": {}
      },
      "id": "gmail-notify-conversation",
      "name": "Notificaci\u00f3n Conversaci\u00f3n",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [
        3100,
        400
      ],
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "WhatsApp Trigger": {
      "main": [
        [
          {
            "node": "Filtrardor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filtrardor": {
      "main": [
        [
          {
            "node": "Enrutar Mensajes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enrutar Mensajes": {
      "main": [
        [
          {
            "node": "Obtener URL | Audio",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Obtener URL | Video",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Obtener URL | Imagen",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Obtener Texto",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Obtener URL | Audio": {
      "main": [
        [
          {
            "node": "Descargar Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Obtener URL | Video": {
      "main": [
        [
          {
            "node": "Descargar Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Obtener URL | Imagen": {
      "main": [
        [
          {
            "node": "Descargar Imagen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Descargar Audio": {
      "main": [
        [
          {
            "node": "Transcribe a recording",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Descargar Video": {
      "main": [
        [
          {
            "node": "Analizar Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Descargar Imagen": {
      "main": [
        [
          {
            "node": "Explicar Imagen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcribe a recording": {
      "main": [
        [
          {
            "node": "Obtener Mensaje",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analizar Video": {
      "main": [
        [
          {
            "node": "Obtener Video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Explicar Imagen": {
      "main": [
        [
          {
            "node": "Obtener Mensaje",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Obtener Texto": {
      "main": [
        [
          {
            "node": "Obtener Mensaje",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Obtener Video": {
      "main": [
        [
          {
            "node": "Push Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Obtener Mensaje": {
      "main": [
        [
          {
            "node": "Push Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Push Data": {
      "main": [
        [
          {
            "node": "Pausa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pausa": {
      "main": [
        [
          {
            "node": "Get Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Data": {
      "main": [
        [
          {
            "node": "Mismo Mensaje?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mismo Mensaje?": {
      "main": [
        [
          {
            "node": "Delete Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u00danico Mensaje?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u00danico Mensaje?": {
      "main": [
        [
          {
            "node": "Delete Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "NoOp",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delete Data": {
      "main": [
        [
          {
            "node": "Set Mensaje Completo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Mensaje Completo": {
      "main": [
        [
          {
            "node": "Traductor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Traductor": {
      "main": [
        [
          {
            "node": "Agente de IA",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Agente de IA": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Eliminar Car\u00e1cteres",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Enviar Mensaje",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Eliminar Car\u00e1cteres": {
      "main": [
        [
          {
            "node": "Elevenlabs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Elevenlabs": {
      "main": [
        [
          {
            "node": "Enviar Audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar Audio": {
      "main": [
        [
          {
            "node": "Notificaci\u00f3n Conversaci\u00f3n",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar Mensaje": {
      "main": [
        [
          {
            "node": "Notificaci\u00f3n Conversaci\u00f3n",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Postgres": {
      "ai_memory": [
        [
          {
            "node": "Agente de IA",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Tool: Calendario": {
      "ai_tool": [
        [
          {
            "node": "Agente de IA",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Explicar Imagen",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Eliminar Car\u00e1cteres",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Traductor",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Agente de IA",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "tags": []
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

Powertech Whatsapp. Uses whatsAppTrigger, whatsApp, httpRequest, googleGemini. Event-driven trigger; 36 nodes.

Source: https://github.com/Gamm1866/Powertech-academy-V1/blob/84251fb47d6f50cc8ac078ce0d36950cd54ef8a7/n8n-workflows/powertech-whatsapp.json — 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

Transform your salon/service business with this streamlined WhatsApp automation system featuring Claude integration, zero-setup database management, and intelligent conversation handling. Claude MCP I

WhatsApp Trigger, WhatsApp, Redis +11
AI & RAG

🤖🧑‍💻 AI Agent for Top n8n Creators Leaderboard Reporting. Uses httpRequest, lmChatOpenAi, executeWorkflowTrigger, toolWorkflow. Event-driven trigger; 49 nodes.

HTTP Request, OpenAI Chat, Execute Workflow Trigger +8
AI & RAG

🤖🧑‍💻 AI Agent for Top n8n Creators Leaderboard Reporting. Uses httpRequest, lmChatOpenAi, executeWorkflowTrigger, toolWorkflow. Event-driven trigger; 49 nodes.

HTTP Request, OpenAI Chat, Execute Workflow Trigger +8
AI & RAG

This n8n workflow is designed to automate the aggregation, processing, and reporting of community statistics related to n8n creators and workflows. Its primary purpose is to generate insightful report

HTTP Request, OpenAI Chat, Execute Workflow Trigger +8
AI & RAG

This workflow implements an AI-powered WhatsApp booking assistant for a hair salon. The system allows customers to book, reschedule, or cancel appointments automatically via text or voice messages on

Google Calendar Tool, Google Sheets Tool, Error Trigger +15