Skip to main content

Human Approval Node

Flow node

What it does​

The Human Approval node pauses the run and asks a person to approve or reject. When they answer, the run continues and the rows leave on approved or rejected. If nobody answers before the timeout, the rows leave on timeout.

The request reaches the person by Slack, Teams or email, or waits in DataLug for an Owner or Admin.

When to use​

  • Rows need a human decision before they continue: refunds above a threshold, payments, deletions, offboarding.
  • The approver works in Slack, Teams or email, not in DataLug.
  • The wait has a limit, and an unanswered request should take its own path.

Configure​

Select the node and press Configure in the side panel to open Configure Human Approval. Save keeps the dialog open, Done saves and closes it, and Cancel discards the changes since the last save. A message confirms each save.

Approval target

TargetDelivery
WebAn Owner or Admin resolves it inside DataLug.
SlackA direct message from the Slack bot.
TeamsA channel message through a Teams webhook.
EmailAn email with signed approve and reject links.

For Slack, Teams and Email, set Target address column: the row column that holds the delivery address, such as an email address or Slack user.

Message and row key

  • Message: the text the approver reads. Use {{column}} to insert row values, for example Please approve invoice {{orderId}} for {{customerName}}.
  • Row key: the column that labels the request in the approvals list, for example orderId.
  • Approvals per run:
    • One per row: each row waits on its own decision.
    • One per batch: one decision routes every row. The address, message and row key come from the first row.

Timeout

From 1 hour to 7 days. The default is 24 hours.

Resolved row columns

Always added: approval_status, approval_responded_at and approval_responded_by. Added on request: approval_response_ip, the IP address the approver answered from. It is personal data, so it is off by default.

How a person approves​

  • Slack, Teams, Email: the message carries an approve link and a reject link. The links stop working once the request is answered or times out.
  • In DataLug: Owners and Admins open Manage Account > Configuration > Human Approvals > Open approvals. Filter by status, then press Approve or Reject on a pending request. Resend sends the Slack, Teams or email message again.

The run waits until every request it raised is answered or times out, then continues once. Rows are not read from the source again, and edits made to the project while the run waits do not change the paused run.

While the run waits, the node shows as suspended. Once the run continues it shows as succeeded, a timeout included, with the row count on each decision port.

Ports​

PortDirectionKindNotes
inindataRows that need a decision.
pendingoutdataRows waiting on a decision, with the request columns below.
approvedoutdataRows the approver approved.
rejectedoutdataRows the approver rejected.
timeoutoutdataRows with no answer before the timeout.
erroroutcontrolRows for which the request could not be raised, with the reason.
notifyoutcontrolOne row per request raised, or one per batch: approval_id, approval_target, approval_message. Connect a Notification node to announce new requests.

Every decision port must be connected. The run preflight lists any that are not, before the run starts.

Output columns​

Columns on each row

ColumnMeaning
approval_idThe request's id.
approval_statusPending, then Approved, Rejected or TimedOut.
approval_targetweb, slack, teams or email.
approval_messageThe message with row values filled in.
approval_approve_url, approval_reject_urlThe signed links sent to the approver.
approval_responded_atWhen the approver answered, or when the timeout passed.
approval_responded_byThe DataLug user who answered. Empty for a timeout, or when the approver is not a user of the account.

Examples​

Expense review. Source (expense reports) > AI Prompt (classify as auto or review) > Router > review rows to Human Approval (target Email, address column approverEmail) > approved to a Transform and a Load (accounting), rejected to Notification, timeout to Notification.

One sign-off for a batch. Source (today's payment file) > Human Approval (target Slack, One per batch, message Release the payments in {{fileName}}?) > approved to a Transform and a Load.

Troubleshooting​

SymptomCauseWhat to do
The run will not start and names loose portsA decision port is not connected.Connect approved, rejected and timeout.
Rows leave on errorThe request could not be raised, for example a missing address.Check the reason on the row and the Target address column.
The approver did not receive the messageThe address is wrong, or the channel is not set up for your account.Check the address, then press Resend in Human Approvals.
A link says the request expiredThe timeout passed.The rows left on timeout. Raise the timeout for future runs.
approval_responded_by is emptyThe approver is not a user of the account.No action needed.