Human Approval 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
| Target | Delivery |
|---|---|
Web | An Owner or Admin resolves it inside DataLug. |
Slack | A direct message from the Slack bot. |
Teams | A channel message through a Teams webhook. |
Email | An 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 examplePlease 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
| Port | Direction | Kind | Notes |
|---|---|---|---|
in | in | data | Rows that need a decision. |
pending | out | data | Rows waiting on a decision, with the request columns below. |
approved | out | data | Rows the approver approved. |
rejected | out | data | Rows the approver rejected. |
timeout | out | data | Rows with no answer before the timeout. |
error | out | control | Rows for which the request could not be raised, with the reason. |
notify | out | control | One 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
| Column | Meaning |
|---|---|
approval_id | The request's id. |
approval_status | Pending, then Approved, Rejected or TimedOut. |
approval_target | web, slack, teams or email. |
approval_message | The message with row values filled in. |
approval_approve_url, approval_reject_url | The signed links sent to the approver. |
approval_responded_at | When the approver answered, or when the timeout passed. |
approval_responded_by | The 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
| Symptom | Cause | What to do |
|---|---|---|
| The run will not start and names loose ports | A decision port is not connected. | Connect approved, rejected and timeout. |
Rows leave on error | The 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 message | The 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 expired | The timeout passed. | The rows left on timeout. Raise the timeout for future runs. |
approval_responded_by is empty | The approver is not a user of the account. | No action needed. |