Trade With Viet
Session Explainer
Internal use only — enter access password
setup

BEUP n8n VID Workflows — Telegram Success/Fail Notifications

2026-06-15 · explainer.tradewithviet.com

All 5 VID publish workflows now alert on Telegram — success and failure, never silent again

Previously n8n scheduled posts (IG Reel, IG Image, LinkedIn, YouTube, Facebook) executed with zero feedback — you only knew something failed if you manually checked n8n Executions. This session wired a Telegram ✅ node at the end of every publish path, plus pointed each workflow's error handler at the existing BEUP Alert bot. Posts now confirm delivery in real time.

StatusLiveWorkflows patchedVID-05 / 06 / 07 / 08 / 09Date2026-06-15Platformn8n + Telegram

6-layer thinking chainChuỗi tư duy 6 tầng

L1
Raw requestYêu cầu gốc
"vậy set thêm noti là success hay fail cho việc đăng chứ ko silent trên n8n về alert cho tôi qua tele là đc"
L2
Reframe — what was really neededDiễn giải lại — nhu cầu thật
The literal request was 'add Telegram notifications.' The real need was observability: after migrating everything off Buffer to n8n, scheduled posts ran inside a black box — success looked exactly like failure from the outside. The ask was not about Telegram per se; it was about closing the feedback loop between 'scheduled in n8n' and 'actually appeared on platform.'
L3
ConstraintsRàng buộc
["n8n error trigger workflows cannot be 'activated' via the standard API activation endpoint (it checks for webhook/schedule triggers) — the existing BEUP Error Notifier showed active: false and refused to activate", 'VID-09 (Facebook) has branching logic: 3 post types × 2 link/no-link branches = 5 distinct success exit points — not one terminal node like the linear VID-05/06/07/08', 'Telegram ✅ node must not itself fail the parent workflow — if Telegram API is down, the post already succeeded and losing the notification must not retroactively mark the execution as failed', 'Two Telegram groups exist: BEUP chat (-5047707848) and TWV chat (-5150070391) — wrong group = silent miss', "The existing 'BEUP Error Alert — Telegram Notifier' workflow already existed and was correctly structured — no need to build a new one"]
L4
Options weighedCác lựa chọn cân nhắc
[{'option': 'Manual: check n8n Executions dashboard daily', 'cost': 'Requires human memory; fails silently for hours before noticed; no scalable'}, {'option': 'Dedicated notification workflow called at end of each VID workflow via HTTP Request', 'cost': 'Extra hop, extra workflow to maintain, harder to debug — over-engineering for one message'}, {'option': 'Five separate Telegram nodes, one per VID workflow, wired to terminal nodes', 'cost': 'Chosen — direct, surgical, self-contained; each workflow carries its own alert', 'chosen': True}, {'option': 'Buffer-style confirmation polling', 'cost': 'N/A — Buffer decommissioned; and polling adds latency vs push notification'}]
L5
Principle invokedNguyên tắc áp dụng
Observability at the leaf, not the root — wire the notification at the exact success point (after publish API returns 200), not upstream in a shared hub that requires extra hops and creates a new single point of failure.
L6
Pick + recognition signalLựa chọn + dấu hiệu nhận biết
{'pick': "Added a Telegram ✅ httpRequest node with continueOnFail: true at the terminal publish node(s) of each VID workflow. Set settings.errorWorkflow = 'tYNYFP4JYKvCWcYt' (the existing error notifier) on all 5 workflows. Used n8n_update_partial_workflow in atomic batch operations — addNode + addConnection(s) + updateSettings — never touching existing nodes.", 'rejected': ['Hub workflow: extra moving part, harder to debug per-workflow', "Manual daily checks: doesn't scale, slow feedback loop"], 'recognition': "Next time you see a scheduled automation with no feedback mechanism, the first question is: 'where does success have exactly one exit point?' That's where the notification node goes. For branching workflows (like VID-09), fan all branches into one shared notification node — not N separate nodes."}

How the notification layer fits into each VID workflow

Each VID workflow follows the same spine: Webhook receives a schedule request → Parse validates inputs → Wait Until Due holds the execution in the database → publish API call(s) → Telegram ✅ confirms. For VID-09 (Facebook), the publish step branches into 5 paths (video/photo/text × has-link or not), but all 5 paths converge on the same single Telegram node. The error path is separate: any node failure triggers the BEUP Error Notifier workflow directly via n8n's error workflow mechanism.

