{
  "name": "Owepo — Alerte d'erreur (workflow d'erreur commun)",
  "nodes": [
    {
      "id": "n0",
      "name": "Mode d'emploi",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -40,
        -60
      ],
      "parameters": {
        "content": "## Alerte d'erreur\n1. Renseignez le credential SMTP du nœud e-mail et l'adresse de destination.\n2. Enregistrez ce workflow (inutile de l'activer).\n3. Dans chaque flux : **Settings → Error workflow** → choisissez celui-ci.\n\nModèle offert par Owepo — owepo.com/outils/modeles-n8n/",
        "height": 300,
        "width": 420
      }
    },
    {
      "id": "n1",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "typeVersion": 1,
      "position": [
        0,
        300
      ],
      "parameters": {}
    },
    {
      "id": "n2",
      "name": "Préparer le message",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        240,
        300
      ],
      "parameters": {
        "jsCode": "const e = $input.first().json;\nconst wf = e.workflow || {}, ex = e.execution || {};\nconst err = ex.error || {};\nreturn [{ json: {\n  sujet: `⚠️ n8n : échec de « ${wf.name || 'flux inconnu'} »`,\n  html: `<p><b>Flux :</b> ${wf.name || '—'}<br><b>Nœud :</b> ${ex.lastNodeExecuted || '—'}<br><b>Erreur :</b> ${(err.message || '—').replace(/</g,'&lt;')}<br><b>Heure :</b> ${new Date().toLocaleString('fr-FR', { timeZone: 'Europe/Paris' })}</p>` + (ex.url ? `<p><a href=\"${ex.url}\">Ouvrir l'exécution</a></p>` : '')\n} }];"
      }
    },
    {
      "id": "n3",
      "name": "Envoyer l'alerte",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2.1,
      "position": [
        480,
        300
      ],
      "parameters": {
        "fromEmail": "n8n@votre-domaine.fr",
        "toEmail": "alertes@votre-domaine.fr",
        "subject": "={{ $json.sujet }}",
        "emailFormat": "html",
        "html": "={{ $json.html }}",
        "options": {
          "appendAttribution": false
        }
      },
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 5000
    }
  ],
  "connections": {
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Préparer le message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Préparer le message": {
      "main": [
        [
          {
            "node": "Envoyer l'alerte",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "saveDataErrorExecution": "all"
  },
  "pinData": {}
}