AutomationFlowsAI & RAG › WhatsApp Video Send with Twilio & OpenAI

WhatsApp Video Send with Twilio & OpenAI

Original n8n title: Fluxo Whatsapp Com Envio De Vídeo

Fluxo WhatsApp com Envio de Vídeo. Uses httpRequest, twilio, openAi. Webhook trigger; 10 nodes.

Webhook trigger★★★★☆ complexityAI-powered10 nodesHTTP RequestTwilioOpenAI
AI & RAG Trigger: Webhook Nodes: 10 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the HTTP Request → OpenAI 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": "Fluxo WhatsApp com Envio de V\u00eddeo",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "whatsapp-webhook",
        "options": {}
      },
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [
        0,
        400
      ],
      "id": "a0800e83-1100-4cff-b137-84781f2c9979"
    },
    {
      "parameters": {
        "jsCode": "// Extrair dados do webhook do WhatsApp\nlet message = \"\";\nlet from = \"\";\nlet profileName = \"\";\nlet waId = \"\";\nlet destinatario = \"\";\n\n// Verificar estrutura do webhook do Twilio\nif ($input.first().json.Body) {\n  message = $input.first().json.Body || \"\";\n  from = $input.first().json.From || \"\";\n  profileName = $input.first().json.ProfileName || \"\";\n  waId = $input.first().json.WaId || \"\";\n  destinatario = $input.first().json.body.To;\n}\n// Verificar estrutura do corpo da requisi\u00e7\u00e3o\nelse if ($input.first().json.body && $input.first().json.body.Body) {\n  message = $input.first().json.body.Body || \"\";\n  from = $input.first().json.body.From || \"\";\n  profileName = $input.first().json.body.ProfileName || \"\";\n  waId = $input.first().json.body.WaId || \"\";\n  destinatario = $input.first().json.body.To;\n}\n\n\nreturn [\n  {\n    json: {\n      message: message,\n      from: from,\n      profileName: profileName,\n      waId: \"+\"+waId,\n      destinatario: destinatario\n    }\n  }\n];"
      },
      "name": "Extrair Dados",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        220,
        400
      ],
      "id": "37b14782-e647-489a-852e-ea6148f70d27"
    },
    {
      "parameters": {
        "jsCode": "// Detectar solicita\u00e7\u00f5es de v\u00eddeo\nfunction detectarSolicitacaoVideo(mensagem) {\n  // Converter para min\u00fasculas para facilitar a compara\u00e7\u00e3o\n  const mensagemLower = mensagem.toLowerCase();\n  \n  // Palavras-chave que indicam solicita\u00e7\u00e3o de v\u00eddeo\n  const palavrasChaveVideo = [\n    'envie o v\u00eddeo', 'enviar v\u00eddeo', 'quero ver o v\u00eddeo', \n    'manda o v\u00eddeo', 'mandar v\u00eddeo', 'envie um v\u00eddeo',\n    'enviar um v\u00eddeo', 'me manda o v\u00eddeo', 'me envie o v\u00eddeo',\n    'video', 'v\u00eddeo'\n  ];\n  \n  // Verificar se alguma palavra-chave est\u00e1 presente na mensagem\n  return palavrasChaveVideo.some(keyword => mensagemLower.includes(keyword));\n}\n\n// C\u00f3digo para o n\u00f3 \"Code\" no n8n\nconst message = $input.first().json.message || '';\nconst from = $input.first().json.from || '';\nconst waId = $input.first().json.waId || '';\nconst profileName = $input.first().json.profileName || '';\nconst destinatario = $input.first().json.destinatario || '';\n\n// Verificar se \u00e9 uma solicita\u00e7\u00e3o de v\u00eddeo\nconst isSolicitacaoVideo = detectarSolicitacaoVideo(message);\n\nif (isSolicitacaoVideo) {\n  // URL do v\u00eddeo a ser enviado\n  const videoUrl = 'https://sua-url-de-video.mp4'; // Substitua pela URL real do v\u00eddeo\n  \n  // Preparar dados para envio de v\u00eddeo\n  return [{\n    json: {\n      solicitacaoVideo: true,\n      videoUrl: videoUrl,\n      waId: waId,\n      from: from,\n      message: message,\n      profileName: profileName,\n      destinatario: destinatario\n    }\n  }];\n} else {\n  // Continuar com o fluxo normal para mensagens de texto\n  return [{\n    json: {\n      ...$input.first().json,\n      solicitacaoVideo: false\n    }\n  }];\n}"
      },
      "name": "Detectar V\u00eddeo",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        440,
        400
      ],
      "id": "video-detection-node"
    },
    {
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{$json.solicitacaoVideo}}",
              "operation": "equals",
              "value2": "true"
            }
          ]
        }
      },
      "name": "\u00c9 Solicita\u00e7\u00e3o de V\u00eddeo?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        660,
        400
      ],
      "id": "video-condition-node"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=http://supabase-server:3001/api/enviar-video-whatsapp",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "whatsappNumero",
              "value": "={{$node[\"Detectar V\u00eddeo\"].json.waId}}"
            },
            {
              "name": "videoUrl",
              "value": "={{$node[\"Detectar V\u00eddeo\"].json.videoUrl}}"
            },
            {
              "name": "mensagem",
              "value": "Aqui est\u00e1 o v\u00eddeo que voc\u00ea solicitou!"
            }
          ]
        },
        "options": {}
      },
      "name": "Preparar Envio V\u00eddeo",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [
        880,
        300
      ],
      "id": "prepare-video-node"
    },
    {
      "parameters": {
        "from": "={{$node[\"Preparar Envio V\u00eddeo\"].json.dados.numeroRemetente}}",
        "to": "={{$node[\"Preparar Envio V\u00eddeo\"].json.dados.numeroDestino}}",
        "toWhatsapp": true,
        "message": "={{$node[\"Preparar Envio V\u00eddeo\"].json.dados.mensagem}}",
        "mediaUrl": "={{$node[\"Preparar Envio V\u00eddeo\"].json.dados.videoUrl}}",
        "options": {}
      },
      "name": "Enviar V\u00eddeo",
      "type": "n8n-nodes-base.twilio",
      "typeVersion": 1,
      "position": [
        1100,
        300
      ],
      "id": "send-video-node",
      "credentials": {
        "twilioApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=http://supabase-server:3001/api/registrar-mensagem",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "whatsappNumero",
              "value": "={{$node[\"Detectar V\u00eddeo\"].json.from.replace(\"whatsapp:\", \"\")}}"
            },
            {
              "name": "pergunta",
              "value": "={{$node[\"Detectar V\u00eddeo\"].json.message}}"
            },
            {
              "name": "resposta",
              "value": "V\u00eddeo enviado: {{$node[\"Detectar V\u00eddeo\"].json.videoUrl}}"
            },
            {
              "name": "numeroDestino",
              "value": "={{$node[\"Detectar V\u00eddeo\"].json.waId}}"
            },
            {
              "name": "nome",
              "value": "={{$node[\"Detectar V\u00eddeo\"].json.profileName}}"
            }
          ]
        },
        "options": {}
      },
      "name": "Registrar Envio V\u00eddeo",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [
        1320,
        300
      ],
      "id": "register-video-node"
    },
    {
      "parameters": {
        "from": "={{$node[\"Webhook\"].json.body.To.replaceAll('whatsapp:', '')}}",
        "to": "={{$node[\"Extrair Dados\"].json.waId}}",
        "toWhatsapp": true,
        "message": "={{$node[\"OpenAI\"].json.output}}",
        "options": {}
      },
      "name": "Enviar Resposta",
      "type": "n8n-nodes-base.twilio",
      "typeVersion": 1,
      "position": [
        2576,
        500
      ],
      "id": "a91534de-6b85-4394-b82b-ebadc0cb4cea",
      "credentials": {
        "twilioApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "=http://supabase-server:3001/api/registrar-mensagem",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "whatsappNumero",
              "value": "={{$node[\"Extrair Dados\"].json.from.replace(\"whatsapp:\", \"\")}}"
            },
            {
              "name": "pergunta",
              "value": "={{$node[\"Extrair Dados\"].json.message}}"
            },
            {
              "name": "resposta",
              "value": "={{$node[\"OpenAI\"].json.output}}"
            },
            {
              "name": "numeroDestino",
              "value": "={{$node[\"Enviar Resposta\"].json.from.replaceAll('whatsapp:','')}}"
            },
            {
              "name": "nome",
              "value": "={{$node[\"Extrair Dados\"].json.profileName}}"
            }
          ]
        },
        "options": {}
      },
      "name": "Registrar Mensagem",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [
        2796,
        500
      ],
      "id": "1a1bf06c-8f9d-4f0a-88bb-d5fb241d3b0c"
    },
    {
      "parameters": {
        "resource": "assistant",
        "assistantId": {
          "__rl": true,
          "value": "asst_CJZAwPykZpXY1IZZAEdd1bJk",
          "mode": "list",
          "cachedResultName": "ThaysBot"
        },
        "prompt": "define",
        "text": "={{$node[\"Merge\"].json.var1}}",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        2200,
        500
      ],
      "id": "73c21b6d-6374-4eec-8d62-d63121c0757a",
      "name": "OpenAI",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Extrair Dados",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extrair Dados": {
      "main": [
        [
          {
            "node": "Detectar V\u00eddeo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detectar V\u00eddeo": {
      "main": [
        [
          {
            "node": "\u00c9 Solicita\u00e7\u00e3o de V\u00eddeo?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u00c9 Solicita\u00e7\u00e3o de V\u00eddeo?": {
      "main": [
        [
          {
            "node": "Preparar Envio V\u00eddeo",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Preparar Envio V\u00eddeo": {
      "main": [
        [
          {
            "node": "Enviar V\u00eddeo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar V\u00eddeo": {
      "main": [
        [
          {
            "node": "Registrar Envio V\u00eddeo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "Enviar Resposta",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enviar Resposta": {
      "main": [
        [
          {
            "node": "Registrar Mensagem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

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

Fluxo WhatsApp com Envio de Vídeo. Uses httpRequest, twilio, openAi. Webhook trigger; 10 nodes.

Source: https://github.com/1thays4/painel-clientes-ia-ts/blob/8b9d4cb3a06f0dbdb0a58fdde76861b7a17ac70e/workflows/n8n-fluxo-com-video.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

DetranCE - Atendimento WhatsApp RAG. Uses openAi, httpRequest, twilio. Webhook trigger; 7 nodes.

OpenAI, HTTP Request, Twilio
AI & RAG

This powerful n8n automation workflow is designed to execute advanced B2B lead enrichment and hyper-personalization for cold email outreach. By orchestrating a complex chain of data scraping, AI analy

OpenAI, HTTP Request, Airtable
AI & RAG

Eu Clara – Funil Kiwify Completo. Uses postgres, openAi, httpRequest, gmail. Webhook trigger; 70 nodes.

Postgres, OpenAI, HTTP Request +1
AI & RAG

This workflow bridges the gap between raw product data and revenue sales tools. It automates the entire Product Qualified Lead (PQL) lifecycle—from real-time intent routing to churn prevention—reducin

HTTP Request, Anthropic, OpenAI
AI & RAG

Lua Nova - Sistema Completo. Uses postgres, httpRequest, openAi. Webhook trigger; 55 nodes.

Postgres, HTTP Request, OpenAI