{
  "name": "Owepo — Signal de vie",
  "nodes": [
    {
      "parameters": {
        "rule": { "interval": [{ "field": "hours", "hoursInterval": 1 }] }
      },
      "id": "b2e1d3c5-0002-4000-8000-000000000001",
      "name": "Toutes les heures",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [-320, 0]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "u", "name": "instance", "value": "https://n8n.exemple.fr", "type": "string" },
            { "id": "w", "name": "workflowSurveille", "value": "ID_DU_WORKFLOW", "type": "string" },
            { "id": "s", "name": "silenceMaxMinutes", "value": 90, "type": "number" }
          ]
        },
        "options": {}
      },
      "id": "b2e1d3c5-0002-4000-8000-000000000002",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [-100, 0],
      "notesInFlow": true,
      "notes": "Renseignez votre instance, l'ID du workflow à surveiller et le délai de silence toléré"
    },
    {
      "parameters": {
        "url": "={{ $json.instance }}/api/v1/executions",
        "sendQuery": true,
        "queryParameters": { "parameters": [
          { "name": "workflowId", "value": "={{ $json.workflowSurveille }}" },
          { "name": "limit", "value": "1" },
          { "name": "status", "value": "success" }
        ] },
        "sendHeaders": true,
        "headerParameters": { "parameters": [
          { "name": "X-N8N-API-KEY", "value": "={{ $env.N8N_API_KEY }}" }
        ] },
        "options": { "response": { "response": { "neverError": false } } }
      },
      "id": "b2e1d3c5-0002-4000-8000-000000000003",
      "name": "Dernière exécution réussie",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [140, 0],
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 2000
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            { "id": "m", "name": "minutesDepuis", "value": "={{ $json.data && $json.data[0] ? Math.round($now.diff($json.data[0].stoppedAt ? new Date($json.data[0].stoppedAt).toISOString() : $now, 'minutes').minutes) : 99999 }}", "type": "number" },
            { "id": "s", "name": "seuil", "value": "={{ $('Configuration').first().json.silenceMaxMinutes }}", "type": "number" }
          ]
        },
        "options": {}
      },
      "id": "b2e1d3c5-0002-4000-8000-000000000004",
      "name": "Calculer le silence",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [380, 0]
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "version": 2 },
          "conditions": [{
            "id": "c1",
            "leftValue": "={{ $json.minutesDepuis }}",
            "rightValue": "={{ $json.seuil }}",
            "operator": { "type": "number", "operation": "gt" }
          }],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "b2e1d3c5-0002-4000-8000-000000000005",
      "name": "Silencieux depuis trop longtemps ?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [620, 0]
    },
    {
      "parameters": {
        "sendTo": "alertes@exemple.fr",
        "subject": "[n8n] Un flux ne tourne plus",
        "emailType": "text",
        "message": "=Aucune exécution réussie depuis {{ $json.minutesDepuis }} minutes, alors que le seuil est de {{ $json.seuil }} minutes.\n\nAucune erreur n'a été levée : le flux ne s'exécute plus, ou ne traite plus rien.",
        "options": {}
      },
      "id": "b2e1d3c5-0002-4000-8000-000000000006",
      "name": "Alerter",
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.1,
      "position": [880, -80],
      "notesInFlow": true,
      "notes": "Remplacez par votre canal d'alerte"
    }
  ],
  "connections": {
    "Toutes les heures": { "main": [[{ "node": "Configuration", "type": "main", "index": 0 }]] },
    "Configuration": { "main": [[{ "node": "Dernière exécution réussie", "type": "main", "index": 0 }]] },
    "Dernière exécution réussie": { "main": [[{ "node": "Calculer le silence", "type": "main", "index": 0 }]] },
    "Calculer le silence": { "main": [[{ "node": "Silencieux depuis trop longtemps ?", "type": "main", "index": 0 }]] },
    "Silencieux depuis trop longtemps ?": { "main": [[{ "node": "Alerter", "type": "main", "index": 0 }], []] }
  },
  "settings": { "executionOrder": "v1" },
  "pinData": {},
  "meta": { "description": "Détecte la panne silencieuse : un flux planifié qui ne tourne plus ne lève aucune erreur. Fourni par Owepo (owepo.com), réutilisable et modifiable librement." }
}
