- Documentation
- Workflows
- Workflow Nodes
- System nodes
System nodes
Use built-in TaskJuice nodes for workflow logic, AI, HTTP requests, transformations, and reusable workflows.
System nodes are built into TaskJuice. They do not require choosing a third-party app.
User-facing system nodes
| Node | Category | Use it for |
|---|---|---|
| AI Generate | AI | Generate text from a prompt and selected model. |
| AI Extract | AI | Extract structured JSON from text using a schema. |
| Branch | Control flow | Route to two or more paths using conditions. |
| Delay | Control flow | Pause for a fixed duration before continuing. |
| HTTP Request | Data and developer | Call an arbitrary HTTP API with optional auth and retries. |
| Loop | Control flow | Repeat by count, array item, or condition. |
| Parallel | Control flow | Run multiple branches concurrently and merge their outputs. |
| Call Workflow | Reusable | Invoke another published workflow. |
| Respond | Data and developer | Answer the caller of a Respond-mode webhook with an authored HTTP response. |
| Sort | Data and developer | Order a batch by one or more fields, with an optional Top-N. |
| Switch | Control flow | Route by matching one selector value against cases. |
| Transform | Data and developer | Apply ordered data transformations. |
| Voice Agent | AI | Answer a phone call with a realtime voice model (details). |
Disabled, incomplete, or future-facing catalog rows are intentionally hidden from the user-facing node picker.
AI Generate
Use AI Generate to produce text from a prompt. Configure the model, prompt, and any context values the prompt needs.
Best for summaries, drafts, classifications that do not need strict JSON output, and generated user-facing copy.
AI Extract
Use AI Extract when the workflow needs structured data from unstructured text. Configure the source text and expected schema.
Best for extracting fields from emails, tickets, notes, uploaded text, or app records.
Remember the conversation (AI Agent memory)
An AI Agent can remember what each customer said in earlier runs. On the agent, click + on the Memory port to add a Memory sub-node. Open it and turn on Remember the conversation.
Each customer gets their own memory, matched by a trigger field that is different for each customer, like their phone number. For a known messaging trigger, like Twilio Incoming SMS, that field is picked for you, and the panel reads Remembering per: Sender phone number. Click Change to pick a different trigger field.
For any other trigger, pick the field yourself, like the customer's phone number or email. Pick a field the sender can't fake, like the phone number on a text, because anyone who types in someone else's email could see that person's past chats. You can't save or publish until you do. A fixed value, like 'shared', is refused, because it would put every customer in one conversation.
The agent reads back up to the last 20 messages, from the customer and the agent. It forgets each message 90 days after it was sent.
Two limits to know:
- The agent only remembers messages it handled itself, so a first text sent by a plain Send SMS step or another workflow, or a reply your staff send by hand, is not in its memory. If your workflow opens the conversation, describe that opening message in the agent's instructions (its System Prompt), for example: "You texted new leads asking if they want a quote."
- Deleting and re-adding the agent, or duplicating the workflow, starts with a fresh memory.
Branch
Use Branch to route to two or more paths using conditions. Each condition should be clear enough that another builder can understand why a record enters that path.
Delay
Use Delay to pause for a fixed duration. Configure the duration and unit in the node panel.
HTTP Request
Use HTTP Request to call an API directly from a workflow. Configure method, URL, headers, query parameters, body, timeout, and retry behavior.
To upload a file as the entire request body (a signed upload URL, for example), set Body Encoding to binary and Body to { "file": "{{ $steps.<step>.data.file }}" }.
Use a dedicated app action instead when TaskJuice already provides one for that app. App actions are easier to maintain and usually handle authentication more safely.
Loop
Use Loop when a workflow should repeat over items or until a condition changes. Keep loop bodies focused and test with small sample inputs before publishing.
Parallel
Use Parallel to run independent branches at the same time. Configure branch labels and merge behavior so downstream nodes receive predictable output.
Call Workflow
Use Call Workflow to invoke another published workflow. This is best for shared business processes that multiple workflows need to reuse.
Respond
Use Respond to answer the HTTP caller of a webhook trigger whose Response mode is Respond node. Configure the status code, the content type (json, text, xml, or empty), the body — the node's mapped input for JSON, or a template for text and XML — and any allow-listed headers. The response is sent the moment the node runs; nodes after it keep running in the background. Outside a synchronous request (a node test, Run now, or a workflow on Immediate ACK) the node succeeds but sends nothing and says so in its output. The webhook trigger reference lists every rule: the status ranges, the header allow-list, the 256 KiB body bound, and which nodes may run before a Respond node.
Sort
Use Sort to put a batch of items in a deterministic order, such as "newest first", "highest score first, then alphabetical", or "top 10 by amount". Sort works on the items array a batch trigger, a merge of several steps, an RSS or polling cycle, or a Code node produces. It reorders the items and, optionally, keeps only the first N.
If the upstream service can return data already ordered, prefer that, for example a SQL ORDER BY, a SOQL ORDER BY, or an API sort parameter. Sort is for in-memory collections that arrive
in no particular order: webhook array batches, merged multi-step output, RSS or polling cycles,
and Code node output.
Add one or more sort keys in the node panel. The first key is primary, and each key after it breaks the previous keys' ties, so "by status, then by date descending" is two keys in that order. Drag a key, or use the keyboard, to change its priority. Each key has its own ascending or descending direction, and each key is a dot-path into every item, such as score, createdAt, or attributes.priority. A sort key reads a field on each item in the batch; it is not a workflow expression.
Sort gives you three guarantees that make output reproducible across runs:
- A documented order for every value. Across different value types, items order by a fixed rank: true and false first, then numbers, then text, then objects and arrays. Within a type, the natural order applies. There is never an engine-dependent surprise.
- Missing and null values always sort last, in both ascending and descending order. A missing field, an explicit
null, and a not-a-number value are treated the same way, so incomplete records sink to the bottom rather than scattering through the list. Descending order does not pull them to the top. - A stable order on ties. When two items have the same values for every key, they keep their original input order, so re-running the same workflow produces the same result.
To keep only the best results, set Keep top N: after sorting, Sort keeps the first N items and drops the rest. Leave it blank to keep every item. The test result panel shows how many items came in, how many went out, and how many the limit dropped.
Switch
Use Switch when one selector value should choose one of several paths. Add a default path for values you do not recognize.
Transform
Use Transform to reshape data before it reaches another node. Prefer explicit transformations with clear target fields over hiding complex logic in one expression.