Blotato

工作流概述

这是一个包含30个节点的复杂工作流,主要用于自动化处理各种任务。

工作流源代码

下载
{
  "id": "8Sbrzc7Au3ZGf62p",
  "meta": {
    "instanceId": "bcc0fe85b176c2837affb21bb7d7397fad2549880e73dc1f7a42e76ae94fd996",
    "templateCredsSetupCompleted": true
  },
  "name": "Publish Videos & Images - Blotato",
  "tags": [
    {
      "id": "3ys8SQgNTiRr899i",
      "name": "social media",
      "createdAt": "2025-03-17T08:37:35.227Z",
      "updatedAt": "2025-04-07T06:13:46.923Z"
    },
    {
      "id": "zyM31CVcOgUrUm2P",
      "name": "blotato",
      "createdAt": "2025-04-25T13:38:49.620Z",
      "updatedAt": "2025-04-25T13:38:49.620Z"
    },
    {
      "id": "2wv2YbZIQoYNx98Y",
      "name": "schedule",
      "createdAt": "2025-04-25T13:38:53.789Z",
      "updatedAt": "2025-04-25T13:38:53.789Z"
    },
    {
      "id": "PqlvV87F8bOW0yAK",
      "name": "publish",
      "createdAt": "2025-04-25T13:38:58.944Z",
      "updatedAt": "2025-04-25T13:38:58.944Z"
    }
  ],
  "nodes": [
    {
      "id": "53b36edb-e273-4e68-8ae9-7d3de3f7533f",
      "name": "[Instagram] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        80
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"instagram\"
    },
    \"content\": {
      \"text\": {{ $('Prepare for Publish').item.json.final_text_short.toJsonString() }},
      \"platform\": \"instagram\",
      \"mediaUrls\": [\"{{ $json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.instagram_id }}\"
  }
}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "6fef0d35-9679-40f6-9224-cfb7c442056b",
      "name": "[Facebook] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        480
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"facebook\",
      \"pageId\": \"{{ $('Prepare for Publish').item.json.facebook_page_id }}\"
    },
    \"content\": {
      \"text\": {{ $('Prepare for Publish').item.json.final_text_long.toJsonString() }},
      \"platform\": \"facebook\",
      \"mediaUrls\": [\"{{ $json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.facebook_id }}\"
  }
}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "3f744ee2-988b-45a6-9d88-a718780421cf",
      "name": "[Linkedin] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        880
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"linkedin\"
    },
    \"content\": {
      \"text\": {{ $('Prepare for Publish').item.json.final_text_long.toJsonString() }},
      \"platform\": \"linkedin\",
      \"mediaUrls\": [\"{{ $json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.linkedin_id }}\"
  }
}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "7f0ae540-090a-4b13-a094-2ac74e1a14b3",
      "name": "[Tiktok] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        1280
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"tiktok\",
      \"isYourBrand\": false,
      \"disabledDuet\": false,
      \"privacyLevel\": \"PUBLIC_TO_EVERYONE\",
      \"isAiGenerated\": true,
      \"disabledStitch\": false,
      \"disabledComments\": false,
      \"isBrandedContent\": false
    },
    \"content\": {
      \"text\": \"{{ $('Prepare for Publish').item.json.final_text_short }}\",
      \"platform\": \"tiktok\",
      \"mediaUrls\": [\"{{ $json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.tiktok_id }}\"
  }
}
",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "2593a621-0d0b-42b3-97ab-bf85785fb33c",
      "name": "[Pinterest] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        1680
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"pinterest\",
      \"boardId\": \"{{ $('Prepare for Publish').item.json.pinterested_board_id }}\",
      \"link\": \"https://www.AIwithApex.com/\"
    },
    \"content\": {
      \"text\": {{ $('Prepare for Publish').item.json.final_text_short.toJsonString() }},
      \"platform\": \"pinterest\",
      \"mediaUrls\": [\"{{ $('Upload Image to Blotato').item.json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.pinterest_id }}\"
  }
}
",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b47da27b-b81f-4736-9c34-cd224d78f29d",
      "name": "[Youtube] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        280
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"youtube\",
      \"title\": \"{{ $('Ensure Valid YouTube Title').item.json.message.content.youtube_title }}\",
      \"privacyStatus\": \"public\",
      \"shouldNotifySubscribers\": true
    },
    \"content\": {
      \"text\": {{ $('Prepare for Publish').item.json.final_text_long.toJsonString() }},
      \"platform\": \"youtube\",
      \"mediaUrls\": [\"{{ $json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.youtube_id }}\"
  }
}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "19f17323-45f5-4865-b754-e2d5f8fc6073",
      "name": "[Threads] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        680
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"threads\"
    },
    \"content\": {
      \"text\": {{ $('Prepare for Publish').item.json.final_text_short.toJsonString() }},
      \"platform\": \"threads\",
      \"mediaUrls\": [\"{{ $json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.threads_id }}\"
  }
}
",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "adaa3ac1-fa2a-422e-8b70-8c4cc74782ed",
      "name": "[Twitter] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        1080
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"twitter\"
    },
    \"content\": {
      \"text\": {{ $('Prepare for Publish').item.json.final_text_short.toJsonString() }},
      \"platform\": \"twitter\",
      \"mediaUrls\": [\"{{ $json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.twitter_id }}\"
  }
}
",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "af2d0a29-73d1-4ee0-84c9-f337a628b3ea",
      "name": "[Bluesky] Publish via Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        96,
        1480
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/posts",
        "method": "POST",
        "options": {},
        "jsonBody": "={
  \"post\": {
    \"target\": {
      \"targetType\": \"bluesky\"
    },
    \"content\": {
      \"text\": {{ $('Prepare for Publish').item.json.final_text_short.toJsonString() }},
      \"platform\": \"bluesky\",
      \"mediaUrls\": [\"{{ $('Upload Image to Blotato').item.json.url }}\"]
    },
    \"accountId\": \"{{ $('Prepare for Publish').item.json.bluesky_id }}\"
  }
}
",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "OEAfX6pMtcbyFBAp",
          "name": "Blotato"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "08253c79-44f6-471a-b7c9-b84046f16888",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        -40
      ],
      "parameters": {
        "color": 2,
        "width": 260,
        "height": 1880,
        "content": "# Publish to Social Media"
      },
      "typeVersion": 1
    },
    {
      "id": "dae9e738-c391-47f6-bdf7-87055a5a77f0",
      "name": "Prepare for Publish",
      "type": "n8n-nodes-base.set",
      "position": [
        -564,
        880
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={
  \"instagram_id\": \"2244\",
  \"youtube_id\": \"1300\",
  \"tiktok_id\": \"2761\",
  \"facebook_id\": \"2152\",
  \"facebook_page_id\": \"127923797405586\",
  \"threads_id\": \"670\",
  \"twitter_id\": \"1576\",
  \"linkedin_id\": \"1730\",
  \"pinterest_id\": \"447\",
  \"pinterested_board_id\": \"1097611809123639891\",
  \"bluesky_id\": \"1311\",
  \"final_text_long\": {{ $('Airtable').item.json.Script.toJsonString() }},
  \"final_text_short\": {{ $('Airtable').item.json['Text for X'].toJsonString() }}
}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "aaa21d7f-e175-4516-8bde-e0b87e6e183d",
      "name": "Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -1160,
        880
      ],
      "parameters": {
        "id": "={{ $json.airtableID }}",
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appt2yDl6xXXyqboD",
          "cachedResultUrl": "https://airtable.com/appt2yDl6xXXyqboD",
          "cachedResultName": "Social Media System"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblM3kDu1qB2FdTOF",
          "cachedResultUrl": "https://airtable.com/appt2yDl6xXXyqboD/tblM3kDu1qB2FdTOF",
          "cachedResultName": "Media Creation"
        },
        "options": {}
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "YzrajURFsZkojT3x",
          "name": "Delete Me Later Please!"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e05d1ede-7d43-4c55-a353-6bc2bd0216d4",
      "name": "Upload Video to Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -124,
        880
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{ $('Airtable').item.json['Video URL'] }}"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "gNaQW1qT8liDV4ls",
          "name": "Delete me toooooo!"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "92fd39a9-74c1-4cbb-abb3-511f8230cee7",
      "name": "Upload Image to Blotato",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -344,
        880
      ],
      "parameters": {
        "url": "https://backend.blotato.com/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "url",
              "value": "={{ $('Airtable').item.json['Image URL'] }}"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "gNaQW1qT8liDV4ls",
          "name": "Delete me toooooo!"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "12b8ecfe-f83b-4e32-a8d7-a71b7f5c9fd1",
      "name": "Ensure Valid YouTube Title",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -940,
        880
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=CURRENT_TITLE:
{{ $json['Media Title'] }}"
            },
            {
              "role": "assistant",
              "content": "# TASK
You specialize in creating Viral YouTube Short Video Titles.  You are to take User's CURRENT_TITLE and re-write it to go viral.
## Rules
 - Maximum 100 Characters
 - Goal is Virality!
 - Must be valid title for a YouTube Short Video
# OUTPUT
Output must be in JSON format, example:
{ \"youtube_title\": \"<generated title per instructions>\" }"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "KzjXYSuzUOCnnvzB",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "d83577ae-5aa7-4d47-a67b-30e30fcd2fa4",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1660,
        1060
      ],
      "parameters": {
        "width": 880,
        "height": 360,
        "content": "## Quick Debug Checking
### I set up quick links to social media to check whether the posting system succeeded or not.  I tried video if possible, if not I used image.  You can also find Blotato failed posts here: https://my.blotato.com/failed

[replace these with your own links if you like]
Instagram: https://www.instagram.com/moshehbenavraham/reels/
Youtube: https://www.youtube.com/@AIwithApex/shorts
Facebook: https://www.facebook.com/MoshehApexWebServices/grid
Threads: https://www.threads.com/@moshehbenavraham
LinkedIn: https://www.linkedin.com/in/moshehbenavraham/recent-activity/all/
X / Twitter: https://x.com/MoshehAvraham
TikTok: https://www.tiktok.com/@moshehavraham
Bluesky: https://bsky.app/profile/aiwithapex.bsky.social
Pinterest: https://www.pinterest.com/aiwithapex/artificial-intelligence-ai-ai-automation/
"
      },
      "typeVersion": 1
    },
    {
      "id": "356518e3-1eb6-4cfe-bf77-a5f095553b74",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        1440
      ],
      "parameters": {
        "width": 880,
        "height": 300,
        "content": "## Current Issues (last updated April 29, 2025)

- Haven't confirmed, but you -have- to post to a FB Page?
- I believe you can only post to a particular Board in Pinterest
- Some Endpoints can handle longer text, some not
- Some Endpoints can handle videos, some not
- With Facebook, apparently only plain text is accepted
- With LinkedIn, apparently only plain text is accepted
- Haven't found info about ways to access what you have uploaded to Blotato, nor capacity limit, nor how long the assets are stored for -- did find a concurrency limit of using it 10 requests/minute
- Encountered this error with YouTube POST despite not posting that much: \"Error: The request cannot be completed because you have exceeded your <a href=\"/youtube/v3/getting-started#quota\">quota</a>.\""
      },
      "typeVersion": 1
    },
    {
      "id": "503a04c9-a740-4c5d-9f67-143a8dd1422f",
      "name": "Airtable: Posted Instagram",
      "type": "n8n-nodes-base.airtable",
      "position": [
        316,
        -20
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appt2yDl6xXXyqboD",
          "cachedResultUrl": "https://airtable.com/appt2yDl6xXXyqboD",
          "cachedResultName": "Social Media System"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblM3kDu1qB2FdTOF",
          "cachedResultUrl": "https://airtable.com/appt2yDl6xXXyqboD/tblM3kDu1qB2FdTOF",
          "cachedResultName": "Media Creation"
        },
        "columns": {
          "value": {
            "id": "={{ $('Airtable').item.json.id",
            "Production": "Completed"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Media Title",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Media Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Script",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Script",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Script Len",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Script Len",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Production",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Not Started",
                  "value": "Not Started"
                },
                {
                  "name": "In progress",
                  "value": "In progress"
                },
                {
                  "name": "Ready",
                  "value": "Ready"
                },
                {
                  "name": "Review",
                  "value": "Review"
                },
                {
                  "name": "Completed",
                  "value": "Completed"
                },
                {
                  "name": "Scheduled",
                  "value": "Scheduled"
                },
                {
                  "name": "Published",
                  "value": "Published"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Production",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Video URL",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Video URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Video",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Video",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publish Date (from Content Creation)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Publish Date (from Content Creation)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publish Time (from Content Creation)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Publish Time (from Content Creation)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Test",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Test",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content Creation",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Content Creation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Scenes",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Scenes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image URL",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Image URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Image",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image Caption",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Image Caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text for X",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Text for X",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text for LinkedIn",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Text for LinkedIn",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Social Channels",
              "type": "array",
              "display": true,
              "options": [
                {
                  "name": "Blog",
                  "value": "Blog"
                },
                {
                  "name": "Facebook",
                  "value": "Facebook"
                },
                {
                  "name": "Instagram",
                  "value": "Instagram"
                },
                {
                  "name": "LinkedIn",
                  "value": "LinkedIn"
                },
                {
                  "name": "TikTok",
                  "value": "TikTok"
                },
                {
                  "name": "X",
                  "value": "X"
                },
                {
                  "name": "YouTube",
                  "value": "YouTube"
                }
              ],
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Social Channels",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "n8n Publishing Date",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "n8n Publishing Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "n8n Publishing Time",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "n8n Publishing Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publishing Log",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Publishing Log",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "House Keeping",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "House Keeping",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "workflowId (from House Keeping)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "workflowId (from House Keeping)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "recordID (from House Keeping)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "recordID (from House Keeping)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created Time",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Created Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Modified Time",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Modified Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Record ID",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Record ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "YzrajURFsZkojT3x",
          "name": "Delete Me Later Please!"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "f42a3763-8906-4278-b8d0-73611a1fae31",
      "name": "Airtable: Posted Instagram1",
      "type": "n8n-nodes-base.airtable",
      "position": [
        316,
        180
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appt2yDl6xXXyqboD",
          "cachedResultUrl": "https://airtable.com/appt2yDl6xXXyqboD",
          "cachedResultName": "Social Media System"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblM3kDu1qB2FdTOF",
          "cachedResultUrl": "https://airtable.com/appt2yDl6xXXyqboD/tblM3kDu1qB2FdTOF",
          "cachedResultName": "Media Creation"
        },
        "columns": {
          "value": {
            "id": "={{ $('Airtable').item.json.id",
            "Production": "In progress"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "Media Title",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Media Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Script",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Script",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Script Len",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Script Len",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Production",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Not Started",
                  "value": "Not Started"
                },
                {
                  "name": "In progress",
                  "value": "In progress"
                },
                {
                  "name": "Ready",
                  "value": "Ready"
                },
                {
                  "name": "Review",
                  "value": "Review"
                },
                {
                  "name": "Completed",
                  "value": "Completed"
                },
                {
                  "name": "Scheduled",
                  "value": "Scheduled"
                },
                {
                  "name": "Published",
                  "value": "Published"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Production",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Video URL",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Video URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Video",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Video",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publish Date (from Content Creation)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Publish Date (from Content Creation)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publish Time (from Content Creation)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Publish Time (from Content Creation)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Test",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Test",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content Creation",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Content Creation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Scenes",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Scenes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image URL",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Image URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Image",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Image Caption",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Image Caption",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text for X",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Text for X",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Text for LinkedIn",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Text for LinkedIn",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Social Channels",
              "type": "array",
              "display": true,
              "options": [
                {
                  "name": "Blog",
                  "value": "Blog"
                },
                {
                  "name": "Facebook",
                  "value": "Facebook"
                },
                {
                  "name": "Instagram",
                  "value": "Instagram"
                },
                {
                  "name": "LinkedIn",
                  "value": "LinkedIn"
                },
                {
                  "name": "TikTok",
                  "value": "TikTok"
                },
                {
                  "name": "X",
                  "value": "X"
                },
                {
                  "name": "YouTube",
                  "value": "YouTube"
                }
              ],
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Social Channels",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "n8n Publishing Date",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "n8n Publishing Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "n8n Publishing Time",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "n8n Publishing Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Publishing Log",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Publishing Log",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "House Keeping",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "House Keeping",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "workflowId (from House Keeping)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "workflowId (from House Keeping)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "recordID (from House Keeping)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "recordID (from House Keeping)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Created Time",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Created Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Modified Time",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Modified Time",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Record ID",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Record ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "YzrajURFsZkojT3x",
          "name": "Delete Me Later Please!"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "e6d9834b-a03e-4e98-9e38-a774eec2bc93",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        291,
        -300
      ],
      "parameters": {
        "color": 2,
        "width": 150,
        "height": 640,
        "content": "# Update Post Status

*note I didn't finish attaching all the platforms, left the labor to y'all :)"
      },
      "typeVersion": 1
    },
    {
      "id": "fed0373f-7fa5-469c-9972-47d0a9a447a7",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1600,
        880
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c68f2436-f471-45a6-9292-2410937bd444",
      "name": "Airtable Record ID",
      "type": "n8n-nodes-base.set",
      "position": [
        -1380,
        880
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ca998655-fcdd-4169-b470-492cf5113b6a",
              "name": "=airtableID",
              "type": "string",
              "value": "=recJBpGmgd7nuLpfe"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7617f48c-f498-4458-a64c-3fb60938546e",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -972,
        780
      ],
      "parameters": {
        "color": 5,
        "width": 320,
        "height": 260,
        "content": "### May Not Be Necessary

I added this because my incoming Titles were over the 100 character limit"
      },
      "typeVersion": 1
    },
    {
      "id": "054bc64d-3a3c-4ba4-9bcc-e30729bb9c87",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2260,
        300
      ],
      "parameters": {
        "width": 580,
        "height": 1880,
        "content": "# How to Add Example Table and Connect n8n to Airtable

---

## Part 1: Add the Example Table to Airtable

1. **Create and Log into Your Airtable Account**  
   - If you don't have an Airtable account: [Sign up here (Affiliate link)](https://airtable.com/invite/r/6UyZyAAd)

2. **Open the Example Base**  
   - Link: [Social Media System Base](https://airtable.com/appbOSIspSmMfeJeg/shr7htmWB9GNRrpw3)

3. **Copy the Base**  
   - To the right of the title *\"Social Media System\"*, click **\"Copy base\"**.

4. **Choose Your Workspace**  
   - Pick the workspace to copy the base into, then click **\"Add base\"**.

**✅ Congrats! You now have the example Base added.**

---

## Part 2: Connect n8n to Airtable

### Step A: Create a Personal Access Token in Airtable

1. **Create and Log into Your Airtable Account**  
   - [Sign up here (Affiliate link)](https://airtable.com/invite/r/6UyZyAAd)

2. **Access Personal Tokens**
   - Top right: click your **Account Icon** → select **\"Builder hub\"**.
   - Left navigation: go to **\"Developers\"** → click **\"Personal access tokens\"**.

3. **Create a New Token**
   - Click **\"Create token\"**.
   - Name your token (example: *\"Airtable personal access token for n8n\"*).  
     **(Don't create yet!)**

4. **Set Scopes**
   - Click **\"+ Add a scope\"** and enable these scopes:
     - `data.records:read`
     - `data.records:write`
     - `schema.bases:read`

5. **Optional: Restrict Access**
   - If you want the credential limited to certain bases:
     - Under **Access**, click **\"+ Add a base\"** and select the Base(s).

6. **Finalize and Save the Token**
   - After creation, a pop-up will show your token **only once**.
   - **Copy and store it safely!**

---

### Step B: Add Airtable Credentials in n8n

1. **Create and Log into Your n8n Account**  
   - [Sign up here (Affiliate link)](https://n8n.partnerlinks.io/aiwithapex)

2. **Create a New Credential**
   - Top right: next to the red-orange **\"Create Workflow\"** button, open the dropdown → select **\"Create Credential\"**.
   - (Alternatively, you can create it from inside any Airtable node.)

3. **Input Token Details**
   - In the popup, type **\"Airtable personal access token api\"**, click **\"Continue\"**.
   - Paste your **saved Airtable token**.

4. **Name the Credential Properly**
   - Top left of the dialogue box: rename the token to something clearly recognizable.

5. **Save and Test Connection**
   - Click the top right **\"Save\"** button.
   - You should see **\"Connection tested successfully\"**.
   - You may now **close** the dialogue box.

**✅ Done! n8n is now connected to your Airtable base.**
"
      },
      "typeVersion": 1
    },
    {
      "id": "f10bfe19-511e-4211-9d53-b72130bcf0ec",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1660,
        300
      ],
      "parameters": {
        "width": 1300,
        "height": 100,
        "content": "# Blotato Affiliate Link, Please Support My Work:  https://blotato.com/?ref=max
You will need the API key for blotato-api-key"
      },
      "typeVersion": 1
    },
    {
      "id": "825d529c-813c-42d3-b100-0dba4a84d7fe",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -644,
        420
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 620,
        "content": "## FILL ME IN!

### Use Link Above to Log into Blotato

- Bottom Left Gear for Settings
- **IMPORTANT** Log into each social media platform you want to connect before using the connection buttons and do NOT use the \"connect all pages\" option.
- Log into each account and copy each \"Account ID\" into a safe place
- If using FaceBook, copy also the 'Page ID'
- If using Pinterest, use my PINTEREST BOARD ID SYSTEM (tm) to get your Board ID"
      },
      "typeVersion": 1
    },
    {
      "id": "b27f7a30-aa19-4d0f-a7a0-7e5d5c0a1a2d",
      "name": "Pinterest System (tm)",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1600,
        1940
      ],
      "webhookId": "0724d1b9-05f6-46c2-9b74-e89fd44cbef3",
      "parameters": {
        "options": {},
        "formTitle": "Pinterest System (tm)",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Pinterest Board URL",
              "placeholder": "https://www.pinterest.com/USERNAME/BOARD_NAME/",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Put in your Pinterest Board Link here, it should look like this:

https://www.pinterest.com/USERNAME/BOARD_NAME/

Example:
https://www.pinterest.com/aiwithapex/artificial-intelligence-ai-ai-automation/"
      },
      "typeVersion": 2.2
    },
    {
      "id": "3a5976ba-fb7d-4e33-a0bd-efbbf212031b",
      "name": "Grab Pinterest Board Page",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1380,
        1940
      ],
      "parameters": {
        "url": "={{ $json['Pinterest Board URL'] }}",
        "options": {},
        "jsonHeaders": "{
  \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36\",
  \"Accept\": \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\",
  \"Accept-Language\": \"en-US,en;q=0.9\",
  \"Accept-Encoding\": \"gzip, deflate, br\",
  \"Connection\": \"keep-alive\",
  \"Referer\": \"https://www.pinterest.com/\"
}",
        "sendHeaders": true,
        "specifyHeaders": "json"
      },
      "typeVersion": 4.2
    },
    {
      "id": "659bb65c-7aaf-4aa4-958b-0f8e5bafaf7e",
      "name": "Pinterest Page Sleuth",
      "type": "n8n-nodes-base.code",
      "position": [
        -1160,
        1940
      ],
      "parameters": {
        "jsCode": "// n8n Code Node JavaScript

// Get the first item OBJECT using $input.first() or $items[0]
// Let's use $input.first() as it's slightly more modern n8n syntax
const item = $input.first();

// Check if an item was actually received
if (!item) {
  console.error(\"No input item received.\");
  // Return an empty array as expected by n8n if no input
  return [];
}

// Check if the 'json' property exists on the item object
// (This check might be redundant if the previous node always outputs JSON, but good practice)
if (!item.json || typeof item.json !== 'object') {
  console.error(\"Input item does not have a 'json' object property.\");
  // Ensure item.json exists before adding error to it
  item.json = item.json || {};
  item.json.error = \"Input item does not have a 'json' object property.\";
  // Return the item INSIDE an array
  return [item];
}

// Check if 'data' exists within 'json'
// <<< VERIFY this path 'item.json.data' using the INPUT panel in n8n editor >>>
if (!item.json.hasOwnProperty('data')) {
   console.error(\"Input item's 'json' property does not have a 'data' key.\");
   item.json.error = \"Input item's 'json' property does not have a 'data' key.\";
   // Return the item INSIDE an array
   return [item];
}

// Assign the HTML string (adjust path if needed based on INPUT panel)
const htmlString = item.json.data;

// Check if HTML string exists and is a string type
if (typeof htmlString !== 'string') {
  console.error(\"item.json.data is not a string.\");
  item.json.error = \"item.json.data exists but is not a string.\";
  // Return the item INSIDE an array
  return [item];
}

// Check if HTML string is empty
if (!htmlString) {
   console.error(\"item.json.data is an empty string or null/undefined.\");
   item.json.error = \"item.json.data is empty or null.\";
   // Return the item INSIDE an array
   return [item];
}
// </ END OF INPUT CHECKING >

let extractedBoardInfo = {};
let processingError = null; // Renamed to avoid conflict with built-in 'error'

try {
  // 1. Find the JSON within the specific script tag using regex
  const regex = /<script id=\"__PWS_INITIAL_PROPS__\" type=\"application\/json\">(.*?)<\/script>/s;
  const match = htmlString.match(regex);

  if (match && match[1]) {
    const jsonString = match[1];
    // 2. Parse the extracted JSON string
    const parsedData = JSON.parse(jsonString);

    // 3. Navigate through the nested structure
    const boardsData = parsedData?.initialReduxState?.boards;

    if (boardsData && typeof boardsData === 'object' && Object.keys(boardsData).length > 0) {
      const boardId = Object.keys(boardsData)[0];
      const boardDetails = boardsData[boardId];

      if (boardDetails && boardDetails.id) {
        // 4. Extract the desired information
        extractedBoardInfo = {
          boardId: boardDetails.id,
          name: boardDetails.name || null,
          description: boardDetails.description || null,
          url: boardDetails.url || null,
          privacy: boardDetails.privacy || null,
          pinCount: boardDetails.pin_count !== undefined ? boardDetails.pin_count : null,
          followerCount: boardDetails.follower_count !== undefined ? boardDetails.follower_count : null,
          createdAt: boardDetails.created_at || null,
          ownerUsername: boardDetails.owner?.username || null,
          ownerId: boardDetails.owner?.id || null,
          ownerFullName: boardDetails.owner?.full_name || null,
        };
      } else {
         processingError = \"Board data structure invalid within __PWS_INITIAL_PROPS__ JSON.\";
         console.error(processingError);
      }
    } else {
      processingError = \"Boards data not found or empty in __PWS_INITIAL_PROPS__ JSON.\";
      console.error(processingError);
    }
  } else {
    processingError = \"Script tag with id='__PWS_INITIAL_PROPS__' not found or empty in HTML.\";
    console.error(processingError);
  }
} catch (e) {
  processingError = `Error processing HTML/JSON: ${e.message}`;
  console.error(processingError, e);
}

// 5. Prepare the final item
if (Object.keys(extractedBoardInfo).length > 0) {
  item.json.extractedBoardInfo = extractedBoardInfo;
  // Optionally delete the large HTML string if no longer needed
  // delete item.json.data;
} else {
  // Add error information if extraction failed
  item.json.error = processingError || \"Failed to extract board information for unknown reasons.\";
  item.json.extractedBoardInfo = null;
}

// Return the modified item INSIDE an array as required by n8n
return [item];"
      },
      "typeVersion": 2
    },
    {
      "id": "09f00540-3fde-45a8-a20b-7415e81aa777",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1660,
        1800
      ],
      "parameters": {
        "color": 4,
        "width": 660,
        "height": 300,
        "content": "# Pinterest Page Sleuth
 - Use either testing or active URL respectively depending if your workflow is active or not
  - Simply paste your board's link and fetch ID!"
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "4b3ebaa1-ec81-4de8-9366-633594a1b0ca",
  "connections": {
    "Airtable": {
      "main": [
        [
          {
            "node": "Ensure Valid YouTube Title",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Airtable Record ID": {
      "main": [
        [
          {
            "node": "Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare for Publish": {
      "main": [
        [
          {
            "node": "Upload Image to Blotato",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pinterest System (tm)": {
      "main": [
        [
          {
            "node": "Grab Pinterest Board Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Image to Blotato": {
      "main": [
        [
          {
            "node": "Upload Video to Blotato",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload Video to Blotato": {
      "main": [
        [
          {
            "node": "[Instagram] Publish via Blotato",
            "type": "main",
            "index": 0
          },
          {
            "node": "[Facebook] Publish via Blotato",
            "type": "main",
            "index": 0
          },
          {
            "node": "[Linkedin] Publish via Blotato",
            "type": "main",
            "index": 0
          },
          {
            "node": "[Tiktok] Publish via Blotato",
            "type": "main",
            "index": 0
          },
          {
            "node": "[Youtube] Publish via Blotato",
            "type": "main",
            "index": 0
          },
          {
            "node": "[Threads] Publish via Blotato",
            "type": "main",
            "index": 0
          },
          {
            "node": "[Twitter] Publish via Blotato",
            "type": "main",
            "index": 0
          },
          {
            "node": "[Bluesky] Publish via Blotato",
            "type": "main",
            "index": 0
          },
          {
            "node": "[Pinterest] Publish via Blotato",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Grab Pinterest Board Page": {
      "main": [
        [
          {
            "node": "Pinterest Page Sleuth",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Ensure Valid YouTube Title": {
      "main": [
        [
          {
            "node": "Prepare for Publish",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "[Instagram] Publish via Blotato": {
      "main": [
        [
          {
            "node": "Airtable: Posted Instagram",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Airtable: Posted Instagram1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "Airtable Record ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

功能特点

  • 自动检测新邮件
  • AI智能内容分析
  • 自定义分类规则
  • 批量处理能力
  • 详细的处理日志

技术分析

节点类型及作用

  • Httprequest
  • Stickynote
  • Set
  • Airtable
  • @N8N/N8N Nodes Langchain.Openai

复杂度评估

配置难度:
★★★★☆
维护难度:
★★☆☆☆
扩展性:
★★★★☆

实施指南

前置条件

  • 有效的Gmail账户
  • n8n平台访问权限
  • Google API凭证
  • AI分类服务订阅

配置步骤

  1. 在n8n中导入工作流JSON文件
  2. 配置Gmail节点的认证信息
  3. 设置AI分类器的API密钥
  4. 自定义分类规则和标签映射
  5. 测试工作流执行
  6. 配置定时触发器(可选)

关键参数

参数名称 默认值 说明
maxEmails 50 单次处理的最大邮件数量
confidenceThreshold 0.8 分类置信度阈值
autoLabel true 是否自动添加标签

最佳实践

优化建议

  • 定期更新AI分类模型以提高准确性
  • 根据邮件量调整处理批次大小
  • 设置合理的分类置信度阈值
  • 定期清理过期的分类规则

安全注意事项

  • 妥善保管API密钥和认证信息
  • 限制工作流的访问权限
  • 定期审查处理日志
  • 启用双因素认证保护Gmail账户

性能优化

  • 使用增量处理减少重复工作
  • 缓存频繁访问的数据
  • 并行处理多个邮件分类任务
  • 监控系统资源使用情况

故障排除

常见问题

邮件未被正确分类

检查AI分类器的置信度阈值设置,适当降低阈值或更新训练数据。

Gmail认证失败

确认Google API凭证有效且具有正确的权限范围,重新进行OAuth授权。

调试技巧

  • 启用详细日志记录查看每个步骤的执行情况
  • 使用测试邮件验证分类逻辑
  • 检查网络连接和API服务状态
  • 逐步执行工作流定位问题节点

错误处理

工作流包含以下错误处理机制:

  • 网络超时自动重试(最多3次)
  • API错误记录和告警
  • 处理失败邮件的隔离机制
  • 异常情况下的回滚操作