AutomationFlowsSlack & Telegram › Ban Claim Handler

Ban Claim Handler

Ban Claim Handler. Uses postgres, httpRequest, whatsApp, telegram. Webhook trigger; 20 nodes.

Webhook trigger★★★★☆ complexity20 nodesPostgresHTTP RequestWhatsAppTelegram
Slack & Telegram Trigger: Webhook Nodes: 20 Complexity: ★★★★☆ Added:

This workflow follows the HTTP Request → Postgres recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Ban Claim Handler",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "whatsapp-incoming",
        "responseMode": "lastNode",
        "options": {}
      },
      "id": "wa-trigger",
      "name": "WhatsApp Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "functionCode": "// Verify WhatsApp signature\nconst crypto = require('crypto');\nconst secret = $env.WHATSAPP_APP_SECRET;\nconst signature = $headers['x-hub-signature-256'];\nconst body = $input.first().json;\n\n// Extract signature from header\nif (!signature) return [{ json: { error: 'no signature', valid: false } }];\n\nconst computed = crypto.createHmac('sha256', secret).update(JSON.stringify(body)).digest('hex');\nconst valid = signature === `sha256=${computed}`;\n\nif (!valid) return [{ json: { error: 'invalid signature', valid: false } }];\n\nreturn [{ json: body }];"
      },
      "id": "wa-verify",
      "name": "Verify WhatsApp Signature",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        200,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": false
          },
          "conditions": [
            {
              "id": "ban-keyword",
              "leftValue": "={{$json.body.message.text}}",
              "rightValue": "ban",
              "operation": "contains"
            },
            {
              "id": "blocked-keyword",
              "leftValue": "={{$json.body.message.text}}",
              "rightValue": "blocked",
              "operation": "contains"
            }
          ],
          "logic": "OR"
        }
      },
      "id": "wa-ban-detect",
      "name": "Detect: Ban Claim",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 1,
      "position": [
        400,
        0
      ]
    },
    {
      "parameters": {
        "operation": "select",
        "table": "customers",
        "columns": "customer_id, name, phone, active_order_id",
        "conditions": "phone = '{{$json.body.from}}'"
      },
      "id": "wa-db-lookup",
      "name": "Lookup Customer in PostgreSQL",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 1,
      "position": [
        600,
        0
      ]
    },
    {
      "parameters": {
        "operation": "select",
        "table": "orders",
        "columns": "order_id, status, ip_address, username, provider",
        "conditions": "customer_id = '{{$json.customer_id}}' AND status = 'active'"
      },
      "id": "wa-order-lookup",
      "name": "Lookup Active Order",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 1,
      "position": [
        800,
        0
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "={{$json.data?.provider === 'proxy-seller' ? 'https://api.proxy-seller.com/v1.0/status' : 'https://api.dataimpulse.com/reseller/status'}}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "={{$env.PROXY_SELLER_API_KEY}}"
            }
          ]
        },
        "options": {
          "timeout": 15000
        }
      },
      "id": "wa-provider-status",
      "name": "Check Provider Status",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [
        1000,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true
          },
          "conditions": [
            {
              "id": "provider-ok",
              "leftValue": "={{$json.data?.status}}",
              "rightValue": "active",
              "operation": "equals"
            }
          ]
        }
      },
      "id": "wa-provider-ok",
      "name": "Provider Status OK?",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 1,
      "position": [
        1200,
        0
      ]
    },
    {
      "parameters": {
        "operation": "select",
        "table": "support_tickets",
        "columns": "COUNT(*) as count",
        "conditions": "ip_block = '{{$json.ip_address}}' AND created_at > NOW() - INTERVAL '1 hour'"
      },
      "id": "wa-ban-check",
      "name": "Check Mass Ban Reports",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 1,
      "position": [
        1400,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {},
          "conditions": [
            {
              "id": "mass-ban-threshold",
              "leftValue": "={{$json.count}}",
              "rightValue": "3",
              "operation": "gte"
            }
          ]
        }
      },
      "id": "wa-mass-ban",
      "name": "Mass Ban Detected?",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 1,
      "position": [
        1600,
        0
      ]
    },
    {
      "parameters": {
        "functionCode": "// S15: Rotate credentials - atomic transaction\nconst customerId = $input.first().json.customer_id;\nconst oldUsername = $input.first().json.username;\n\n// Generate new credentials\nconst newUsername = `bun_${customerId}_v2`;\nconst newPassword = Math.random().toString(36).slice(-16) + '!A1';\n\n// Store rotation request\nreturn [{\n  json: {\n    customer_id: customerId,\n    old_username: oldUsername,\n    new_username: newUsername,\n    new_password: newPassword,\n    action: 'rotate_credentials'\n  }\n}];"
      },
      "id": "wa-prep-rotate",
      "name": "Prepare Credential Rotation",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        1800,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.proxy-seller.com/v1.0/credentials/revoke",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "={{$env.PROXY_SELLER_API_KEY}}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "username",
              "value": "={{$json.old_username}}"
            }
          ]
        },
        "options": {
          "timeout": 15000
        }
      },
      "id": "wa-revoke-old",
      "name": "Revoke Old Credentials",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [
        2000,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.proxy-seller.com/v1.0/credentials/create",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-API-KEY",
              "value": "={{$env.PROXY_SELLER_API_KEY}}"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "username",
              "value": "={{$json.new_username}}"
            },
            {
              "name": "password",
              "value": "={{$json.new_password}}"
            }
          ]
        },
        "options": {
          "timeout": 15000
        }
      },
      "id": "wa-create-new",
      "name": "Create New Credentials",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 3,
      "position": [
        2200,
        0
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "table": "styxproxy_credentials",
        "values": "username = '{{$json.new_username}}', password = '{{$json.new_password}}', status = 'active'"
      },
      "id": "wa-db-update",
      "name": "Update Credentials in PostgreSQL",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 1,
      "position": [
        2400,
        0
      ]
    },
    {
      "parameters": {
        "operation": "insert",
        "table": "support_tickets",
        "values": "customer_id = '{{$json.customer_id}}', type = 'ban_claim', ip_address = '{{$json.ip_address}}', status = 'resolved'"
      },
      "id": "wa-log-ticket",
      "name": "Log Support Ticket",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 1,
      "position": [
        2600,
        0
      ]
    },
    {
      "parameters": {
        "message": "\ud83d\udd04 Credentials Rotated\n\nYour IP stays the same but you've got fresh login details:\n\n\ud83d\udc64 New Username: {{$json.new_username}}\n\ud83d\udd11 New Password: {{$json.new_password}}\n\nYour old credentials have been revoked.\nUse these from now on.\n\nNeed help? Reply how to use.",
        "extraOptions": {}
      },
      "id": "wa-rotate-success",
      "name": "Notify: Rotation Success",
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1,
      "position": [
        2800,
        0
      ]
    },
    {
      "parameters": {
        "message": "\ud83d\udea8 MASS BAN ALERT \u2014 /24 RANGE\n\nIP Range: {{$json.ip_block}}\nAffected customers: {{$json.count}}\n\nActions needed:\n1. Check if more customers affected\n2. Contact provider for credit/replacement\n3. Plan mass credential rotation",
        "extraOptions": {}
      },
      "id": "wa-admin-mass",
      "name": "Alert Admin: Mass Ban",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1,
      "position": [
        3000,
        0
      ]
    },
    {
      "parameters": {
        "message": "\u26a0\ufe0f System Notice\n\nWe've detected an issue affecting your proxy IP.\nWe're working on getting you a fresh IP now.\n\nWill update within 30 minutes.\nSorry for the inconvenience \ud83d\ude4f",
        "extraOptions": {}
      },
      "id": "wa-wait-customer",
      "name": "Notify: Wait for Resolution",
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1,
      "position": [
        3200,
        0
      ]
    },
    {
      "parameters": {
        "message": "\ud83d\udea8 BAN CLAIM ESCALATION\n\nCustomer: {{$json.name}} ({{$json.phone}})\nOrder: {{$json.order_id}}\nIP: {{$json.ip_address}}\nProvider Status: {{$json.data?.status}}\n\nAction: Manual intervention needed",
        "extraOptions": {}
      },
      "id": "wa-admin-escalate",
      "name": "Escalate to Admin",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1,
      "position": [
        3400,
        0
      ]
    },
    {
      "parameters": {
        "message": "I can see your IP isn't responding right now.\nThis usually means the provider is having a temporary issue.\n\nLet me check with our provider...",
        "extraOptions": {}
      },
      "id": "wa-troubleshoot",
      "name": "Notify: Troubleshooting",
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1,
      "position": [
        3600,
        0
      ]
    },
    {
      "parameters": {
        "message": "Our provider confirmed the IP has an issue.\nI'm rotating you to a fresh IP now.\n\n\ud83d\udd04 Your new credentials are ready.\n\nUse these new details:\n[IP / Port / User / Pass]\n\nIf this keeps happening, reply help.",
        "extraOptions": {}
      },
      "id": "wa-auto-rotate",
      "name": "Notify: Auto Rotation",
      "type": "n8n-nodes-base.whatsApp",
      "typeVersion": 1,
      "position": [
        3800,
        0
      ]
    }
  ],
  "connections": {
    "WhatsApp Webhook": {
      "main": [
        [
          {
            "node": "Verify WhatsApp Signature",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify WhatsApp Signature": {
      "main": [
        [
          {
            "node": "Detect: Ban Claim",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detect: Ban Claim": {
      "main": [
        [
          {
            "node": "Lookup Customer in PostgreSQL",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Lookup Customer in PostgreSQL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lookup Customer in PostgreSQL": {
      "main": [
        [
          {
            "node": "Lookup Active Order",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lookup Active Order": {
      "main": [
        [
          {
            "node": "Check Provider Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Provider Status": {
      "main": [
        [
          {
            "node": "Provider Status OK?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Provider Status OK?": {
      "main": [
        [
          {
            "node": "Check Mass Ban Reports",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Notify: Troubleshooting",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Mass Ban Reports": {
      "main": [
        [
          {
            "node": "Mass Ban Detected?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mass Ban Detected?": {
      "main": [
        [
          {
            "node": "Alert Admin: Mass Ban",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Credential Rotation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Credential Rotation": {
      "main": [
        [
          {
            "node": "Revoke Old Credentials",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Revoke Old Credentials": {
      "main": [
        [
          {
            "node": "Create New Credentials",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create New Credentials": {
      "main": [
        [
          {
            "node": "Update Credentials in PostgreSQL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Credentials in PostgreSQL": {
      "main": [
        [
          {
            "node": "Log Support Ticket",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Support Ticket": {
      "main": [
        [
          {
            "node": "Notify: Rotation Success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Alert Admin: Mass Ban": {
      "main": [
        [
          {
            "node": "Notify: Wait for Resolution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify: Troubleshooting": {
      "main": [
        [
          {
            "node": "Check Provider Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Notify: Auto Rotation": {
      "main": [
        [
          {
            "node": "Log Support Ticket",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "timezone": "Africa/Lagos"
  },
  "staticData": null,
  "tags": [
    "whatsapp",
    "ban-claim",
    "support"
  ]
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Ban Claim Handler. Uses postgres, httpRequest, whatsApp, telegram. Webhook trigger; 20 nodes.

Source: https://github.com/sonnyagent30-beep/bunche/blob/e991131928c348097e3fb411d5caa3b0466900f8/.n8n/workflows/ban-claim.json — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

Ban Claim Handler. Uses postgres, httpRequest, whatsApp, telegram. Webhook trigger; 20 nodes.

Postgres, HTTP Request, WhatsApp +1
Slack & Telegram

Refund Handler. Uses postgres, minimax, httpRequest, whatsApp. Webhook trigger; 18 nodes.

Postgres, Minimax, HTTP Request +2
Slack & Telegram

Settings. Uses httpRequest, postgres, telegram. Webhook trigger; 38 nodes.

HTTP Request, Postgres, Telegram
Slack & Telegram

Payment Confirmation. Uses postgres, httpRequest, whatsApp. Webhook trigger; 14 nodes.

Postgres, HTTP Request, WhatsApp
Slack & Telegram

Flujowhatsapp. Uses @aldinokemal2104/n8n-nodes-gowa, postgres, httpRequest. Webhook trigger; 65 nodes.

@Aldinokemal2104/N8N Nodes Gowa, Postgres, HTTP Request