Bring a person in: approvals, interventions in the live view, notifications.
Generated from the node definitions in
src/lib/flow/node/human/and the English labels (component.flow.node.human). Every node also has the common settings.
Contents
- Approval —
human/approval - Form —
human/form - Intervention —
human/intervention - Notify —
human/notify
Approval
human/approval · icon stamp
Lets you review and edit data
It's an intervention with two buttons, Reject and Approve, and the data to edit; the one auto will pick counts down on its button. In Studio it shows above the canvas, on a campaign's dashboard in the Waiting for you dialog, without a browser view (it's a decision, not a task in the browser).
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
message | Message | textarea | ||
data | Data | text | ||
auto | If no answer | select: off (Keep waiting), approve, reject | "off" | |
autoAfterMs | after (ms) | number | 60000 |
Output dots
approve— Approvereject— Reject
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"data": "unknown",
"decision": "string"
}
Default settings
timeout 1 day; the rest are the common defaults.
Example node
{
"id": "approval",
"type": "human/approval",
"name": "Approval",
"field": {
"auto": "off",
"autoAfterMs": 60000
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 86400000,
"disabled": false
},
"pin": null
}
Form
human/form · icon clipboard-pen
Asks a few questions and waits for the answers.
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
title | Title | text | "A few questions" | |
description | Description | textarea | ||
question | Questions | list of { name: text, label: text, kind: select, required: boolean, option: text, isMultiple: boolean, accept: text, placeholder: text, default: text, html: textarea } | [{"name": "message", "label": "Message", "kind": "textarea", "required": true}] | |
where | Answered | select: app (In the app), link (At a public page (its link, or the Form trigger's next page)) | "app" | |
thanks | Message when the run ends here | text | where: link | |
limitMs | Wait at most (ms, 0: no limit) | number | 0 | |
timeout | When the wait runs out | select: dot (The timeout dot), default (Go on with the defaults) | "dot" |
- In the app: the run's waiting dialog (Studio, the campaign dashboard) shows one input per question, and Send answers.
- At a public link: anyone with the run's form link (
/form/wait/<token>, in the log and the output'slink) answers on a mooflair page. Send the link in a message before.
A required question left empty fails the node. With a wait limit and no answer in time, it takes the timeout dot.
Output dots: next, timeout.
{ "answer": { "message": "…" }, "link": "https://app.example.com/form/wait/eyJ…" }
Default timeout: 7 days.
Intervention
human/intervention · icon hand
Waits for you in the live view
It shows its message, the selector it waits for, and Done: Done checks first, and the check also runs by itself every few seconds (the dialog shows why it isn't done yet). When a check fails you can still Continue anyway. On any node, On error: ask a human shows the failure with a Retry button.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
message | Message | textarea | ||
check | Solved when visible | text |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"waitedMs": "number"
}
Default settings
timeout 1 day; the rest are the .
Example node
{
"id": "intervention",
"type": "human/intervention",
"name": "Intervention",
"field": {},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 86400000,
"disabled": false
},
"pin": null
}
Notify
human/notify · icon bell-ring
Tells you something: in mooflair, Discord or Slack
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
channel | Send to | select: app (mooflair (bell)), discord, slack, telegram, email | "app" | |
title | Title | text | ||
message | Message | textarea | ||
level | Level | select: info, success, warning, error | "info" | |
url | Webhook URL (Discord / Slack) | text | channel: discord, slack | |
telegram | Telegram bot | credential (telegram/bot) | channel: telegram | |
chatId | Chat id | text | channel: telegram | |
smtp | SMTP credential | credential (email/smtp) | channel: email | |
to | To (comma list) | text | channel: email |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"channel": "string",
"title": "string"
}
Example node
{
"id": "notify",
"type": "human/notify",
"name": "Notify",
"field": {
"channel": "app",
"level": "info"
},
"setting": {
"retry": {
"count": 0,
"waitMs": 1000,
"backoff": "fixed"
},
"error": { "mode": "stop", "fallback": null, "break": { "count": 3, "waitMs": 600000 } },
"timeoutMs": 60000,
"disabled": false
},
"pin": null
}