Files
n8n/backups/2025-12-27/MikroTik Universal (No DB).json

1 line
27 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"updatedAt":"2025-12-18T05:21:02.386Z","createdAt":"2025-12-17T13:52:45.901Z","id":"NKZb0GpHbd8mQkIW","name":"MikroTik Universal (No DB)","active":false,"isArchived":false,"nodes":[{"parameters":{"updates":["message","callback_query"],"additionalFields":{}},"id":"864c89ee-e30e-4c15-9d0a-c53555f4e279","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","typeVersion":1,"position":[-1296,112],"webhookId":"b396e51b-6ec0-4eca-b8cb-a3ed23b4ff56","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}}},{"parameters":{"chatId":"={{ $('Logic').item.json.chatId }}","text":"📋 Выберите адрес-лист:","replyMarkup":"inlineKeyboard","inlineKeyboard":{"rows":[{"row":{"buttons":[{"text":"don't touch","additionalFields":{"callback_data":"sl|don't touch"}},{"text":"rdp_ts","additionalFields":{"callback_data":"sl|rdp_ts"}},{"text":"rdp_ts02","additionalFields":{"callback_data":"sl|rdp_ts02"}}]}},{"row":{"buttons":[{"text":"rdp_ts01srv","additionalFields":{"callback_data":"sl|rdp_ts01srv"}},{"text":"rdp_ts02srv","additionalFields":{"callback_data":"sl|rdp_ts02srv"}}]}}]},"additionalFields":{}},"id":"e32aa69f-6402-4a9d-9589-af76f74f01f9","name":"Msg: Ask List","type":"n8n-nodes-base.telegram","typeVersion":1,"position":[352,-192],"webhookId":"6b2e2622-087e-4f97-914a-ef61b33a3054","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}}},{"parameters":{"operation":"upsert","dataTableId":{"__rl":true,"value":"LwB8m7fQUDgXiNuT","mode":"list","cachedResultName":"mikrotik_sessions","cachedResultUrl":"/projects/sYuiFAb87pAir6jV/datatables/LwB8m7fQUDgXiNuT"},"filters":{"conditions":[{"keyName":"chat_id","keyValue":"={{ $('Logic').item.json.chatId }}"}]},"columns":{"mappingMode":"defineBelow","value":{"list":"={{ $('Logic').item.json.list }}"},"matchingColumns":[],"schema":[{"id":"chat_id","displayName":"chat_id","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"ip","displayName":"ip","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"list","displayName":"list","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":false},{"id":"timeout","displayName":"timeout","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.dataTable","typeVersion":1.1,"position":[-336,-32],"id":"dbeaa59d-ea63-44ba-a7c9-a89f8783dd53","name":"DB: Update List"},{"parameters":{"jsCode":"const input = $input.all()[0].json;\nlet chatId, text = '', cb = '';\nlet deleteMsgId = null; \n\n// Определяем, откуда пришел запрос (кнопка или текст)\nif (input.callback_query) {\n cb = input.callback_query.data || '';\n chatId = input.callback_query.message.chat.id;\n // Берем ID сообщения с кнопками (чтобы удалить меню)\n deleteMsgId = input.callback_query.message.message_id;\n} else if (input.message) {\n text = (input.message.text || '').trim();\n chatId = input.message.chat.id;\n // Берем ID сообщения пользователя (чтобы удалить его команду/текст)\n deleteMsgId = input.message.message_id;\n}\n\n// Функция для удобного ответа\nfunction respond(action, data = {}) {\n return [{\n json: {\n chatId,\n action,\n deleteMsgId, // Передаем ID сообщения дальше\n ...data\n }\n }];\n}\n\n// 1. Команды\nif (text === '/start' || text === '/menu') return respond('menu');\nif (text === '/addip') return respond('ask_ip');\nif (text === '/find') return respond('ask_search');\n\n// 2. Кнопки\nif (cb.startsWith('sl|')) return respond('save_list', { list: cb.split('|')[1] });\nif (cb.startsWith('st|')) return respond('save_time', { time: cb.split('|')[1] });\nif (cb.startsWith('to|') || cb.startsWith('del|')) return respond('check_state'); \n\n// 3. Текст (IP или Комментарий)\nif (text && !text.startsWith('/')) {\n if (/^\\d{1,3}(\\.\\d{1,3}){3}$/.test(text)) {\n return respond('save_ip', { ip: text });\n }\n return respond('save_comment', { comment: text });\n}\n\nreturn respond('menu');"},"id":"ab457912-85b4-4729-a8b0-e19e7f4d0bd9","name":"Logic","type":"n8n-nodes-base.code","typeVersion":2,"position":[-1088,112]},{"parameters":{"operation":"update","dataTableId":{"__rl":true,"value":"LwB8m7fQUDgXiNuT","mode":"list","cachedResultName":"mikrotik_sessions","cachedResultUrl":"/projects/sYuiFAb87pAir6jV/datatables/LwB8m7fQUDgXiNuT"},"filters":{"conditions":[{"keyName":"chat_id","keyValue":"={{ $('Logic').item.json.chatId }}"}]},"columns":{"mappingMode":"defineBelow","value":{"timeout":"={{ $('Logic').item.json.time }}"},"matchingColumns":[],"schema":[{"id":"chat_id","displayName":"chat_id","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"ip","displayName":"ip","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"list","displayName":"list","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"timeout","displayName":"timeout","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.dataTable","typeVersion":1.1,"position":[-336,144],"id":"a13a2c5a-2570-4cf4-81ca-fbd40a0ad5f3","name":"DB: Update Time"},{"parameters":{"operation":"get","dataTableId":{"__rl":true,"value":"LwB8m7fQUDgXiNuT","mode":"list","cachedResultName":"mikrotik_sessions","cachedResultUrl":"/projects/sYuiFAb87pAir6jV/datatables/LwB8m7fQUDgXiNuT"},"filters":{"conditions":[{"keyName":"chat_id","keyValue":"={{ $('Logic').item.json.chatId }}"}]}},"type":"n8n-nodes-base.dataTable","typeVersion":1.1,"position":[-336,448],"id":"17fe9d8f-1de6-466e-8866-0c6dd9bdefed","name":"DB: Get Final Data"},{"parameters":{"method":"POST","url":"http://10.33.33.1:8738/rest/ip/firewall/address-list/add","authentication":"genericCredentialType","genericAuthType":"httpBasicAuth","sendBody":true,"specifyBody":"json","jsonBody":"={{\n {\n \"address\": $json.ip,\n \"list\": $json.list,\n \"timeout\": $json.timeout,\n \"comment\": $json.comment\n }\n}}","options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.3,"position":[352,464],"id":"7b24d2f8-870c-4f25-8841-62774e829561","name":"HTTP Request","credentials":{"httpBasicAuth":{"id":"gBAUOrSceRAWqNfB","name":"mikrot api"}}},{"parameters":{"url":"http://10.33.33.1:8738/rest/ip/firewall/address-list","authentication":"genericCredentialType","genericAuthType":"httpBasicAuth","options":{}},"type":"n8n-nodes-base.httpRequest","typeVersion":4.3,"position":[144,624],"id":"fe2338b2-1ad9-4f6b-80d0-8aafcd55219e","name":"HTTP Request1","credentials":{"httpBasicAuth":{"id":"gBAUOrSceRAWqNfB","name":"mikrot api"}}},{"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"id":"f1a796c2-041d-471a-a4b0-22b0bd15df20","leftValue":"={{ $('Logic').item.json.action }}","rightValue":"ask_ip","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"leftValue":"={{ $('Logic').item.json.action }}","rightValue":"save_ip","operator":{"type":"string","operation":"equals"},"id":"ac137fee-fc2a-4c02-89ac-5705e2c934bc"}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"id":"9a906cfd-f59d-40a6-9ed5-83efb7f9a967","leftValue":"={{ $('Logic').item.json.action }}","rightValue":"save_list","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"id":"536ac3bf-1f51-4652-8f1c-deba5a86718c","leftValue":"={{ $('Logic').item.json.action }}","rightValue":"save_time","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"id":"7e00d527-7ffa-4093-ae99-5c37197b1f59","leftValue":"={{ $('Logic').item.json.action }}","rightValue":"save_comment","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"id":"1d088ff0-6dab-49e5-ba4f-68fa40c1cabf","leftValue":"={{ $('Logic').item.json.action }}","rightValue":"check_state","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"id":"cf1925e2-62b7-4a1c-8e8f-08cc7b575d27","leftValue":"={{ $('Logic').item.json.action }}","rightValue":"ask_search","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"}}]},"options":{}},"type":"n8n-nodes-base.switch","typeVersion":3.4,"position":[-672,32],"id":"a687ac78-25e3-47dd-b54b-a8ec9c861840","name":"Switch"},{"parameters":{"dataTableId":{"__rl":true,"value":"LwB8m7fQUDgXiNuT","mode":"list","cachedResultName":"mikrotik_sessions","cachedResultUrl":"/projects/sYuiFAb87pAir6jV/datatables/LwB8m7fQUDgXiNuT"},"columns":{"mappingMode":"defineBelow","value":{"ip":"={{ $('Logic').item.json.ip }}","chat_id":"={{ $('Logic').item.json.chatId }}"},"matchingColumns":[],"schema":[{"id":"chat_id","displayName":"chat_id","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":false},{"id":"ip","displayName":"ip","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":false},{"id":"list","displayName":"list","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"timeout","displayName":"timeout","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.dataTable","typeVersion":1.1,"position":[144,-192],"id":"18645390-0387-4f03-873b-eb833669b2ba","name":"DB: Save IP"},{"parameters":{"chatId":"={{ $('Logic').item.json.chatId }}","text":"🌐 **Режим добавления IP** Пожалуйста, введите IP-адрес в формате `1.2.3.4`","additionalFields":{"parse_mode":"Markdown"}},"id":"39191d1f-036d-4306-af87-745f01f5f80d","name":"Msg: Ask IP","type":"n8n-nodes-base.telegram","typeVersion":1,"position":[-336,-368],"webhookId":"6b2e2622-087e-4f97-914a-ef61b33a3054","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}}},{"parameters":{"operation":"update","dataTableId":{"__rl":true,"value":"LwB8m7fQUDgXiNuT","mode":"list","cachedResultName":"mikrotik_sessions","cachedResultUrl":"/projects/sYuiFAb87pAir6jV/datatables/LwB8m7fQUDgXiNuT"},"matchType":"allConditions","filters":{"conditions":[{"keyName":"chat_id","keyValue":"={{ $('Logic').item.json.chatId }}"}]},"columns":{"mappingMode":"defineBelow","value":{"last_action":"waiting_search"},"matchingColumns":[],"schema":[{"id":"chat_id","displayName":"chat_id","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"ip","displayName":"ip","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"list","displayName":"list","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"timeout","displayName":"timeout","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"waiting_search","displayName":"waiting_search","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"last_action","displayName":"last_action","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.dataTable","typeVersion":1.1,"position":[-336,624],"id":"f3d52d9b-8393-4422-8599-3cfa91ab3e84","name":"DB: Update State (waiting_search)"},{"parameters":{"chatId":"={{ $('Logic').item.json.chatId }}","text":"Введите текст для поиска","additionalFields":{"parse_mode":"Markdown"}},"id":"cac7c3b1-ae17-4397-a8c9-63b3f12ca7fc","name":"Msg: Ask Find","type":"n8n-nodes-base.telegram","typeVersion":1,"position":[-128,624],"webhookId":"6b2e2622-087e-4f97-914a-ef61b33a3054","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}}},{"parameters":{"rules":{"values":[{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"leftValue":"={{ $json.last_action }}","rightValue":"waiting_search","operator":{"type":"string","operation":"empty","singleValue":true},"id":"1ba963ee-c3d1-456a-9251-91857c5fdfad"}],"combinator":"and"}},{"conditions":{"options":{"caseSensitive":true,"leftValue":"","typeValidation":"strict","version":3},"conditions":[{"id":"2b8ba99b-47ae-437a-879c-3ce9f5b01c11","leftValue":"={{ $json.last_action }}","rightValue":"=waiting_search","operator":{"type":"string","operation":"equals","name":"filter.operator.equals"}}],"combinator":"and"}}]},"options":{}},"type":"n8n-nodes-base.switch","typeVersion":3.4,"position":[-128,448],"id":"abf0af04-fe69-40f1-9887-d16d98ef2afe","name":"Switch1"},{"parameters":{"chatId":"={{ $('Logic').first().json.chatId }}","text":"={{ $json.text }}","additionalFields":{"parse_mode":"Markdown"}},"type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[560,624],"id":"a6b8ff7b-c290-41f0-a8d6-02a73c4b2397","name":"Send a text message","webhookId":"fb0e3bf8-34c4-42cc-a1fc-a95503049ec8","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}}},{"parameters":{"chatId":"={{ $('Logic').item.json.chatId }}","text":"=⏱ Выберите время через сколько перестанет работать правило: *{{ $json.timeout }}*","replyMarkup":"inlineKeyboard","inlineKeyboard":{"rows":[{"row":{"buttons":[{"text":"1 день","additionalFields":{"callback_data":"st|1d"}},{"text":"14 дней","additionalFields":{"callback_data":"st|14d"}},{"text":"31 день","additionalFields":{"callback_data":"st|31d"}}]}}]},"additionalFields":{"parse_mode":"Markdown"}},"type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[-128,-32],"id":"4a48f5fe-78c5-410f-9a07-78e15172ccd7","name":"Msg: Ask Time","webhookId":"6d930e6d-b512-409c-b06d-4d21b7e94d7f","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}}},{"parameters":{"chatId":"={{ $('Logic').item.json.chatId }}","text":"=⏱ Время выбрано: *{{ $json.timeout }}*.📝 Теперь напишите **комментарий** для этой записи (например: \"Иван Офис\"):","additionalFields":{"parse_mode":"Markdown"}},"type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[-128,144],"id":"aa8690d9-2b03-4899-a7df-79f47905ba9e","name":"Msg: Ask Comment","webhookId":"6d930e6d-b512-409c-b06d-4d21b7e94d7f","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}}},{"parameters":{"operation":"update","dataTableId":{"__rl":true,"value":"LwB8m7fQUDgXiNuT","mode":"list","cachedResultName":"mikrotik_sessions","cachedResultUrl":"/projects/sYuiFAb87pAir6jV/datatables/LwB8m7fQUDgXiNuT"},"filters":{"conditions":[{"keyName":"chat_id","keyValue":"={{ $('Logic').item.json.chatId }}"}]},"columns":{"mappingMode":"defineBelow","value":{"comment":"={{ $('Logic').item.json.comment }}"},"matchingColumns":[],"schema":[{"id":"chat_id","displayName":"chat_id","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"ip","displayName":"ip","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"list","displayName":"list","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"timeout","displayName":"timeout","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"last_action","displayName":"last_action","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":true},{"id":"comment","displayName":"comment","required":false,"defaultMatch":false,"display":true,"type":"string","readOnly":false,"removed":false}],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{}},"type":"n8n-nodes-base.dataTable","typeVersion":1.1,"position":[-128,304],"id":"962a31b8-dc78-467e-8397-717493a2bcb8","name":"DB: Update Comment"},{"parameters":{"operation":"deleteMessage","chatId":"={{ $node[\"Logic\"].json[\"chatId\"] }}","messageId":"={{ $json.deleteMsgId }}"},"type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[-880,112],"id":"ace2fe55-506a-4368-bd60-527717fde7de","name":"Delete a chat message","webhookId":"b5567e7e-e74c-4ebd-955d-aaa8ee067ee2","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}},"onError":"continueRegularOutput"},{"parameters":{"chatId":"={{ $('Logic').item.json.chatId }}","text":"=✅ **IP-адрес успешно добавлен!** 📍 **IP**: `{{ $node[\"DB: Get Final Data\"].json[\"ip\"] }}` 📋 **Лист**: `{{ $node[\"DB: Get Final Data\"].json[\"list\"] }}` ⏱ **Время**: `{{ $node[\"DB: Get Final Data\"].json[\"timeout\"] }}` 📝 **Комментарий**: _{{ $node[\"DB: Get Final Data\"].json[\"comment\"] }}_ 🚀 Правило уже активно в MikroTik.","additionalFields":{}},"type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[560,464],"id":"0c975d1b-aad6-4989-aa02-ce2805180d9e","name":"Send a text message1","webhookId":"b9cfc33f-5741-47d3-a972-3e6afe01857d","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}}},{"parameters":{"chatId":"={{ $('Logic').item.json.chatId }}","text":"=⚠️ Ошибка: IP-адрес {{$('Logic').item.json.ip}} уже есть в списке {{$json.list}}. Добавление отменено.","additionalFields":{}},"type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[352,272],"id":"542df179-2554-4b9c-b5b5-34b53dd01d5f","name":"Send a text message2","webhookId":"d85390ac-6acf-49e7-9fbb-7afc898ebca7","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}},"disabled":true},{"parameters":{"jsCode":"// === 1. ПОЛУЧЕНИЕ И НОРМАЛИЗАЦИЯ ДАННЫХ ===\nconst rawItems = $input.all();\nlet items = [];\n\nif (rawItems.length === 1 && Array.isArray(rawItems[0].json)) {\n items = rawItems[0].json.map(record => ({ json: record }));\n} else {\n items = rawItems;\n}\n\n// === 2. ПОЛУЧЕНИЕ ЗАПРОСА ИЗ ПРЕДЫДУЩИХ НОД ===\nlet query = '';\nlet chatId = null;\n\ntry {\n // Пытаемся взять текст, который пользователь ввел последним (из ноды Logic)\n // В n8n v1+ используем $(node).first().json\n const logicData = $('Logic').first().json;\n \n // Если в Logic пришел комментарий/текст для поиска\n query = (logicData.comment || '').toString().toLowerCase().trim();\n chatId = logicData.chatId;\n} catch (e) {\n // Резервный вариант, если путь выше не сработал\n if (rawItems.length > 0) chatId = rawItems[0].json.chatId;\n}\n\n// Если запроса нет — выходим\nif (!query) {\n return [{\n json: {\n chatId: chatId,\n text: \"⚠️ Ошибка: Поисковый запрос пуст. Пожалуйста, введите текст для поиска после команды.\",\n parse_mode: \"Markdown\"\n }\n }];\n}\n\n// === 3. ФИЛЬТРАЦИЯ ===\nconst matchedItems = items.filter(item => {\n const json = item.json || item;\n if (!json.address && !json.list) return false;\n\n const comment = (json.comment || '').toString().toLowerCase();\n const address = (json.address || '').toString().toLowerCase();\n \n return comment.includes(query) || address.includes(query);\n});\n\n// === 4. ЕСЛИ НИЧЕГО НЕ НАЙДЕНО ===\nif (matchedItems.length === 0) {\n return [{\n json: {\n chatId: chatId,\n text: `❌ *Ничего не найдено*\\n\\nЗапрос: \\`${query}\\`\\nПроверено записей: \\`${items.length}\\``,\n parse_mode: \"Markdown\"\n }\n }];\n}\n\n// === 5. ФОРМИРОВАНИЕ ОТВЕТА (КНОПКИ) ===\nreturn matchedItems.map(item => {\n const e = item.json || item;\n const id = e['.id'] || e.id;\n \n const safeList = (e.list || 'нет').toString().replace(/_/g, '\\\\_').replace(/\\*/g, '\\\\*');\n const safeComment = (e.comment || '—').toString().replace(/_/g, '\\\\_').replace(/\\*/g, '\\\\*');\n \n return {\n json: {\n chatId: chatId,\n text: `*Комментарий:* ${safeComment}\\n*IP:* \\`${e.address}\\`\\n*Лист:* ${safeList}`,\n parse_mode: \"Markdown\",\n reply_markup: {\n inline_keyboard: [\n [\n { text: 'trusted', callback_data: `to|${id}|trusted` },\n { text: 'blocked', callback_data: `to|${id}|blocked` },\n { text: 'vpn', callback_data: `to|${id}|vpn` }\n ],\n [\n { text: 'Удалить', callback_data: `del|${id}` }\n ]\n ]\n }\n }\n };\n});"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[352,624],"id":"13f6843a-af63-4e96-85ee-92a2a766093b","name":"Code in JavaScript"},{"parameters":{"jsCode":"// Получаем все входящие элементы\nconst items = $input.all();\nconst uniqueItems = [];\nconst seen = new Set();\n\nfor (const item of items) {\n // Создаем уникальный ключ из IP и названия листа\n // Если у вас дубли могут быть с разными chat_id, оставьте только IP\n const key = `${item.json.ip}-${item.json.list}`;\n\n if (!seen.has(key)) {\n seen.add(key);\n uniqueItems.push(item);\n }\n}\n\nreturn uniqueItems;"},"type":"n8n-nodes-base.code","typeVersion":2,"position":[144,464],"id":"e4712c0e-a3c5-494d-9421-f0d38ac96e44","name":"Code in JavaScript1"},{"parameters":{"operation":"deleteRows","dataTableId":{"__rl":true,"value":"LwB8m7fQUDgXiNuT","mode":"list","cachedResultName":"mikrotik_sessions","cachedResultUrl":"/projects/sYuiFAb87pAir6jV/datatables/LwB8m7fQUDgXiNuT"},"filters":{"conditions":[{"keyName":"chat_id","keyValue":"={{ $('Logic').item.json.chatId }}"}]},"options":{}},"type":"n8n-nodes-base.dataTable","typeVersion":1.1,"position":[-336,-192],"id":"28602a25-d93f-4b46-bb3f-472df819d13e","name":"Delete row(s)"},{"parameters":{"operation":"deleteMessage","chatId":"={{ $node[\"Logic\"].json[\"chatId\"] }}","messageId":"={{ $('Logic').item.json.deleteMsgId - 1 }}"},"type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[-128,-192],"id":"637bfaf6-93d4-47ac-bd64-b554e9cb9181","name":"Delete a chat message1","webhookId":"b5567e7e-e74c-4ebd-955d-aaa8ee067ee2","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}},"onError":"continueRegularOutput"},{"parameters":{"operation":"deleteMessage","chatId":"={{ $node[\"Logic\"].json[\"chatId\"] }}","messageId":"={{ $('Logic').item.json.deleteMsgId - 1 }}"},"type":"n8n-nodes-base.telegram","typeVersion":1.2,"position":[-336,304],"id":"8e0acc7f-9197-4e94-aed1-3f7233e754e0","name":"Delete a chat message2","webhookId":"b5567e7e-e74c-4ebd-955d-aaa8ee067ee2","credentials":{"telegramApi":{"id":"L9KHcMiteyKROF5r","name":"Telegram main n8n"}},"onError":"continueRegularOutput"}],"connections":{"Telegram Trigger":{"main":[[{"node":"Logic","type":"main","index":0}]]},"Logic":{"main":[[{"node":"Delete a chat message","type":"main","index":0}]]},"DB: Update List":{"main":[[{"node":"Msg: Ask Time","type":"main","index":0}]]},"Msg: Ask List":{"main":[[]]},"DB: Update Time":{"main":[[{"node":"Msg: Ask Comment","type":"main","index":0}]]},"DB: Get Final Data":{"main":[[{"node":"Switch1","type":"main","index":0}]]},"DB: Save IP":{"main":[[{"node":"Msg: Ask List","type":"main","index":0}]]},"Switch":{"main":[[{"node":"Msg: Ask IP","type":"main","index":0}],[{"node":"Delete row(s)","type":"main","index":0}],[{"node":"DB: Update List","type":"main","index":0}],[{"node":"DB: Update Time","type":"main","index":0}],[{"node":"Delete a chat message2","type":"main","index":0}],[{"node":"DB: Get Final Data","type":"main","index":0}],[{"node":"DB: Update State (waiting_search)","type":"main","index":0}]]},"Msg: Ask IP":{"main":[[]]},"DB: Update State (waiting_search)":{"main":[[{"node":"Msg: Ask Find","type":"main","index":0}]]},"Switch1":{"main":[[{"node":"Code in JavaScript1","type":"main","index":0}],[{"node":"HTTP Request1","type":"main","index":0}]]},"HTTP Request1":{"main":[[{"node":"Code in JavaScript","type":"main","index":0}]]},"HTTP Request":{"main":[[{"node":"Send a text message1","type":"main","index":0}]]},"Msg: Ask Time":{"main":[[]]},"Msg: Ask Comment":{"main":[[]]},"DB: Update Comment":{"main":[[{"node":"DB: Get Final Data","type":"main","index":0}]]},"Delete a chat message":{"main":[[{"node":"Switch","type":"main","index":0}],[]]},"Code in JavaScript":{"main":[[{"node":"Send a text message","type":"main","index":0}]]},"Code in JavaScript1":{"main":[[{"node":"HTTP Request","type":"main","index":0}]]},"Delete row(s)":{"main":[[{"node":"Delete a chat message1","type":"main","index":0}]]},"Delete a chat message1":{"main":[[{"node":"DB: Save IP","type":"main","index":0}]]},"Delete a chat message2":{"main":[[{"node":"DB: Update Comment","type":"main","index":0}]]}},"settings":{"executionOrder":"v1","availableInMCP":false,"timeSavedMode":"fixed","callerPolicy":"workflowsFromSameOwner"},"staticData":null,"meta":{"templateCredsSetupCompleted":true},"pinData":{},"versionId":"1637da9d-62a2-4ec7-b575-3c1576bdb9e4","activeVersionId":null,"triggerCount":1,"shared":[{"updatedAt":"2025-12-17T13:52:45.901Z","createdAt":"2025-12-17T13:52:45.901Z","role":"workflow:owner","workflowId":"NKZb0GpHbd8mQkIW","projectId":"sYuiFAb87pAir6jV"}],"activeVersion":null,"tags":[]}