How can we help you?

AI Workflow Orchestration Guide

How to build a workflow where one bot handles general questions, order lookups, scheduling, and anything else — in any order — mid-conversation.


The short version

You need three things on the canvas:

1. Dedicated AI nodes — one per integration (NetSuite AI, BigCommerce AI, Calendly AI, AI Chatbot). Each node type automatically loads the right skills for that integration. No extra setup needed.

2. Section Entry nodes — one per AI node. These are just named waypoints. Zero config. They sit in front of each AI node as an addressable label.

3. Jump targets — on each AI node, you tell it which Section Entry nodes it can jump to, and when.

That is the entire system. The AI reads the jump target descriptions and calls the right jump tool when the visitor's message matches.


What each piece does

AI nodes

Each AI node automatically loads its own skills when execution reaches it. A few examples:

  • AI Chatbot — general conversation, KB answers, no integration skills
  • NetSuite AI — order lookup, case status, customer account, invoices, lead creation, returns and refunds when NetSuite is the system of record for them
  • BigCommerce AI — product search, pricing, availability, cart — not returns/refunds if a separate system (like NetSuite) owns that process; see "Which system owns what" below
  • Calendly AI — list meeting types, create scheduling links
  • Shopify AI, HubSpot AI, Salesforce AI, Dynamics AI, ServiceNow AI, SAP AI, Copilot Studio AI, Jobber AI, Monday AI, Outlook Calendar AI, MS Bookings AI, VAST AI, WooCommerce AI, Magento AI, Square AI, Klaviyo AI, Make AI — same pattern, one dedicated node per connected integration, each loading that integration's own skill set automatically

This is not the full list — every connected integration gets its own dedicated AI node type. The node picker inside the workflow builder (Add Node → AI category) is always the current, authoritative list — a static list here would go stale the moment a new integration ships. If you don't see a node type for something you've connected, check Integrations first; the node only appears once the integration is connected.

You do not configure which skills are available. They come with the node type automatically.

MCP is not required. MCP is an optional add-on for custom external tools you build yourself. The built-in integration skills load without it.

Section Entry node

A Section Entry node is a named waypoint. When another AI node jumps here, execution passes straight through to its child (the AI node below it). You only set one thing: the name. That name becomes the jump tool — a Section Entry named "Book Appointment" creates a jump_to_book_appointment tool on every AI node that lists it as a target.

In the node picker: Flow category → Section Entry

The only field: Section name (e.g. "General Help", "Order Lookup", "Book Appointment")

Jump targets (on each AI node)

In the right panel of any AI node, scroll to Jump to Workflow Section. Check the Section Entry nodes this AI can jump to.

When you check a section, the intent field auto-fills based on the node type below that section (e.g. Calendly AI auto-suggests "wants to schedule a meeting, book a demo, set up a call, pick a time"). You can edit or keep the suggestion.

For each jump target:

Jump here when the customer… — plain English description of the intent that triggers the jump

The AI uses this text to decide when to call the jump tool. Be specific. Use real customer phrasing.


Three ways to route a conversation — which one to use

There is more than one way to solve "get this visitor to the right place," and picking the wrong one for the situation is the most common setup mistake. All three can live in the same workflow.

Mechanism Use when Skip it when
Section Jump (this guide) The destination is a different automated branch of this same workflow — another integration's skills, a different topic, a deterministic sub-flow (see "guaranteed sequence" above). The AI decides at runtime by matching visitor intent. The destination is a human, not another automated step — use Transfer to Agents instead.
Plain prompt instruction The guidance is simple conversational behavior that doesn't need its own workflow branch — e.g. "if asked about pricing, mention the Enterprise plan starts at $X" said directly in the AI Config's system prompt. No node, no jump target, nothing on the canvas. The behavior needs its own skills, its own KB scope, or has to hand off conversation history to a different integration context — that needs a real Section Entry + AI node, not a prompt line.
Transfer to Agents node The goal is a live human on a team/schedule — no further AI decision-making needed once the workflow reaches this node. Skips AI-jump matching entirely. You want the AI to decide when to escalate based on visitor intent (e.g. "asked for a human," "failed twice," "mentioned pricing") — that decision still needs an AI node with a Jump Target pointed at a Section Entry that ends in Transfer to Agents. A bare Transfer to Agents node with nothing upstream can't read visitor intent on its own.

