Sistema de búfer de mensajes eficiente basado en Redis y GPT-4
Este es unEngineering, AIflujo de automatización del dominio deautomatización que contiene 30 nodos.Utiliza principalmente nodos como If, Set, Code, Wait, Redis, combinando tecnología de inteligencia artificial para lograr automatización inteligente. Sistema eficiente de almacenamiento en búfer de mensajes basado en Redis y GPT-4
- •Información de conexión del servidor Redis
- •Clave de API de OpenAI
Nodos utilizados (30)
Categoría
{
"meta": {
"instanceId": "d1b9b74c805fea7fca1b903ee192d1d4090b516d3c254da86beb2f13b7c2ed2e",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "be902a85-fc31-442c-b308-a2350ec5aabb",
"name": "Al hacer clic en 'Probar flujo de trabajo'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-760,
440
],
"parameters": {},
"typeVersion": 1
},
{
"id": "d229b686-9de4-4633-9dba-3e1fe71eedf1",
"name": "Sin operación, no hacer nada1",
"type": "n8n-nodes-base.noOp",
"position": [
1820,
800
],
"parameters": {},
"typeVersion": 1
},
{
"id": "f583bc97-8da8-488e-ab04-5167dc7a7701",
"name": "Extractor de información",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
2420,
540
],
"parameters": {
"text": "={{ $json.buffer.reverse().toJsonString() }}",
"options": {
"systemPromptTemplate": "Eres un experto extrayendo información, tu objetivo es recolectar todos los mensajes. Procura no dejar duplicados. como resultado debes retornar un solo párrafo con todo los mensajes."
},
"schemaType": "fromJson",
"jsonSchemaExample": "{\n\t\"message\": \"all consolidated messages\"\n}"
},
"typeVersion": 1
},
{
"id": "5b719416-4886-4d38-9d00-30b6237db168",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2440,
760
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-nano",
"cachedResultName": "gpt-4.1-nano"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "IogsrRzOBSmZJS5C",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "3d149fc0-caa7-4361-9bf9-33b6252b39eb",
"name": "obtener segundos de espera",
"type": "n8n-nodes-base.code",
"position": [
-260,
500
],
"parameters": {
"jsCode": "// Function: Compute waitSeconds\nconst wordCount = $json.message.split(' ').filter(w=>w).length;\nreturn [{ json: { \n context_id: $json.context_id,\n message: $json.message,\n waitSeconds: wordCount < 5 ? 45 : 30 \n}}];\n"
},
"typeVersion": 2
},
{
"id": "cc670735-d126-465f-b0a3-3a4c5e390fd7",
"name": "Establecer last_seen",
"type": "n8n-nodes-base.redis",
"position": [
280,
380
],
"parameters": {
"key": "=last_seen:{{ $json.context_id}}",
"ttl": "={{ $json.waitSeconds + 60 }}",
"value": "={{$now.toMillis()}}",
"expire": true,
"keyType": "string",
"operation": "set"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "20d97d1d-70d4-4c3c-aa12-b1aa31795240",
"name": "Obtener waiting_reply",
"type": "n8n-nodes-base.redis",
"position": [
180,
780
],
"parameters": {
"key": "=waiting_reply:{{$json.context_id}}",
"options": {},
"operation": "get",
"propertyName": "waiting_reply"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "7a2fc681-692f-4f72-9fab-f3ada4bda54b",
"name": "Modificar entrada",
"type": "n8n-nodes-base.set",
"position": [
340,
800
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "7ff99444-753d-4ef7-865c-7115761526b8",
"name": "waiting_reply",
"type": "string",
"value": "={{ $json.waiting_reply }}"
},
{
"id": "58ad6981-c35a-4dd6-b1cd-7c446b85e738",
"name": "context_id",
"type": "string",
"value": "={{$('When Executed by Another Workflow').item.json.context_id }}"
},
{
"id": "bd0535a2-be03-436b-8a2e-222c3e26fd04",
"name": "message",
"type": "string",
"value": "={{$('When Executed by Another Workflow').item.json.message }}"
},
{
"id": "2f583f32-f231-4407-b773-c08b38d464f0",
"name": "waitSeconds",
"type": "number",
"value": "={{ $('get wait seconds').item.json.waitSeconds }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "84213bef-32be-4cd9-8387-cd76aff5cb38",
"name": "waiting_reply?",
"type": "n8n-nodes-base.if",
"position": [
540,
800
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8136ea21-d798-41fd-81ed-5c0e7fda73c5",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.waiting_reply != null}}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "a8472217-aa83-4247-9d7d-3a471e24478a",
"name": "Cuando se recibe mensaje de chat",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-740,
640
],
"webhookId": "85115343-bb86-4bb8-b7a8-c4efded80b3f",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "ba4c81ba-92e2-4bef-a9e2-6f8d4c0aa722",
"name": "Establecer waiting_reply",
"type": "n8n-nodes-base.redis",
"position": [
840,
720
],
"parameters": {
"key": "=waiting_reply:{{ $json.context_id }}",
"ttl": "={{ $json.waitSeconds }}",
"value": "true",
"expire": true,
"operation": "set"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "0ce783b6-b76b-4a5d-96ae-11708b7532ba",
"name": "Obtener búfer",
"type": "n8n-nodes-base.redis",
"position": [
1820,
600
],
"parameters": {
"key": "=buffer_in:{{ $('get wait seconds').item.json.context_id }}",
"options": {},
"operation": "get",
"propertyName": "buffer"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "21864061-1d1f-4528-a03f-1237e9c69a31",
"name": "Eliminar buffer_in",
"type": "n8n-nodes-base.redis",
"position": [
2940,
680
],
"parameters": {
"key": "=buffer_in:{{$json.context_id}}",
"operation": "delete"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "8828aa7b-6153-4677-84a8-3ef2f884792c",
"name": "Eliminar waiting_reply",
"type": "n8n-nodes-base.redis",
"position": [
2940,
840
],
"parameters": {
"key": "=waiting_reply:{{$json.context_id}}",
"operation": "delete"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "fc369067-7213-4d8c-b515-c34c4db997e4",
"name": "WaitSeconds",
"type": "n8n-nodes-base.wait",
"position": [
1020,
720
],
"webhookId": "c218d471-2f0f-4bd7-87d1-5431ac602211",
"parameters": {
"amount": "={{ $json.waitSeconds }} "
},
"typeVersion": 1.1
},
{
"id": "2daa2ab9-756a-4fdb-8573-b4570c58d6e5",
"name": "Mensajes en búfer",
"type": "n8n-nodes-base.redis",
"position": [
-40,
440
],
"parameters": {
"list": "=buffer_in:{{$json.context_id}}",
"operation": "push",
"messageData": "={\"text\": \"{{ $json.message }}\", \"timestamp\": \"{{$now}}\"}"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "4d5bc5f0-11ce-4f7f-b44b-0514a5ab5671",
"name": "Establecer buffer_count incremento",
"type": "n8n-nodes-base.redis",
"position": [
280,
560
],
"parameters": {
"key": "=buffer_count:{{$json.context_id}}",
"expire": "={{$json.waitSeconds + 60}}",
"operation": "incr"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "dcaee1a8-ea32-4a9d-b32f-f0418644027c",
"name": "Obtener last_seen",
"type": "n8n-nodes-base.redis",
"position": [
1220,
720
],
"parameters": {
"key": "=last_seen:{{$json.context_id}}",
"options": {},
"operation": "get",
"propertyName": "last_seen"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "908c4a4c-1c60-4e90-827a-064a0b4d6bfd",
"name": "Obtener buffer_count",
"type": "n8n-nodes-base.redis",
"position": [
1400,
720
],
"parameters": {
"key": "=buffer_count:{{ $('Mod input').item.json.context_id }}",
"options": {},
"operation": "get",
"propertyName": "count"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "1ceb472b-3944-4d74-994b-867ade006e4e",
"name": "Mapear salida",
"type": "n8n-nodes-base.set",
"position": [
3140,
380
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e8d80ab4-74a2-4c30-8500-8dddc5802eec",
"name": "message",
"type": "string",
"value": "={{ $json.output.message }}"
},
{
"id": "7e7fcee4-14b3-4393-b516-b07a53c018b3",
"name": "context_id",
"type": "string",
"value": "={{$('get wait seconds').item.json.context_id }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "0be7e5eb-1972-4a95-b5bf-4e564fc4ef7c",
"name": "Verificar inactividad + contador",
"type": "n8n-nodes-base.if",
"position": [
1580,
720
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "0f294c51-0629-4ae1-a009-68c2f5fd30b5",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{$json.count != null && Number($json.count) >= 1}}",
"rightValue": ""
},
{
"id": "1626238d-fb00-4ce8-89df-a40a4f29f52a",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{$('Get last_seen').item.json.last_seen != null}}",
"rightValue": ""
},
{
"id": "df819099-1f6e-4bee-a017-32b729c836a3",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{($now.toMillis() - $('Get last_seen').item.json.last_seen) >= $('Mod input').item.json.waitSeconds * 1000}}",
"rightValue": ""
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "0c3bd62b-8cf6-4b34-8010-ebe819db9667",
"name": "Eliminar waiting_reply1",
"type": "n8n-nodes-base.redis",
"position": [
2940,
1000
],
"parameters": {
"key": "=buffer_count:{{$json.context_id}}",
"operation": "delete"
},
"credentials": {
"redis": {
"id": "zJtRI38KhsyVjUvP",
"name": "Redis account"
}
},
"typeVersion": 1
},
{
"id": "bbf45966-833b-4f5f-ae11-0578614eb156",
"name": "Sin operación, no hacer nada2",
"type": "n8n-nodes-base.noOp",
"position": [
720,
540
],
"parameters": {},
"typeVersion": 1
},
{
"id": "5683eebf-ba51-4a6b-a803-de6acf1b1ea8",
"name": "Esperar",
"type": "n8n-nodes-base.wait",
"position": [
2080,
880
],
"webhookId": "b8e2e214-f82b-49c2-96e2-91e093137857",
"parameters": {
"amount": "={{ Math.max(0, Math.ceil(( $('Mod input').item.json.waitSeconds * 1000 - ($now.toMillis() - $('Get last_seen').item.json.last_seen)) / 1000)) }}"
},
"typeVersion": 1.1
},
{
"id": "c0478f60-944e-4c85-bb9c-9abe0d4238c0",
"name": "Cuando se ejecuta por otro flujo de trabajo",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
-480,
720
],
"parameters": {
"workflowInputs": {
"values": [
{
"name": "context_id"
},
{
"name": "message"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "91a650b7-ddd4-4dbf-a300-523f72f0bdb5",
"name": "Datos de entrada simulados",
"type": "n8n-nodes-base.set",
"position": [
-500,
500
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "0543fdb7-4a22-4530-bdb7-ae7064732fae",
"name": "context_id",
"type": "string",
"value": "={{ $json.sessionId1 || '1lap075ha12' }}"
},
{
"id": "bead5646-a689-4deb-8f4b-b22aa97b51ca",
"name": "message",
"type": "string",
"value": "={{ $json.chatInput || 'Chat 2'}}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "cb450e32-7e19-469c-9a5c-3d9da5bf1dfa",
"name": "Sin operación, no hacer nada3",
"type": "n8n-nodes-base.noOp",
"position": [
3320,
840
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b463e405-3355-48a2-a043-42941d7025c3",
"name": "Nota adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
2880,
660
],
"parameters": {
"color": 7,
"width": 700,
"height": 780,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n### 🧹 Buffer Cleanup\n\nAfter consolidation and reply:\n\n* **DELETE** keys:\n\n * `buffer_in:{{context_id}}`\n * `buffer_count:{{context_id}}`\n * `waiting_reply:{{context_id}}`\n"
},
"typeVersion": 1
},
{
"id": "1b5397f8-aa7e-4b2b-afb9-5da97d99e049",
"name": "Nota adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-80,
60
],
"parameters": {
"color": 7,
"width": 920,
"height": 940,
"content": "### 📥 Input Buffer\n\n1. **Save incoming message**\n\n * Push the new message into Redis list `buffer_in:{{context_id}}`.\n2. **Update metadata**\n\n * Set `last_seen:{{context_id}}` to the current timestamp (with a TTL of `waitSeconds + 60`).\n * INCR the counter key `buffer_count:{{context_id}}` (also expiring after `waitSeconds + 60`).\n3. **Check “waiting” flag**\n\n * GET `waiting_reply:{{context_id}}`.\n * If it’s null (no batch in flight), SET it to `true` with TTL `waitSeconds` to block concurrent triggers."
},
"typeVersion": 1
},
{
"id": "edc07500-ccad-4e72-adc1-1a63a3a06609",
"name": "Nota adhesiva2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1180,
340
],
"parameters": {
"color": 7,
"width": 1200,
"height": 820,
"content": "### ⏳ Inactivity & Threshold Check\n\n1. **Fetch state**\n\n * GET `last_seen:{{context_id}}` (when the last message arrived)\n * GET `buffer_count:{{context_id}}` (how many messages are queued)\n2. **Evaluate trigger**\n\n * **Inactivity:** `(now – last_seen) ≥ waitSeconds * 1000`\n * **Or threshold:** `buffer_count ≥ 1` (or your desired batch size)\n3. **Branch**\n\n * **True:** proceed to “Get buffer” and consolidate.\n * **False:** exit (noOp) and let the waiting‐node/flag mechanism retry later."
},
"typeVersion": 1
}
],
"pinData": {
"When Executed by Another Workflow": [
{
"message": "Mensaje del usuario despues de pasar por el workflow de n8n:\nTexto: ¡Hola! Quiero más información.;\nImagen: ;\nAudio: ;",
"context_id": "573058148988@s.whatsapp.net"
}
]
},
"connections": {
"5683eebf-ba51-4a6b-a803-de6acf1b1ea8": {
"main": [
[
{
"node": "0be7e5eb-1972-4a95-b5bf-4e564fc4ef7c",
"type": "main",
"index": 0
}
]
]
},
"1ceb472b-3944-4d74-994b-867ade006e4e": {
"main": [
[]
]
},
"7a2fc681-692f-4f72-9fab-f3ada4bda54b": {
"main": [
[
{
"node": "84213bef-32be-4cd9-8387-cd76aff5cb38",
"type": "main",
"index": 0
}
]
]
},
"0ce783b6-b76b-4a5d-96ae-11708b7532ba": {
"main": [
[
{
"node": "f583bc97-8da8-488e-ab04-5167dc7a7701",
"type": "main",
"index": 0
}
]
]
},
"fc369067-7213-4d8c-b515-c34c4db997e4": {
"main": [
[
{
"node": "dcaee1a8-ea32-4a9d-b32f-f0418644027c",
"type": "main",
"index": 0
}
]
]
},
"dcaee1a8-ea32-4a9d-b32f-f0418644027c": {
"main": [
[
{
"node": "908c4a4c-1c60-4e90-827a-064a0b4d6bfd",
"type": "main",
"index": 0
}
]
]
},
"cc670735-d126-465f-b0a3-3a4c5e390fd7": {
"main": [
[
{
"node": "bbf45966-833b-4f5f-ae11-0578614eb156",
"type": "main",
"index": 0
}
]
]
},
"84213bef-32be-4cd9-8387-cd76aff5cb38": {
"main": [
[
{
"node": "bbf45966-833b-4f5f-ae11-0578614eb156",
"type": "main",
"index": 0
}
],
[
{
"node": "ba4c81ba-92e2-4bef-a9e2-6f8d4c0aa722",
"type": "main",
"index": 0
}
]
]
},
"2daa2ab9-756a-4fdb-8573-b4570c58d6e5": {
"main": [
[
{
"node": "4d5bc5f0-11ce-4f7f-b44b-0514a5ab5671",
"type": "main",
"index": 0
},
{
"node": "cc670735-d126-465f-b0a3-3a4c5e390fd7",
"type": "main",
"index": 0
},
{
"node": "20d97d1d-70d4-4c3c-aa12-b1aa31795240",
"type": "main",
"index": 0
}
]
]
},
"91a650b7-ddd4-4dbf-a300-523f72f0bdb5": {
"main": [
[
{
"node": "3d149fc0-caa7-4361-9bf9-33b6252b39eb",
"type": "main",
"index": 0
}
]
]
},
"21864061-1d1f-4528-a03f-1237e9c69a31": {
"main": [
[
{
"node": "cb450e32-7e19-469c-9a5c-3d9da5bf1dfa",
"type": "main",
"index": 0
}
]
]
},
"908c4a4c-1c60-4e90-827a-064a0b4d6bfd": {
"main": [
[
{
"node": "0be7e5eb-1972-4a95-b5bf-4e564fc4ef7c",
"type": "main",
"index": 0
}
]
]
},
"3d149fc0-caa7-4361-9bf9-33b6252b39eb": {
"main": [
[
{
"node": "2daa2ab9-756a-4fdb-8573-b4570c58d6e5",
"type": "main",
"index": 0
}
]
]
},
"20d97d1d-70d4-4c3c-aa12-b1aa31795240": {
"main": [
[
{
"node": "7a2fc681-692f-4f72-9fab-f3ada4bda54b",
"type": "main",
"index": 0
}
]
]
},
"5b719416-4886-4d38-9d00-30b6237db168": {
"ai_languageModel": [
[
{
"node": "f583bc97-8da8-488e-ab04-5167dc7a7701",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"ba4c81ba-92e2-4bef-a9e2-6f8d4c0aa722": {
"main": [
[
{
"node": "fc369067-7213-4d8c-b515-c34c4db997e4",
"type": "main",
"index": 0
}
]
]
},
"8828aa7b-6153-4677-84a8-3ef2f884792c": {
"main": [
[
{
"node": "cb450e32-7e19-469c-9a5c-3d9da5bf1dfa",
"type": "main",
"index": 0
}
]
]
},
"0c3bd62b-8cf6-4b34-8010-ebe819db9667": {
"main": [
[
{
"node": "cb450e32-7e19-469c-9a5c-3d9da5bf1dfa",
"type": "main",
"index": 0
}
]
]
},
"f583bc97-8da8-488e-ab04-5167dc7a7701": {
"main": [
[
{
"node": "1ceb472b-3944-4d74-994b-867ade006e4e",
"type": "main",
"index": 0
},
{
"node": "21864061-1d1f-4528-a03f-1237e9c69a31",
"type": "main",
"index": 0
},
{
"node": "8828aa7b-6153-4677-84a8-3ef2f884792c",
"type": "main",
"index": 0
},
{
"node": "0c3bd62b-8cf6-4b34-8010-ebe819db9667",
"type": "main",
"index": 0
}
]
]
},
"0be7e5eb-1972-4a95-b5bf-4e564fc4ef7c": {
"main": [
[
{
"node": "0ce783b6-b76b-4a5d-96ae-11708b7532ba",
"type": "main",
"index": 0
}
],
[
{
"node": "d229b686-9de4-4633-9dba-3e1fe71eedf1",
"type": "main",
"index": 0
}
]
]
},
"d229b686-9de4-4633-9dba-3e1fe71eedf1": {
"main": [
[
{
"node": "5683eebf-ba51-4a6b-a803-de6acf1b1ea8",
"type": "main",
"index": 0
}
]
]
},
"4d5bc5f0-11ce-4f7f-b44b-0514a5ab5671": {
"main": [
[
{
"node": "bbf45966-833b-4f5f-ae11-0578614eb156",
"type": "main",
"index": 0
}
]
]
},
"a8472217-aa83-4247-9d7d-3a471e24478a": {
"main": [
[
{
"node": "91a650b7-ddd4-4dbf-a300-523f72f0bdb5",
"type": "main",
"index": 0
}
]
]
},
"c0478f60-944e-4c85-bb9c-9abe0d4238c0": {
"main": [
[
{
"node": "3d149fc0-caa7-4361-9bf9-33b6252b39eb",
"type": "main",
"index": 0
}
]
]
},
"be902a85-fc31-442c-b308-a2350ec5aabb": {
"main": [
[
{
"node": "91a650b7-ddd4-4dbf-a300-523f72f0bdb5",
"type": "main",
"index": 0
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Ingeniería, Inteligencia Artificial
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Edisson Garcia
@eagarciah707Compartir este flujo de trabajo