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 →
{
"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.
openAiApitwilioApi
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
DetranCE - Atendimento WhatsApp RAG. Uses openAi, httpRequest, twilio. Webhook trigger; 7 nodes.
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
Eu Clara – Funil Kiwify Completo. Uses postgres, openAi, httpRequest, gmail. Webhook trigger; 70 nodes.
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
Lua Nova - Sistema Completo. Uses postgres, httpRequest, openAi. Webhook trigger; 55 nodes.