The AI-driven "jump to a human" pattern

What most support workflows actually want combines two of the mechanisms above: an AI node's Jump Target → a Section Entry node → ending in a Transfer to Agents node. The AI decides when (Section Jump), the Transfer to Agents node decides who/how (team, schedule, ring timeout). Skipping the Section Entry/jump-target wiring and just dropping a Transfer to Agents node into the canvas with no incoming AI decision means nothing will ever route there automatically — a visitor has to reach it by a fixed workflow path, not by an AI recognizing intent.


Working canvas: general chat + NetSuite + Calendly

This handles general questions, order lookups, and appointment booking in any order mid-conversation.

Canvas layout

[AI Chatbot]
      |
[Section Entry: "NetSuite Orders"] → [NetSuite AI]
[Section Entry: "Book Appointment"] → [Calendly AI]
[Section Entry: "General Help"] → [AI Chatbot]

The arrows above are not workflow connections — they are parent→child relationships (each Section Entry has one child). The jumps between them are configured inside each AI node's panel, not as canvas arrows.

Node 1: AI Chatbot (starting node)

This is the first node in the workflow. The visitor starts here.

Field Value
AI Config your main bot config
Jump to Workflow Section check "NetSuite Orders"
→ Jump here when the customer… asks about an order, invoice, account balance, payment status, open cases
Jump to Workflow Section check "Book Appointment"
→ Jump here when the customer… wants to schedule a meeting, book a demo, set up a call, pick a time

Node 2: Section Entry

Field Value
Section name NetSuite Orders

Child node: NetSuite AI (below it on canvas)

Node 3: NetSuite AI

Field Value
AI Config your main bot config (or a NetSuite-specific one)
NetSuite Config select your NetSuite connection
Jump to Workflow Section check "General Help"
→ Jump here when the customer… done with orders, has a different question, wants general help
Jump to Workflow Section check "Book Appointment"
→ Jump here when the customer… wants to schedule a meeting, book a call, talk to someone

Node 4: Section Entry

Field Value
Section name Book Appointment

Child node: Calendly AI (below it on canvas)

Node 5: Calendly AI

Field Value
AI Config your main bot config (or a Calendly-specific one)
Jump to Workflow Section check "General Help"
→ Jump here when the customer… booking is confirmed, done scheduling, has other questions
Jump to Workflow Section check "NetSuite Orders"
→ Jump here when the customer… asks about an order, invoice, or account while booking

Node 6: Section Entry

Field Value
Section name General Help

Child node: AI Chatbot (below it on canvas) — same config as Node 1, same jump targets


How it flows at runtime

1. Visitor starts → hits AI Chatbot → general conversation + KB answers

2. Visitor says "what's the status of my order?" → AI calls jump_to_netsuite_orders

3. New session starts at Section Entry: NetSuite Orders → drops into NetSuite AI → order lookup skills active

4. NetSuite AI answers, visitor says "great, can I book a call?" → AI calls jump_to_book_appointment

5. New session starts at Section Entry: Book Appointment → drops into Calendly AI → scheduling skills active

6. Calendly AI books the meeting, visitor says "thanks, one more question" → AI calls jump_to_general_help

7. Back to AI Chatbot → general conversation continues

No fixed sequence. Visitor can go in any order. The full conversation history is always preserved — each new AI can see everything said before.


KB answers work everywhere

All three AI nodes can be pointed at the same AI Config. That AI Config has your knowledge base (Azure AI Search) attached. So whether the visitor is talking to the general AI, the NetSuite AI, or the Calendly AI — they all answer KB questions from the same source. You only set it up once.


Does it work on SMS and IVR?

Yes. The section jump mechanism works on all channels:

  • Web chat — full experience
  • SMS — the AI sends scheduling links as plain text URLs; Calendly works over SMS
  • IVR (voice) — the AI reads out options and collects responses; scheduling links are sent via SMS follow-up. IVR-specific skills add a send_sms_followup tool that fires a link to the caller's phone.

