How can we help you?

AI Workflow Orchestration Guide

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.


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.


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.


Have Moshky build this with you — no copy/paste needed

Open Moshky (the assistant built into Velaro) and just say what you want in plain language — for example: "I want a workflow that routes between BigCommerce and NetSuite" or "help me set up an AI orchestrator workflow." That's it. No prompt block to paste.

From there Moshky already knows to:

1. Ask which integrations are involved, and — this is the important one — ask directly which system owns which topic when two integrations could both plausibly answer the same question (e.g. "does NetSuite handle returns/RMAs, or does BigCommerce?"). It will not silently guess.

2. Ask whether any part of the flow needs a hard guarantee (a legal disclosure, payment collection, identity verification) versus general conversational routing.

3. Show you a preview with two choices: "Do it for me" — builds the workflow directly on your canvas, nothing to copy or type — or "Show steps" if you'd rather build it by hand. "Do it for me" is the recommended path; it removes any risk of a multi-line paste getting mangled.

4. After it's built, test on a duplicated/disabled copy before turning it on live, and tell Moshky if it's routing to the wrong integration — it can adjust the jump-target wording for you.


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."

Share: Email

Was this article helpful?