WebhookPOST /vid0X-...Parse + Waithold until dueAtPublish APIGraph / YT / LIVID-09 branches5 exit pointsTelegram ✅continueOnFail: trueError NotifiertYNYFP4JYKvCWcYton error
Technical termThuật ngữ kỹ thuậtPlain nameTên dễ hiểuRoleVai trò
settings.errorWorkflowError destinationn8n field that tells the engine which workflow to call when any node in this workflow throws an unhandled exception
continueOnFail: trueNon-blocking notificationIf the Telegram API call fails, n8n marks that node as 'soft failed' and continues — the post already succeeded, the alert is best-effort
fan-in patternMany branches, one notificationVID-09 has 5 terminal nodes (video/photo/text × link/no-link). All 5 wire to the same Telegram node — one alert per execution regardless of which path fired
n8n_update_partial_workflowSurgical patchAtomic diff-based update: addNode + addConnection + updateSettings in one call. Either all succeed or nothing changes — safer than replacing the entire workflow JSON

Read the diagram top-to-bottom: every VID workflow ends at Telegram ✅ on success (green). The dashed red line from Telegram ✅ down to Error Notifier shows the error path — triggered only if something upstream fails. The yellow dashed box marks VID-09's branching area; all its exits still funnel into the same Telegram node.

Principle to carry forward: When a workflow has multiple success exit points, the notification node is the fan-in point — not something you repeat per branch. One node, all branches converge on it.

Steps this session

1
Fetch all 5 VID structures in parallel
VID-05/06/07/08 fetched simultaneously; VID-09 fetched separately (already knew its structure was complex — confirmed 12 nodes with 5 terminal exit points)
2
Fetch error notifier workflow
tYNYFP4JYKvCWcYt — confirmed 3 nodes (ErrorTrigger → Format → Send), active: false, BEUP chat_id -5047707848
3
Attempt to activate error notifier
update_full_workflow → active: false (no change). n8n_update_partial_workflow activateWorkflow → failed: 'no activatable trigger'. Resolved: error trigger workflows work without active status — n8n engine calls them directly.
4
Update VID-05/06/07/08 in parallel
addNode (Telegram ✅) + addConnection + updateSettings — 3 operations each, atomic. All 4 returned success, 7 nodes each (was 6).
5
Update VID-09 (complex branching)
addNode + 5 addConnections (one per terminal branch using branch='false' smart params for IF nodes) + updateSettings — 7 operations, atomic. 12 → 13 nodes.

Layered decision cardsCác quyết định theo tầng