Channel-aware skills automatically adapt their responses to the channel. No extra configuration needed.


Adding BigCommerce to the mix

Add two more nodes:

Section Entry: "Product Help" → child: BigCommerce AI

On the BigCommerce AI node set jump targets to "General Help", "NetSuite Orders", "Book Appointment" with appropriate when-descriptions.

Then add "Product Help" as a jump target on the AI Chatbot, NetSuite AI, and Calendly AI nodes with:

asks about a product, price, availability, or shipping before buying

If NetSuite is your system of record for orders and returns, do not send "returns" phrasing to BigCommerce. See "Which system owns what" below — this is exactly the kind of overlap that needs an explicit call.


Which system owns what — the NetSuite/BigCommerce example

The most common two-system overlap: BigCommerce is the storefront, NetSuite is the order/returns system of record. A visitor asking about a return is talking about a NetSuite object even though they bought it on BigCommerce.

Set this up explicitly, don't leave it to guesswork:

  • On the BigCommerce AI node's jump targets, phrase the NetSuite jump narrowly and completely: asks about an order status, return, refund, or exchange — and do NOT list "returns" in BigCommerce AI's own product-help description, so the model isn't pulled two directions at once.
  • On the NetSuite AI node, make sure "Book Appointment" and "Product Help" jump targets exist so a visitor who lands there first for a return can still pivot to a product question without dead-ending.
  • Important limit: jump-target wording is a strong steer, not a hard lock. PermittedSkills (the skill list actually loaded on a node) is the one thing that's enforced — if BigCommerce AI still has its own refund/cancel-order skills enabled, it CAN complete a return on its own even with clean jump-target wording, because the model has a working tool for it. If NetSuite must be the only system that ever processes a return, remove BigCommerce's own refund/cancel-order skills from that node's skill list (Skill Permissions panel) rather than relying on wording alone.

This pattern generalizes to any two systems with overlapping data: a CRM and a support-ticket system, two calendars, a CRM and native contacts. Identify which system is the real system of record for each data type, phrase the losing system's jump targets to route that topic away, and if a hard guarantee matters, restrict that node's own skill list to match.

Which tool does the AI use when two systems overlap (live stock)? When an ERP stock tool such as NetSuite or SAP is available to a bot, Velaro removes the storefront stock tools (Magento, Shopify) from that bot's tool list, so stock answers always come from the system of record. To keep both tools for your site, open Settings > AI Settings > Tool authority and choose "Keep both tools" (Administrators only). Every change is logged with who changed it and when, the card shows the recent history, and Revert last change restores the previous setting.


Moshky Analyze warns you about this automatically

You don't have to catch skill overlaps like the NetSuite/BigCommerce returns example by hand. Open Analyze (the sparkle icon in the workflow toolbar) and it checks every AI node on your canvas for overlapping capabilities — order lookup, returns/refunds, scheduling, case/ticket handling, and contact lookup — and warns you when two nodes can both independently complete the same kind of action.

There is no forced "one system wins" rule. Having two integrations both technically able to handle returns isn't automatically wrong — sometimes that's intentional. Analyze surfaces it as a warning with your choice of what to do:

  • Disable on [Integration] AI — one click removes just the conflicting skill(s) from that node's permitted skill list. The other node keeps it.
  • Keep both — dismiss — if the overlap is intentional, dismiss it and move on.

Whichever you pick is written to the Activity Log (who, when, which node kept the skill, which skill names were removed) so if a customer's return later gets processed by the "wrong" system, you can look up exactly when and how that was set up rather than guessing.

This check only looks at dedicated integration AI nodes (NetSuite AI, BigCommerce AI, Shopify AI, and so on) — the generic AI Chatbot node's skill list is intentionally excluded since it's expected to draw from many integrations at once.


What the Specialist Agents panel does (and does not do)

