Agent setup guide
Print-on-Demand Order Watch
Printful orders that fail, go on hold or sit in production for 7 days are alerted in Slack, with a customer update drafted for your approval.
What it does
Printful orders that fail, go on hold or sit in production for 7 days are alerted in Slack, with a customer update drafted for your approval.
- Follows every Printful order status change.
- Decides in code what needs you: failed or on-hold orders at once; pending or in-production orders that haven't moved after 7 days (change the days on the Wait step).
- Posts each one to your Slack channel straight away, with the order, the recipient and the status.
- AI notes what the status usually means and what to check in Printful, and drafts a short, honest update for the customer.
- The update waits for your approval; then code checks the address and wording and it's emailed with replies to your inbox.
What it needs
- A paid plan (agents run live on paid plans).
- An AI provider key (Settings → AI Providers).
- Printful and Slack, connected in Settings → Integrations.
- Orders that carry the customer's email (Printful's recipient email).
What it doesn't do
- Printful only: Printify orders aren't watched.
- It can't see Printful's reason for a hold and never changes, confirms or cancels orders.
- Nothing reaches the customer without your approval.
- Waits need Wait steps (migration 0062) in your workspace.
Availability and plans
Available
Its workflow is built and tested, and every app it needs is live. You can get it and set it up now.
Included free on the Enterprise plan; on other paid plans it's a one-time purchase per workspace (the price is on the Agents page). The Agents page in the app always shows its current status.
Before you start
- A paid plan: agents run live, and the Free plan only runs Dry Runs.
- An AI provider key (OpenAI, Anthropic, Google and more) in Settings → AI Providers. AI usage is billed by your provider.
- These apps, connected in Settings → Integrations: Printful and Slack.
- The app it watches, connected in Settings → Integrations (the agent starts from an app event).
- About 10 minutes.
Set it up step by step
Get the agent first (buy it, or it's already yours when your plan includes it), then in Agents → My agents press “Set up this agent”. That creates the agent's workflow in your workspace (it counts towards your plan's workflow limit) and opens the canvas with a setup checklist above it. Each item links to the exact place to go and ticks itself off when it's done.
1. Connect your AI provider
The AI steps run on your own key (OpenAI, Anthropic, Google and more). Add one in Settings → AI Providers.
2. Connect Printful
Connect Printful with a private token with the orders scope (Settings → Integrations → Printful).
3. Connect Slack
Connect the Slack workspace your team uses (Settings → Integrations → Slack).
4. Pick your Printful store
Open the trigger and “Read the order again” and pick your Printful connection.
| Setting | What to enter | In step |
|---|---|---|
| Printful account | The Printful store whose orders are watched. Pick your connected Printful account. | “Printful order status changed” |
| Printful account (re-check, same one) | The same Printful connection. Pick your connected Printful account. | “Read the order again” |
5. Pick the Slack channel
Open “Alert the team in Slack” and pick the account and channel.
| Setting | What to enter | In step |
|---|---|---|
| Slack account | The Slack workspace your team uses. Pick your connected Slack account. | “Alert the team in Slack” |
| Slack channel for order alerts | Where order alerts go, e.g. #orders. | “Alert the team in Slack” |
6. Describe your shop
Open “Draft the customer update” and replace the placeholder, then enter the Reply-to on “Email the customer”.
| Setting | What to enter | In step |
|---|---|---|
| Your shop and delay policy | Replace the placeholder with your shop, usual production and shipping times, what you offer for delays, your support email, tone and sign-off. It starts as “[DESCRIBE YOUR SHOP, YOUR USUAL PRODUCTION AND SHIPPING TIMES, WHAT YOU TELL CUSTOMERS WHEN AN ORDER IS DELAYED, YOUR REFUND OR RESHIP POLICY IN YOUR OWN WORDS, YOUR SUPPORT EMAIL, YOUR TONE AND YOUR SIGN-OFF]” until you replace it. | “Draft the customer update” |
| Your inbox (replies) | Customers' replies come back to this address. | “Email the customer” |
7. Test it with Dry Run
Press Dry Run: the agent runs on sample data with no messages sent and nothing written to your apps.
8. Switch the trigger on
Open the trigger and press “Activate app trigger”. Status changes are picked up every few minutes.
How it works
The agent is a normal workflow with 15 steps (1 AI step, with a person approving in Reviews). You can open, edit and monitor it like any other workflow.
- Printful order status changed — Starts on “Order status changed” in Printful (an app event). Starts a run each time a Printful order reaches a new status (checked every few minutes).
- Problem or watch? — Decision: picks the branch to follow. In code: failed or on hold needs a look now; pending or in production is watched; every other status (draft, fulfilled, canceled…) ends here.
- Nothing to do — Kept in the run history. Branch: Nothing to do. Draft, fulfilled, partially fulfilled, canceled and archived orders need nothing.
- Wait 7 days — Waits 7 days. Branch: Watch. Gives Printful 7 days to move the order on. Change the number of days on this step (up to 30).
- Read the order again — Printful: Get an order. Reads the order's current status in Printful.
- Still stuck? — Decision: picks the branch to follow. In code: still pending or in production after the wait means it's stuck. Anything else (shipped, canceled, on hold — which starts its own run) ends here.
- Moved on — Kept in the run history. Branch: Moved on. The order isn't stuck any more.
- Alert the team in Slack — Slack: Post a message. Branch: Failed or on hold / Stuck. Posts the order, its status and why it needs a look to your Slack channel at once (internal, no approval).
- Draft the customer update — AI step (runs on your AI provider key). AI explains for you what the status usually means and what to check in Printful, and drafts a short, honest update for the customer.
- Approve the customer update — A person approves or rejects it in Reviews (the run waits). The update waits in Reviews: edit it, set json.send_to_customer to false to send nothing, and approve. Reject to send nothing.
- Check before sending — Step. Branch: Approved. In code: still marked to send, one valid customer email on the order, a subject and body with no placeholders.
- Send it? — Decision: picks the branch to follow. Passes: emailed. Otherwise held, with the reason in the run history.
- Held: not sent — Kept in the run history. Branch: Held. Set to not send, no customer email on the order, or the update was incomplete.
- Email the customer — Sends an email from your workspace's sender. Branch: Send. Sends the approved update from your workspace's sender, with replies to your inbox.
- Update sent — Kept in the run history. The run history keeps the alert and the update.
Test it with Dry Run
Press Dry Run in the canvas. The agent runs on the sample data stored on its trigger (the “Sample data for Dry Run” box), so you can check every step's output before anything is live. The sample has the same shape as a real event from the app.
Sample data fields
status, id, external_id, store_id, recipient_name, recipient_email, recipient.name, recipient.address1, recipient.city, recipient.state_code, recipient.country_code, recipient.zip, items (a list), total, currency, shipments (a list), tracking_number, tracking_url, created, updated, order.
- Nothing is sent or written: app actions, emails and Slack posts are simulated, and AI steps don't call your AI provider.
- Approval steps use the Dry Run decision you pick in the step's settings (approved, rejected or timeout), so you can try each branch.
- Wait steps don't wait: they report how long they would wait and the run goes on.
Go live
- Open the trigger and press “Activate app trigger”. Status changes are picked up every few minutes.
- Activating the app trigger needs the trigger's connected account. The first check only remembers what's already there, so older items don't start runs; the same item never starts two runs.
- The setup checklist adds a “paid plan” item before activation: live runs need a paid plan (the Free plan only runs Dry Runs).
- When every checklist item is done and the trigger is on, the checklist says “Live — this agent is running”. Follow its runs in the workflow's History tab and in Analytics → Agents.
Questions
Does it cover Printify?
No, this agent watches Printful. One agent starts from one app's events, so Printify would be a separate agent.
Can it see why Printful put an order on hold?
No. Printful's order data shows the status, not the reason, so the note says what the status usually means and what to check. The customer update never mentions Printful.
How is “stuck” decided?
In code: an order that is still pending or in production 7 days after it got there. Change the days on the Wait step.
Troubleshooting
- “No AI provider connected” or a rejected key: connect or fix the key in Settings → AI Providers, then press Test there.
- A checklist item stays unticked: the setting is still empty or still contains its placeholder text. Open the step from the checklist and fill it in.
- An app step fails with “Needs reconnect”: the account's access was revoked or expired. Reconnect it in Settings → Integrations.
- Slack says the app isn't in the channel: in Slack, type /invite @Fluxo Flow in that channel (always needed for private channels).
- No runs start: activate the app trigger with a connected account. Only items created after activation start runs.
- A run shows as paused: it's waiting for someone in Reviews to approve or reject it.
- A run shows “Waiting until …” in History: that's a Wait step; it continues on its own (it can be cancelled through the API).
- A step failed: open the run in History and check that step in the Trace tab for the error and what it received.
Generated from the agent's own workflow, so it always matches what the agent does. Last updated .