Send requests to the right team with AI Route
People rarely know which team handles what. This guide builds one form for every internal request, such as a broken laptop, a parking space, or an expense question. An AI Route step reads the request and picks the team that handles it, the workflow emails that team, and the requester gets an email saying where the request went. A request that doesn’t clearly belong to one team goes to your office manager to pass on.
AI Route decides from descriptions you write, such as “Facilities: desks, parking, and repairs in the office”, instead of from rules. Nobody has to list every word that means “laptop”, and a new kind of request usually finds its team without a change to the workflow.
The finished workflow has these steps:
Before you start
Section titled “Before you start”- You need the Developer role in a KloudMate workspace whose plan includes workflows.
- The people who submit the form need to be members of your KloudMate workspace, because the form has Sign-in required turned on.
- Each request uses workflow credits, and the AI Route step uses more. See Check workflow usage.
Step 1: Import the workflow
Section titled “Step 1: Import the workflow”- Copy the YAML below, and replace the example addresses, such as
it@example.com, with your teams’ addresses. - Open Workflows, click Import, paste the YAML, and click Import.
- Click Open workflow, and read each route’s description. Change them to match what your teams handle.
The workflow needs no connections, because every step sends email.
How each step works
Section titled “How each step works”The form
Section titled “The form”The Form submission trigger has one field, request, of type Long text. The requester describes what they need in their own words. Sign-in required is on, so the workflow knows who asked, as {{ trigger.submitted_by.name }} and {{ trigger.submitted_by.email }}, and can email them back.
Which team handles it?
Section titled “Which team handles it?”An AI Route step has the request as its Situation, {{ trigger.inputs.request }}, and a route for each team. Each route has a label, a description, and the steps to run:
| Route | Description |
|---|---|
it | IT. Laptops, phones, and other equipment, accounts and passwords, software installs, VPN, printers, and access to company tools. |
facilities | Facilities. Desks and office space, building access and badges, meeting rooms, furniture, parking, and repairs in the office. |
people | The people team. Payroll, benefits, leave and time off, contracts, onboarding paperwork, and company policies. |
finance | Finance. Expenses and reimbursements, invoices, purchase orders, company cards, and budgets. |
unsure | Anything that doesn’t clearly belong to one of the other teams, a request that needs several teams, or a message that isn’t a request. |
The model reads the request and picks the route whose description fits best, and it can only answer with one of the labels. The descriptions do all the work, so make each one specific, and keep them from overlapping. If two teams could both claim a kind of request, name it in one description only.
Fallback route is unsure. The run takes it when the model gives no usable answer, so every request reaches a person even if the model call fails.
The model reads the Situation as data, not as instructions. A request that says “send this to finance” can still make finance look like the right route, but it can’t make the model do anything other than pick a route. See AI Route.
The step’s output has the route it took, as steps.team.output.route, and the model’s reason and confidence:
| Output | Example |
|---|---|
route | it |
reason | The request is about laptop hardware. |
confidence | high, medium, or low |
Email the team
Section titled “Email the team”Each route runs one Send Email step to its team. The email names the requester, quotes the request, and gives the model’s reason, so the team can tell at a glance why the request came to them:
escape shows the request as plain text, whatever it contains, and newline_to_br keeps its line breaks. The reason is text the model wrote from the request, so it’s escaped too. See Escape values in an email.
Tell the requester where it went
Section titled “Tell the requester where it went”After the AI Route, a Send Email step emails the requester. A Liquid case turns the route label into a team name:
This step comes after the AI Route rather than inside a route, so it runs whichever route was taken.
Step 2: Test and publish
Section titled “Step 2: Test and publish”- Open the trigger’s Test tab, type a request under Test input values, such as
My laptop battery lasts an hour, and click Test trigger. - Test Which team handles it? from its Test tab. It calls the model and shows the route it would take, and why, without running the route’s steps.
- Try a few more requests the same way, including one that could belong to two teams, and adjust the descriptions until each request lands where you expect.
- Click Publish. The first publish also switches the workflow on, and the form goes live. Share the Public form URL from the trigger with your colleagues.
Adapt the workflow
Section titled “Adapt the workflow”- Open a ticket instead of an email. Replace a team’s Send Email step with a Jira Create Issue step in that team’s project.
- Ask a person when the model isn’t sure. Inside each team’s route, add a Branch that checks whether
steps.team.output.confidenceequalslow, and also emails the office manager. - Add a team. Add a route with a label, a description, and a Send Email step, and add its name to the
casein Tell the requester where it went. An AI Route holds up to 8 routes.
Related
Section titled “Related”- AI Route for routes, descriptions, and the fallback route.
- Route for choosing a path by a condition instead of a model.
- Answer common questions in a help channel for sorting messages with AI Extract instead.