{
  "id": "Sw4jzyqyCRdzZZkR",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Instagram Customer Complaint to Support Ticket + SLA Automation",
  "tags": [],
  "nodes": [
    {
      "id": "eef4e527-de67-49a9-8a18-6140d80bd84b",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.cron",
      "position": [
        -1200,
        192
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d7484c3b-dd65-4022-9275-b9c26e3478ae",
      "name": "Get Instagram Posts",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -976,
        288
      ],
      "parameters": {
        "url": "https://graph.facebook.com/v12.0/YOUR_INSTAGRAM_BUSINESS_ACCOUNT_ID/media?access_token=YOUR_TOKEN_HERE",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "914d5b44-4c73-4b89-9952-242d71d74ff6",
      "name": "Get Comments",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -752,
        288
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v12.0/{{$node[\"Get Instagram Posts\"].json[\"data\"][0][\"id\"]}}/comments?access_token=YOUR_INSTAGRAM_ACCESS_TOKEN",
        "options": {},
        "authentication": "headerAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8893bd95-ed78-4971-b90d-5b98f38a16c6",
      "name": "Loop Over Comments",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -528,
        288
      ],
      "parameters": {
        "options": {},
        "batchSize": 1
      },
      "typeVersion": 1
    },
    {
      "id": "291d84aa-0fe3-4d27-9ac4-331ab8419bbc",
      "name": "Capture Original Comment",
      "type": "n8n-nodes-base.set",
      "position": [
        -304,
        288
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "original_text",
              "value": "={{ $json[\"text\"] }}"
            },
            {
              "name": "original_username",
              "value": "={{ $json[\"username\"] }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "96caa952-2e27-4fa0-a5de-e2d5b9077f2c",
      "name": "Detect Complaint (Claude AI)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -80,
        288
      ],
      "parameters": {
        "url": "https://api.anthropic.com/v1/messages",
        "options": {},
        "requestMethod": "POST",
        "jsonParameters": true,
        "bodyParametersJson": "={\"model\": \"claude-3-5-sonnet-20241022\", \"max_tokens\": 1024, \"messages\": [{\"role\": \"user\", \"content\": \"Classify this Instagram comment as a complaint (yes/no). If yes, extract issue type (e.g., product issue, service delay) and severity (low/medium/high). Output in format: is_complaint: yes/no, issue_type: X, severity: Y. Comment: {{ $json[\"original_text\"] }}\"}]}"
      },
      "typeVersion": 1
    },
    {
      "id": "968c7049-8a02-4c32-8545-47075e7caee7",
      "name": "IF Complaint",
      "type": "n8n-nodes-base.if",
      "position": [
        144,
        288
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json[\"content\"][0][\"text\"].toLowerCase().split(',')[0].split(':')[1].trim() }}",
              "value2": "yes"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "957df429-3800-4a0a-9a3e-e2db38519927",
      "name": "Check Ticket Status",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1280,
        480
      ],
      "parameters": {
        "options": {},
        "sheetId": "your-support-tickets-sheet-id!A:Z",
        "operation": "lookup",
        "lookupValue": "={{ $node[\"Create Ticket (Google Sheet)\"].json[\"ticketId\"] }}",
        "lookupColumn": "ticketId"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "12351c78-a877-4e9a-8fdb-1ac0cd832083",
      "name": "IF SLA Breach Near",
      "type": "n8n-nodes-base.if",
      "position": [
        1488,
        480
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json[\"status\"] }}",
              "value2": "Resolved",
              "operation": "notEqual"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0958f6e6-2408-4b82-b767-53f80ce0d06b",
      "name": "Escalate to Manager (Slack)",
      "type": "n8n-nodes-base.slack",
      "position": [
        1712,
        288
      ],
      "parameters": {
        "text": "=SLA Breach Alert! Ticket {{ $node[\"Check Ticket Status\"].json[\"ticketId\"] }} is nearing breach.\nIssue: {{ $node[\"Check Ticket Status\"].json[\"issueType\"] }}\nAssigned: {{ $node[\"Check Ticket Status\"].json[\"assignedTo\"] }}\nEscalating...",
        "channel": "manager-slack-channel",
        "attachments": [],
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "09c651d0-dad9-4e14-b705-09ea84d845e4",
      "name": "End (Non-Complaint Path)",
      "type": "n8n-nodes-base.set",
      "position": [
        368,
        384
      ],
      "parameters": {
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "77975382-8091-4068-b041-bedbcca463de",
      "name": "Create Ticket (Google Sheet)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        816,
        192
      ],
      "parameters": {
        "options": {},
        "sheetId": "your-support-tickets-sheet-id!A:Z",
        "operation": "append"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "53f52cab-4d79-4886-86e7-ad2b7a31df82",
      "name": "Get Team Members",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        368,
        192
      ],
      "parameters": {
        "options": {},
        "sheetId": "your-team-members-sheet-id!A:B"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "6a908f02-66f2-4a99-b5d9-e5466061c0b9",
      "name": "Assign Ticket",
      "type": "n8n-nodes-base.set",
      "position": [
        592,
        192
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "assignedTo",
              "value": "={{ $input.all()[Math.floor(Math.random() * $input.all().length)].email }}"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 1
    },
    {
      "id": "f60798bd-6ae5-4726-b92a-f71248013a2f",
      "name": "Notify Assignee (Slack)",
      "type": "n8n-nodes-base.slack",
      "position": [
        1040,
        96
      ],
      "parameters": {
        "text": "=New Complaint Ticket: {{ $node[\"Create Ticket (Google Sheet)\"].json[\"ticketId\"] }}\nIssue: {{ $node[\"Create Ticket (Google Sheet)\"].json[\"issueType\"] }}\nAssigned to: {{ $node[\"Assign Ticket\"].json[\"assignedTo\"] }}\nSLA Due: {{ $node[\"Create Ticket (Google Sheet)\"].json[\"slaDue\"] }}",
        "channel": "your-slack-channel",
        "attachments": [],
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d4d82ec0-daad-498d-9d27-a760f59bb582",
      "name": "Wait for SLA Check",
      "type": "n8n-nodes-base.wait",
      "position": [
        1040,
        480
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "0decaa7a-d955-4a89-a3f9-ca3dc0662588",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1200,
        384
      ],
      "parameters": {
        "path": "91c34f5b-2ba6-4151-8ce0-5bc776a1f429",
        "options": {}
      },
      "typeVersion": 2.1
    },
    {
      "id": "44235062-dc7a-4a1c-bbcc-594e176e0b4b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1248,
        32
      ],
      "parameters": {
        "width": 192,
        "height": 512,
        "content": "Runs every 15 minutes or via webhook (/complaint-handler)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4e87a344-14d2-48ee-a5e6-26d8622cfb37",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        32
      ],
      "parameters": {
        "width": 160,
        "height": 512,
        "content": "Fetches recent posts from Instagram Graph API\n"
      },
      "typeVersion": 1
    },
    {
      "id": "52a70bfe-9c19-418e-bb27-0efc07641ab0",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        32
      ],
      "parameters": {
        "width": 400,
        "height": 512,
        "content": "Uses AI to classify if complaint, extract issue/severity\n"
      },
      "typeVersion": 1
    },
    {
      "id": "cba70d9f-9872-4651-80f9-53dfdff6ca34",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        32
      ],
      "parameters": {
        "width": 160,
        "height": 512,
        "content": "Branches: Proceed if yes, end if no\n"
      },
      "typeVersion": 1
    },
    {
      "id": "edd42d16-01a1-46a4-9780-5ca92f864660",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -576,
        32
      ],
      "parameters": {
        "width": 160,
        "height": 512,
        "content": "Processes each comment individually to avoid rate limits\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0989217a-9bd3-4e29-9000-416d38de4ca2",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        32
      ],
      "parameters": {
        "width": 160,
        "height": 512,
        "content": "Retrieves comments for the latest post\n"
      },
      "typeVersion": 1
    },
    {
      "id": "dcc47583-4ffe-4590-9ab9-caa1cb6489bc",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        32
      ],
      "parameters": {
        "width": 160,
        "height": 512,
        "content": "Loads team roster from TeamMembers sheet or Terminates non-complaint branches\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f98484e8-dc44-4290-bf7c-763a0d23d4e9",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        32
      ],
      "parameters": {
        "width": 160,
        "height": 320,
        "content": "Sets assignee via round-robin logic\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1e5b7f22-f750-445d-a600-1f4dc6b084bd",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1008,
        -64
      ],
      "parameters": {
        "width": 160,
        "height": 320,
        "content": "Alerts assigned team member\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d0d2424b-b7ba-4616-af91-9dac59373770",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        32
      ],
      "parameters": {
        "width": 160,
        "height": 320,
        "content": "Appends new ticket with details and SLA due date\n"
      },
      "typeVersion": 1
    },
    {
      "id": "eb44c3ba-ab55-4ab2-987b-0a6da94c3ff2",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        352
      ],
      "parameters": {
        "width": 160,
        "height": 320,
        "content": "Looks up ticket status in sheet\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a819645a-e779-4993-b669-64f15293d1be",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        352
      ],
      "parameters": {
        "width": 160,
        "height": 320,
        "content": "Delays to near-SLA-breach point (e.g., 20 hours)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "455775ca-b8e8-4c92-86f0-73f361768dbd",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        144
      ],
      "parameters": {
        "width": 160,
        "height": 320,
        "content": "Notifies manager for urgent action\n"
      },
      "typeVersion": 1
    },
    {
      "id": "cc928391-ba64-43a9-b6aa-d3a8a46002ad",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1456,
        352
      ],
      "parameters": {
        "width": 160,
        "height": 320,
        "content": "Checks if unresolved; escalates if yes\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7d6c0b48-ff7c-429c-b63d-517572b2c770",
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Get Instagram Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Comments": {
      "main": [
        [
          {
            "node": "Loop Over Comments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF Complaint": {
      "main": [
        [
          {
            "node": "Get Team Members",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "End (Non-Complaint Path)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Assign Ticket": {
      "main": [
        [
          {
            "node": "Create Ticket (Google Sheet)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Team Members": {
      "main": [
        [
          {
            "node": "Assign Ticket",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get Instagram Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF SLA Breach Near": {
      "main": [
        [
          {
            "node": "Escalate to Manager (Slack)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Comments": {
      "main": [
        [
          {
            "node": "Capture Original Comment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for SLA Check": {
      "main": [
        [
          {
            "node": "Check Ticket Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Ticket Status": {
      "main": [
        [
          {
            "node": "IF SLA Breach Near",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Instagram Posts": {
      "main": [
        [
          {
            "node": "Get Comments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Capture Original Comment": {
      "main": [
        [
          {
            "node": "Detect Complaint (Claude AI)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Ticket (Google Sheet)": {
      "main": [
        [
          {
            "node": "Notify Assignee (Slack)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Wait for SLA Check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detect Complaint (Claude AI)": {
      "main": [
        [
          {
            "node": "IF Complaint",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}