Estructura Estándar para un Bot
Definición de la arquitectura y componentes principales de un bot en n8n. 
Triggers
Disparadores que inician la ejecución del flujo.
- Webhook: Activación mediante una petición HTTP externa. Es el trigger más utilizado ya que es el punto de entrada para los mensajes enviados por los clientes desde la plataforma.


Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "webhook",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2.1,
"position": [
-896,
96
],
"id": "8ac301e6-6b98-406b-8c42-2162c8fc4376",
"name": "Webhook",
"webhookId": "8ff12711-50ff-4893-a519-49a035e12b90"
}
],
"connections": {
"Webhook": {
"main": [
[]
]
}
},
"pinData": {
"Webhook": [
{
"headers": {
"host": "hetzner-n8n.botinfy.com",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
"content-length": "305",
"content-type": "application/json",
"x-forwarded-for": "139.180.175.145",
"x-forwarded-host": "hetzner-n8n.botinfy.com",
"x-forwarded-port": "443",
"x-forwarded-proto": "https",
"x-forwarded-server": "77a7497fa532",
"x-real-ip": "139.180.175.145",
"accept-encoding": "gzip"
},
"params": {},
"query": {},
"body": {
"username": "Orlando",
"user_ns": "f225087u470702801",
"id": "584226654186",
"last_message": {
"type": "text",
"time": 1765488822,
"text": "No de ese jamon",
"url": "",
"caption": "",
"mid": "wamid.HBgMNTg0MjI2NjU0MTg2FQIAEhggQUM2M0VFNjlDNkE3QkJGQUJBNTI4RjQ1MTUzODUzNjcA"
},
"timestamp": "2025-12-11T17:33:43-04:00"
},
"webhookUrl": "https://hetzner-n8n.botinfy.com/webhook/Materiaprima",
"executionMode": "production"
}
]
},
"meta": {
"instanceId": "fc59ec4675a2b9056a2988260954715519d888519e3f03cd8f1ae3b29dcec973"
}
}- Schedule: Ejecución programada en intervalos de tiempo definidos (Cron).


Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 15
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.1,
"position": [
0,
0
],
"id": "uuid-schedule",
"name": "Schedule Trigger"
}
],
"connections": {}
}- Manually: Ejecución manual desde la interfaz de n8n (útil para pruebas).

Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
0,
0
],
"id": "uuid-manual",
"name": "When clicking \"Execute Workflow\""
}
],
"connections": {}
}- ChatTrigger: Disparador específico para interfaces de chat.
Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {},
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"typeVersion": 1,
"position": [
0,
0
],
"id": "uuid-chat-trigger",
"name": "When chat message received"
}
],
"connections": {}
}- Execute Workflow Trigger: Permite que este flujo sea llamado por otro flujo (Subflow).

Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.executeWorkflowTrigger",
"typeVersion": 1,
"position": [
0,
0
],
"id": "uuid-execute-trigger",
"name": "Execute Workflow Trigger"
}
],
"connections": {}
}Buffer
Sistema de gestión temporal de mensajes y estado. Su función principal es recolectar los mensajes enviados por el cliente durante un periodo de tiempo determinado y unificarlos. Esto evita que el bot responda individualmente a cada mensaje fragmentado (ej. "Hola", "¿Cómo estás?", "¿Me ayudas?"), permitiendo procesar el contexto completo en una sola ejecución.

Funcionamiento Principal
- Recolección (Redis): Los mensajes entrantes se almacenan temporalmente en una lista de Redis asociada a la sesión del usuario.
- Espera (Wait): El flujo se pausa brevemente para dar oportunidad a que lleguen más mensajes.
- Verificación (Switch): Se comprueba si han llegado nuevos mensajes recientemente. Si es así, se reinicia la espera.
- Agregación: Una vez finalizado el tiempo de espera sin nuevos mensajes, se recuperan todos los mensajes del buffer, se ordenan cronológicamente y se combinan en un solo bloque de texto/contenido.
Configuración de Tiempo
Para ajustar la ventana de tiempo de recolección (aumentar o disminuir la espera), debes modificar dos componentes en el flujo del buffer:

