AutomationFlowsData & Sheets › Resolve Knowledge Conflicts via Postgres Cron

Resolve Knowledge Conflicts via Postgres Cron

Original n8n title: Knowledge Management Conflict Resolution

Knowledge Management Conflict Resolution. Uses postgres, httpRequest. Scheduled trigger; 23 nodes.

Cron / scheduled trigger★★★★☆ complexity23 nodesPostgresHTTP Request
Data & Sheets Trigger: Cron / scheduled Nodes: 23 Complexity: ★★★★☆ Added:
Resolve Knowledge Conflicts via Postgres Cron — n8n workflow card showing Postgres, HTTP Request integration

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": "Knowledge Management Conflict Resolution",
  "nodes": [
    {
      "parameters": {
        "pollTimes": {
          "item": [
            {
              "mode": "everyFiveMinutes"
            }
          ]
        },
        "triggerOn": "everyFiveMinutes",
        "options": {}
      },
      "id": "conflict-detection-cron",
      "name": "Conflict Detection Cron",
      "type": "n8n-nodes-base.cron",
      "typeVersion": 1,
      "position": [
        200,
        400
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "resolve-knowledge-conflicts",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "conflict-resolution-webhook",
      "name": "Conflict Resolution Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        200,
        600
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "resolution-mode",
              "name": "resolutionMode",
              "value": "={{ $json.body?.mode || 'auto' }}",
              "type": "string"
            },
            {
              "id": "conflict-threshold",
              "name": "conflictThreshold",
              "value": "={{ $json.body?.threshold || 5 }}",
              "type": "number"
            },
            {
              "id": "target-platforms",
              "name": "targetPlatforms",
              "value": "={{ $json.body?.platforms || ['appflowy', 'affine', 'google_drive'] }}",
              "type": "array"
            },
            {
              "id": "resolution-timestamp",
              "name": "timestamp",
              "value": "={{ $now }}",
              "type": "string"
            },
            {
              "id": "enable-ai-resolution",
              "name": "enableAIResolution",
              "value": "={{ $json.body?.enableAIResolution || true }}",
              "type": "boolean"
            }
          ]
        },
        "options": {}
      },
      "id": "process-resolution-request",
      "name": "Process Resolution Request",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        450,
        500
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "-- Detect potential conflicts by finding documents with same content hash across different systems\nWITH potential_conflicts AS (\n  SELECT \n    content_hash,\n    array_agg(DISTINCT source_system) as systems,\n    array_agg(DISTINCT document_id) as document_ids,\n    array_agg(DISTINCT source_id) as source_ids,\n    COUNT(DISTINCT source_system) as system_count,\n    MAX(sync_timestamp) as latest_sync,\n    MIN(sync_timestamp) as earliest_sync\n  FROM knowledge_sync_log \n  WHERE status = 'synced' \n    AND sync_timestamp >= NOW() - INTERVAL '24 hours'\n  GROUP BY content_hash\n  HAVING COUNT(DISTINCT source_system) > 1\n),\ntimestamp_conflicts AS (\n  SELECT \n    l1.document_id as doc1_id,\n    l2.document_id as doc2_id,\n    l1.source_system as system1,\n    l2.source_system as system2,\n    l1.content_hash as hash1,\n    l2.content_hash as hash2,\n    l1.sync_timestamp as timestamp1,\n    l2.sync_timestamp as timestamp2,\n    ABS(EXTRACT(EPOCH FROM l1.sync_timestamp - l2.sync_timestamp)) as time_diff_seconds\n  FROM knowledge_sync_log l1\n  JOIN knowledge_sync_mapping m ON (l1.source_system = m.source_system AND l1.source_id = m.source_id)\n  JOIN knowledge_sync_log l2 ON (l2.source_system = m.target_system AND l2.source_id = m.target_id)\n  WHERE l1.content_hash != l2.content_hash\n    AND l1.sync_timestamp >= NOW() - INTERVAL '1 hour'\n    AND l2.sync_timestamp >= NOW() - INTERVAL '1 hour'\n    AND ABS(EXTRACT(EPOCH FROM l1.sync_timestamp - l2.sync_timestamp)) < 300\n)\nSELECT \n  'content_hash' as conflict_type,\n  content_hash as conflict_key,\n  systems,\n  document_ids,\n  system_count,\n  latest_sync,\n  'Multiple systems have same content hash' as description\nFROM potential_conflicts\nWHERE system_count > 1\nUNION ALL\nSELECT \n  'timestamp' as conflict_type,\n  CONCAT(doc1_id, '_', doc2_id) as conflict_key,\n  ARRAY[system1, system2] as systems,\n  ARRAY[doc1_id, doc2_id] as document_ids,\n  2 as system_count,\n  GREATEST(timestamp1, timestamp2) as latest_sync,\n  'Simultaneous updates detected' as description\nFROM timestamp_conflicts\nWHERE time_diff_seconds < 300\nORDER BY latest_sync DESC;",
        "options": {}
      },
      "id": "detect-conflicts",
      "name": "Detect Conflicts",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.5,
      "position": [
        700,
        400
      ],
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "conflicts-found",
              "name": "conflictsFound",
              "value": "={{ $json.length > 0 }}",
              "type": "boolean"
            },
            {
              "id": "conflict-count",
              "name": "conflictCount",
              "value": "={{ $json.length }}",
              "type": "number"
            },
            {
              "id": "conflicts-list",
              "name": "conflictsList",
              "value": "={{ $json }}",
              "type": "array"
            }
          ]
        },
        "options": {}
      },
      "id": "analyze-conflicts",
      "name": "Analyze Conflicts",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        950,
        400
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "conflicts-exist",
              "leftValue": "={{ $json.conflictsFound }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "check-conflicts-exist",
      "name": "Check Conflicts Exist",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1200,
        400
      ]
    },
    {
      "parameters": {
        "fieldsToSplitOut": "conflictsList",
        "options": {}
      },
      "id": "process-individual-conflicts",
      "name": "Process Individual Conflicts",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        1450,
        300
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "conflict-analysis",
              "name": "conflictAnalysis",
              "value": "={{ {\n  type: $json.conflict_type,\n  key: $json.conflict_key,\n  systems: $json.systems,\n  documentIds: $json.document_ids,\n  systemCount: $json.system_count,\n  latestSync: $json.latest_sync,\n  description: $json.description,\n  severity: $json.system_count > 2 ? 'high' : 'medium',\n  resolutionStrategy: $json.conflict_type === 'timestamp' ? 'latest_wins' : 'merge_content'\n} }}",
              "type": "object"
            }
          ]
        },
        "options": {}
      },
      "id": "classify-conflict",
      "name": "Classify Conflict",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1700,
        300
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "timestamp-conflict",
              "leftValue": "={{ $json.conflictAnalysis.type }}",
              "rightValue": "timestamp",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "check-conflict-type",
      "name": "Check Conflict Type",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1950,
        300
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "-- Get detailed content for timestamp conflicts\nSELECT \n  l.document_id,\n  l.source_system,\n  l.source_id,\n  l.content_hash,\n  l.metadata,\n  l.sync_timestamp,\n  l.status\nFROM knowledge_sync_log l\nWHERE l.document_id = ANY({{ $('Classify Conflict').item.json.conflictAnalysis.documentIds }})\nORDER BY l.sync_timestamp DESC;",
        "options": {}
      },
      "id": "get-conflict-details",
      "name": "Get Conflict Details",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.5,
      "position": [
        2200,
        200
      ],
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "latest-version",
              "name": "latestVersion",
              "value": "={{ $json[0] }}",
              "type": "object"
            },
            {
              "id": "conflicted-versions",
              "name": "conflictedVersions",
              "value": "={{ $json.slice(1) }}",
              "type": "array"
            },
            {
              "id": "resolution-decision",
              "name": "resolutionDecision",
              "value": "latest_wins",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "resolve-timestamp-conflict",
      "name": "Resolve Timestamp Conflict",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2450,
        200
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "-- Get all content versions for hash conflicts\nSELECT \n  l.document_id,\n  l.source_system,\n  l.source_id,\n  l.content_hash,\n  l.metadata,\n  l.sync_timestamp,\n  l.status\nFROM knowledge_sync_log l\nWHERE l.content_hash = '{{ $('Classify Conflict').item.json.conflictAnalysis.key }}'\nORDER BY l.sync_timestamp DESC;",
        "options": {}
      },
      "id": "get-content-hash-details",
      "name": "Get Content Hash Details",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.5,
      "position": [
        2200,
        400
      ],
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "ai-resolution-enabled",
              "leftValue": "={{ $('Process Resolution Request').item.json.enableAIResolution }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "check-ai-resolution-enabled",
      "name": "Check AI Resolution Enabled",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        2450,
        400
      ]
    },
    {
      "parameters": {
        "url": "https://n8n.{{ $vars.domain_name }}/webhook/enhanced-rag-agent",
        "options": {
          "timeout": 120000
        },
        "sendBody": true,
        "contentType": "json",
        "body": {
          "chatInput": "Analyze these conflicting content versions and suggest the best resolution strategy. Consider content quality, recency, completeness, and potential merge opportunities. Content versions: {{ JSON.stringify($json) }}",
          "sessionId": "conflict_resolution_{{ $('Process Resolution Request').item.json.timestamp }}",
          "enableAnalysis": true
        }
      },
      "id": "ai-conflict-analysis",
      "name": "AI Conflict Analysis",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2700,
        300
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "ai-resolution-strategy",
              "name": "aiResolutionStrategy",
              "value": "={{ $json.output || 'Use latest version based on timestamp' }}",
              "type": "string"
            },
            {
              "id": "recommended-action",
              "name": "recommendedAction",
              "value": "={{ $json.output?.includes('merge') ? 'merge_content' : 'use_latest' }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "process-ai-resolution",
      "name": "Process AI Resolution",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2950,
        300
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "manual-resolution-strategy",
              "name": "manualResolutionStrategy",
              "value": "use_latest_timestamp",
              "type": "string"
            },
            {
              "id": "resolution-reason",
              "name": "resolutionReason",
              "value": "Automatic resolution: using most recent version",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "apply-manual-resolution",
      "name": "Apply Manual Resolution",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2700,
        500
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "-- Mark conflicted versions as resolved and update status\nUPDATE knowledge_sync_log \nSET status = 'conflict_resolved',\n    metadata = metadata || jsonb_build_object(\n      'conflict_resolution', jsonb_build_object(\n        'resolved_at', NOW(),\n        'resolution_strategy', '{{ $json.recommendedAction || $json.manualResolutionStrategy }}',\n        'resolution_reason', '{{ $json.aiResolutionStrategy || $json.resolutionReason }}',\n        'conflict_type', '{{ $('Classify Conflict').item.json.conflictAnalysis.type }}'\n      )\n    )\nWHERE document_id = ANY({{ $('Classify Conflict').item.json.conflictAnalysis.documentIds }})\n  AND sync_timestamp < (SELECT MAX(sync_timestamp) FROM knowledge_sync_log WHERE document_id = ANY({{ $('Classify Conflict').item.json.conflictAnalysis.documentIds }}))\nRETURNING document_id, source_system, status;",
        "options": {}
      },
      "id": "update-conflict-status",
      "name": "Update Conflict Status",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.5,
      "position": [
        3200,
        400
      ],
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "insert",
        "table": {
          "__rl": true,
          "value": "conflict_resolution_log",
          "mode": "list"
        },
        "data": {
          "insert": [
            {
              "column": "conflict_id",
              "value": "={{ $('Classify Conflict').item.json.conflictAnalysis.key }}"
            },
            {
              "column": "conflict_type",
              "value": "={{ $('Classify Conflict').item.json.conflictAnalysis.type }}"
            },
            {
              "column": "systems_involved",
              "value": "={{ $('Classify Conflict').item.json.conflictAnalysis.systems }}"
            },
            {
              "column": "documents_affected",
              "value": "={{ $('Classify Conflict').item.json.conflictAnalysis.documentIds }}"
            },
            {
              "column": "resolution_strategy",
              "value": "={{ $json.recommendedAction || $json.manualResolutionStrategy }}"
            },
            {
              "column": "resolution_details",
              "value": "={{ { aiAnalysis: $json.aiResolutionStrategy, manualReason: $json.resolutionReason, severity: $('Classify Conflict').item.json.conflictAnalysis.severity } }}"
            },
            {
              "column": "resolved_at",
              "value": "={{ $now }}"
            },
            {
              "column": "resolution_mode",
              "value": "={{ $('Process Resolution Request').item.json.resolutionMode }}"
            }
          ]
        },
        "options": {}
      },
      "id": "log-conflict-resolution",
      "name": "Log Conflict Resolution",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.5,
      "position": [
        3450,
        400
      ],
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "conflictAnalysis"
            }
          ]
        },
        "options": {}
      },
      "id": "aggregate-resolutions",
      "name": "Aggregate Resolutions",
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        3700,
        400
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "resolution-summary",
              "name": "resolutionSummary",
              "value": "={{ {\n  timestamp: $('Process Resolution Request').item.json.timestamp,\n  mode: $('Process Resolution Request').item.json.resolutionMode,\n  conflictsDetected: $('Analyze Conflicts').item.json.conflictCount,\n  conflictsResolved: $json.conflictAnalysis?.length || 0,\n  aiResolutionEnabled: $('Process Resolution Request').item.json.enableAIResolution,\n  platforms: $('Process Resolution Request').item.json.targetPlatforms,\n  status: 'completed'\n} }}",
              "type": "object"
            }
          ]
        },
        "options": {}
      },
      "id": "compile-resolution-report",
      "name": "Compile Resolution Report",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        3950,
        400
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "no-conflicts-summary",
              "name": "resolutionSummary",
              "value": "={{ {\n  timestamp: $('Process Resolution Request').item.json.timestamp,\n  mode: $('Process Resolution Request').item.json.resolutionMode,\n  conflictsDetected: 0,\n  conflictsResolved: 0,\n  platforms: $('Process Resolution Request').item.json.targetPlatforms,\n  status: 'no_conflicts_found'\n} }}",
              "type": "object"
            }
          ]
        },
        "options": {}
      },
      "id": "prepare-no-conflicts-response",
      "name": "Prepare No Conflicts Response",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1200,
        600
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "respond-to-conflict-resolution",
      "name": "Respond to Conflict Resolution",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        4200,
        500
      ]
    },
    {
      "parameters": {
        "content": "## Knowledge Management Conflict Resolution\n\n**Purpose:** Automatically detect and resolve conflicts between synchronized content across different knowledge management platforms.\n\n**Conflict Types Detected:**\n\n**1. Content Hash Conflicts:**\n- Multiple systems have identical content hashes\n- Indicates potential duplicate content\n- Resolution: Identify canonical source and update mappings\n\n**2. Timestamp Conflicts:**\n- Simultaneous updates within 5-minute window\n- Different content hashes for mapped documents\n- Resolution: Latest timestamp wins or AI-assisted merge\n\n**Resolution Strategies:**\n\n**Automatic Resolution:**\n- `latest_wins`: Use most recent timestamp\n- `merge_content`: AI-assisted content merging\n- `use_canonical`: Prefer designated canonical source\n\n**AI-Assisted Resolution:**\n- Content quality analysis\n- Automatic merge suggestions\n- Conflict complexity assessment\n- Resolution strategy recommendations\n\n**Detection Process:**\n1. **Scheduled Detection**: Every 5 minutes via cron\n2. **Manual Trigger**: Via webhook for immediate resolution\n3. **Cross-Reference**: Check sync mappings for related conflicts\n4. **Analysis**: Classify conflict type and severity\n\n**Resolution Process:**\n1. **Conflict Classification**: Determine type and severity\n2. **Content Analysis**: Gather all versions and metadata\n3. **AI Analysis** (if enabled): Get intelligent resolution recommendations\n4. **Apply Resolution**: Update content and sync status\n5. **Logging**: Record resolution details and strategy used\n6. **Notification**: Alert systems of resolution completion\n\n**API Parameters:**\n- `mode`: Resolution mode (auto, manual, ai_assisted)\n- `threshold`: Minimum conflicts to process\n- `platforms`: Target platforms to check\n- `enableAIResolution`: Use AI for complex conflicts\n\n**Monitoring:**\n- Conflict detection frequency and patterns\n- Resolution success rates by strategy\n- Platform-specific conflict trends\n- AI resolution effectiveness metrics",
        "height": 800,
        "width": 900,
        "color": 7
      },
      "id": "conflict-resolution-documentation",
      "name": "Conflict Resolution Documentation",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        100,
        100
      ]
    }
  ],
  "connections": {
    "Conflict Detection Cron": {
      "main": [
        [
          {
            "node": "Process Resolution Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Conflict Resolution Webhook": {
      "main": [
        [
          {
            "node": "Process Resolution Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Resolution Request": {
      "main": [
        [
          {
            "node": "Detect Conflicts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detect Conflicts": {
      "main": [
        [
          {
            "node": "Analyze Conflicts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analyze Conflicts": {
      "main": [
        [
          {
            "node": "Check Conflicts Exist",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Conflicts Exist": {
      "main": [
        [
          {
            "node": "Process Individual Conflicts",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare No Conflicts Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Individual Conflicts": {
      "main": [
        [
          {
            "node": "Classify Conflict",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Classify Conflict": {
      "main": [
        [
          {
            "node": "Check Conflict Type",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Conflict Type": {
      "main": [
        [
          {
            "node": "Get Conflict Details",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Content Hash Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Conflict Details": {
      "main": [
        [
          {
            "node": "Resolve Timestamp Conflict",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Resolve Timestamp Conflict": {
      "main": [
        [
          {
            "node": "Update Conflict Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Content Hash Details": {
      "main": [
        [
          {
            "node": "Check AI Resolution Enabled",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check AI Resolution Enabled": {
      "main": [
        [
          {
            "node": "AI Conflict Analysis",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Apply Manual Resolution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Conflict Analysis": {
      "main": [
        [
          {
            "node": "Process AI Resolution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process AI Resolution": {
      "main": [
        [
          {
            "node": "Update Conflict Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Apply Manual Resolution": {
      "main": [
        [
          {
            "node": "Update Conflict Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Conflict Status": {
      "main": [
        [
          {
            "node": "Log Conflict Resolution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Conflict Resolution": {
      "main": [
        [
          {
            "node": "Aggregate Resolutions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Resolutions": {
      "main": [
        [
          {
            "node": "Compile Resolution Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compile Resolution Report": {
      "main": [
        [
          {
            "node": "Respond to Conflict Resolution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare No Conflicts Response": {
      "main": [
        [
          {
            "node": "Respond to Conflict Resolution",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "conflict-resolution-v1",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "ConflictResolution",
  "tags": [
    "conflict-resolution",
    "knowledge-management",
    "automation",
    "ai-assisted"
  ]
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

Knowledge Management Conflict Resolution. Uses postgres, httpRequest. Scheduled trigger; 23 nodes.

Source: https://github.com/161sam/n8n-installer/blob/main/modularium/ai-workspace/Conflict-Resolution.json — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

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

Data & Sheets

Disparador 1.8. Uses itemLists, postgres, emailSend, httpRequest. Scheduled trigger; 85 nodes.

Item Lists, Postgres, Email Send +1
Data & Sheets

공유회_알림톡_크론. Uses postgres, httpRequest, n8n-nodes-solapi. Scheduled trigger; 39 nodes.

Postgres, HTTP Request, N8N Nodes Solapi
Data & Sheets

QuepasaAutomatic. Uses postgres, postgresTrigger, httpRequest. Scheduled trigger; 39 nodes.

Postgres, Postgres Trigger, HTTP Request
Data & Sheets

QuepasaAutomatic. Uses postgres, postgresTrigger, httpRequest. Scheduled trigger; 39 nodes.

Postgres, Postgres Trigger, HTTP Request
Data & Sheets

QuepasaAutomatic. Uses postgres, postgresTrigger, httpRequest. Scheduled trigger; 39 nodes.

Postgres, Postgres Trigger, HTTP Request