Every AI node has a Specialist Agents panel. This swaps the AI's personality (system prompt) mid-conversation without changing which node is running. It does NOT load integration skills. A Specialist Agent running inside an AI Chatbot node does not gain NetSuite or Calendly skills — it only gets the system prompt of the specialist AI config.

Use Specialist Agents for: swapping tone or expertise within the same integration context.

Use Section Jumps for: switching between integrations (NetSuite → Calendly → BigCommerce).


Gathering information before an action or transfer

You do not need a chain of Ask-a-Question nodes to collect what an action needs before it runs. When a skill (an order lookup, a booking, an escalation) requires specific information, the AI already knows what's required and asks for exactly the missing piece — in whatever order the visitor volunteers it.

If the visitor gives three answers in one sentence ("it's order 4471, my email is jane@x.com, and I need it by Friday"), all three are captured at once and nothing already given is asked for again. If the visitor changes the subject halfway through, the bot recognizes the pivot, drops the old ask, and picks it back up later if the visitor returns to it. This works the same way whether the AI is collecting for an order lookup, a booking, or a live-agent transfer.

What this means for you as the workflow builder: you don't model "ask for order number, then ask for email, then ask for date" as three separate canvas nodes. One AI node, with the right skill enabled, handles all of it conversationally.


When you need a guaranteed, deterministic sequence instead

For most workflows — general support, order lookups, scheduling, routing to a department — the AI-driven approach above is the right default. A small number of situations genuinely need a fixed, guaranteed sequence: a required legal or compliance disclosure read verbatim before continuing, a secure/PCI payment field, or a strict identity-verification sequence.

You do not need a separate bot or a second workflow for this. Add a Section Entry node as a jump target the same way you would for any other topic, but make its child nodes ordinary deterministic canvas — Ask-a-Question nodes, branches, a Secure Data collection node — in the exact order you need. When that section finishes, it hands back to the AI node that jumped to it, and the conversation continues naturally.

This is the exception, not the default. Reach for it only when a step genuinely must happen in a fixed order with no room for interpretation.


Building this yourself today

Moshky (the assistant built into Velaro) can explain how this pattern works and help you think

through the design — which integration should own which topic, whether a step needs a hard

guarantee versus conversational routing — the same way this guide does. **Moshky cannot build or

edit the AI-to-AI handoff wiring itself yet** (which specialist a node hands off to, and under

what conditions) — that has to be set up by hand on the canvas, in the Specialist Agents panel on

the AI node you want to act as the concierge, the same way you'd configure any other node.

To build one by hand:

1. Pick or create the node that should be the concierge — generally the one handling the first

general turn of the conversation. Prefer a concierge with no integration credentials of its

own; giving it credentials widens its own tool menu and makes it less likely to delegate.

2. Open that node's Specialist Agents panel and add each specialist AI config, with a plain-

language condition for when to hand off to it (e.g. "customer asks about billing, invoices, or

payment history").

3. Test the handoff on a duplicated/disabled copy before turning it on live — ask questions that

should and shouldn't trigger each handoff, and confirm the right specialist responds.

We're working on bringing this into Moshky directly so you won't need to do this by hand — until

then, treat the steps above as the setup path.


Prerequisites

Before the workflow runs, each integration must be connected:

  • NetSuite AI: Integrations → NetSuite → add credentials. Select the config in the NetSuite AI node.
  • BigCommerce AI: Integrations → BigCommerce → connect store. Select config in node.
  • Calendly AI: Integrations → Calendly → add Personal Access Token, select default event type. No config picker on node — it uses the site's connected Calendly account automatically.

Troubleshooting

AI never jumps to another section

The "Jump here when the customer…" text is too vague or doesn't match what visitors say. Use specific natural language matching real visitor phrasing. The auto-suggest fills in a good default — start from that.

NetSuite AI has no order lookup tools

The NetSuite Config is not selected on the node, or the NetSuite integration is not connected in Integrations → NetSuite.

Calendly AI can't create links

Calendly integration is not connected in Integrations → Calendly, or EnableCalendlySkills is not enabled on the site subscription.

After a jump the conversation history is lost

It is not lost. Each jump starts a fresh AI session but the full conversation history on the chat thread is preserved. The new AI can see all prior messages.

AI keeps jumping in circles

Each AI node is jumping before resolving the visitor's question. Make the "Jump here when the customer…" text more specific — add "after resolving their current question" or "only if the topic completely changes."

The AI tried to jump but the visitor was never routed, and the Activity Log shows a "SectionJump failed" entry (e.g. "WorkflowNodesBlob missing on AutomationJob — cannot recreate workflow")

This means the workflow's node snapshot wasn't available on the runtime's own conversation record at the moment the jump was attempted — the jump target existed, but the runtime had nothing to resolve it against. This is a platform-side gap (a channel/handoff code path that didn't carry the node snapshot forward), not a workflow configuration mistake — there is no confirmed case where re-publishing the workflow resolves this specific message. Check the conversation's Activity Log entry for the exact reason text and escalate with the conversation ID.

