Reference
Node reference
Built for n8n 2.47.3. Behaviour below comes from the workflow files, not from guessed node features. Credential ids in those files are placeholders — select your own after import.
The full field-by-field write-up, including the planner's prompt and validation rules, is in the kit's docs/node-reference.md. This page covers what each node does and how they connect.
#Posting workflow
Social Posting – Facebook Page via Zernio (Content Queue). Settings: execution order v1, saveManualExecutions: true. No workflow timezone is set; scheduled_at values with an offset are compared in the Code node, and posted_at is $now.toISO().
| Node | Type | What it does |
|---|---|---|
| Every 15 Minutes | Schedule Trigger v1.2 | Every 15 minutes, only while published. |
| Manual Test Run | Manual Trigger v1 | Same path when you click Execute workflow. |
| Config | Set v3.4 | Per-client settings: client_name, zernio_account_id, zernio_profile_id, google_sheet_id, queue_sheet_name (default queue), max_posts_per_run (5), ai_model, ai_brand_voice. |
| Read Content Queue | Google Sheets v4.5 · read | Reads the queue tab from Config. Retries 3× / 3 s. alwaysOutputData is not set. |
| Select Due Approved Posts | Code v2 | Keeps rows whose platform includes facebook, status is exactly approved, id and message are present, and scheduled_at is due (missing date = now; invalid dates skipped). Caps at max_posts_per_run. |
| Lock Row (publishing) | Google Sheets v4.5 · update | Match on id. Sets status = publishing, clears error. Retries 3× / 3 s. |
| AI Caption Polish (optional) | HTTP Request v4.2 | Deactivated by default. OpenAI Chat Completions, 2 retries. While off, the original caption continues. |
| Prepare Post | Set v3.4 | Builds post_message (AI text if present, else the original), plus image_url and link. |
| Publish via Zernio | HTTP Request v4.2 | POST https://zernio.com/api/v1/posts, Header Auth Zernio API. Body: content, optional mediaItems when image_url is set, platforms: [{ platform: 'facebook', accountId }], publishNow: true. link is not sent. Header Idempotency-Key = row id. 3 retries / 2 s. Error output → Mark Failed. |
| Mark Posted | Google Sheets v4.5 · update | posted, post_id (Zernio id and platformPostUrl joined with |), posted_at, error cleared. |
| Mark Failed | Google Sheets v4.5 · update | failed plus the first 500 characters of the error. |
| Raise Failure Alert | Stop and Error v1 | Fails the execution so the Error Handler can log it. |
#Status lifecycle
draft or pending_approval → approved (human) → publishing (lock) → posted or failed. Only approved is postable.
#Error handler
| Node | Type | What it does |
|---|---|---|
| Error Trigger | Error Trigger v1 | Starts when a linked workflow fails. |
| Format Error | Set v3.4 | time, workflow, execution_id, execution_url, failed_node, error_message (first 500 characters). |
| Log Error to Sheet | Google Sheets v4.5 · append | Tab error_log. Document ID is pasted on this node (not read from Config). Retries 3× / 3 s. |
Publish this workflow first, then select it under the posting workflow's Settings → Error workflow.
#AI planner (optional)
Social Content – AI Planner (fills Content Queue). Timezone Asia/Manila. It never calls Zernio's create-post endpoint and never sets approved.
| Stage | Nodes | What happens |
|---|---|---|
| Trigger | Every Monday 08:00, Manual, Config, Read Content Queue | alwaysOutputData is on so an empty sheet still continues. |
| Brief | Prepare Prompt Context, Need New Posts? | Counts already-planned rows in the next 7 days; skips generation if the week is full. |
| Captions | Switch Caption Provider → one Basic LLM Chain (OpenAI, xAI, or OpenRouter) + Structured Output Parser | Unknown ai_provider hits Stop and Error. |
| Normalize | Validate & Normalize Posts | Hardcodes pending_approval, ids ai-YYYYMMDD-n, future unique times, valid https links only. |
| Images | Switch Image Provider → generate (or Skip Image) → Prepare Image Binary | Failures still keep the caption. |
| Upload | Has Image Binary? → Zernio Presign → PUT (no auth) → Apply Image URL | Presign/PUT errors go to Mark Image Failed, then the caption is still appended. |
| Log | Append to Content Queue, Build / Log Already Planned, Append Planner Log | Queue status is hardcoded pending_approval. |
Default models: captions openrouter/free, images recraft/recraft-v4.1-flash. Details and credential types: Optional AI planner.