Commit ea89dcf0 authored by n8n Bot's avatar n8n Bot

Backup Workflows: 2026-01-22T09:06:08+00:00

parents
{"node":"{\n \"updatedAt\": \"2026-01-21T02:47:19.000Z\",\n \"createdAt\": \"2026-01-21T02:29:46.338Z\",\n \"id\": \"nDQK6kpTP9pOToo5\",\n \"name\": \"Auto-Discovery Monitoring Kiera\",\n \"active\": false,\n \"isArchived\": false,\n \"nodes\": [\n {\n \"parameters\": {\n \"rule\": {\n \"interval\": [\n {}\n ]\n }\n },\n \"id\": \"6794c4c0-c758-4346-8318-4b3154dcc589\",\n \"name\": \"Jadwal Pengecekan\",\n \"type\": \"n8n-nodes-base.scheduleTrigger\",\n \"typeVersion\": 1.1,\n \"position\": [\n -1984,\n 160\n ],\n \"notes\": \"Jalan setiap 1 Jam\"\n },\n {\n \"parameters\": {\n \"url\": \"https://crt.sh/?q=%.kiera.co.id&output=json\",\n \"options\": {\n \"timeout\": 10000\n }\n },\n \"id\": \"06a49881-a855-4f2c-b9c7-9247a55c7fb1\",\n \"name\": \"Cari Subdomain (crt.sh)\",\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4.1,\n \"position\": [\n -1760,\n 160\n ],\n \"notes\": \"Ambil data SSL Log\"\n },\n {\n \"parameters\": {\n \"jsCode\": \"// Mengolah data mentah dari crt.sh\\nconst rawData = items[0].json;\\nconst uniqueDomains = new Set();\\n\\n// Menambahkan domain utama manual (untuk jaga-jaga)\\nuniqueDomains.add('kiera.co.id');\\n\\nif (Array.isArray(rawData)) {\\n for (const entry of rawData) {\\n // Split karena satu sertifikat bisa untuk banyak domain (SANs)\\n const names = entry.name_value.split('\\\\n');\\n \\n for (const name of names) {\\n // Filter: Hapus wildcard (*) dan pastikan itu domain kiera\\n if (!name.includes('*') && name.includes('kiera.co.id')) {\\n uniqueDomains.add(name);\\n }\\n }\\n }\\n}\\n\\n// Konversi ke format n8n dan tambahkan protokol https\\nconst results = Array.from(uniqueDomains).map(domain => {\\n return {\\n json: {\\n url: `https://${domain}`,\\n domain: domain\\n }\\n };\\n});\\n\\nreturn results;\"\n },\n \"id\": \"cc1d0bfe-5523-47fc-8b82-1be07844bbcb\",\n \"name\": \"Filter & Bersihkan Data\",\n \"type\": \"n8n-nodes-base.code\",\n \"typeVersion\": 2,\n \"position\": [\n -1536,\n 160\n ],\n \"notes\": \"Hapus duplikat & Wildcard\"\n },\n {\n \"parameters\": {\n \"batchSize\": 1,\n \"options\": {}\n },\n \"id\": \"080a938c-bd84-405c-ae33-d34f6885dd71\",\n \"name\": \"Looping Subdomain\",\n \"type\": \"n8n-nodes-base.splitInBatches\",\n \"typeVersion\": 2,\n \"position\": [\n -1312,\n 160\n ]\n },\n {\n \"parameters\": {\n \"url\": \"={{ $json.url }}\",\n \"options\": {\n \"allowUnauthorizedCerts\": true,\n \"timeout\": 5000\n }\n },\n \"id\": \"879e13f7-a88b-43b5-973d-6fb5cd863e92\",\n \"name\": \"Cek Kesehatan Server\",\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4.1,\n \"position\": [\n -1104,\n 160\n ],\n \"onError\": \"continueErrorOutput\"\n },\n {\n \"parameters\": {\n \"conditions\": {\n \"options\": {\n \"caseSensitive\": true,\n \"leftValue\": \"\",\n \"typeValidation\": \"strict\"\n },\n \"conditions\": [\n {\n \"id\": \"cond1\",\n \"leftValue\": \"={{ $json.statusCode }}\",\n \"rightValue\": 503,\n \"operator\": {\n \"type\": \"number\",\n \"operation\": \"equals\"\n }\n },\n {\n \"id\": \"cond2\",\n \"leftValue\": \"={{ $json.error }}\",\n \"rightValue\": true,\n \"operator\": {\n \"type\": \"boolean\",\n \"operation\": \"equals\",\n \"name\": \"isTrue\"\n }\n }\n ],\n \"combinator\": \"or\"\n },\n \"options\": {}\n },\n \"id\": \"c892c403-0903-47d6-8467-fd7d27fdf9d3\",\n \"name\": \"Cek Error/503\",\n \"type\": \"n8n-nodes-base.if\",\n \"typeVersion\": 2,\n \"position\": [\n -880,\n 160\n ]\n },\n {\n \"parameters\": {\n \"chatId\": \"GANTI_CHAT_ID\",\n \"text\": \"=🚨 *SERVER ALERT*\\n\\nURL: {{ $('Looping Subdomain').item.json.url }}\\nStatus: {{ $json.statusCode ? $json.statusCode : 'SERVER MATI / DNS ERROR' }}\\nDetail: {{ $json.message ? $json.message : 'Koneksi Gagal' }}\\n\\n_Auto-discovered via n8n_\",\n \"additionalFields\": {\n \"parse_mode\": \"Markdown\"\n }\n },\n \"id\": \"1b3f16a9-4dbd-4c4c-bc80-7db9c2be606a\",\n \"name\": \"Kirim Telegram\",\n \"type\": \"n8n-nodes-base.telegram\",\n \"typeVersion\": 1.1,\n \"position\": [\n -640,\n 48\n ],\n \"webhookId\": \"97a77a9d-e663-4a3e-ba32-fee32bb6378e\",\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n }\n ],\n \"connections\": {\n \"Jadwal Pengecekan\": {\n \"main\": [\n [\n {\n \"node\": \"Cari Subdomain (crt.sh)\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Cari Subdomain (crt.sh)\": {\n \"main\": [\n [\n {\n \"node\": \"Filter & Bersihkan Data\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Filter & Bersihkan Data\": {\n \"main\": [\n [\n {\n \"node\": \"Looping Subdomain\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Looping Subdomain\": {\n \"main\": [\n [\n {\n \"node\": \"Cek Kesehatan Server\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Cek Kesehatan Server\": {\n \"main\": [\n [\n {\n \"node\": \"Cek Error/503\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Cek Error/503\": {\n \"main\": [\n [\n {\n \"node\": \"Kirim Telegram\",\n \"type\": \"main\",\n \"index\": 0\n }\n ],\n [\n {\n \"node\": \"Looping Subdomain\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Kirim Telegram\": {\n \"main\": [\n [\n {\n \"node\": \"Looping Subdomain\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"settings\": {\n \"executionOrder\": \"v1\"\n },\n \"staticData\": null,\n \"meta\": {\n \"templateCredsSetupCompleted\": true\n },\n \"pinData\": {},\n \"versionId\": \"85ba00e9-ac89-420d-b880-3186a3d7729a\",\n \"triggerCount\": 0,\n \"shared\": [\n {\n \"updatedAt\": \"2026-01-21T02:29:46.341Z\",\n \"createdAt\": \"2026-01-21T02:29:46.341Z\",\n \"role\": \"workflow:owner\",\n \"workflowId\": \"nDQK6kpTP9pOToo5\",\n \"projectId\": \"M2s3vgFF3i2bt62b\"\n }\n ],\n \"tags\": []\n}","fileName":"Auto_Discovery_Monitoring_Kiera.json"}
\ No newline at end of file
{"node":"{\n \"updatedAt\": \"2026-01-07T09:03:30.000Z\",\n \"createdAt\": \"2026-01-07T08:59:54.652Z\",\n \"id\": \"ZbbOwzCYtGcn5WCD\",\n \"name\": \"Automated reservation system with Telegram, Google Gemini AI, and Google Sheets\",\n \"active\": false,\n \"isArchived\": false,\n \"nodes\": [\n {\n \"parameters\": {\n \"updates\": [\n \"message\"\n ],\n \"additionalFields\": {}\n },\n \"id\": \"cdee9b4c-c94d-47c7-802b-0825919db984\",\n \"name\": \"Telegram Trigger\",\n \"type\": \"n8n-nodes-base.telegramTrigger\",\n \"position\": [\n 912,\n 544\n ],\n \"webhookId\": \"c2f4be19-1555-454d-bd08-46096d4521af\",\n \"typeVersion\": 1.2,\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n },\n {\n \"parameters\": {\n \"chatId\": \"={{ $('Telegram Trigger').item.json.message.chat.id }}\",\n \"text\": \"={{ $json.output }}\",\n \"additionalFields\": {\n \"appendAttribution\": false\n }\n },\n \"id\": \"01d625c7-17e7-4cdc-9463-346eef53397e\",\n \"name\": \"Telegram\",\n \"type\": \"n8n-nodes-base.telegram\",\n \"position\": [\n 2032,\n 544\n ],\n \"webhookId\": \"4c856a8c-484d-43ad-8405-7136d637f499\",\n \"typeVersion\": 1.2,\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n },\n {\n \"parameters\": {\n \"promptType\": \"define\",\n \"text\": \"={{ $json.finalPrompt }}\",\n \"options\": {\n \"systemMessage\": \"\\n\\nYou are a helpful Court Reservation Assistant for Black Ball Sporting Club. Your role is to help players book training courts through a simple, guided process. Keep responses concise and friendly.\\n\\n## Core Behavior\\n\\n- Always respond with complete, helpful messages\\n- If you don't understand something, ask for clarification politely\\n- Handle errors gracefully without technical jargon\\n- Stay focused on court reservations\\n\\n## Reservation Process\\n\\n### 1. Welcome New Users\\n\\nWhen someone starts a conversation:\\n\\n- Greet them warmly\\n- Explain you help with court bookings\\n- Ask for their reservation details\\n\\n### 2. Collect Information\\n\\nAsk users to provide these details (they can send multiple messages):\\n\\n- **Date** (YYYY-MM-DD format, e.g., 2025-06-15)\\n- **Full Name**\\n- **Email Address**\\n- **Court Number** (check available courts using the court info tool)\\n- **Start Time** (24-hour format, e.g., 14:30)\\n- **End Time** (24-hour format, e.g., 16:00)\\n\\n**Example:** \\\"I need: Date, Your Name, Email, Court Number, Start Time, and End Time. You can send these in separate messages or all together.\\\"\\n\\n### 3. Validation & Conflict Check\\n\\nBefore confirming any booking:\\n\\n- Verify date format is YYYY-MM-DD\\n- Check start time is before end time\\n- Ensure email looks valid (contains @ symbol)\\n- Use the court confirmation tool to check for scheduling conflicts\\n- If there's a conflict, suggest alternative times or courts\\n\\n### 4. Booking Confirmation\\n\\nOnce details are validated and no conflicts exist:\\n\\n- Save the reservation using the court confirmation tool\\n- Send confirmation email using the Gmail tool\\n- Confirm success to the user in Telegram\\n\\n## Error Handling\\n\\n**Invalid Formats:**\\n\\\"I need the date as YYYY-MM-DD (like 2025-06-15) and times as HH:MM (like 14:30). Could you try again?\\\"\\n\\n**Time Conflicts:**\\n\\\"Sorry, that time slot is already booked. Here are some available alternatives: [suggest 2-3 nearby time slots]\\\"\\n\\n**Missing Information:**\\n\\\"I still need [list missing items]. Could you provide those details?\\\"\\n\\n**System Errors:**\\n\\\"I'm having trouble accessing the booking system right now. Please try again in a moment.\\\"\\n\\n## Important Rules\\n\\n- Never send empty or incomplete responses\\n- Always acknowledge what the user sent before asking for more info\\n- If using tools fails, explain the issue simply\\n- Offer helpful alternatives when possible\\n- Keep the conversation moving forward\\n- Don't repeat the same instructions multiple times\\n\\n## Tone\\n\\n- Friendly but professional\\n- Encouraging and supportive\\n- Clear and direct\\n- Solution-focused\"\n }\n },\n \"id\": \"3cf98881-4c56-41fc-9025-96aee9ee6954\",\n \"name\": \"AI Agent\",\n \"type\": \"@n8n/n8n-nodes-langchain.agent\",\n \"position\": [\n 1504,\n 544\n ],\n \"typeVersion\": 1.9\n },\n {\n \"parameters\": {\n \"instructions\": \"Write code to:\\n• Get today’s date formatted “Month Day, Year”\\n• Extract the telegram message from chat.text\\n• Build a field finalPrompt exactly as:\\n\\nvbnet\\nCopy\\nEdit\\nToday's date is: [date]\\n\\n\\n\\nUser's question:\\n[body]\\n• Return finalPrompt only.\",\n \"codeGeneratedForPrompt\": \"Write code to:\\n• Get today’s date formatted “Month Day, Year”\\n• Extract the telegram message from chat.text\\n• Build a field finalPrompt exactly as:\\n\\nvbnet\\nCopy\\nEdit\\nToday's date is: [date]\\n\\n\\n\\nUser's question:\\n[body]\\n• Return finalPrompt only.\",\n \"jsCode\": \"const items = $input.all();\\nconst today = new Date();\\nconst formattedDate = `${today.toLocaleString(\\\"default\\\", { month: \\\"long\\\" })} ${today.getDate()}, ${today.getFullYear()}`;\\n\\nconst finalPrompt = items.map((item) => {\\n const telegramMessage = item?.json?.message?.text;\\n return {\\n finalPrompt: `Today's date is: ${formattedDate}\\\\n\\\\nUser's question:\\\\n${telegramMessage}`,\\n };\\n});\\n\\nreturn finalPrompt;\\n\"\n },\n \"id\": \"718b57b6-15bb-47cb-8371-77c8e1997572\",\n \"name\": \"Prepare Prompt\",\n \"type\": \"n8n-nodes-base.aiTransform\",\n \"position\": [\n 1136,\n 544\n ],\n \"typeVersion\": 1\n },\n {\n \"parameters\": {\n \"content\": \"🧠 Purpose\\nThis workflow powers a general-purpose reservation bot using Telegram, Google Sheets, and Email. Users send one message to request a reservation—it's validated against existing bookings, stored, and confirmed automatically.\\n\\n📥 Input Collected (in one go):\\n\\nDate\\n\\nName\\n\\nEmail\\n\\nResource (court, room, etc.)\\n\\nStart Time\\n\\nEnd Time\\n\\nConfirm (by replying \\\"yes\\\")\\n\\n🧩 Main Logic Flow\\n\\nTelegram Trigger → captures full request\\n\\nFunction → parses message fields\\n\\nGoogle Sheets → checks for availability\\n\\nDecision Node → validates time slot\\n\\nGoogle Sheets → appends confirmed data\\n\\nEmail Node → sends confirmation\\n\\nTelegram → replies with confirmation summary\\n\\n📄 Google Sheets Setup Required\\n\\nResource Info sheet (optional reference)\\n\\nReservation Log sheet with these headers:\\n\\n\\nCopy\\nEdit\\nDate | Name | Email | Resource | Start Time | End Time | Status\\n⚠️ Notes\\n\\nAll data is captured from a single user input (no multi-step flow).\\n\\nTime conflict logic uses date + resource + time slot.\\n\\nYou can rename \\\"Resource\\\" to anything (Room, Coach, Session, etc.)\\n\\n📬 Publisher Support\\nNeed help customizing or deploying this bot?\\n📧 tharwat.elsayed.hamad@gmail.com\",\n \"height\": 1300,\n \"width\": 360\n },\n \"id\": \"53ebf4e3-b3dc-4160-afe7-ecfb7b353337\",\n \"name\": \"Sticky Note\",\n \"type\": \"n8n-nodes-base.stickyNote\",\n \"position\": [\n 368,\n 240\n ],\n \"typeVersion\": 1\n }\n ],\n \"connections\": {\n \"AI Agent\": {\n \"main\": [\n [\n {\n \"node\": \"Telegram\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Prepare Prompt\": {\n \"main\": [\n [\n {\n \"node\": \"AI Agent\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Telegram Trigger\": {\n \"main\": [\n [\n {\n \"node\": \"Prepare Prompt\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"settings\": {},\n \"staticData\": null,\n \"meta\": {\n \"templateId\": \"5454\",\n \"templateCredsSetupCompleted\": true\n },\n \"pinData\": {},\n \"versionId\": \"2eaba905-34c8-48ab-9d42-e407710bc212\",\n \"triggerCount\": 0,\n \"shared\": [\n {\n \"updatedAt\": \"2026-01-07T08:59:54.662Z\",\n \"createdAt\": \"2026-01-07T08:59:54.662Z\",\n \"role\": \"workflow:owner\",\n \"workflowId\": \"ZbbOwzCYtGcn5WCD\",\n \"projectId\": \"M2s3vgFF3i2bt62b\"\n }\n ],\n \"tags\": []\n}","fileName":"Automated_reservation_system_with_Telegram__Google_Gemini_AI__and_Google_Sheets.json"}
\ No newline at end of file
{"node":"{\n \"updatedAt\": \"2026-01-08T07:51:24.000Z\",\n \"createdAt\": \"2025-12-12T07:56:39.368Z\",\n \"id\": \"YZDmHne0Naka6JFf\",\n \"name\": \"Backup-workflow\",\n \"active\": true,\n \"isArchived\": false,\n \"nodes\": [\n {\n \"parameters\": {\n \"rule\": {\n \"interval\": [\n {\n \"field\": \"weeks\",\n \"triggerAtDay\": [\n 5\n ],\n \"triggerAtHour\": 23\n }\n ]\n }\n },\n \"id\": \"cba492bd-c885-41d8-b565-c43d208a74ba\",\n \"name\": \"Schedule Trigger\",\n \"type\": \"n8n-nodes-base.scheduleTrigger\",\n \"typeVersion\": 1.2,\n \"position\": [\n -912,\n -32\n ]\n },\n {\n \"parameters\": {\n \"command\": \"=mkdir -p /tmp/git/n8n/{{ $json.folderName }}\"\n },\n \"id\": \"76c4d9c7-14ae-4e5c-9932-d4a35246b782\",\n \"name\": \"0. Init Folder & Git\",\n \"type\": \"n8n-nodes-base.executeCommand\",\n \"typeVersion\": 1,\n \"position\": [\n -352,\n -32\n ],\n \"notesInFlow\": true,\n \"notes\": \"Membuat folder otomatis & Git Init jika belum ada\"\n },\n {\n \"parameters\": {\n \"filters\": {},\n \"requestOptions\": {}\n },\n \"id\": \"0f551b30-e107-4b53-9ba9-331b86e37c9f\",\n \"name\": \"Get many workflows\",\n \"type\": \"n8n-nodes-base.n8n\",\n \"typeVersion\": 1,\n \"position\": [\n -144,\n -32\n ],\n \"credentials\": {\n \"n8nApi\": {\n \"id\": \"QzzuH35jsiop5b4p\",\n \"name\": \"n8n khansia\"\n }\n }\n },\n {\n \"parameters\": {\n \"options\": {}\n },\n \"id\": \"7886c126-b239-434c-8608-a8dc4f6a1781\",\n \"name\": \"Loop Over Items\",\n \"type\": \"n8n-nodes-base.splitInBatches\",\n \"typeVersion\": 3,\n \"position\": [\n 80,\n -32\n ]\n },\n {\n \"parameters\": {\n \"assignments\": {\n \"assignments\": [\n {\n \"id\": \"json-string\",\n \"name\": \"node\",\n \"value\": \"={{ JSON.stringify($json, null, 2) }}\",\n \"type\": \"string\"\n },\n {\n \"id\": \"filename\",\n \"name\": \"fileName\",\n \"value\": \"={{ $json.name.replace(/[^a-zA-Z0-9]/g, '_') }}.json\",\n \"type\": \"string\"\n }\n ]\n },\n \"options\": {}\n },\n \"id\": \"edbbc5db-8b1c-4b02-9991-33dce1b7f33e\",\n \"name\": \"Prepare Data\",\n \"type\": \"n8n-nodes-base.set\",\n \"typeVersion\": 3.4,\n \"position\": [\n 304,\n -16\n ]\n },\n {\n \"parameters\": {\n \"mode\": \"jsonToBinary\",\n \"options\": {\n \"fileName\": \"={{ $json.fileName }}\"\n }\n },\n \"id\": \"b55f584b-fe4f-4ce8-bd6f-5de4bd47c7d9\",\n \"name\": \"Convert to Binary\",\n \"type\": \"n8n-nodes-base.moveBinaryData\",\n \"typeVersion\": 1,\n \"position\": [\n 528,\n -16\n ]\n },\n {\n \"parameters\": {\n \"operation\": \"write\",\n \"fileName\": \"=/tmp/git/n8n/{{ $('Edit Fields3').item.json.folderName }}/{{ $('Prepare Data').item.json.fileName }}\",\n \"options\": {}\n },\n \"id\": \"0bdcf2cb-16aa-45cf-839f-a74aa8d007a0\",\n \"name\": \"Write to Disk\",\n \"type\": \"n8n-nodes-base.readWriteFile\",\n \"typeVersion\": 1,\n \"position\": [\n 736,\n -16\n ]\n },\n {\n \"parameters\": {\n \"command\": \"=FOLDER_PATH=\\\"/tmp/git/n8n\\\"\\nUSERNAME=\\\"benosons\\\"\\nTOKEN=\\\"AVDDWQ6RGPNz--aAWbC5\\\"\\nREPO=\\\"git.khansia.co.id/benosons/n8n-workflow.git\\\"\\nREPO_URL=\\\"https://${USERNAME}:${TOKEN}@${REPO}\\\"\\nEMAIL=\\\"bot@khansia.co.id\\\"\\nNAME=\\\"n8n Bot\\\"\\n\\ncd \\\"$FOLDER_PATH\\\"\\n\\necho \\\"🧹 Bersihkan nested .git...\\\"\\nfind . -mindepth 2 -name \\\".git\\\" -type d -exec rm -rf {} +\\n\\ngit config --global pull.rebase false\\n\\nif [ ! -d \\\".git\\\" ]; then\\n echo \\\"📦 Init repo...\\\"\\n git init\\n git remote add origin \\\"$REPO_URL\\\"\\nelse\\n git remote set-url origin \\\"$REPO_URL\\\"\\nfi\\n\\ngit branch -M master\\ngit config user.email \\\"$EMAIL\\\"\\ngit config user.name \\\"$NAME\\\"\\n\\necho \\\"➕ Add file...\\\"\\ngit add .\\n\\necho \\\"📝 Commit...\\\"\\ngit commit -m \\\"Backup Workflows: $(date -Iseconds)\\\" || echo \\\"⚠️ Tidak ada perubahan\\\"\\n\\necho \\\"🚀 Force push ke repo backup...\\\"\\ngit push origin master --force\\n\"\n },\n \"id\": \"f5d37730-5af7-4d08-b797-5dbd175bd020\",\n \"name\": \"Git Push All\",\n \"type\": \"n8n-nodes-base.executeCommand\",\n \"typeVersion\": 1,\n \"position\": [\n 320,\n -208\n ]\n },\n {\n \"parameters\": {\n \"assignments\": {\n \"assignments\": [\n {\n \"id\": \"680ec866-887b-4ce3-841f-93ae3b33834c\",\n \"name\": \"folderName\",\n \"value\": \"=backup_{{ $now.format('yyyy-MM-dd') }}\",\n \"type\": \"string\"\n }\n ]\n },\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.set\",\n \"typeVersion\": 3.4,\n \"position\": [\n -640,\n -32\n ],\n \"id\": \"7b51c02c-a2a1-466b-811a-bdaf9b14f422\",\n \"name\": \"Edit Fields3\"\n }\n ],\n \"connections\": {\n \"Schedule Trigger\": {\n \"main\": [\n [\n {\n \"node\": \"Edit Fields3\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"0. Init Folder & Git\": {\n \"main\": [\n [\n {\n \"node\": \"Get many workflows\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Get many workflows\": {\n \"main\": [\n [\n {\n \"node\": \"Loop Over Items\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Loop Over Items\": {\n \"main\": [\n [\n {\n \"node\": \"Git Push All\",\n \"type\": \"main\",\n \"index\": 0\n }\n ],\n [\n {\n \"node\": \"Prepare Data\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Prepare Data\": {\n \"main\": [\n [\n {\n \"node\": \"Convert to Binary\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Convert to Binary\": {\n \"main\": [\n [\n {\n \"node\": \"Write to Disk\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Write to Disk\": {\n \"main\": [\n [\n {\n \"node\": \"Loop Over Items\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Edit Fields3\": {\n \"main\": [\n [\n {\n \"node\": \"0. Init Folder & Git\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"settings\": {\n \"executionOrder\": \"v1\"\n },\n \"staticData\": {\n \"node:Schedule Trigger\": {\n \"recurrenceRules\": []\n }\n },\n \"meta\": {\n \"templateCredsSetupCompleted\": true\n },\n \"pinData\": {},\n \"versionId\": \"2df56514-acff-4343-97ee-0eec9be4c920\",\n \"triggerCount\": 1,\n \"shared\": [\n {\n \"updatedAt\": \"2025-12-12T07:56:39.373Z\",\n \"createdAt\": \"2025-12-12T07:56:39.373Z\",\n \"role\": \"workflow:owner\",\n \"workflowId\": \"YZDmHne0Naka6JFf\",\n \"projectId\": \"M2s3vgFF3i2bt62b\"\n }\n ],\n \"tags\": []\n}","fileName":"Backup_workflow.json"}
\ No newline at end of file
{"node":"{\n \"updatedAt\": \"2026-01-07T08:40:36.000Z\",\n \"createdAt\": \"2025-12-11T08:27:56.645Z\",\n \"id\": \"XeXctqwoJRsO9H45\",\n \"name\": \"GIT DEPLOYMENT\",\n \"active\": true,\n \"isArchived\": false,\n \"nodes\": [\n {\n \"parameters\": {\n \"path\": \"deploy-lab\",\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.webhook\",\n \"typeVersion\": 2.1,\n \"position\": [\n -672,\n -128\n ],\n \"id\": \"af1adc1d-efbf-457f-9efc-64438ad55e89\",\n \"name\": \"Webhook\",\n \"webhookId\": \"503678c2-0b00-4d33-81b3-ae038d8d1d4a\"\n },\n {\n \"parameters\": {\n \"command\": \". ../env_erpe/bin/activate && python manage.py collectstatic --noinput && deactivate && systemctl restart lab\",\n \"cwd\": \"/var/www/django/lab/\"\n },\n \"type\": \"n8n-nodes-base.ssh\",\n \"typeVersion\": 1,\n \"position\": [\n 128,\n -128\n ],\n \"id\": \"a70c6d01-2d52-444c-8e8b-ffbbe0d4da4c\",\n \"name\": \"Execute a command\",\n \"credentials\": {\n \"sshPassword\": {\n \"id\": \"PhY0jh4Pn9zfwoES\",\n \"name\": \"SSH Password account\"\n }\n }\n },\n {\n \"parameters\": {\n \"method\": \"POST\",\n \"url\": \"https://api.telegram.org/bot8333571719:AAFRxRE-STP8dRv0wabeN9X9cHfo5RLEOQY/sendMessage\",\n \"sendBody\": true,\n \"specifyBody\": \"json\",\n \"jsonBody\": \"={\\n \\\"chat_id\\\": -4988220070,\\n \\\"text\\\": \\\"🚀 Proses deploy ke 🔗[lab.kiera.co.id](https://lab.kiera.co.id/) dari branch: `lab` - tunggu beberapa saat.\\\",\\n \\\"parse_mode\\\": \\\"Markdown\\\",\\n \\\"disable_web_page_preview\\\": true\\n}\",\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4.3,\n \"position\": [\n -32,\n -128\n ],\n \"id\": \"ffc863c1-0da1-4141-bd15-064e14cb8f17\",\n \"name\": \"START INFO\"\n },\n {\n \"parameters\": {\n \"method\": \"POST\",\n \"url\": \"https://api.telegram.org/bot8333571719:AAFRxRE-STP8dRv0wabeN9X9cHfo5RLEOQY/sendMessage\",\n \"sendBody\": true,\n \"specifyBody\": \"json\",\n \"jsonBody\": \"={\\n \\\"chat_id\\\": -4988220070,\\n \\\"text\\\": \\\"🚀 Deploy ke [lab.kiera.co.id](https://lab.kiera.co.id/) Selesai.\\\",\\n \\\"parse_mode\\\": \\\"Markdown\\\",\\n \\\"disable_web_page_preview\\\": true\\n}\",\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4.3,\n \"position\": [\n 304,\n -128\n ],\n \"id\": \"f0df2b60-10cd-4848-8331-c23c5d76ef0a\",\n \"name\": \"END INFO\"\n },\n {\n \"parameters\": {\n \"method\": \"POST\",\n \"url\": \"https://api.telegram.org/bot8333571719:AAFRxRE-STP8dRv0wabeN9X9cHfo5RLEOQY/sendMessage\",\n \"sendBody\": true,\n \"specifyBody\": \"json\",\n \"jsonBody\": \"={\\n \\\"chat_id\\\": -4988220070,\\n \\\"text\\\": \\\"🚀 Proses Scan SONNARCUBE untuk Branch: `lab` - tunggu beberapa saat.\\\",\\n \\\"parse_mode\\\": \\\"Markdown\\\",\\n \\\"disable_web_page_preview\\\": true\\n}\",\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4.3,\n \"position\": [\n -512,\n -128\n ],\n \"id\": \"781bdd6d-c661-4bdb-8a7f-b63fb3c6acc8\",\n \"name\": \"START SCAN\"\n },\n {\n \"parameters\": {\n \"command\": \"=. ../env_sonar/bin/activate && \\npysonar \\\\\\n --sonar-host-url=http://30.10.20.108:9000 \\\\\\n --sonar-token=sqp_132c8e0c467932e30da7bc8f97ebf53dfdba32fa \\\\\\n --sonar-project-key=kiera-lab \\\\\\n -Dsonar.nodejs.executable=/opt/node22/bin/node \\\\\\n -Dsonar.scm.provider=git \\\\\\n-Dsonar.javascript.node.maxspace=4096 \\\\\\n-Dsonar.exclusions=**/*.html,**/*.css,**/*.js,**/*.ts\\n&& deactivate\",\n \"cwd\": \"/var/www/django/lab/\"\n },\n \"name\": \"Scan\",\n \"type\": \"n8n-nodes-base.ssh\",\n \"typeVersion\": 1,\n \"position\": [\n -176,\n -304\n ],\n \"id\": \"85f6eb18-0024-402e-9a1e-68e47bac24bd\",\n \"credentials\": {\n \"sshPassword\": {\n \"id\": \"PhY0jh4Pn9zfwoES\",\n \"name\": \"SSH Password account\"\n }\n }\n },\n {\n \"parameters\": {\n \"command\": \"git pull origin lab\",\n \"cwd\": \"/var/www/django/lab/\"\n },\n \"name\": \"SSH Pull\",\n \"type\": \"n8n-nodes-base.ssh\",\n \"typeVersion\": 1,\n \"position\": [\n -400,\n -304\n ],\n \"id\": \"5d4718d4-ffdd-4516-8b52-2ec7979eeb62\",\n \"credentials\": {\n \"sshPassword\": {\n \"id\": \"PhY0jh4Pn9zfwoES\",\n \"name\": \"SSH Password account\"\n }\n }\n }\n ],\n \"connections\": {\n \"Webhook\": {\n \"main\": [\n [\n {\n \"node\": \"START SCAN\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Execute a command\": {\n \"main\": [\n [\n {\n \"node\": \"END INFO\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"START INFO\": {\n \"main\": [\n [\n {\n \"node\": \"Execute a command\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"START SCAN\": {\n \"main\": [\n [\n {\n \"node\": \"SSH Pull\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Scan\": {\n \"main\": [\n [\n {\n \"node\": \"START INFO\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"SSH Pull\": {\n \"main\": [\n [\n {\n \"node\": \"Scan\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"settings\": {\n \"executionOrder\": \"v1\"\n },\n \"staticData\": null,\n \"meta\": {\n \"templateCredsSetupCompleted\": true\n },\n \"pinData\": {},\n \"versionId\": \"1fc5b4dd-be16-4e0b-a378-d9451e6adc8d\",\n \"triggerCount\": 1,\n \"shared\": [\n {\n \"updatedAt\": \"2025-12-11T08:27:56.650Z\",\n \"createdAt\": \"2025-12-11T08:27:56.650Z\",\n \"role\": \"workflow:owner\",\n \"workflowId\": \"XeXctqwoJRsO9H45\",\n \"projectId\": \"M2s3vgFF3i2bt62b\"\n }\n ],\n \"tags\": []\n}","fileName":"GIT_DEPLOYMENT.json"}
\ No newline at end of file
{"node":"{\n \"updatedAt\": \"2026-01-21T04:37:08.000Z\",\n \"createdAt\": \"2026-01-21T03:11:36.597Z\",\n \"id\": \"z8x8mRCq2L9xlGie\",\n \"name\": \"Kiera Monitoring - Loop Fixed\",\n \"active\": true,\n \"isArchived\": false,\n \"nodes\": [\n {\n \"parameters\": {\n \"rule\": {\n \"interval\": [\n {\n \"field\": \"hours\"\n }\n ]\n }\n },\n \"id\": \"1700401d-0d76-40f2-a1e5-3e05424dd1c3\",\n \"name\": \"Start Timer\",\n \"type\": \"n8n-nodes-base.scheduleTrigger\",\n \"typeVersion\": 1.1,\n \"position\": [\n -1936,\n 368\n ]\n },\n {\n \"parameters\": {\n \"url\": \"https://crt.sh/?q=%.kiera.co.id&output=json\",\n \"options\": {\n \"timeout\": 20000\n }\n },\n \"id\": \"8699017f-27e5-40f1-aa23-feb967483e24\",\n \"name\": \"1. Ambil Data Domain\",\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4.1,\n \"position\": [\n -1728,\n 368\n ],\n \"alwaysOutputData\": true\n },\n {\n \"parameters\": {\n \"options\": {}\n },\n \"id\": \"2f2e07d1-9298-427e-ba46-fc13ed96d886\",\n \"name\": \"3. Loop Start\",\n \"type\": \"n8n-nodes-base.splitInBatches\",\n \"typeVersion\": 3,\n \"position\": [\n -1056,\n 368\n ]\n },\n {\n \"parameters\": {\n \"url\": \"={{ $json.url }}\",\n \"options\": {\n \"allowUnauthorizedCerts\": true,\n \"timeout\": 5000\n }\n },\n \"id\": \"dd0a8393-8157-4aef-91e9-1da51dece987\",\n \"name\": \"4. Cek Server\",\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4.1,\n \"position\": [\n -912,\n 112\n ],\n \"alwaysOutputData\": false,\n \"onError\": \"continueErrorOutput\"\n },\n {\n \"parameters\": {},\n \"id\": \"38101027-a8f7-4337-a9a1-c595f367023b\",\n \"name\": \"Selesai Satu Item\",\n \"type\": \"n8n-nodes-base.noOp\",\n \"typeVersion\": 1,\n \"position\": [\n -256,\n 432\n ]\n },\n {\n \"parameters\": {\n \"method\": \"POST\",\n \"url\": \"https://api.telegram.org/bot8333571719:AAFRxRE-STP8dRv0wabeN9X9cHfo5RLEOQY/sendMessage\",\n \"sendBody\": true,\n \"specifyBody\": \"json\",\n \"jsonBody\": \"={\\n \\\"chat_id\\\": -4988220070,\\n \\\"text\\\": \\\"=============================================\\\\n⚠️ *SERVER ALERT*\\\\nTarget: {{ $json.url }}\\\\nStatus: {{ $json.error.status ? $json.error.status : 'DOWN' }}\\\\n=============================================\\\",\\n \\\"parse_mode\\\": \\\"Markdown\\\",\\n \\\"disable_web_page_preview\\\": true\\n}\",\n \"options\": {}\n },\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4.3,\n \"position\": [\n -112,\n 192\n ],\n \"id\": \"2cb0f805-ce07-4799-96d1-7aeb92bd032c\",\n \"name\": \"END INFO\"\n },\n {\n \"parameters\": {\n \"jsCode\": \"// Mengolah data mentah dari crt.sh\\n\\nvar rawData = [];\\nfor (let i = 0; i < items.length; i++) {\\n rawData.push(items[i].json)\\n}\\n\\nconst uniqueDomains = new Set();\\n\\n// Menambahkan domain utama manual (untuk jaga-jaga)\\nuniqueDomains.add('kiera.co.id');\\nuniqueDomains.add('api-kiera.khansia.co.id/api/docs/');\\n\\nif (Array.isArray(rawData)) {\\n for (const entry of rawData) {\\n // Split karena satu sertifikat bisa untuk banyak domain (SANs)\\n const names = entry.name_value.split('\\\\n');\\n \\n for (const name of names) {\\n // Filter: Hapus wildcard (*) dan pastikan itu domain kiera\\n if (!name.includes('*') && name.includes('kiera.co.id')) {\\n uniqueDomains.add(name);\\n }\\n }\\n }\\n}\\n\\n// Konversi ke format n8n dan tambahkan protokol https\\nconst results = Array.from(uniqueDomains).map(domain => {\\n return {\\n json: {\\n url: `https://${domain}`,\\n domain: domain\\n }\\n };\\n});\\n\\nreturn results;\"\n },\n \"id\": \"a42d34a5-3f4b-435f-bac9-ef5115824f41\",\n \"name\": \"Filter & Bersihkan Data\",\n \"type\": \"n8n-nodes-base.code\",\n \"typeVersion\": 2,\n \"position\": [\n -1296,\n 256\n ],\n \"notes\": \"Hapus duplikat & Wildcard\"\n }\n ],\n \"connections\": {\n \"Start Timer\": {\n \"main\": [\n [\n {\n \"node\": \"1. Ambil Data Domain\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"1. Ambil Data Domain\": {\n \"main\": [\n [\n {\n \"node\": \"Filter & Bersihkan Data\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"3. Loop Start\": {\n \"main\": [\n [],\n [\n {\n \"node\": \"4. Cek Server\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"4. Cek Server\": {\n \"main\": [\n [\n {\n \"node\": \"Selesai Satu Item\",\n \"type\": \"main\",\n \"index\": 0\n }\n ],\n [\n {\n \"node\": \"END INFO\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Selesai Satu Item\": {\n \"main\": [\n [\n {\n \"node\": \"3. Loop Start\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"END INFO\": {\n \"main\": [\n [\n {\n \"node\": \"Selesai Satu Item\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Filter & Bersihkan Data\": {\n \"main\": [\n [\n {\n \"node\": \"3. Loop Start\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"settings\": {\n \"executionOrder\": \"v1\"\n },\n \"staticData\": {\n \"node:Start Timer\": {\n \"recurrenceRules\": []\n }\n },\n \"meta\": {\n \"templateCredsSetupCompleted\": true\n },\n \"pinData\": {},\n \"versionId\": \"27fba61e-5066-4d5f-a892-07b9d21c9271\",\n \"triggerCount\": 1,\n \"shared\": [\n {\n \"updatedAt\": \"2026-01-21T03:11:36.602Z\",\n \"createdAt\": \"2026-01-21T03:11:36.602Z\",\n \"role\": \"workflow:owner\",\n \"workflowId\": \"z8x8mRCq2L9xlGie\",\n \"projectId\": \"M2s3vgFF3i2bt62b\"\n }\n ],\n \"tags\": []\n}","fileName":"Kiera_Monitoring___Loop_Fixed.json"}
\ No newline at end of file
{"node":"{\n \"updatedAt\": \"2026-01-08T08:18:34.000Z\",\n \"createdAt\": \"2026-01-07T02:34:07.067Z\",\n \"id\": \"fmDCnxWIYcC3kCbF\",\n \"name\": \"Telegram Rule Base Simple Agent\",\n \"active\": true,\n \"isArchived\": false,\n \"nodes\": [\n {\n \"parameters\": {\n \"updates\": [\n \"message\"\n ],\n \"additionalFields\": {}\n },\n \"id\": \"1be1f9e1-97a9-4b50-8e6e-b613319f042c\",\n \"name\": \"Telegram Trigger\",\n \"type\": \"n8n-nodes-base.telegramTrigger\",\n \"typeVersion\": 1,\n \"position\": [\n -704,\n 192\n ],\n \"webhookId\": \"9accc407-884a-42db-babb-6f5819ae47ff\",\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n },\n {\n \"parameters\": {\n \"keepOnlySet\": true,\n \"values\": {\n \"string\": [\n {\n \"name\": \"text\",\n \"value\": \"={{ ($json.message.text || '').trim() }}\"\n },\n {\n \"name\": \"chat_id\",\n \"value\": \"={{ $json.message.chat.id }}\"\n }\n ]\n },\n \"options\": {}\n },\n \"id\": \"9cfba30f-542f-4f27-b617-528511f48661\",\n \"name\": \"Normalize Text\",\n \"type\": \"n8n-nodes-base.set\",\n \"typeVersion\": 2,\n \"position\": [\n -480,\n 192\n ]\n },\n {\n \"parameters\": {\n \"value1\": \"={{ $json.text }}\",\n \"rules\": {\n \"rules\": [\n {\n \"operation\": \"notEqual\"\n }\n ]\n }\n },\n \"id\": \"e5bbe5e9-89ad-46d9-b7df-f16f1cb95003\",\n \"name\": \"Rule Switch\",\n \"type\": \"n8n-nodes-base.switch\",\n \"typeVersion\": 2,\n \"position\": [\n -256,\n 192\n ]\n },\n {\n \"parameters\": {\n \"chatId\": \"={{ $json.chat_id }}\",\n \"text\": \"Halo 👋\\n\\nKetik:\\n1 = Info layanan\\n2 = Harga\\n3 = Kontak CS\\nmenu = tampilkan menu\",\n \"additionalFields\": {}\n },\n \"id\": \"411df69a-5021-4ce5-9ea7-d5e0ce140141\",\n \"name\": \"Reply Menu\",\n \"type\": \"n8n-nodes-base.telegram\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 0\n ],\n \"webhookId\": \"8dd487f1-2f0d-422c-8346-2d7e29aacf82\",\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n },\n {\n \"parameters\": {\n \"chatId\": \"={{ $json.chat_id }}\",\n \"text\": \"📌 *Info Layanan*\\n\\n- Implementasi ERP\\n- Automation n8n\\n- Bot Telegram & WhatsApp\\n\\nKetik *menu* untuk kembali.\",\n \"additionalFields\": {}\n },\n \"id\": \"8deb5b26-f8c5-4215-bbb2-2dbd45759055\",\n \"name\": \"Reply 1\",\n \"type\": \"n8n-nodes-base.telegram\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 128\n ],\n \"webhookId\": \"184d71a7-e7bc-4226-90f3-185dc5e2a229\",\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n },\n {\n \"parameters\": {\n \"chatId\": \"={{ $json.chat_id }}\",\n \"text\": \"💰 *Harga*\\n\\n- Basic: Rp X\\n- Pro: Rp Y\\n\\nKetik *menu* untuk kembali.\",\n \"additionalFields\": {}\n },\n \"id\": \"c7e9ac64-30cd-422a-929a-ddda99f8814d\",\n \"name\": \"Reply 2\",\n \"type\": \"n8n-nodes-base.telegram\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 240\n ],\n \"webhookId\": \"3f298141-5508-4666-b443-43ab5904018d\",\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n },\n {\n \"parameters\": {\n \"chatId\": \"={{ $json.chat_id }}\",\n \"text\": \"👨‍💻 *Kontak CS*\\n\\nSilakan jelaskan kebutuhan kamu.\\nAdmin akan follow up.\",\n \"additionalFields\": {}\n },\n \"id\": \"a2d0b6f8-382a-4520-98b3-34c933c36ded\",\n \"name\": \"Reply 3\",\n \"type\": \"n8n-nodes-base.telegram\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 368\n ],\n \"webhookId\": \"81952ebe-936d-40a3-a5d5-325c0985e2bb\",\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n },\n {\n \"parameters\": {\n \"chatId\": \"={{ $json.chat_id }}\",\n \"text\": \"❌ Perintah tidak dikenali.\\nKetik *menu* untuk melihat pilihan.\",\n \"additionalFields\": {}\n },\n \"id\": \"2b90a58c-1902-4846-a734-f48b165724cb\",\n \"name\": \"Reply Default\",\n \"type\": \"n8n-nodes-base.telegram\",\n \"typeVersion\": 1,\n \"position\": [\n 0,\n 480\n ],\n \"webhookId\": \"03ffa5a5-b8cd-4582-842b-74bf4e5f9bb3\",\n \"credentials\": {\n \"telegramApi\": {\n \"id\": \"Z2FSMKmPu6xdQdXH\",\n \"name\": \"my-hominem-bot\"\n }\n }\n }\n ],\n \"connections\": {\n \"Telegram Trigger\": {\n \"main\": [\n [\n {\n \"node\": \"Normalize Text\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Normalize Text\": {\n \"main\": [\n [\n {\n \"node\": \"Rule Switch\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Rule Switch\": {\n \"main\": [\n [\n {\n \"node\": \"Reply Menu\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"settings\": {\n \"executionOrder\": \"v1\"\n },\n \"staticData\": null,\n \"meta\": {\n \"templateCredsSetupCompleted\": true\n },\n \"pinData\": {},\n \"versionId\": \"14e85884-28a3-45fc-9276-696ddb2cfaa2\",\n \"triggerCount\": 1,\n \"shared\": [\n {\n \"updatedAt\": \"2026-01-07T02:34:07.079Z\",\n \"createdAt\": \"2026-01-07T02:34:07.079Z\",\n \"role\": \"workflow:owner\",\n \"workflowId\": \"fmDCnxWIYcC3kCbF\",\n \"projectId\": \"M2s3vgFF3i2bt62b\"\n }\n ],\n \"tags\": []\n}","fileName":"Telegram_Rule_Base_Simple_Agent.json"}
\ No newline at end of file
{"node":"{\n \"updatedAt\": \"2026-01-07T08:59:21.710Z\",\n \"createdAt\": \"2026-01-07T08:59:21.710Z\",\n \"id\": \"U77XXDETNrF5nGul\",\n \"name\": \"Telegram fixing\",\n \"active\": false,\n \"isArchived\": false,\n \"nodes\": [],\n \"connections\": {},\n \"settings\": {\n \"executionOrder\": \"v1\"\n },\n \"staticData\": null,\n \"meta\": null,\n \"pinData\": {},\n \"versionId\": \"750ba11f-34d6-447b-b3db-0570257fff14\",\n \"triggerCount\": 0,\n \"shared\": [\n {\n \"updatedAt\": \"2026-01-07T08:59:21.719Z\",\n \"createdAt\": \"2026-01-07T08:59:21.719Z\",\n \"role\": \"workflow:owner\",\n \"workflowId\": \"U77XXDETNrF5nGul\",\n \"projectId\": \"M2s3vgFF3i2bt62b\"\n }\n ],\n \"tags\": []\n}","fileName":"Telegram_fixing.json"}
\ No newline at end of file
{"node":"{\n \"updatedAt\": \"2026-01-21T03:10:45.000Z\",\n \"createdAt\": \"2026-01-21T02:25:21.463Z\",\n \"id\": \"WGLZhHIDkE7RUBMy\",\n \"name\": \"Uptime + DNS Monitor -> Telegram\",\n \"active\": false,\n \"isArchived\": false,\n \"nodes\": [\n {\n \"parameters\": {},\n \"id\": \"4ef4f3ec-5a92-425b-81e9-05a6d69926b4\",\n \"name\": \"Cron (5m)\",\n \"type\": \"n8n-nodes-base.cron\",\n \"typeVersion\": 1,\n \"position\": [\n -576,\n -80\n ]\n },\n {\n \"parameters\": {\n \"values\": {\n \"string\": [\n {\n \"name\": \"targetsJson\",\n \"value\": \"[{\\\"name\\\":\\\"kiera\\\",\\\"url\\\":\\\"https://kiera.co.id\\\"}]\"\n }\n ]\n },\n \"options\": {}\n },\n \"id\": \"7f94cb9a-e6dd-4ff2-8582-3a4a59c3f056\",\n \"name\": \"Targets\",\n \"type\": \"n8n-nodes-base.set\",\n \"typeVersion\": 2,\n \"position\": [\n -368,\n -80\n ]\n },\n {\n \"parameters\": {\n \"jsCode\": \"const targets = JSON.parse($json.targetsJson || '[]');\\nreturn targets.map(t => ({ json: t }));\"\n },\n \"id\": \"37c1da7e-b8bc-4b1a-b109-704547ff6c9e\",\n \"name\": \"Explode Targets\",\n \"type\": \"n8n-nodes-base.code\",\n \"typeVersion\": 2,\n \"position\": [\n -160,\n -80\n ]\n },\n {\n \"parameters\": {\n \"jsCode\": \"function hostnameFromUrl(u){\\n try { return new URL(u).hostname; } catch(e){ return (u||'').replace(/^https?:\\\\/\\\\//,'').split('/')[0]; }\\n}\\n\\nconst url = $json.url;\\nconst hostname = hostnameFromUrl(url);\\nreturn [{ json: { ...$json, hostname } }];\"\n },\n \"id\": \"b3f76665-ddfc-4043-8e7b-ebaabce3dde2\",\n \"name\": \"Prepare Hostname\",\n \"type\": \"n8n-nodes-base.code\",\n \"typeVersion\": 2,\n \"position\": [\n 80,\n -80\n ]\n },\n {\n \"parameters\": {\n \"url\": \"https://cloudflare-dns.com/dns-query\",\n \"sendQuery\": true,\n \"queryParameters\": {\n \"parameters\": [\n {\n \"name\": \"name\",\n \"value\": \"={{$json.hostname}}\"\n },\n {\n \"name\": \"type\",\n \"value\": \"A\"\n }\n ]\n },\n \"sendHeaders\": true,\n \"headerParameters\": {\n \"parameters\": [\n {\n \"name\": \"accept\",\n \"value\": \"application/dns-json\"\n }\n ]\n },\n \"options\": {\n \"timeout\": 8000\n }\n },\n \"id\": \"a141a545-abfc-4615-b2b9-46c959898f20\",\n \"name\": \"DNS A (DoH)\",\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4,\n \"position\": [\n 288,\n -176\n ]\n },\n {\n \"parameters\": {\n \"url\": \"https://cloudflare-dns.com/dns-query\",\n \"sendQuery\": true,\n \"queryParameters\": {\n \"parameters\": [\n {\n \"name\": \"name\",\n \"value\": \"={{$json.hostname}}\"\n },\n {\n \"name\": \"type\",\n \"value\": \"AAAA\"\n }\n ]\n },\n \"sendHeaders\": true,\n \"headerParameters\": {\n \"parameters\": [\n {\n \"name\": \"accept\",\n \"value\": \"application/dns-json\"\n }\n ]\n },\n \"options\": {\n \"timeout\": 8000\n }\n },\n \"id\": \"dfb3fa46-c322-45b8-adb1-9140866b9f6f\",\n \"name\": \"DNS AAAA (DoH)\",\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4,\n \"position\": [\n 288,\n 32\n ]\n },\n {\n \"parameters\": {\n \"mode\": \"mergeByIndex\",\n \"options\": {}\n },\n \"id\": \"d6b60c7d-3b8f-45e2-a9b6-a609a6c38a6d\",\n \"name\": \"Merge DNS\",\n \"type\": \"n8n-nodes-base.merge\",\n \"typeVersion\": 2,\n \"position\": [\n 512,\n -80\n ],\n \"alwaysOutputData\": true\n },\n {\n \"parameters\": {\n \"url\": \"={{$json.url}}\",\n \"options\": {\n \"response\": {},\n \"timeout\": 10000\n }\n },\n \"id\": \"dc6d3ff2-8a31-499f-a228-fc013b9a9ad5\",\n \"name\": \"HTTP Check (GET)\",\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4,\n \"position\": [\n 736,\n -80\n ],\n \"continueOnFail\": true\n },\n {\n \"parameters\": {\n \"jsCode\": \"const name = $json.name;\\nconst url = $json.url;\\nconst hostname = $json.hostname;\\n\\n// DNS results\\nconst dnsAItem = $items('DNS A (DoH)')[0]?.json;\\nconst dnsAAAAItem = $items('DNS AAAA (DoH)')[0]?.json;\\n\\nconst aAnswers = Array.isArray(dnsAItem?.Answer) ? dnsAItem.Answer : [];\\nconst aaaaAnswers = Array.isArray(dnsAAAAItem?.Answer) ? dnsAAAAItem.Answer : [];\\n\\nconst dnsOk = (aAnswers.length + aaaaAnswers.length) > 0;\\n\\n// HTTP outcome\\nconst statusCode = $json.statusCode ?? $json?.response?.statusCode ?? null;\\nconst err = $json.error || null;\\n\\nlet httpOk = false;\\nlet reason = '';\\n\\nif (typeof statusCode === 'number') {\\n httpOk = statusCode >= 200 && statusCode < 400; // treat 3xx as OK\\n if (!httpOk) reason = `HTTP ${statusCode}`;\\n} else {\\n httpOk = false;\\n reason = err?.message ? `HTTP ERROR: ${err.message}` : 'HTTP ERROR/NO RESPONSE';\\n}\\n\\n// alert conditions\\nconst is503 = statusCode === 503;\\nconst is5xx = typeof statusCode === 'number' && statusCode >= 500;\\nconst is4xx = typeof statusCode === 'number' && statusCode >= 400 && statusCode < 500;\\n\\nconst alert = (!dnsOk) || is503 || is5xx || (!httpOk);\\n\\nlet alertReason = [];\\nif (!dnsOk) alertReason.push('DNS_FAILED');\\nif (typeof statusCode === 'number') {\\n if (statusCode === 503) alertReason.push('HTTP_503');\\n else if (statusCode >= 500) alertReason.push(`HTTP_${statusCode}`);\\n else if (is4xx) alertReason.push(`HTTP_${statusCode}`);\\n} else {\\n alertReason.push(reason);\\n}\\n\\nconst msg = [\\n '🚨 *Uptime Alert*',\\n `• Name: *${name}*`,\\n `• Host: \\\\`${hostname}\\\\``,\\n `• URL: ${url}`,\\n `• DNS: *${dnsOk ? 'OK' : 'FAIL'}*`,\\n `• HTTP: *${statusCode ?? 'NO_RESPONSE'}*`,\\n `• Reason: ${alertReason.join(' | ')}`,\\n `• Time: ${new Date().toISOString()}`\\n].join('\\\\n');\\n\\nreturn [{\\n json: {\\n name, url, hostname,\\n dnsOk,\\n statusCode,\\n alert,\\n alertReason: alertReason.join(' | '),\\n telegramText: msg\\n }\\n}];\"\n },\n \"id\": \"b4b3eac5-e456-45f4-920c-b9d0277c2dbe\",\n \"name\": \"Evaluate\",\n \"type\": \"n8n-nodes-base.code\",\n \"typeVersion\": 2,\n \"position\": [\n 960,\n -80\n ]\n },\n {\n \"parameters\": {\n \"conditions\": {\n \"boolean\": [\n {\n \"value1\": \"={{$json.alert}}\",\n \"value2\": true\n }\n ]\n },\n \"options\": {}\n },\n \"id\": \"0d04e778-cba6-452e-b0d8-147f113b3ae5\",\n \"name\": \"IF Alert\",\n \"type\": \"n8n-nodes-base.if\",\n \"typeVersion\": 2,\n \"position\": [\n 1168,\n -80\n ]\n },\n {\n \"parameters\": {\n \"method\": \"POST\",\n \"url\": \"={{'https://api.telegram.org/bot8333571719:AAFRxRE-STP8dRv0wabeN9X9cHfo5RLEOQY/sendMessage'}}\",\n \"sendHeaders\": true,\n \"headerParameters\": {\n \"parameters\": [\n {\n \"name\": \"content-type\",\n \"value\": \"application/json\"\n }\n ]\n },\n \"sendBody\": true,\n \"specifyBody\": \"json\",\n \"jsonBody\": \"={{ { chat_id: $env.TELEGRAM_CHAT_ID, text: $json.telegramText, parse_mode: 'Markdown' } }}\",\n \"options\": {\n \"timeout\": 10000\n }\n },\n \"id\": \"95ff9fba-6661-4605-916c-613a8ff77d05\",\n \"name\": \"Telegram Notify (API)\",\n \"type\": \"n8n-nodes-base.httpRequest\",\n \"typeVersion\": 4,\n \"position\": [\n 1392,\n -176\n ]\n }\n ],\n \"connections\": {\n \"Cron (5m)\": {\n \"main\": [\n [\n {\n \"node\": \"Targets\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Targets\": {\n \"main\": [\n [\n {\n \"node\": \"Explode Targets\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Explode Targets\": {\n \"main\": [\n [\n {\n \"node\": \"Prepare Hostname\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Prepare Hostname\": {\n \"main\": [\n [\n {\n \"node\": \"DNS A (DoH)\",\n \"type\": \"main\",\n \"index\": 0\n },\n {\n \"node\": \"DNS AAAA (DoH)\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"DNS A (DoH)\": {\n \"main\": [\n [\n {\n \"node\": \"Merge DNS\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"DNS AAAA (DoH)\": {\n \"main\": [\n [\n {\n \"node\": \"Merge DNS\",\n \"type\": \"main\",\n \"index\": 1\n }\n ]\n ]\n },\n \"Merge DNS\": {\n \"main\": [\n [\n {\n \"node\": \"HTTP Check (GET)\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"HTTP Check (GET)\": {\n \"main\": [\n [\n {\n \"node\": \"Evaluate\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"Evaluate\": {\n \"main\": [\n [\n {\n \"node\": \"IF Alert\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n },\n \"IF Alert\": {\n \"main\": [\n [\n {\n \"node\": \"Telegram Notify (API)\",\n \"type\": \"main\",\n \"index\": 0\n }\n ]\n ]\n }\n },\n \"settings\": {\n \"executionOrder\": \"v1\"\n },\n \"staticData\": null,\n \"meta\": null,\n \"pinData\": {},\n \"versionId\": \"a6cab664-3d68-4a7f-a384-adc0d467131c\",\n \"triggerCount\": 0,\n \"shared\": [\n {\n \"updatedAt\": \"2026-01-21T02:25:21.474Z\",\n \"createdAt\": \"2026-01-21T02:25:21.474Z\",\n \"role\": \"workflow:owner\",\n \"workflowId\": \"WGLZhHIDkE7RUBMy\",\n \"projectId\": \"M2s3vgFF3i2bt62b\"\n }\n ],\n \"tags\": []\n}","fileName":"Uptime___DNS_Monitor____Telegram.json"}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment