{
  "id": "FQwjpTHiuAm7BIwr",
  "name": "Facebook Reactions to Airtable and Slack Wall of Love",
  "tags": [],
  "nodes": [
    {
      "id": "3fdabe60-ef59-4a61-921c-bdc4e6b34b42",
      "name": "Cron \u2013 Check Facebook Reactions",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1392,
        256
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a598cb26-e121-4f3f-9496-6231ec21af4f",
      "name": "Set Facebook Page ID",
      "type": "n8n-nodes-base.set",
      "position": [
        -1184,
        256
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e91f23c7-fe2b-471b-bae6-8be6ab9c8e3c",
              "name": "page_id",
              "type": "string",
              "value": ""
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "875e5505-7f5c-46a8-95d0-81e1eac2ce29",
      "name": "Loop Through Posts",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -480,
        256
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "5ad90396-0867-422b-addf-d39b413024a5",
      "name": "Extract Posts List1",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -672,
        256
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "data"
      },
      "typeVersion": 1
    },
    {
      "id": "e323783a-5ddc-479c-a886-c5bbd61300a6",
      "name": "Fetch Facebook Page Posts",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -848,
        256
      ],
      "parameters": {
        "url": "=https://graph.facebook.com/v19.0/{{ $json.page_id }}/posts ",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "access_token",
              "value": ""
            },
            {
              "name": "fields",
              "value": "id,message,created_time,permalink_url"
            },
            {
              "name": "limit",
              "value": "5"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "684b70b4-e5f0-4a2d-a57c-b2aa6d034fb9",
      "name": "Fetch Post Reactions",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -144,
        -112
      ],
      "parameters": {
        "url": "=GET /v19.0/{{ $json.id }}/reactions",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "fields",
              "value": "id,name,type"
            },
            {
              "name": "limit",
              "value": "50"
            },
            {
              "name": "access_token",
              "value": ""
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "48555407-946c-416f-ac45-5da03f8481c3",
      "name": "Extract Reactions List",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        32,
        -112
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "data"
      },
      "typeVersion": 1
    },
    {
      "id": "0b719ac6-e420-49a6-a0a4-8f6d63de6e76",
      "name": "Loop Through Reactions",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        240,
        -112
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "5747668b-a061-4ae3-9b25-db981ba6ae37",
      "name": "Is Positive Reaction?",
      "type": "n8n-nodes-base.if",
      "position": [
        608,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "b09e2113-52a7-4b56-9df5-7c60bf8eda83",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ ['LIKE','LOVE','WOW','HAHA','CARE'].includes($json.type) }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "b4e646ee-9f35-4288-877b-f6a2d6057caa",
      "name": "Save Reaction to Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1088,
        352
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appipUxLpxPEKRXrJ",
          "cachedResultUrl": "https://airtable.com/appipUxLpxPEKRXrJ",
          "cachedResultName": "Fake Review Detector"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblpRg8HaWG2uGyU0",
          "cachedResultUrl": "https://airtable.com/appipUxLpxPEKRXrJ/tblpRg8HaWG2uGyU0",
          "cachedResultName": "FacebookReactionData"
        },
        "columns": {
          "value": {
            "Id": "={{ $json.id }}",
            "type": "={{ $json.type }}",
            "username": "={{ $json.name }}"
          },
          "schema": [
            {
              "id": "Id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "username",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "username",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "type",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "8f86e1f8-0416-4d6a-8a07-25021a271a5e",
      "name": "Post to Slack \u2013 Wall of Love",
      "type": "n8n-nodes-base.slack",
      "position": [
        1280,
        352
      ],
      "parameters": {
        "text": "=\ud83d\udd25 New Positive Reaction!\n\n\ud83d\udc64 {{ $json.fields.username }}\n{{ \n  $json.fields.type === 'LOVE' ? '\u2764\ufe0f LOVE' :\n  $json.fields.type === 'WOW'  ? '\ud83d\ude2e WOW'  :\n  $json.fields.type === 'LIKE' ? '\ud83d\udc4d LIKE' :\n  $json.fields.type === 'HAHA' ? '\ud83d\ude02 HAHA' :\n  '\ud83d\udc99 CARE'\n}}\n\nKeep up the great work, team! \ud83d\ude80",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09S57E2JQ2",
          "cachedResultName": "n8n"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "a6569519-7003-450a-8e49-29ed8611ee3c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1472,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 464,
        "height": 432,
        "content": "## Schedule & Setup\n**This section defines when the workflow runs and which Facebook Page it should monitor. The scheduler triggers the automation at regular intervals and the Page ID is set once so it can be reused across the workflow.**"
      },
      "typeVersion": 1
    },
    {
      "id": "35489e3e-18b2-4d73-b03f-7e88d9508071",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -928,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 432,
        "content": "## Fetch Facebook Posts\n**This section retrieves the latest posts from the Facebook Page and processes them one by one. Each post is prepared individually so reactions can be checked accurately.**"
      },
      "typeVersion": 1
    },
    {
      "id": "9d89725b-845c-45d8-9709-94e94a0bc43c",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -272
      ],
      "parameters": {
        "color": 7,
        "width": 656,
        "height": 368,
        "content": "## Fetch & Process Reactions \n**This section collects all reactions for each post and breaks them down into individual reactions. Processing reactions one by one allows precise filtering and storage.**"
      },
      "typeVersion": 1
    },
    {
      "id": "762fd9fc-0d9d-4ff4-902b-7ef3de17e218",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        16
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 448,
        "content": "## Filter Positive Reactions\n**This section filters out only positive reactions such as Like, Love, Wow and Haha. Negative or neutral reactions are ignored so the workflow focuses purely on motivation and appreciation.**"
      },
      "typeVersion": 1
    },
    {
      "id": "b1580c7e-e31c-4f90-a349-1d057f1988ac",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        160
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 432,
        "content": "## Store & Notify Team\n**This final section stores positive reactions for tracking and notifies the team on Slack. Each reaction appears as a small morale boost, helping create a visible \u201cWall of Love\u201d.**"
      },
      "typeVersion": 1
    },
    {
      "id": "2cba0b51-1894-4283-a959-319cd01885c8",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1920,
        -432
      ],
      "parameters": {
        "width": 400,
        "height": 832,
        "content": "## How This Workflow Works\n\nThis workflow automatically monitors positive reactions on Facebook posts and shares them with the team to boost morale. It runs on a scheduled basis, checks the selected Facebook Page for new posts and processes each post to capture reactions.\n\nOnly positive reactions such as Like, Love, Wow and Haha are considered, while negative reactions are ignored. Each positive reaction is saved in Airtable for tracking and then shared in a Slack \u201cWall of Love\u201d channel, helping teams stay connected to real-time positive customer feedback without any manual effort.\n\n## Setup Steps\n\n**1. Configure the scheduler to define how often the workflow should check for new Facebook reactions.**\n\n**2. Set the Facebook Page ID so the workflow knows which page to monitor.**\n\n**3.  Connect the Facebook API (or mock data during testing) to fetch posts and reactions.**\n\n**4. Add filtering logic to allow only positive reactions to pass through.**\n\n**5. Connect Airtable and map the fields to store reaction details properly.**\n\n**6. Configure the Slack node with the target channel and message format.**\n\n**7.  Test the workflow using mock data to confirm messages appear correctly in Slack.**\n\n**8. Enable the workflow to start automatic monitoring.**"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d4362023-c14f-47bb-8236-8257e0ac4a77",
  "connections": {
    "Loop Through Posts": {
      "main": [
        [],
        [
          {
            "node": "Fetch Post Reactions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Posts List1": {
      "main": [
        [
          {
            "node": "Loop Through Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Post Reactions": {
      "main": [
        [
          {
            "node": "Extract Reactions List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Facebook Page ID": {
      "main": [
        [
          {
            "node": "Fetch Facebook Page Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Positive Reaction?": {
      "main": [
        [
          {
            "node": "Save Reaction to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Reactions List": {
      "main": [
        [
          {
            "node": "Loop Through Reactions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Through Reactions": {
      "main": [
        [
          {
            "node": "Loop Through Posts",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Is Positive Reaction?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Facebook Page Posts": {
      "main": [
        [
          {
            "node": "Extract Posts List1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Reaction to Airtable": {
      "main": [
        [
          {
            "node": "Post to Slack \u2013 Wall of Love",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post to Slack \u2013 Wall of Love": {
      "main": [
        [
          {
            "node": "Loop Through Reactions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cron \u2013 Check Facebook Reactions": {
      "main": [
        [
          {
            "node": "Set Facebook Page ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}