{"active":false,"connections":{"Check Site":{"main":[[{"index":0,"node":"Site Down?","type":"main"}]]},"Escalate?":{"main":[[{"index":0,"node":"Telegram Escalation","type":"main"}],[{"index":0,"node":"Telegram Warning","type":"main"}]]},"Every 5 Minutes":{"main":[[{"index":0,"node":"Site List","type":"main"}]]},"Expand Sites":{"main":[[{"index":0,"node":"Check Site","type":"main"}]]},"Increment Counter":{"main":[[{"index":0,"node":"Update Fail Count","type":"main"}]]},"Log Incident":{"main":[[{"index":0,"node":"Read Fail Count","type":"main"}]]},"Read Fail Count":{"main":[[{"index":0,"node":"Increment Counter","type":"main"}]]},"Recheck Site":{"main":[[{"index":0,"node":"Still Down?","type":"main"}]]},"Site Down?":{"main":[[{"index":0,"node":"Wait 60 Seconds","type":"main"}],[{"index":0,"node":"Reset Fail Count","type":"main"}]]},"Site List":{"main":[[{"index":0,"node":"Expand Sites","type":"main"}]]},"Still Down?":{"main":[[{"index":0,"node":"Log Incident","type":"main"}],[{"index":0,"node":"Reset Fail Count","type":"main"}]]},"Telegram Escalation":{"main":[[{"index":0,"node":"Slack Escalation","type":"main"}]]},"Update Fail Count":{"main":[[{"index":0,"node":"Escalate?","type":"main"}]]},"Wait 60 Seconds":{"main":[[{"index":0,"node":"Recheck Site","type":"main"}]]}},"meta":{"instanceId":"","templateCredsSetupCompleted":false},"name":"Uptime Monitor with Incident Escalation","nodes":[{"id":"d1e2f3a4-0001-4a5b-8c9d-111111111111","name":"Sticky Note","parameters":{"color":4,"content":"## Uptime Monitor with Incident Escalation\n\n**Setup:**\n1. Edit *Site List* — replace the example with your own name/url pairs.\n2. Create Google Sheets, Telegram and Slack credentials and select them in the matching nodes.\n3. Make a sheet tab `SiteStatus` with columns url, fail_count (one row per site), and a tab `Incidents` with columns time, url, status.\n4. In *Slack Escalation*, set your channel. In both Telegram nodes, put your chat ID.\n5. Activate — checks run every 5 minutes.\n\n**How the counter works:** a failure increments fail_count in the sheet; a success resets it to 0. 1-2 consecutive failures = Telegram warning only. 3+ consecutive failures = Telegram + Slack escalation.","height":360,"width":470},"position":[160,-120],"type":"n8n-nodes-base.stickyNote","typeVersion":1},{"id":"d1e2f3a4-0002-4a5b-8c9d-222222222222","name":"Every 5 Minutes","parameters":{"rule":{"interval":[{"field":"minutes","minutesInterval":5}]}},"position":[240,300],"type":"n8n-nodes-base.scheduleTrigger","typeVersion":1.2},{"id":"d1e2f3a4-0003-4a5b-8c9d-333333333333","name":"Site List","parameters":{"assignments":{"assignments":[{"id":"s-1","name":"sites","type":"array","value":"[{\"name\":\"Homepage\",\"url\":\"https://example.com\"},{\"name\":\"Blog\",\"url\":\"https://example.com/blog\"}]"}]},"includeOtherFields":false,"options":{}},"position":[480,300],"type":"n8n-nodes-base.set","typeVersion":3.4},{"id":"d1e2f3a4-0004-4a5b-8c9d-444444444444","name":"Expand Sites","parameters":{"jsCode":"return $('Site List').first().json.sites.map(function (site) {\n  return { json: site };\n});","mode":"runOnceForAllItems"},"position":[720,300],"type":"n8n-nodes-base.code","typeVersion":2},{"id":"d1e2f3a4-0005-4a5b-8c9d-555555555555","name":"Check Site","parameters":{"method":"GET","options":{"response":{"response":{"fullResponse":true,"neverError":true,"responseFormat":"autodetect"}},"timeout":10000},"url":"={{ $json.url }}"},"position":[960,300],"type":"n8n-nodes-base.httpRequest","typeVersion":4.2},{"id":"d1e2f3a4-0006-4a5b-8c9d-666666666666","name":"Site Down?","parameters":{"conditions":{"combinator":"and","conditions":[{"id":"550e8400-e29b-41d4-a716-446655440003","leftValue":"={{ $json.statusCode }}","operator":{"name":"filter.operator.number.notEquals","operation":"notEquals","type":"number"},"rightValue":200}],"options":{"caseSensitive":true,"leftValue":"","typeValidation":"loose"}},"looseTypeValidation":true,"options":{}},"position":[1200,300],"type":"n8n-nodes-base.if","typeVersion":2.2},{"credentials":{"telegramApi":{"id":"","name":"Telegram Bot API"}},"id":"d1e2f3a4-0010-4a5b-8c9d-101010101010","name":"Telegram Escalation","parameters":{"additionalFields":{},"chatId":"PASTE_YOUR_CHAT_ID","text":"=DOWN: {{ $json.url }} has failed {{ $json.fail_count }} consecutive checks (last status {{ $json.status }}). Investigate immediately."},"position":[3360,300],"type":"n8n-nodes-base.telegram","typeVersion":1.2},{"credentials":{"slackOAuth2Api":{"id":"","name":"Slack OAuth2 API"}},"id":"d1e2f3a4-0011-4a5b-8c9d-111111111112","name":"Slack Escalation","parameters":{"channelId":{"__rl":true,"mode":"list","value":"#incidents"},"operation":"post","otherOptions":{},"resource":"message","select":"channel","text":"=DOWN: {{ $('Update Fail Count').item.json.url }} — {{ $('Update Fail Count').item.json.fail_count }} consecutive failures (status {{ $('Update Fail Count').item.json.status }}). Investigate immediately."},"position":[3600,300],"type":"n8n-nodes-base.slack","typeVersion":2.1},{"credentials":{"telegramApi":{"id":"","name":"Telegram Bot API"}},"id":"d1e2f3a4-0012-4a5b-8c9d-121212121212","name":"Telegram Warning","parameters":{"additionalFields":{},"chatId":"PASTE_YOUR_CHAT_ID","text":"=Warning: {{ $json.url }} failed {{ $json.fail_count }} check(s) in a row (status {{ $json.status }}). Retrying — escalates after 3 consecutive failures."},"position":[3360,500],"type":"n8n-nodes-base.telegram","typeVersion":1.2},{"id":"d1e2f3a4-0007-4a5b-8c9d-777777777777","name":"Wait 60 Seconds","parameters":{"amount":60,"resume":"afterTimeInterval","unit":"seconds"},"position":[1440,300],"type":"n8n-nodes-base.wait","typeVersion":1.1},{"id":"d1e2f3a4-0008-4a5b-8c9d-888888888888","name":"Recheck Site","parameters":{"method":"GET","options":{"response":{"response":{"fullResponse":true,"neverError":true,"responseFormat":"autodetect"}},"timeout":10000},"url":"={{ $json.url }}"},"position":[1680,300],"type":"n8n-nodes-base.httpRequest","typeVersion":4.2},{"id":"d1e2f3a4-0009-4a5b-8c9d-999999999999","name":"Still Down?","parameters":{"conditions":{"combinator":"and","conditions":[{"id":"550e8400-e29b-41d4-a716-446655440004","leftValue":"={{ $json.statusCode }}","operator":{"name":"filter.operator.number.notEquals","operation":"notEquals","type":"number"},"rightValue":200}],"options":{"caseSensitive":true,"leftValue":"","typeValidation":"loose"}},"looseTypeValidation":true,"options":{}},"position":[1920,300],"type":"n8n-nodes-base.if","typeVersion":2.2},{"credentials":{"googleSheetsOAuth2Api":{"id":"","name":"Google Sheets OAuth2 API"}},"id":"d1e2f3a4-0013-4a5b-8c9d-131313131313","name":"Log Incident","parameters":{"columns":{"mappingMode":"defineBelow","matchingColumns":[],"schema":[],"value":{"status":"={{ $json.statusCode }}","time":"={{ $now.toISO() }}","url":"={{ $json.url }}"}},"documentId":{"__rl":true,"cachedResultName":"Uptime Monitor","mode":"list","value":""},"operation":"append","options":{},"resource":"sheetWithinDocument","sheetName":{"__rl":true,"cachedResultName":"Incidents","mode":"list","value":""}},"position":[2160,300],"type":"n8n-nodes-base.googleSheets","typeVersion":4.2},{"credentials":{"googleSheetsOAuth2Api":{"id":"","name":"Google Sheets OAuth2 API"}},"id":"d1e2f3a4-0014-4a5b-8c9d-141414141414","name":"Read Fail Count","parameters":{"documentId":{"__rl":true,"cachedResultName":"Uptime Monitor","mode":"list","value":""},"filtersUI":{"values":[{"lookupColumn":"url","lookupValue":"={{ $json.url }}"}]},"operation":"read","options":{},"resource":"sheetWithinDocument","sheetName":{"__rl":true,"cachedResultName":"SiteStatus","mode":"list","value":""}},"position":[2400,300],"type":"n8n-nodes-base.googleSheets","typeVersion":4.2},{"id":"d1e2f3a4-0015-4a5b-8c9d-151515151515","name":"Increment Counter","parameters":{"assignments":{"assignments":[{"id":"fc-1","name":"url","type":"string","value":"={{ $('Read Fail Count').first().json.url }}"},{"id":"fc-2","name":"fail_count","type":"number","value":"={{ Number($('Read Fail Count').first().json.fail_count || 0) + 1 }}"},{"id":"fc-3","name":"status","type":"number","value":"={{ $('Still Down?').item.json.statusCode }}"}]},"includeOtherFields":false,"options":{}},"position":[2640,300],"type":"n8n-nodes-base.set","typeVersion":3.4},{"credentials":{"googleSheetsOAuth2Api":{"id":"","name":"Google Sheets OAuth2 API"}},"id":"d1e2f3a4-0016-4a5b-8c9d-161616161616","name":"Update Fail Count","parameters":{"columns":{"mappingMode":"defineBelow","matchingColumns":["url"],"schema":[],"value":{"fail_count":"={{ $json.fail_count }}"}},"documentId":{"__rl":true,"cachedResultName":"Uptime Monitor","mode":"list","value":""},"operation":"update","options":{},"resource":"sheetWithinDocument","sheetName":{"__rl":true,"cachedResultName":"SiteStatus","mode":"list","value":""}},"position":[2880,300],"type":"n8n-nodes-base.googleSheets","typeVersion":4.2},{"id":"d1e2f3a4-0017-4a5b-8c9d-171717171717","name":"Escalate?","parameters":{"conditions":{"combinator":"and","conditions":[{"id":"550e8400-e29b-41d4-a716-446655440005","leftValue":"={{ $json.fail_count }}","operator":{"name":"filter.operator.number.largerEquals","operation":"largerEquals","type":"number"},"rightValue":3}],"options":{"caseSensitive":true,"leftValue":"","typeValidation":"loose"}},"looseTypeValidation":true,"options":{}},"position":[3120,300],"type":"n8n-nodes-base.if","typeVersion":2.2},{"credentials":{"googleSheetsOAuth2Api":{"id":"","name":"Google Sheets OAuth2 API"}},"id":"d1e2f3a4-0018-4a5b-8c9d-181818181818","name":"Reset Fail Count","parameters":{"columns":{"mappingMode":"defineBelow","matchingColumns":["url"],"schema":[],"value":{"fail_count":0}},"documentId":{"__rl":true,"cachedResultName":"Uptime Monitor","mode":"list","value":""},"operation":"update","options":{},"resource":"sheetWithinDocument","sheetName":{"__rl":true,"cachedResultName":"SiteStatus","mode":"list","value":""}},"position":[1440,500],"type":"n8n-nodes-base.googleSheets","typeVersion":4.2}],"pinData":{},"settings":{"executionOrder":"v1"},"tags":[{"name":"cortexflow-template"}],"versionId":"cortexflow-uptime-monitor-incident-escalation-v1"}