Files
n8n/backups/2025-12-27/Telegram → AI Workflow Creator (Fixed).json

1 line
9.2 KiB
JSON

{"updatedAt":"2025-10-27T08:03:18.061Z","createdAt":"2025-10-23T11:46:12.459Z","id":"d02Xv9I3If0Qt4aj","name":"Telegram → AI Workflow Creator (Fixed)","active":false,"isArchived":false,"nodes":[{"parameters":{"updates":["message"],"additionalFields":{}},"id":"c425cc32-f48b-42b3-a51c-74995b95983e","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","typeVersion":1.2,"position":[-880,-128],"webhookId":"telegram-webhook","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram account"}}},{"parameters":{"jsCode":"const inputData = $input.first() || {};\nconsole.log('Input Data:', JSON.stringify(inputData, null, 2));\n\nconst jsonData = inputData.json || {};\nif (!jsonData || typeof jsonData !== 'object') {\n return [{\n json: {\n error: 'Некорректные данные от Telegram. Ожидался объект json.',\n chat_id: '',\n message_id: ''\n }\n }];\n}\n\nconst message = jsonData.message || {};\nif (!message || typeof message !== 'object') {\n return [{\n json: {\n error: 'Некорректные данные от Telegram. Ожидался объект message.',\n chat_id: '',\n message_id: ''\n }\n }];\n}\n\nif (!message.text) {\n return [{\n json: {\n error: 'Это не текстовое сообщение. Отправьте текстовую команду.',\n chat_id: message.chat?.id || '',\n message_id: message.message_id || ''\n }\n }];\n}\n\nconst messageText = message.text || '';\nconst chatId = message.chat?.id || '';\nconst messageId = message.message_id || '';\n\nconst regex = /^\\/create\\s+(.+)/;\nconst match = messageText.match(regex);\n\nif (match) {\n return [{\n json: {\n description: match[1].trim(),\n chat_id: chatId,\n message_id: messageId,\n success: true\n }\n }];\n} else {\n return [{\n json: {\n error: 'Команда не распознана. Используйте: /create <описание workflow>',\n chat_id: chatId,\n message_id: messageId,\n success: false\n }\n }];\n}"},"id":"a6cbef33-941f-4a06-b5b9-315c8451e1de","name":"Check /create Command","type":"n8n-nodes-base.code","typeVersion":2,"position":[-640,-128]},{"parameters":{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict"},"conditions":[{"id":"1","leftValue":"={{ $json.success }}","rightValue":"true"}],"combinator":"and"},"options":{}},"id":"90a71303-43a5-47a6-9de8-036a9429e4f6","name":"If Success","type":"n8n-nodes-base.if","typeVersion":2,"position":[-400,-128]},{"parameters":{"jsCode":"const description = $json.description;\nconst chatId = $json.chat_id;\nconst messageId = $json.message_id;\n\nconsole.log('Generating workflow for:', description);\n\nconst requestBody = {\n model: \"gpt-4o-mini\",\n messages: [\n {\n role: \"system\",\n content: \"Ты эксперт по n8n. Генерируй ВАЛИДНЫЙ JSON для импорта workflow в n8n по описанию пользователя. Структура: {name: string, nodes: [], connections: {}, settings: {}, tags: []}. Каждый node должен иметь: id (uuid), name, type, typeVersion, position [x,y], parameters. Используй случайные UUID для id. Верни ТОЛЬКО валидный JSON без каких-либо объяснений или текста вокруг.\"\n },\n {\n role: \"user\", \n content: \"Создай n8n workflow JSON для: \" + description\n }\n ],\n max_tokens: 4000,\n temperature: 0.1\n};\n\ntry {\n const response = await $http({\n method: 'POST',\n url: 'https://api.openai.com/v1/chat/completions',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': 'Bearer ' + $credentials.openAiApi.apiKey\n },\n body: JSON.stringify(requestBody),\n timeout: 30000\n });\n\n console.log('OpenAI Response Status:', response.status);\n \n if (response.status !== 200) {\n throw new Error(`OpenAI API error: ${response.status} - ${JSON.stringify(response.body)}`);\n }\n\n const responseData = response.body;\n \n if (!responseData.choices || !responseData.choices[0]) {\n throw new Error('Некорректный ответ от OpenAI: нет choices');\n }\n\n const aiResponse = responseData.choices[0].message.content.trim();\n console.log('AI Raw Response:', aiResponse);\n\n let workflowJson;\n try {\n const cleanResponse = aiResponse.replace(/```json\\n?|```\\n?/g, '');\n workflowJson = JSON.parse(cleanResponse);\n } catch (error) {\n throw new Error('AI вернул невалидный JSON: ' + error.message + '. Raw: ' + aiResponse.substring(0, 200));\n }\n\n if (!workflowJson.name) {\n workflowJson.name = 'AI Generated Workflow - ' + description.substring(0, 30);\n }\n if (!workflowJson.nodes) workflowJson.nodes = [];\n if (!workflowJson.connections) workflowJson.connections = {};\n if (!workflowJson.settings) workflowJson.settings = {};\n if (!workflowJson.tags) workflowJson.tags = [];\n\n return [{\n json: {\n workflow: workflowJson,\n chat_id: chatId,\n message_id: messageId,\n description: description,\n success: true\n }\n }];\n\n} catch (error) {\n console.error('OpenAI API Error:', error);\n return [{\n json: {\n error: 'Ошибка при генерации workflow: ' + error.message,\n chat_id: chatId,\n message_id: messageId,\n success: false\n }\n }];\n}"},"id":"94c989b8-899a-479f-a393-eb10dcfaedd3","name":"Generate Workflow (AI)","type":"n8n-nodes-base.code","typeVersion":2,"position":[-160,-128]},{"parameters":{"method":"POST","url":"={{ $vars.N8N_HOST || 'http://localhost:5678' }}/api/v1/workflows","authentication":"predefinedCredentialType","nodeCredentialType":"n8nApi","sendHeaders":true,"headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"sendBody":true,"bodyParameters":{"parameters":[{}]},"options":{}},"id":"4a4f8032-0281-4e50-b033-af3dff90303b","name":"Create Workflow (API)","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[96,-128],"credentials":{"n8nApi":{"id":"LFyobxvAMNg8Kk5i","name":"n8n account"}}},{"parameters":{"jsCode":"const apiResponse = $input.first();\nconst baseData = $('Generate Workflow (AI)').first().json;\n\nconsole.log('API Response Status:', apiResponse.statusCode);\nconsole.log('API Response Body:', JSON.stringify(apiResponse.json, null, 2));\n\nif (apiResponse.statusCode >= 200 && apiResponse.statusCode < 300) {\n return [{\n json: {\n success: true,\n workflow_id: apiResponse.json.id,\n workflow_name: apiResponse.json.name || baseData.workflow.name,\n chat_id: baseData.chat_id,\n message_id: baseData.message_id,\n message: `✅ Workflow \"${apiResponse.json.name}\" успешно создан! ID: ${apiResponse.json.id}`\n }\n }];\n} else {\n return [{\n json: {\n success: false,\n error: `Ошибка создания workflow: ${apiResponse.statusCode} - ${JSON.stringify(apiResponse.json)}`,\n chat_id: baseData.chat_id,\n message_id: baseData.message_id,\n message: `❌ Ошибка создания workflow: ${apiResponse.statusCode}`\n }\n }];\n}"},"id":"b4646fb4-426d-4f5d-8dfd-ed88867baec1","name":"Check Creation Success","type":"n8n-nodes-base.code","typeVersion":2,"position":[336,-128]},{"parameters":{"chatId":"1171589143","text":"={{ $json.message || $json.error || 'Неизвестная ошибка' }}","additionalFields":{}},"id":"4c8ecf81-50a2-4d9d-a147-8d1dcbcd0db2","name":"Send Telegram Response","type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[576,-128],"webhookId":"95dce1e8-b429-41f6-8cfc-c2f481cbcbe9","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram account"}}},{"parameters":{"chatId":"1171589143","text":"={{ $json.error || 'Команда не распознана. Используйте: /create <описание workflow>' }}","additionalFields":{}},"id":"12dc1f44-3ac1-4719-af6b-11bf0fca65f8","name":"Send Error Response","type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[-160,80],"webhookId":"c3a9456e-8745-47fd-a6ce-2fff54c93d5c","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram account"}}}],"connections":{"Telegram Trigger":{"main":[[{"node":"Check /create Command","type":"main","index":0}]]},"Check /create Command":{"main":[[{"node":"If Success","type":"main","index":0}]]},"If Success":{"main":[[{"node":"Generate Workflow (AI)","type":"main","index":0},{"node":"Send Error Response","type":"main","index":0}]]},"Generate Workflow (AI)":{"main":[[{"node":"Create Workflow (API)","type":"main","index":0}]]},"Create Workflow (API)":{"main":[[{"node":"Check Creation Success","type":"main","index":0}]]},"Check Creation Success":{"main":[[{"node":"Send Telegram Response","type":"main","index":0}]]}},"settings":{"executionOrder":"v1"},"staticData":null,"meta":{"templateCredsSetupCompleted":true},"pinData":{},"versionId":"7aea6e15-f4d6-4f2a-af9e-74b1dcdb7d20","activeVersionId":null,"triggerCount":0,"shared":[{"updatedAt":"2025-10-23T11:46:12.459Z","createdAt":"2025-10-23T11:46:12.459Z","role":"workflow:owner","workflowId":"d02Xv9I3If0Qt4aj","projectId":"sYuiFAb87pAir6jV"}],"activeVersion":null,"tags":[]}