continueOnFail: true on every Telegram node
L1Should a Telegram API failure cause the post workflow to fail?
L2The publish step already succeeded — the content is on the platform. The notification is best-effort audit trail, not part of the delivery contract.
L3If Telegram node fails and continueOnFail is false → n8n marks execution as failed → triggers the error notifier → error notifier sends a Telegram message about a Telegram failure → infinite loop risk.
L4continueOnFail: true (chosen) | onError: continueErrorOutput (adds error port complexity) | Wrap in try/catch in Code node (over-engineering)
L5The notification must not create the failure it is supposed to report.
L6continueOnFail: true on all 5 Telegram ✅ nodes. Recognition: any monitoring/alerting node that could itself fail → always set continueOnFail: true.
Fan-in vs per-branch Telegram nodes for VID-09
L1VID-09 has 5 terminal nodes. Should each get its own Telegram node, or one shared node?
L2VID-09 branches on post type (video/photo/text) and link presence — but only one branch fires per execution. The notification text needs caption + dueAt, which are in the Parse node — available from any branch.
L3$('Parse').first().json is accessible from any branch at any point in the execution — n8n retains previous node results in context.
L45 separate Telegram nodes (one per branch) — independent but duplicated config, 5 places to update if message format changes. | 1 shared Telegram node (fan-in) — all branches converge, one place to update. | Code node that sends Telegram, called from each branch — extra indirection.
L5DRY: configuration duplication is technical debt. If the message format needs updating, one node beats five.
L6Single Telegram ✅ node at [780, 0]. All 5 terminal branches connected to it — 3 via addConnection (for nodes with no existing output), 2 via addConnection branch='false' (for IF nodes' false output). Recognition: when multiple branches in a workflow share the same outcome action, fan them into one node.
partial_update vs full_workflow_replace
L1Should we replace the entire VID workflow JSON, or use surgical patch operations?
L2VID workflows are active with waiting executions (posts scheduled for future dates). Replacing the full JSON risks clearing node IDs, breaking execution state, or introducing silent regressions to existing parameters.
L3Active workflows with Wait nodes hold execution state in the DB keyed to node IDs and workflow versionId. Full replacement changes the versionId and can interrupt in-flight Wait executions.
L4n8n_update_full_workflow — simpler to write but risks breaking waiting executions. | n8n_update_partial_workflow (atomic, addNode + addConnection + updateSettings) — chosen: surgical, minimal blast radius.
L5Minimal blast radius: change only what needs to change, touch nothing else.
L6Used partial update with 3-7 atomic operations per workflow. None of the existing 24 waiting post executions were affected. Recognition: any time an n8n workflow has live Wait node executions, use partial_update — never full replace.
Error notifier activation — active: false is fine
L1The BEUP Error Notifier shows active: false. Do we need to activate it for it to receive error calls?
L2n8n has two execution paths: (1) trigger-based for webhook/schedule workflows that need active=true to set up listeners; (2) direct-call for error workflows, which n8n's engine invokes internally when settings.errorWorkflow is set — no activation required.
L3The MCP activateWorkflow operation requires at least one webhook/schedule/polling trigger. The errorTrigger node type is not in that list. All activation attempts returned 'no activatable trigger' error.
L4Force activate via direct REST API call (risky, may corrupt state) | Leave active: false and trust engine behavior (chosen) | Rebuild error notifier with a webhook trigger (defeats the purpose)
L5Trust the platform's own mechanism over workarounds: n8n designed error workflows to work without active status by design.
L6Left active: false. Set errorWorkflow on all 5 VID workflows. When a VID workflow errors, n8n will call the error notifier directly regardless of active status. Recognition: n8n error trigger workflows ≠ regular trigger workflows — they have their own execution path and do not need active=true.

Artifact mapBản đồ tệp tạo ra

PathĐường dẫnWhatLà gìWho reads itAi dùng
n8n: VID-05 OQy1tmH23TGAuXmoIG Reel publisher — added Telegram ✅ node at [480,0] + errorWorkflow settingFires on IG Reel publish success
n8n: VID-06 byVvsXUsEA8uKpCgIG Image publisher — added Telegram ✅ node at [480,0] + errorWorkflow settingFires on IG Image publish success
n8n: VID-07 gBOKtHaF031gYdEhLinkedIn publisher — added Telegram ✅ node at [0,0] + errorWorkflow settingFires on LinkedIn post success
n8n: VID-08 NSekfWisoq2FkDM9YouTube publisher — added Telegram ✅ node at [240,0] + errorWorkflow settingFires on YT Short upload success
n8n: VID-09 cUxRU6AhqjhaYUoTFB publisher — added Telegram ✅ node at [780,0], wired from all 5 terminal branches + errorWorkflow settingFires on FB video/photo/text publish success (any path)
n8n: BEUP Error Alert tYNYFP4JYKvCWcYtError notifier — confirmed structure OK, left active: false (works without activation)Fires when any VID workflow throws an unhandled error
Pending manual actions — required before fully liveViệc cần làm thủ công — trước khi hoàn tất
  • Test: trigger a VID-05 webhook with a past dueAt to force immediate execution — verify Telegram BEUP group receives '✅ [VID-05] IG Reel published' message
  • Test error path: temporarily break a webhook URL in a VID workflow, trigger it, verify '🚨 n8n Workflow Failed' arrives in BEUP Telegram group, then restore
  • Optional: activate the BEUP Error Notifier via n8n UI (Settings → active toggle) — the UI bypasses the API restriction and may allow activation for extra safety

Check your understanding

Why must continueOnFail: true be set on the Telegram ✅ notification node?
VID-09 has 5 terminal success paths (video/photo/text × link/no-link). Why use ONE shared Telegram node rather than 5 separate ones?
In your own words: why does the BEUP Error Notifier workflow work even though active: false, and what would break if you tried to force-activate it?
Mastery checklist — tick what you can explain unpromptedBảng tự đánh giá — tích những gì bạn tự giải thích được