{
  "name": "Nodbot - Discord alerts with dedupe and safe embeds",
  "nodes": [
    {
      "parameters": {
        "path": "integration-discord-n8n-alerts-webhooks",
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "id": "2de9b58b-f7fb-4fc3-893b-1081261d9244",
      "name": "Webhook alert input",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        260
      ]
    },
    {
      "parameters": {
        "jsCode": "const src = $json.body ?? $json;\nconst severity = String(src.severity ?? 'info').toLowerCase();\nconst allowed = ['info', 'warning', 'critical'];\nconst level = allowed.includes(severity) ? severity : 'warning';\nconst safe = v => String(v ?? '').replace(/(token|secret|password)=([^&\\s]+)/gi, '$1=***');\nconst workflow = safe(src.workflow ?? 'unknown workflow');\nconst entityId = safe(src.entity_id ?? src.id ?? 'no-entity');\nconst message = safe(src.message ?? 'No message');\nconst dedupeKey = `discord:${level}:${workflow}:${entityId}`.toLowerCase();\nconst color = level === 'critical' ? 15158332 : level === 'warning' ? 16776960 : 3447003;\nreturn [{ json: {\n  dedupe_key: dedupeKey,\n  discord: {\n    username: 'Nodbot Alert',\n    embeds: [{\n      title: `${level.toUpperCase()}: ${workflow}`,\n      description: message.slice(0, 900),\n      color,\n      fields: [\n        { name: 'Entity', value: entityId, inline: true },\n        { name: 'Runbook', value: safe(src.runbook ?? 'not configured'), inline: false }\n      ]\n    }]\n  }\n}}];"
      },
      "id": "b60e4f0e-2821-4ef1-8f74-9e7841eb58b0",
      "name": "Normalize and sanitize alert",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        280,
        260
      ]
    },
    {
      "parameters": {},
      "id": "3be255f4-2a56-4347-b368-b0055f357ba2",
      "name": "Check dedupe window",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2,
      "position": [
        560,
        260
      ]
    },
    {
      "parameters": {
        "jsCode": "const src = $json.body ?? $json;\nconst severity = String(src.severity ?? 'info').toLowerCase();\nconst allowed = ['info', 'warning', 'critical'];\nconst level = allowed.includes(severity) ? severity : 'warning';\nconst safe = v => String(v ?? '').replace(/(token|secret|password)=([^&\\s]+)/gi, '$1=***');\nconst workflow = safe(src.workflow ?? 'unknown workflow');\nconst entityId = safe(src.entity_id ?? src.id ?? 'no-entity');\nconst message = safe(src.message ?? 'No message');\nconst dedupeKey = `discord:${level}:${workflow}:${entityId}`.toLowerCase();\nconst color = level === 'critical' ? 15158332 : level === 'warning' ? 16776960 : 3447003;\nreturn [{ json: {\n  dedupe_key: dedupeKey,\n  discord: {\n    username: 'Nodbot Alert',\n    embeds: [{\n      title: `${level.toUpperCase()}: ${workflow}`,\n      description: message.slice(0, 900),\n      color,\n      fields: [\n        { name: 'Entity', value: entityId, inline: true },\n        { name: 'Runbook', value: safe(src.runbook ?? 'not configured'), inline: false }\n      ]\n    }]\n  }\n}}];"
      },
      "id": "685417cb-1452-4ff9-a686-9206cc0f050f",
      "name": "Build Discord embed",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        840,
        260
      ]
    },
    {
      "parameters": {
        "path": "integration-discord-n8n-alerts-webhooks",
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "id": "a8ecf017-cfec-42a8-9745-9e7934193a48",
      "name": "Send Discord webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        1120,
        260
      ]
    },
    {
      "parameters": {},
      "id": "c1a514fb-bc1e-4280-b126-a97d6360325d",
      "name": "Respond to source",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 2,
      "position": [
        1400,
        260
      ]
    }
  ],
  "connections": {
    "Webhook alert input": {
      "main": [
        [
          {
            "node": "Normalize and sanitize alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize and sanitize alert": {
      "main": [
        [
          {
            "node": "Check dedupe window",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check dedupe window": {
      "main": [
        [
          {
            "node": "Build Discord embed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Build Discord embed": {
      "main": [
        [
          {
            "node": "Send Discord webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Discord webhook": {
      "main": [
        [
          {
            "node": "Respond to source",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "staticData": null,
  "tags": [
    "nodbot",
    "integration",
    "production"
  ],
  "triggerCount": 1,
  "updatedAt": "2026-05-30T00:00:00.000Z",
  "versionId": "b42ec94c-ed85-44ce-bab7-dbc1c627fcb4",
  "meta": {
    "templateCredsSetupCompleted": false
  }
}