- Nodos "Wait": Ajusta el parámetro
Amount(segundos) para definir cuánto tiempo esperar entre verificaciones. - Nodos "Switch": Ajusta la expresión de tiempo en la condición (ej.
$now.minus(7,'seconds')). El valor en segundos debe estar sincronizado o ser coherente con el tiempo del nodo Wait correspondiente.
Tipos de Buffer
El sistema maneja diferentes tipos de contenido de manera separada para asegurar un procesamiento adecuado:
- Buffer de Texto: Recolecta mensajes de texto estándar.
- Buffer de Audio: Procesa notas de voz, las cuales son transcritas a texto antes de ser agregadas al contexto.
- Buffer de Imágenes: Analiza las imágenes recibidas para extraer una descripción o palabras clave que el bot pueda entender.
Cada tipo de buffer funciona en paralelo pero sigue la misma lógica de espera y agregación.
Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "c47b0235-8515-4140-9b8b-e4a34c053654",
"name": "message.content",
"value": "={{ $json.content || '' }}",
"type": "string"
},
{
"id": "a3705c96-3f44-4169-8632-6ccc03d19f69",
"name": "message.session_id",
"value": "={{ $node[\"trigger\"].json[\"body\"][\"user_ns\"] }}",
"type": "string"
},
{
"id": "aedd5e9a-7496-4ac9-95d5-b408993c736d",
"name": "message.timestamp",
"value": "={{ $now.toLocal().toISO() }}",
"type": "string"
},
{
"id": "f20d13eb-0bbc-4105-8655-d11d17b82ff8",
"name": "message.caption",
"value": "={{ $('trigger').item.json.body.contextMessage.caption || '' }}",
"type": "string"
},
{
"id": "084e81f0-6a75-4924-9080-abfddda2425e",
"name": "message.url_src",
"value": "={{ $('trigger').item.json.body.contextMessage.url || '' }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-1088,
-336
],
"id": "d0d02c2b-1f2c-40f9-b5c3-0a6359d0c99c",
"name": "Set Initial Message Data"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.body.contextMessage.type }}",
"rightValue": "image",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "0a35d8bb-63bd-4e61-9112-726c75b7ac6c"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "image"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "2abe874e-d5bb-4f64-a3a0-8de3887a64a6",
"leftValue": "={{ $json.body.contextMessage.type }}",
"rightValue": "text",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "text"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "e0bde0e6-a78a-4cdc-86b2-a10b64a07f45",
"leftValue": "={{ $json.body.contextMessage.type }}",
"rightValue": "audio",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "audio"
}
]
},
"looseTypeValidation": true,
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-1536,
96
],
"id": "6bd77de4-67af-45b8-adb4-6076ee34faf0",
"name": "Route by Message Type"
},
{
"parameters": {
"operation": "push",
"list": "={{ $('Set Initial Message Data').item.json.message.session_id }}_buffer",
"messageData": "={{ JSON.stringify($json.message) }}",
"tail": true
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
-864,
-336
],
"id": "565579bf-f027-4183-8067-1101dbcac303",
"name": "Push Message to Redis Buffer",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"operation": "get",
"propertyName": "message",
"key": "={{ $('Set Initial Message Data').item.json.message.session_id }}_buffer",
"options": {}
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
-640,
-336
],
"id": "d6971dca-32fd-4c95-8608-0ff5c2bd39e7",
"name": "Get Messages from Redis Buffer",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"amount": 15
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
-176,
-272
],
"id": "b3cc27fa-3ab6-4290-a4a6-c30edde7b7af",
"name": "Wait",
"webhookId": "df966afa-9067-4f22-8f6c-9f931783153c"
},
{
"parameters": {
"operation": "delete",
"key": "={{ $('Set Initial Message Data').item.json.message.session_id }}_buffer"
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
-176,
-592
],
"id": "2b3edec2-a243-4f55-aabe-3f10ba9d4010",
"name": "Delete Messages Buffer",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"fieldToSplitOut": "message",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
48,
-592
],
"id": "e959a3c9-651f-4324-b9c0-2328f2a9b9d2",
"name": "Split Out Messages"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={{ JSON.parse( $json.message )}}",
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
272,
-592
],
"id": "dc7fc4b1-bf75-4ac6-aa4f-da691f06efb7",
"name": "Parse Message JSON"
},
{
"parameters": {
"sortFieldsUi": {
"sortField": [
{
"fieldName": "timestamp"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.sort",
"typeVersion": 1,
"position": [
496,
-592
],
"id": "38ba122c-bc06-4f04-b0cd-131a7ba55587",
"name": "Sort Messages by Timestamp"
},
{
"parameters": {
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "content"
},
{
"fieldToAggregate": "image_keywords"
},
{
"fieldToAggregate": "audio_transcript"
},
{
"fieldToAggregate": "caption"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
720,
-592
],
"id": "49ef2b1f-0085-4c71-8ab7-6e16cdce4f48",
"name": "Aggregate Content"
},
{
"parameters": {
"resource": "audio",
"operation": "transcribe",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
-1104,
624
],
"id": "a2b39067-c9f8-45b7-b3e3-572e6bf66731",
"name": "Transcribe a recording",
"credentials": {
"openAiApi": {
"id": "QYVva4aUqfukYkLp",
"name": "OpenAI: Andesplast"
}
}
},
{
"parameters": {
"resource": "image",
"operation": "analyze",
"modelId": {
"__rl": true,
"value": "chatgpt-4o-latest",
"mode": "list",
"cachedResultName": "CHATGPT-4O-LATEST"
},
"text": "=Eres un experto analizador de imágenes, necesito que hagas un analisis preciso y breve del contenido. La idea es que recibas una o varias imagenes y las analices buscando una relacion entre ellas.\n\nPor ende, trata de hacer un analisis solo con informacion esencial, que ayude a entender de que trata la imagen.\n\nSolo envia el resumen de tu analisis",
"imageUrls": "={{ $json.body.url_src }}",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
-1312,
-336
],
"id": "4c7d8e4b-0c58-45fd-9107-df4b1ff399f3",
"name": "Analyze image",
"credentials": {
"openAiApi": {
"id": "QYVva4aUqfukYkLp",
"name": "OpenAI: Andesplast"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=Estos son los análisis de la imagen:\n\n{{ $json.content.join('\\n-') }}\n\nEste es el caption asociado a esa imagen:\n\n{{ $json[\"caption\"].join('\\n-') }}",
"options": {
"systemMessage": "=Vas a recibir el analisis de una o varias imagenes, tambien podria ser el analisis de audios o simplemente texto. \n\nen base a la informacion que recibas busca una relacion entre la data y da una salida acorde."
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2.1,
"position": [
976,
-592
],
"id": "9ef2d51f-012f-4ba2-85bb-014fad74442b",
"name": "AI Agent"
},
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
976,
-320
],
"id": "e4b2a59b-b61a-4ecb-88c1-37f524d8a91f",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"id": "QYVva4aUqfukYkLp",
"name": "OpenAI: Andesplast"
}
}
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"leftValue": "={{ JSON.parse($json.message.at(-1)).session_id }}",
"rightValue": "={{ $node[\"trigger\"].json[\"body\"][\"user_ns\"] }}",
"operator": {
"type": "string",
"operation": "notEquals"
},
"id": "64cf4172-cbfe-4bd0-85f6-ee029ce5aa00"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Do nothing"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "f41492ae-c8a3-4997-9405-838513594bd8",
"leftValue": "={{ JSON.parse($json.message.at(-1)).timestamp }}",
"rightValue": "={{ $now.minus(15,'seconds').toLocal().toISO() }}",
"operator": {
"type": "dateTime",
"operation": "before"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Next"
}
]
},
"looseTypeValidation": true,
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "Wait"
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-416,
-432
],
"id": "97553a60-7245-4874-b60d-08558200e8d3",
"name": "Switch1"
},
{
"parameters": {
"inputSource": "passthrough"
},
"type": "n8n-nodes-base.executeWorkflowTrigger",
"typeVersion": 1.1,
"position": [
-1936,
112
],
"id": "f1b88a0a-8438-4482-9b92-a6c5a26b4dac",
"name": "trigger"
},
{
"parameters": {
"operation": "push",
"list": "={{ $json.message.session_id }}_buffer",
"messageData": "={{ JSON.stringify($json.message) }}",
"tail": true
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
-832,
112
],
"id": "a3d2d11e-3009-4660-b522-9ced6f453263",
"name": "Push Message to Redis Buffer1",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"operation": "get",
"propertyName": "message",
"key": "={{ $('text-data').item.json.message.session_id }}_buffer",
"options": {}
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
-608,
112
],
"id": "10349ca8-6092-4767-acae-89ccae469f0e",
"name": "Get Messages from Redis Buffer1",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"amount": 15
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
-96,
224
],
"id": "3fc57d56-18da-48de-b07c-9a89f09de00b",
"name": "Wait1",
"webhookId": "df966afa-9067-4f22-8f6c-9f931783153c"
},
{
"parameters": {
"operation": "delete",
"key": "={{ $('text-data').item.json.message.session_id }}_buffer"
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
-96,
0
],
"id": "14a8f675-da8c-4fad-b971-83257f415630",
"name": "Delete Messages Buffer1",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"fieldToSplitOut": "message",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
128,
0
],
"id": "7505cbe0-22b3-417a-bbfc-19546904bab0",
"name": "Split Out Messages1"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={{ JSON.parse( $json.message )}}",
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
352,
0
],
"id": "131fe31f-ed41-4d6b-8376-e201e06ba9b1",
"name": "Parse Message JSON1"
},
{
"parameters": {
"sortFieldsUi": {
"sortField": [
{
"fieldName": "timestamp"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.sort",
"typeVersion": 1,
"position": [
576,
0
],
"id": "27af0906-3940-44f1-a98e-c2cb9fed5569",
"name": "Sort Messages by Timestamp1"
},
{
"parameters": {
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "content"
},
{
"fieldToAggregate": "image_keywords"
},
{
"fieldToAggregate": "audio_transcript"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
784,
0
],
"id": "19b10a2a-744d-4099-af6c-cc7c3fb25319",
"name": "Aggregate Content1"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"leftValue": "={{ JSON.parse($json.message.at(-1)).session_id }}",
"rightValue": "={{ $('text-data').item.json.message.session_id }}",
"operator": {
"type": "string",
"operation": "notEquals"
},
"id": "64cf4172-cbfe-4bd0-85f6-ee029ce5aa00"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Do nothing"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "f41492ae-c8a3-4997-9405-838513594bd8",
"leftValue": "={{ JSON.parse($json.message.at(-1)).timestamp }}",
"rightValue": "={{ $now.minus(15,'seconds').toLocal().toISO() }}",
"operator": {
"type": "dateTime",
"operation": "before"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Next"
}
]
},
"looseTypeValidation": true,
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "Wait"
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-368,
96
],
"id": "8aec3c87-7d52-4c6e-8c91-f74d01fddb23",
"name": "Switch"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "c47b0235-8515-4140-9b8b-e4a34c053654",
"name": "message.content",
"value": "={{ $json.body.message || '' }}",
"type": "string"
},
{
"id": "a3705c96-3f44-4169-8632-6ccc03d19f69",
"name": "message.session_id",
"value": "={{ $node[\"trigger\"].json[\"body\"][\"user_ns\"] }}",
"type": "string"
},
{
"id": "aedd5e9a-7496-4ac9-95d5-b408993c736d",
"name": "message.timestamp",
"value": "={{ $now.toLocal().toISO() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-1056,
112
],
"id": "454241b0-f8e2-4826-956f-da6b9aa09972",
"name": "text-data"
},
{
"parameters": {
"operation": "push",
"list": "={{ $json.message.session_id }}_buffer",
"messageData": "={{ JSON.stringify($json.message) }}",
"tail": true
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
-656,
624
],
"id": "52855b15-d788-41a8-97fd-89af3e32d6a1",
"name": "Push Message to Redis Buffer2",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"operation": "get",
"propertyName": "message",
"key": "={{ $('audio-data').item.json.message.session_id }}_buffer",
"options": {}
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
-432,
624
],
"id": "53ef5c49-cbc0-44d8-8688-b824e9872a34",
"name": "Get Messages from Redis Buffer2",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"amount": 20
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
16,
720
],
"id": "ea9bd272-4ad7-4da4-9e9c-4d85896b7edf",
"name": "Wait2",
"webhookId": "df966afa-9067-4f22-8f6c-9f931783153c"
},
{
"parameters": {
"operation": "delete",
"key": "={{ $('audio-data').item.json.message.session_id }}_buffer"
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
32,
496
],
"id": "8a393491-e035-40d8-ab3f-d28e20007cb2",
"name": "Delete Messages Buffer2",
"credentials": {
"redis": {
"id": "OCCM7nEKUzaNEOZ7",
"name": "Botinfy: Redis Credentials"
}
}
},
{
"parameters": {
"fieldToSplitOut": "message",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
256,
496
],
"id": "dc49a43e-daf1-4e42-810a-3117af9104e6",
"name": "Split Out Messages2"
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={{ JSON.parse( $json.message )}}",
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
480,
496
],
"id": "d28d0db0-6dfe-4c14-a6a4-d161d3664377",
"name": "Parse Message JSON2"
},
{
"parameters": {
"sortFieldsUi": {
"sortField": [
{
"fieldName": "timestamp"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.sort",
"typeVersion": 1,
"position": [
704,
496
],
"id": "ed705e82-a709-41af-bf43-4a41f165a530",
"name": "Sort Messages by Timestamp2"
},
{
"parameters": {
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "content"
},
{
"fieldToAggregate": "image_keywords"
},
{
"fieldToAggregate": "audio_transcript"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
880,
496
],
"id": "358412a7-b46a-4f36-b61a-85034847c600",
"name": "Aggregate Content2"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"leftValue": "={{ JSON.parse($json.message.at(-1)).session_id }}",
"rightValue": "={{ $node[\"trigger\"].json[\"body\"][\"user_ns\"] }}",
"operator": {
"type": "string",
"operation": "notEquals"
},
"id": "64cf4172-cbfe-4bd0-85f6-ee029ce5aa00"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Do nothing"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "f41492ae-c8a3-4997-9405-838513594bd8",
"leftValue": "={{ JSON.parse($json.message.at(-1)).timestamp }}",
"rightValue": "={{ $now.minus(10,'seconds').toLocal().toISO() }}",
"operator": {
"type": "dateTime",
"operation": "before"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Next"
}
]
},
"looseTypeValidation": true,
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "Wait"
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-192,
528
],
"id": "d7f34477-9fa9-4503-abf8-62aa2c1b5632",
"name": "Switch2"
},
{
"parameters": {
"url": "={{ $json.body.contextMessage.url }}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-1328,
624
],
"id": "5f62d87e-0d1a-402f-9242-ba95e0cece4e",
"name": "download-audio"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "c47b0235-8515-4140-9b8b-e4a34c053654",
"name": "message.content",
"value": "={{ $json.text }}",
"type": "string"
},
{
"id": "a3705c96-3f44-4169-8632-6ccc03d19f69",
"name": "message.session_id",
"value": "={{ $node[\"trigger\"].json[\"body\"][\"user_ns\"] }}",
"type": "string"
},
{
"id": "aedd5e9a-7496-4ac9-95d5-b408993c736d",
"name": "message.timestamp",
"value": "={{ $now.toLocal().toISO() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-880,
624
],
"id": "9f7bada2-d195-4466-bb18-040b6c2bffde",
"name": "audio-data"
},
{
"parameters": {
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "content"
},
{
"fieldToAggregate": "image_keywords"
},
{
"fieldToAggregate": "audio_transcript"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.aggregate",
"typeVersion": 1,
"position": [
1552,
-592
],
"id": "9e42ed73-275e-463a-8984-7cb50227d38d",
"name": "Aggregate Content3"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "d68ba600-ed3b-425f-b9d4-750d90e3e3d2",
"name": "content",
"value": "=Este es un mensaje automático del sistema que te compone, el cliente mandó contenido multimedia tipo imagen al chat, esta es una descripción visual de la imagen: {{ $json[\"output\"] }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1328,
-592
],
"id": "dad5b53f-efd1-4c31-9e9a-73cf5c0e95e8",
"name": "Parse Message JSON3"
}
],
"connections": {
"Set Initial Message Data": {
"main": [
[
{
"node": "Push Message to Redis Buffer",
"type": "main",
"index": 0
}
]
]
},
"Route by Message Type": {
"main": [
[
{
"node": "Analyze image",
"type": "main",
"index": 0
}
],
[
{
"node": "text-data",
"type": "main",
"index": 0
}
],
[
{
"node": "download-audio",
"type": "main",
"index": 0
}
],
[],
[]
]
},
"Push Message to Redis Buffer": {
"main": [
[
{
"node": "Get Messages from Redis Buffer",
"type": "main",
"index": 0
}
]
]
},
"Get Messages from Redis Buffer": {
"main": [
[
{
"node": "Switch1",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Get Messages from Redis Buffer",
"type": "main",
"index": 0
}
]
]
},
"Delete Messages Buffer": {
"main": [
[
{
"node": "Split Out Messages",
"type": "main",
"index": 0
}
]
]
},
"Split Out Messages": {
"main": [
[
{
"node": "Parse Message JSON",
"type": "main",
"index": 0
}
]
]
},
"Parse Message JSON": {
"main": [
[
{
"node": "Sort Messages by Timestamp",
"type": "main",
"index": 0
}
]
]
},
"Sort Messages by Timestamp": {
"main": [
[
{
"node": "Aggregate Content",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Content": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Transcribe a recording": {
"main": [
[
{
"node": "audio-data",
"type": "main",
"index": 0
}
]
]
},
"Analyze image": {
"main": [
[
{
"node": "Set Initial Message Data",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Parse Message JSON3",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Switch1": {
"main": [
[],
[
{
"node": "Delete Messages Buffer",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"trigger": {
"main": [
[
{
"node": "Route by Message Type",
"type": "main",
"index": 0
}
]
]
},
"Push Message to Redis Buffer1": {
"main": [
[
{
"node": "Get Messages from Redis Buffer1",
"type": "main",
"index": 0
}
]
]
},
"Get Messages from Redis Buffer1": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "Get Messages from Redis Buffer1",
"type": "main",
"index": 0
}
]
]
},
"Delete Messages Buffer1": {
"main": [
[
{
"node": "Split Out Messages1",
"type": "main",
"index": 0
}
]
]
},
"Split Out Messages1": {
"main": [
[
{
"node": "Parse Message JSON1",
"type": "main",
"index": 0
}
]
]
},
"Parse Message JSON1": {
"main": [
[
{
"node": "Sort Messages by Timestamp1",
"type": "main",
"index": 0
}
]
]
},
"Sort Messages by Timestamp1": {
"main": [
[
{
"node": "Aggregate Content1",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Content1": {
"main": [
[]
]
},
"Switch": {
"main": [
[],
[
{
"node": "Delete Messages Buffer1",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"text-data": {
"main": [
[
{
"node": "Push Message to Redis Buffer1",
"type": "main",
"index": 0
}
]
]
},
"Push Message to Redis Buffer2": {
"main": [
[
{
"node": "Get Messages from Redis Buffer2",
"type": "main",
"index": 0
}
]
]
},
"Get Messages from Redis Buffer2": {
"main": [
[
{
"node": "Switch2",
"type": "main",
"index": 0
}
]
]
},
"Wait2": {
"main": [
[
{
"node": "Get Messages from Redis Buffer2",
"type": "main",
"index": 0
}
]
]
},
"Delete Messages Buffer2": {
"main": [
[
{
"node": "Split Out Messages2",
"type": "main",
"index": 0
}
]
]
},
"Split Out Messages2": {
"main": [
[
{
"node": "Parse Message JSON2",
"type": "main",
"index": 0
}
]
]
},
"Parse Message JSON2": {
"main": [
[
{
"node": "Sort Messages by Timestamp2",
"type": "main",
"index": 0
}
]
]
},
"Sort Messages by Timestamp2": {
"main": [
[
{
"node": "Aggregate Content2",
"type": "main",
"index": 0
}
]
]
},
"Switch2": {
"main": [
[],
[
{
"node": "Delete Messages Buffer2",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait2",
"type": "main",
"index": 0
}
]
]
},
"download-audio": {
"main": [
[
{
"node": "Transcribe a recording",
"type": "main",
"index": 0
}
]
]
},
"audio-data": {
"main": [
[
{
"node": "Push Message to Redis Buffer2",
"type": "main",
"index": 0
}
]
]
},
"Parse Message JSON3": {
"main": [
[
{
"node": "Aggregate Content3",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {
"trigger": [
{
"headers": {
"host": "hetzner-n8n.botinfy.com",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36",
"content-length": "327",
"content-type": "application/json",
"x-forwarded-for": "45.76.125.229",
"x-forwarded-host": "hetzner-n8n.botinfy.com",
"x-forwarded-port": "443",
"x-forwarded-proto": "https",
"x-forwarded-server": "77a7497fa532",
"x-real-ip": "45.76.125.229",
"accept-encoding": "gzip"
},
"params": {},
"query": {},
"body": {
"username": "Jose Rojas – AI Developer | Botinfy",
"user_ns": "f182347u354706167",
"id": "17869893891",
"phone": "+17869893891",
"message": "Hola",
"contextMessage": {
"type": "text",
"time": 1757003229,
"text": "Hola",
"url": "",
"caption": "",
"mid": "3AFE0B5A54104F069279"
},
"url_src": "",
"timestamp": "2025-09-04T12:27:09-04:00"
},
"webhookUrl": "https://hetzner-n8n.botinfy.com/webhook/AndesplastWAPath",
"executionMode": "production"
}
]
},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "fc59ec4675a2b9056a2988260954715519d888519e3f03cd8f1ae3b29dcec973"
}
}Procesamiento y Formateo Post-Buffer
Esta sección es parte fundamental de la lógica del flujo y del buffer. Una vez que el buffer ha recolectado y liberado los mensajes, es necesario procesar y estructurar la información antes de continuar.

- Validación (Nodo "avanza1"): Actúa como un filtro de seguridad. Verifica que el contenido agregado no esté vacío antes de continuar. Si no hay datos válidos, detiene el flujo para evitar errores en pasos posteriores.
- Estructuración (Nodo "set message1"): Normaliza los datos para el resto del bot.
- Unificación: Toma los arrays de mensajes generados por el buffer (ej. múltiples textos o imágenes) y los une en cadenas de texto únicas (usando
.join(", ")). - Recuperación de Contexto: Vuelve a asociar los metadatos del usuario (nombre, teléfono, ID) provenientes del Webhook original, asegurando que el contexto del usuario se mantenga intacto después del tiempo de espera en el buffer.
- Unificación: Toma los arrays de mensajes generados por el buffer (ej. múltiples textos o imágenes) y los une en cadenas de texto únicas (usando
Copia y pega el siguiente código para importar estos nodos:
{
"nodes": [
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 2
},
"conditions": [
{
"id": "515dec7a-16a9-4c44-bcb0-089691b4879b",
"leftValue": "={{ $json.content }}",
"rightValue": "",
"operator": {
"type": "array",
"operation": "notEmpty",
"singleValue": true
}
}
],
"combinator": "or"
},
"looseTypeValidation": true,
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
-448,
96
],
"id": "f00beae1-758e-4abf-a028-854e81061124",
"name": "avanza1"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "dcea58e1-b151-4a8b-b873-cb1321be4ed9",
"name": "body.message",
"value": "={{ $json.content.join(\", \") }}",
"type": "string"
},
{
"id": "e0309a1a-3795-4b56-a3fe-e31459f68857",
"name": "body.username",
"value": "={{ $('Webhook').item.json.body.username }}",
"type": "string"
},
{
"id": "d8d9f8cf-0c2a-46c2-9d70-5d962b5d7b6b",
"name": "body.user_ns",
"value": "={{ $('Webhook').item.json.body.user_ns }}",
"type": "string"
},
{
"id": "d3499966-0f1f-4c59-bd09-b4ee2ffbe449",
"name": "body.phone",
"value": "={{ $('Webhook').item.json.body.phone }}",
"type": "string"
},
{
"id": "e5a00f9c-d702-4923-b9cd-f15ecda3b890",
"name": "body.replied_to",
"value": "={{ $json.replied_to.join(\", \") }}",
"type": "string"
},
{
"id": "5930216f-2cd0-4dd0-bff1-3259d68918dd",
"name": "body.imagesUrl",
"value": "={{ $json.imageUrl.join(', ') }}",
"type": "string"
},
{
"id": "9ca403ff-5eb1-4812-b0ca-924b1b07c6c4",
"name": "body.timestamp",
"value": "={{ $('Webhook').item.json.body.timestamp }}",
"type": "string"
},
{
"id": "361fd739-9da0-4603-82da-0f1b862ed4cf",
"name": "body.location",
"value": "={{ $json.location.join(\", \") }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-224,
0
],
"id": "ece19840-f1ba-4399-9edc-9dd48f525041",
"name": "set message1"
},
{
"parameters": {},
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
-224,
192
],
"id": "a337394b-4441-43bb-87ac-25ff676b0008",
"name": "No Operation, do nothing3"
}
],
"connections": {
"avanza1": {
"main": [
[
{
"node": "set message1",
"type": "main",
"index": 0
}
],
[
{
"node": "No Operation, do nothing3",
"type": "main",
"index": 0
}
]
]
},
"set message1": {
"main": [
[]
]
}
},
"pinData": {},
"meta": {
"instanceId": "fc59ec4675a2b9056a2988260954715519d888519e3f03cd8f1ae3b29dcec973"
}
}Nodos de Salida
Elementos encargados de entregar la respuesta final al usuario o sistema destino.
- Formateador: Se utiliza para ajustar la salida del agente, asegurando que el formato sea compatible para ser enviado por los nodos hacia la plataforma.
Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "f2ba2e6b-2735-42a2-8a2f-afce08bc01c5",
"name": "output",
"value": "={{ $json.output }}",
"type": "object"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1040,
0
],
"id": "423c115e-4e3f-49dc-b850-b9fcfa9261b5",
"name": "format to json"
}
],
"connections": {
"format to json": {
"main": [
[]
]
}
},
"pinData": {},
"meta": {
"instanceId": "fc59ec4675a2b9056a2988260954715519d888519e3f03cd8f1ae3b29dcec973"
}
}- Mensajes: Respuestas de texto estándar.
Estos nodos gestionan el envío final a la plataforma.
- PUT (
send-message-to-uchat1): Guarda el mensaje en los campos del usuario en la plataforma. - POST (
send-message-to-client): Dispara el envío del mensaje al usuario.
Configuración Requerida:
- Bearer Token: Debes modificar el
Authorization: Bearer ...en ambos nodos con la API Key correspondiente a tu bot/cliente. - Sub Flow NS: En el nodo POST, el valor
f228871s3152257corresponde al flujo de recepción de mensajes en la plataforma. Asegúrate de que este código apunte al flujo correcto. - Wait/Reintentos: Los nodos incluyen una configuración de espera (
waitBetweenTries: 3000) para reintentar la conexión si falla.

Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {
"method": "PUT",
"url": "=https://app.botinfy.com/api/subscriber/set-user-field-by-name",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer JQ3BAZo4HY1JcUzA9LzvlvB7ILRD1iIzp1yya7fO9sS075ej0JFOfjXUw5OR"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "user_ns",
"value": "={{ $('set message1').item.json.body.user_ns }}"
},
{
"name": "field_name",
"value": "messages"
},
{
"name": "value",
"value": "={{ JSON.stringify($('format to json').item.json.output.messages) }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1632,
208
],
"id": "2240a970-42a9-43d9-9c55-241901ef8dce",
"name": "send-message-to-uchat1",
"retryOnFail": true,
"waitBetweenTries": 3000
},
{
"parameters": {
"method": "POST",
"url": "https://app.botinfy.com/api/subscriber/send-sub-flow",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer JQ3BAZo4HY1JcUzA9LzvlvB7ILRD1iIzp1yya7fO9sS075ej0JFOfjXUw5OR"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "user_ns",
"value": "={{ $('set message1').item.json.body.user_ns }}"
},
{
"name": "sub_flow_ns",
"value": "f228871s3152257"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1920,
208
],
"id": "a58955a9-137b-472b-99de-e3ea17493b23",
"name": "send-message-to-client",
"retryOnFail": true,
"waitBetweenTries": 3000
}
],
"connections": {
"send-message-to-uchat1": {
"main": [
[
{
"node": "send-message-to-client",
"type": "main",
"index": 0
}
]
]
},
"send-message-to-client": {
"main": [
[]
]
}
},
"pinData": {},
"meta": {
"instanceId": "fc59ec4675a2b9056a2988260954715519d888519e3f03cd8f1ae3b29dcec973"
}
}- Imágenes: Envío de contenido visual (JPG, PNG, etc.).

Copia y pega el siguiente código para importar el nodo:
// Configuración de Imágenes
{
"nodes": [
{
"parameters": {
"method": "PUT",
"url": "=https://app.botinfy.com/api/subscriber/set-user-field-by-name",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer JQ3BAZo4HY1JcUzA9LzvlvB7ILRD1iIzp1yya7fO9sS075ej0JFOfjXUw5OR"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "user_ns",
"value": "={{ $('Webhook').first().json.body.user_ns }}"
},
{
"name": "field_name",
"value": "images"
},
{
"name": "value",
"value": "={{ JSON.stringify($('format to json').item.json.output.images) }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1488,
0
],
"id": "be37b2b8-8fc3-4686-9e47-b9f1f075f1c7",
"name": "send-image-to-uchat",
"retryOnFail": true,
"waitBetweenTries": 3000
},
{
"parameters": {
"method": "POST",
"url": "https://app.botinfy.com/api/subscriber/send-sub-flow",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer JQ3BAZo4HY1JcUzA9LzvlvB7ILRD1iIzp1yya7fO9sS075ej0JFOfjXUw5OR"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "user_ns",
"value": "={{ $('Webhook').first().json.body.user_ns }}"
},
{
"name": "sub_flow_ns",
"value": "f228871s3152261"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1840,
0
],
"id": "8a5f5354-525b-4be5-9bd0-5b16814349e9",
"name": "send-image-to-client",
"retryOnFail": true,
"waitBetweenTries": 3000
}
],
"connections": {
"send-image-to-uchat": {
"main": [
[
{
"node": "send-image-to-client",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"instanceId": "fc59ec4675a2b9056a2988260954715519d888519e3f03cd8f1ae3b29dcec973"
}
}- PDF: Generación o envío de documentos portables.

Copia y pega el siguiente código para importar el nodo:
{
"nodes": [
{
"parameters": {
"method": "PUT",
"url": "=https://app.botinfy.com/api/subscriber/set-user-field-by-name",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer vPBO5LPGbVRBjfLPUmBhywWkKjkJmDZYj2VhBnAjlGNuOgkYpVEdwGxnze51"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "user_ns",
"value": "={{ $('Webhook').first().json.body.user_ns\n\n }}"
},
{
"name": "field_name",
"value": "pdfs"
},
{
"name": "value",
"value": "={{ JSON.stringify($('format to json').item.json.output.pdf_url) }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
432,
512
],
"id": "5c3e632f-ee03-4cc6-86f8-e2a32370ec0e",
"name": "set pdfs1"
},
{
"parameters": {
"method": "POST",
"url": "https://app.botinfy.com/api/subscriber/send-sub-flow",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "accept",
"value": "application/json"
},
{
"name": "Authorization",
"value": "Bearer vPBO5LPGbVRBjfLPUmBhywWkKjkJmDZYj2VhBnAjlGNuOgkYpVEdwGxnze51"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "user_ns",
"value": "={{ $('Webhook').first().json.body.user_ns\n\n }}"
},
{
"name": "sub_flow_ns",
"value": "f181701s2067451"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
688,
512
],
"id": "a4808ca3-e2a2-4a65-b776-76e8c2d62b36",
"name": "send pdfs1"
}
],
"connections": {
"set pdfs1": {
"main": [
[
{
"node": "send pdfs1",
"type": "main",
"index": 0
}
]
]
},
"send pdfs1": {
"main": [
[]
]
}
},
"pinData": {},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "fc59ec4675a2b9056a2988260954715519d888519e3f03cd8f1ae3b29dcec973"
}
}