Ask Moshky "why did my section jump fail" with the conversation ID — it can pull the live Activity Log entry for that conversation and tell you plainly whether it's this platform-side gap or a different configuration issue, rather than you having to search for it.

The workflow greets the visitor and then goes silent

A Send Message node does not wait for a reply, so a flow that ends right after a greeting just stops. Make the greeting an Ask Question node with the Text type (for example "How can I help today?"), then connect it to your first AI node so the visitor's answer is picked up. Moshky can convert the greeting for you.

The workflow does nothing at all

Check that it is switched on. A disabled workflow never fires, even when the trigger and nodes look right. Also confirm the trigger's URL or channel conditions match the page you are testing on.

"Jump to Anywhere on Canvas - Unconnected nodes OK" is selected on the trigger, so is a loose layout fine?

Yes. That setting only means nodes that are not wired together are allowed. It does not make them reachable. An unconnected node is only reached when an AI node jumps to it, which needs every rule in the next entry.

Rules for AI nodes that other nodes should jump to (Smart Topic Switching)

1. Turn on Workflow Intent Jump for the site in Site Settings → AI Settings. It is off by default, and without it no intent label does anything.

2. Give every AI node that can be a jump target an Intent label (a short name such as "Stock, orders, returns and wholesale") and Intent examples (real visitor phrases, one per line, such as "Where is my order?").

3. Describe, in each node's jump text, when to jump and when to stay. Name the topics to keep, so two nodes do not bounce the visitor back and forth.

4. Keep one place per topic. For example products, coupons and cart on the Magento AI node, and stock, order status, returns, damaged items and wholesale or bulk on the NetSuite AI node.

5. After any change, retest with one visitor phrase per topic and check the Activity Log for the jump.

Moshky ideas for workflows

  • When a workflow is disabled, say so first and offer to enable it.
  • When the flow ends on a Send Message, offer to turn it into a free-text question.
  • When an AI node has no Intent label or examples and the site has intent jumping off, offer to fill suggested ones from the node's skills and turn the setting on.

Which tool does the AI use when two systems overlap (for example Magento and NetSuite)?

Velaro decides this in code, not in the prompt, so the AI never has to guess.

  • Live stock: the ERP is the source of truth. When a NetSuite or SAP stock tool is available to the bot, the storefront stock tools (Magento, BigCommerce, Shopify, WooCommerce, Square, Squarespace) are removed from the bot's tool list. Without an ERP stock tool, the storefront stock tool is used and its answer is a catalog snapshot that can lag.
  • Product search: storefront catalog search (names, prices, URLs) and the NetSuite item master (internal item records) both stay available, because they answer different questions. Live availability always goes to the stock tool.
  • A NetSuite role that cannot read invoices or other transactions: Velaro automatically retries on the dedicated record (invoice, credit memo, payment and so on). If NetSuite still refuses, the Activity Log shows an error and the customer is not told the lookup worked. Fix it by giving the NetSuite role View permission on that record type.
  • Who can change it: these rules are Velaro-owned defaults and apply to every site. Ask Moshky "why did the AI use the storefront stock tool" and it will check whether an ERP stock tool was available to that bot.
Share: Email

Was this article helpful?