Symptom

An OutgoingWebHook configured with method: POST and no inputs never sent a request — executePost returns early when there is no body to send — but the node’s recorded error read Webhook POST failed: <url>, indistinguishable from a real network failure. The reporter spent real time chasing a network problem (rewriting the receiver, binding a raw socket listener) before finding the early-return in the processor. Once the node hit ERROR, every later fire — even after the webhook was correctly reconfigured — was skipped with not invoking node in invalid state ERROR and never attempted again: for a notification path, a single transient failure silently disabled the alarm forever, and clearing it required an explicit update_node setting error: "".

Root cause

Two independent defects:

  1. ServerWebHookOutboundProcessor.executePost/executePut/executePatch collapsed every failure mode — “no input configured”, “input node not found”, “the HTTP call itself failed” — into one generic Webhook <method> failed: <url> message built by the caller from a Boolean return value, discarding the specific reason each execute* function had already logged internally.
  2. ServerNodeManager.invoke() refuses to dispatch to any node currently in NodeState.ERROR, uniformly across every node type. That is correct for a stateful source (a DataPoint/Trigger whose correctness depends on the error staying visible until explicitly cleared), but an OutgoingWebHook is a fire-and-forget action with no such invariant — nothing else ever re-invokes it, so the latch was permanent and silent.

Fix

Prevention