English
Emit a signal
Ends, elsewhere, the waits watching this key — so a client who already answered is never chased.
The Emit a signal node ends, elsewhere, the waits watching a correlation key. It answers a common problem: the document a follow-up is waiting for arrives through another thread, the contract is signed at the office, the offer is settled by phone. A Wait node set to wake on a signal is installed with a key, for instance case:PSD-2026-0142:documents-received; the workflow that learns the fact emits a signal with the same key, and every wait watching it ends.
Two actions are available:
- Wake the waits (
resume): the waits leave through theireventport, so the planned follow-up is not sent and the run continues on the "event received" branch. - Cancel the waiting runs (
cancel): the runs are cancelled; nothing that followed the wait runs. Choose this when the case is closed.
The key is any string chosen by you; the only requirement is that it is exactly the same on both sides. Its scope is the whole organisation. A program can emit the same signal through the API with an API key holding the signals:write scope.
At a glance
- Type:
flow.signal· version 1 - Category: Logic
- Kind: Step — one stage of a run
- Effect: Writes outside (
external_write) — writes outside Mankomail; described instead of performed during a test run - Needs a carrier email: No
- Connection: None
- Inputs:
main - Outputs:
main
Parameters
key
Correlation key — Exactly the same string as the one in the Wait node watching for this fact. Organisation-wide scope.
- Type: Text (
string) - Required: Yes
- Default:
""(empty) - 200 characters at most
- Example:
case:{{ data.extract_1.reference }}:documents-received - Expressions:
{{ }}accepted
action
What the signal does
- Type: One choice (
options) - Required: Yes
- Default:
resume - Options:
resume— Wake the waits: They take their "event received" branch — so the planned follow-up is not sent.cancel— Cancel the waiting executions: Nothing that followed the wait will run. Choose this when the case is closed.
payload
What the signal carries — Short values, readable by the woken wait under data.<node>.signal. Never an email body: the row is bounded and lives in the database.
- Type: Key / value pairs (
keyValue) - Required: No
- Default:
[] - Shown when:
actionisresume - Expressions:
{{ }}accepted
Outputs
main— Taken once the signal has been emitted, whether or not a wait matched it.
Data produced
What this node adds to the run data, and how to read it in an expression. <step> stands for the step key: the node name turned into an identifier (see Data and expressions).
{{ data.<step>.key }}—string. The correlation key, rendered and trimmed.{{ data.<step>.action }}—string.resume(wake the waits) orcancel(cancel the waiting runs).{{ data.<step>.matched }}—number. How many waits were woken or cancelled by this emission.0means no wait was watching the key at that moment. Always0in a test run.{{ data.<step>.signalId }}—string. The identifier of the recorded signal. Absent in a test run.{{ data.<step>.duplicate }}—boolean.truewhen this step had already emitted the signal (a retried step): nothing was emitted again. Absent otherwise.{{ data.<step>.simulated }}—boolean. Test runs only:true, witheffectdescribing the signal that would have been emitted.{{ data.<step>.summary }}—string. A one-line summary in the member's language, e.g. 'Signal emitted — 1 wait affected.' (withsummaryKeyandsummaryParams).
Example
Workflow A sends a request for documents and waits ten business days, waking on the signal case:{{ data.extract.reference }}:documents-received. Workflow B is triggered by incoming emails carrying attachments and extracts the case reference. At its end, add Emit a signal:
key: case:{{ data.read.reference }}:documents-received
action: resumeWhen B runs for case PSD-2026-0142, the wait of A for that case leaves through event, and {{ data.<step>.matched }} in B is 1.
Tips
- A signal can arrive first. A signal emitted by this node remains valid for 24 hours (a signal emitted through the API follows
SIGNAL_RETENTION_HOURS, 24 by default, see environment variables). A wait installed with that key during this window ends immediately. Conversely, reusing the same key for an unrelated wait within that window ends it at once: include a case reference in the key. - Exactly once. A retried step does not emit the signal a second time; it reports
duplicate. matchedis0. Nothing was waiting at that moment: check that the keys are identical on both sides, including case and separators.- Test runs. The node only describes the signal it would have emitted: emitting it for real would wake or cancel real runs.
- An empty key (after rendering) makes the step fail with
node_invalid_param.