Multi-Agent IT Service Desk
Build a multi-agent IT Service Desk with external API data and autonomous triggers.
Introduction
30 Second Summary
When your team's IT help desk gets flooded with requests, the bottleneck is never a single skill gap. It's the routing. Someone needs printer help. Someone else needs a VPN fix. A third person wants to escalate a ticket. Each query demands a different specialist, and the person triaging is overwhelmed.
In this project, you will build a multi-agent IT Service Desk in Microsoft Copilot Studio that automatically routes employee queries to specialized child agents, pulls real-time data from external APIs, and autonomously responds to new support tickets without any human prompt.
What You'll Build
An employee types "What's the status of my printer issue?" and instantly gets an answer grounded in live enterprise data. They ask "How do I reset my VPN?" and a specialized agent fetches a knowledge base article from an external API in real time. When a new ticket lands in the system, the agent acknowledges it on its own.
By the end of this project, you'll have:
- A multi-agent orchestrator that intelligently routes employee queries to the right child agent based on intent, using generative orchestration.
- A working external API integration that pulls real-time knowledge base articles from a public REST API via HTTP Request nodes.
- An autonomous event trigger that fires when new tickets appear in a Dataverse table, responding without any user interaction.
- Secret Mission: Add an agent flow as a real-time tool that creates new tickets in Dataverse directly from the conversation.
Are there any prerequisites?
This is an advanced project. You need experience building basic agents in Copilot Studio and a Copilot Studio Premium license with Dataverse access.
If you have not built a basic agent before, complete an introductory Copilot Studio project first.
Before We Start
Before we dive in, let's lock in what you're about to build and why it matters. You're going to architect a multi-agent IT Service Desk that combines generative orchestration, real-time external API calls, and autonomous event triggers into one production-grade solution.
Set Up the Orchestrator Agent and Dataverse Table
Every multi-agent system starts with a foundation. Before you can wire up child agents, external APIs, or event triggers, you need the parent agent that coordinates everything.
In this step, you will create the orchestrator agent in Copilot Studio and build the Dataverse table that stores your IT ticket data. These two pieces form the backbone of your entire service desk.
In this step, get ready to:
- Create the IT Service Desk orchestrator agent with generative orchestration.
- Build the IT Tickets Dataverse table with sample data.
- Connect the table as a knowledge source to the orchestrator.
Create the orchestrator agent in Copilot Studio
The orchestrator is the parent agent that employees interact with directly. It uses generative orchestration to intelligently route queries to the right child agent based on intent.
- Open your browser and navigate to https://copilotstudio.microsoft.com.
- Sign in with the account that has your Copilot Studio Premium license.
- On the Agents page, click Create blank agent.
Why create a blank agent?
The natural language agent creation generates AI-suggested instructions that you would need to override anyway. Starting blank gives you full control over the orchestrator's instructions from the beginning.
- Once Copilot Studio finishes provisioning, you land on the Overview page.
- In the Details section, click Edit.
- Set the agent name to IT Service Desk.
- Click Save.
- In the Instruction section of the Overview page, click Edit.
- Paste the following instructions into the instruction field:
You are an IT Service Desk orchestrator. You coordinate between specialized agents to help employees with IT issues. You are the only agent that communicates with the user. Combine findings from all child agents into a single response.
Why these specific instructions?
The line "You are the only agent that communicates with the user" enforces the single-response principle. Without it, child agents may reply directly to the user, causing confusing duplicate messages.
"Combine findings from all child agents into a single response" ensures the orchestrator synthesizes information rather than passing through raw outputs from each child.
- Click Save.
Newly created agents in Copilot Studio have generative orchestration enabled by default. No extra configuration is needed to turn it on.
- Open the test panel by clicking Test at the top of the page.
- Type Hello and press Enter.
The agent should respond with a greeting. This confirms your orchestrator is live and responding.
Agent not responding?
- Make sure you clicked Save after editing both the name and the instructions.
- Check that your environment has generative orchestration available. If your admin has disabled it, you will see a notice in the agent's settings.
- Try refreshing the page and reopening the test panel.
help me debug my Copilot Studio agent not responding in the test panel
Create the IT Tickets Dataverse table in Power Apps
The orchestrator needs data to ground its answers on. You will create a Dataverse table that represents IT support tickets, then populate it with sample rows.
- Open a new browser tab and navigate to https://make.powerapps.com.
- Sign in with the same account you used for Copilot Studio.
- In the left navigation, click Tables.
- Click the New table dropdown in the command bar.
- Select Set advanced properties.
- In the Display name field, enter IT Tickets.
- Set the primary column display name to Title.
- Click Save.
Your table is created. Now add the remaining columns.
- From the command bar, click New then Column.
- Set Display name to Description and Data type to Multiple lines of text.
- Click Save.
- Add another column: Display name set to Status, Data type set to Choice.
- Select New choice and add three labels: Open, In Progress, and Resolved.
- Click Save.
- Add another column: Display name set to Priority, Data type set to Choice.
- Select New choice and add three labels: Low, Medium, and High.
- Click Save.
- Add a final column: Display name set to AssignedTo, Data type set to Single line of text.
- Click Save.
Now add sample rows so the agent has data to work with.
- Click + New row and enter: Title Printer not working, Description Office printer on 3rd floor not responding to print jobs, Status Open, Priority Medium, AssignedTo Alex.
- Add a second row: Title VPN connection drops, Description VPN disconnects every 15 minutes during remote work, Status In Progress, Priority High, AssignedTo Jordan.
- Add a third row: Title Email sync issue, Description Outlook not syncing new emails on mobile device, Status Open, Priority Low, AssignedTo Sam.
You should now see three rows in your IT Tickets table. Each row has a Title, Description, Status, Priority, and AssignedTo value filled in.
Don't see your columns when adding rows?
- Click the + column selector (shown as a number like "+5 more") in the columns header to display additional columns in the table view.
- Make sure you clicked Save after creating each column. Columns are not persisted until saved.
help me see my custom columns when adding data to a Dataverse table in Power Apps
Connect Dataverse as a knowledge source
Connecting the IT Tickets table as a knowledge source grounds the agent's responses in your live ticket data. When someone asks about ticket status, the agent queries Dataverse directly.
- Switch back to the Copilot Studio tab where your IT Service Desk agent is open.
- On the Overview page, scroll to the Knowledge section and click Add knowledge.
- Select Dataverse as the source type.
- Search for and select your IT Tickets table.
- Set Authentication to Authenticate with Microsoft.
Why Authenticate with Microsoft?
Dataverse knowledge sources require this authentication setting. The options "No authentication" and "Authenticate manually" are not supported for Dataverse tables.
- In the Description field, enter:
Contains all IT support tickets including their status, priority, description, and assignment. Use this to answer questions about existing ticket status and details.
Why does the description matter?
The orchestrator uses this description to decide when to query this knowledge source. A detailed, action-oriented description helps the agent correctly route ticket-related questions to this table instead of attempting a generic response.
- Click Add, then click Add to agent.
What is Dataverse search?
Dataverse search must be enabled in your environment for tables to work as knowledge sources. If you encounter issues later when querying ticket data, ask your admin to verify that Dataverse search is turned on in the Power Platform admin center.
Before you move on, take a moment to predict: if you type "Hello" in the test panel again, do you think the response will be different now that you have added a knowledge source?
- Open the test panel and type Hello to confirm the agent still responds with a greeting.
- Switch to your Power Apps tab and confirm your 3 sample rows are visible in the IT Tickets table.
The greeting should look similar to before. The knowledge source does not change the agent's personality. It only affects how the agent responds to data-specific questions, which you will test in the next step.
Knowledge source not appearing?
- Make sure you selected Authenticate with Microsoft. Other authentication options are not supported for Dataverse.
- Verify the IT Tickets table exists in the same environment your Copilot Studio agent is using. Check the environment selector in the top-right corner of both Power Apps and Copilot Studio.
- If you see a message about Dataverse search, contact your admin to enable it in the Power Platform admin center.
help me connect a Dataverse table as a knowledge source in Copilot Studio
Your foundation is set. You have an orchestrator agent that responds to users and a Dataverse table full of ticket data connected as a knowledge source. Next up, you will put this to the test and discover what happens when someone asks a question the agent cannot answer from Dataverse alone.
Test Dataverse Knowledge and Hit the External Data Wall
Your orchestrator agent is wired up to Dataverse and ready to field questions about IT tickets. Before layering on more features, you need to confirm what works and discover where the agent falls short.
In this step, you'll test the agent with ticket-related questions and watch it pull live data from your table. Then you'll push it with a technical how-to question and observe what happens when it has no knowledge source to draw from.
In this step, get ready to:
- Confirm the agent answers ticket questions using Dataverse data.
- Discover the agent's limitation when asked technical how-to questions.
Test ticket questions against Dataverse knowledge
The agent's only knowledge source right now is your IT Tickets table. Time to verify it can actually retrieve and present that data when asked.
- Switch back to Copilot Studio and open your IT Service Desk agent.
- Click the Test button in the top-right corner to open the test panel.
- Type What tickets are currently open? and press Enter.
The agent should respond with information about tickets that have an "Open" status in your Dataverse table.
- Try a second query: type Who is assigned to the email sync issue? and press Enter.
The agent should return the assignee name from your sample data for that specific ticket.
What should I see?
The agent references specific data from your IT Tickets table. You'll see ticket titles, statuses, or assignee names pulled directly from the rows you created in the previous step.
If the agent gives vague answers that don't reference your actual ticket data, Dataverse search may not be enabled in your environment. Check the Dataverse search setting in your Power Platform admin center.
Agent not returning ticket data?
Make sure Dataverse search is enabled in your environment. Without it, the agent cannot query your table as a knowledge source.
Confirm that the knowledge source authentication is set to Authenticate with Microsoft. Other options are not supported for Dataverse knowledge.
help me troubleshoot why my Copilot Studio agent is not returning Dataverse knowledge
Push the agent beyond its knowledge
The agent handles ticket lookups well. But employees don't just ask about ticket status. They ask how-to questions that require troubleshooting knowledge.
Before you send the next message, think about this: your agent's only knowledge source is a table of ticket records (titles, statuses, priorities, assignees). If you ask "How do I fix a VPN timeout error?", do you think it will give a detailed troubleshooting answer?
- In the test panel, type How do I fix a VPN timeout error? and press Enter.
- Observe the response carefully.
The agent either gives a vague, generic response or explicitly states it doesn't have that information. It has no troubleshooting articles to draw from.
- Try one more: type What are the steps to reconnect my printer? and press Enter.
Same result. The agent cannot provide substantive troubleshooting guidance.
Why does this happen?
Your Dataverse table stores ticket records: titles, statuses, priorities, and assignments. It does not contain troubleshooting articles or how-to guides.
When the agent receives a how-to question, it searches its knowledge sources and finds nothing relevant. The gap is clear: the orchestrator needs access to an external knowledge base for technical questions.
Name the gap you'll solve next
This limitation is intentional and expected. You've now confirmed two things about your orchestrator's current state:
- It answers ticket-related questions correctly by grounding responses in Dataverse data.
- It cannot answer technical how-to questions because it has no external knowledge source.
The orchestrator needs a way to fetch real-time answers from an external system for technical troubleshooting questions. That's exactly what you'll build next.
You've confirmed the orchestrator's strength and exposed its weakness. In the next step, you'll solve this gap by creating a dedicated child agent that calls a public REST API using an HTTP Request node to fetch technical articles in real time.
Build the Knowledge Base Child Agent with HTTP Request
Your orchestrator answered ticket status questions using Dataverse knowledge. But when you asked a how-to question, it came up short. The agent has no source of external troubleshooting articles to draw from.
In this step, you will create a dedicated child agent that calls a public REST API in real time using an HTTP Request node. This gives the orchestrator a specialist it can delegate how-to questions to.
In this step, get ready to:
- Create a Knowledge Base child agent with a clear description and no-direct-reply instructions.
- Build a topic that calls an external API using the HTTP Request node and formats the response.
- Test end-to-end delegation from orchestrator to child agent.
Create the Knowledge Base child agent
Child agents are lightweight specialists that live inside your parent agent. The orchestrator uses the child agent's description to decide when to delegate, so a clear, specific description is critical for accurate routing.
- Switch back to your IT Service Desk agent in Copilot Studio.
- Select the Agents page in the left sidebar.
- Click Add an agent.
- Select New child agent.
The child agent configuration panel opens. You will now fill in the name, description, and instructions.
- In the name field, enter Knowledge Base Agent.
- Leave the default trigger as The agent chooses - Based on description.
- In the description field, enter: Handles technical how-to questions and troubleshooting by searching an external knowledge base. Use this agent when the user asks how to fix, resolve, troubleshoot, or configure IT systems.
- In the instructions field, enter: You are a knowledge base search agent. You are a subagent and must return your findings only. Do not reply to the user directly. Use the HTTP tool to search for relevant articles.
- Click Create to save your new child agent.
You should see the Knowledge Base Agent appear on the Agents page under your IT Service Desk orchestrator.
Why does the description matter so much?
With generative orchestration, the parent agent reads the child agent's description to decide which agent handles each query. A vague description leads to missed or incorrect routing. The description you wrote contains specific action words (fix, resolve, troubleshoot, configure) that the orchestrator matches against incoming user messages.
What is the no-direct-reply directive?
In a multi-agent system, only the parent agent should deliver the final response to the user. The instruction "Do not reply to the user directly" prevents the child agent from sending its own message, which would cause duplicate responses.
The orchestrator combines findings from all child agents into a single response instead.
Don't see the New child agent option?
Make sure you are on the Agents page of your IT Service Desk agent, not the main Copilot Studio home page. The Add an agent button only appears within a parent agent's context.
Help me find the child agent option
Build the Search KB Articles topic with an HTTP Request node
Each child agent needs at least one topic to handle its work. You will create a topic called "Search KB Articles" that calls a public API endpoint and formats the result as a message.
- Open the Knowledge Base Agent (click its name on the Agents page).
- Go to the Topics page for this child agent.
- Select Add a topic, then From blank.
- A Trigger node appears on the canvas. Click the Trigger node to open its description field.
- Enter this trigger description: When a user asks a how-to or troubleshooting question.
- Open Details from the toolbar and set the topic name to Search KB Articles.
- Click Save in the top menu bar.
Now you will add the HTTP Request node to call the JSONPlaceholder API.
- Below the Trigger node, click the Add node icon (+).
- Point to Advanced, then select Send HTTP request.
- In the URL box, enter: https://jsonplaceholder.typicode.com/posts/1
- From the Method dropdown, select GET.
Next, configure the response schema so Copilot Studio knows the shape of the data coming back.
- On the HTTP Request node, find Response data type.
- Select From Sample Data.
- Click Get schema from sample JSON.
- Paste this sample JSON into the editor:
{"userId": 1, "id": 1, "title": "sample title", "body": "sample body"}
- Click Confirm to generate the schema.
- Under Save response as, leave the default new variable (Copilot Studio creates one automatically).
What does the schema generation do?
When you paste sample JSON and confirm, Copilot Studio creates a typed Power Fx variable that mirrors the JSON structure. This gives you IntelliSense support so you can reference fields like title and body in later nodes without guessing their names or types.
Finally, add a Message node to format and return the API response.
- Below the HTTP Request node, click the Add node icon (+).
- Select Send a message.
- In the message text box, type: KB Article Found:
- Click the Insert variable icon ({x}) and select the title field from your HTTP response variable.
- After the title variable, type: -
- Click the Insert variable icon ({x}) again and select the body field.
- Click Save in the top menu bar.
Your topic flow should now have three nodes in sequence: Trigger, HTTP Request, and Message.
Why use an HTTP Request node instead of a Power Automate flow?
For single, lightweight API calls, the HTTP Request node is faster and introduces less latency than routing through a full Power Automate flow. Microsoft recommends this approach for quick off-box lookups where you only need a single external call.
Don't see the Send HTTP request option?
Make sure you clicked the Add node icon below the Trigger node, then hovered over Advanced. The Send HTTP request option appears in the Advanced submenu.
Help me find the HTTP request option
Test orchestrator delegation to the Knowledge Base Agent
The child agent is built. Now return to the orchestrator to verify it correctly delegates how-to questions to the Knowledge Base Agent.
- Navigate back to your IT Service Desk agent (the parent orchestrator). You can click the agent name in the breadcrumb at the top of the page.
- Open the test panel by clicking Test in the top right.
- Click Reset to start a fresh conversation.
Before you send your message, predict what will happen. Will the orchestrator handle this question itself, or will it delegate to the Knowledge Base Agent?
- Type this message: Can you find me a knowledge base article about network issues?
- Press Enter to send.
The orchestrator delegates to the Knowledge Base Agent, which calls the JSONPlaceholder API and returns the response through the orchestrator. You should see a message that includes a post title and body content from the API.
What should I see?
The agent's response should contain text from JSONPlaceholder's post #1, including a title and body. The exact wording comes from the API, but you should see "KB Article Found:" followed by the article title and body text.
The orchestrator delivers this as a single combined response because of the single-response principle you configured in its instructions.
Getting a generic response instead of API data?
If the orchestrator answers generically without API data, it likely did not delegate to the Knowledge Base Agent. Check these common causes:
- Open the Knowledge Base Agent and verify the description matches exactly what you entered. Generative orchestration relies on the description for routing decisions.
- Verify the topic trigger description in Search KB Articles says "When a user asks a how-to or troubleshooting question" and that the topic is saved.
- Reset the test panel conversation and try again. Stale conversation context can confuse routing.
Help me troubleshoot delegation
Your orchestrator now has real-time access to external data through the Knowledge Base child agent. Next, you will build a second child agent for ticket resolution workflows and see the orchestrator intelligently route between multiple specialists.
Build the Ticket Resolution Child Agent
Your orchestrator can now look up ticket data from Dataverse and fetch external KB articles through the Knowledge Base Agent. But what happens when an employee wants to actually do something? Escalating a ticket, changing its status, or marking it resolved are all action-oriented requests that neither Dataverse knowledge nor the KB Agent can handle.
In this step, you'll create a second child agent dedicated to resolution workflows. This demonstrates the core multi-agent delegation pattern where the orchestrator intelligently routes between multiple specialized agents based on user intent.
In this step, get ready to:
- Create the Ticket Resolution child agent with its description and instructions.
- Build an "Update Ticket" topic with a Question node and confirmation Message.
- Test full multi-agent routing across all three capabilities in one conversation.
Create the Ticket Resolution child agent
The orchestrator needs a way to distinguish resolution-related requests from knowledge lookups. A dedicated child agent with a clear description solves this. The orchestrator reads each child agent's description to decide who gets the query.
- In Copilot Studio, return to your IT Service Desk orchestrator agent.
- Navigate to the Agents page in the left sidebar.
- Click Add agent, then select New child agent.
- Set the agent name to Ticket Resolution Agent.
- In the Description field, paste this text exactly:
Handles ticket updates, escalations, and resolution actions. Use this agent when the user wants to update, escalate, close, or change the status of an existing IT ticket.
- In the Instructions field, paste:
You are a ticket resolution specialist. You are a subagent and must return your findings only. Do not reply to the user directly. Help users update ticket status, escalate priority, or mark tickets as resolved. Confirm what changes should be made.
- Click Create to save the new child agent.
Why these instructions matter
The line "You are a subagent and must return your findings only. Do not reply to the user directly" enforces the single-response principle. Without it, both the child agent and the orchestrator might send separate messages to the user, causing duplicate or conflicting responses.
The description is equally critical. Generative orchestration reads each child agent's description to decide which agent handles a query. A vague description leads to incorrect routing.
You should now see the Ticket Resolution Agent listed alongside the Knowledge Base Agent on the Agents page.
Don't see the new child agent listed?
Make sure you clicked Create after filling in all fields. If the agent appears but shows a warning icon, check that the description field is not empty.
help me troubleshoot why my child agent isn't appearing in the Agents list
Build the Update Ticket topic
The child agent exists, but it has no logic yet. You need a topic that collects details about what the user wants to change and confirms the request.
- Open the Ticket Resolution Agent by clicking its name on the Agents page.
- Navigate to Topics in the left sidebar.
- Click Add a topic, then select From blank.
- Name the topic Update Ticket.
- Click the trigger node at the top of the canvas. Set the trigger description to:
When a user wants to update, escalate, or resolve a ticket
What does the trigger description do?
Because this agent uses generative orchestration, the trigger description tells the AI when this topic is relevant. When the orchestrator delegates a query to this child agent, the agent reads the trigger descriptions of its topics to determine which one to activate.
- Below the trigger node, click the + button to add a new node.
- Select Ask a question to add a Question node.
- In the Question node's text field, enter:
Which ticket would you like to update and what change do you need?
- Under Identify, select User's entire response so the full answer is captured.
- Note the variable name where the response is stored (it appears below the Question node). You'll reference this shortly.
- Below the Question node, click + again and select Send a message.
- In the Message node, enter this confirmation text:
I have noted your request to update the ticket. A support agent will process this change shortly.
- Click Save in the top right corner to save the topic.
Why a confirmation message instead of an actual update?
This topic captures the user's intent and confirms it back. The agent does not write to Dataverse yet because that requires an agent flow with proper data operations. The Secret Mission later in this project adds that capability.
Your topic canvas should now show three nodes in sequence: the trigger, the Question node, and the Message node.
Question node not storing the response?
Make sure you selected User's entire response under Identify. If you chose a specific entity type instead, the node may reject freeform answers.
help me fix my Question node that isn't capturing the user's response correctly
Test full multi-agent routing
The real test of a multi-agent system is whether the orchestrator routes each query to the correct child agent. You'll now send three different types of requests in one conversation and watch the routing in action.
- Return to the IT Service Desk orchestrator agent.
- Open the Test panel by clicking Test your agent in the bottom left corner.
- Click Reset to start a fresh conversation.
- Type this message to test Dataverse knowledge routing:
What tickets are currently open?
The orchestrator should respond with information pulled from your IT Tickets Dataverse table.
- Now type a how-to question to test KB Agent routing:
How do I fix a VPN timeout error?
The orchestrator should route this to the Knowledge Base Agent, which fetches data from the JSONPlaceholder API and returns article content.
- Before you send the next message, think about what you expect to happen. Will the orchestrator handle it itself, or delegate to one of the child agents?
- Type this escalation request:
I want to escalate the printer ticket to high priority
The orchestrator delegates this to the Ticket Resolution Agent. You should see it ask which ticket to update and what change is needed, then confirm with the message you configured.
What is happening behind the scenes?
The orchestrator reads the description of each child agent on every message. "Escalate" and "update" match the Ticket Resolution Agent's description about updates, escalations, and status changes. The orchestrator routes the query there, the child agent runs its topic, and the response flows back through the orchestrator as a single message.
Orchestrator not routing to the right agent?
Check that each child agent's description clearly distinguishes its specialty. If the descriptions overlap (both mention "troubleshooting"), the orchestrator may pick the wrong one.
Also verify that both child agents appear on the orchestrator's Agents page. If one is missing, it was not properly created as a child of this orchestrator.
help me debug why my orchestrator is routing queries to the wrong child agent
Your multi-agent system now handles three distinct types of requests through intelligent routing. Next up, you'll give the orchestrator a superpower it doesn't have yet: the ability to react to events without anyone sending a message.
Configure an Autonomous Event Trigger
Until now, your IT Service Desk agent only responds when someone types a message. That means a new support ticket could sit in Dataverse for minutes or hours before anyone notices it.
Autonomous agents flip this model. They react to real-world events without any user prompt. In this step, you will add an event trigger so the orchestrator fires automatically whenever a new ticket row appears in the IT Tickets table.
In this step, get ready to:
- Create an event trigger on the orchestrator agent that watches the IT Tickets Dataverse table.
- Configure the trigger payload with instructions telling the agent how to respond.
- Test the autonomous behavior by adding a new row and confirming the agent reacts without a user message.
Add the event trigger to the orchestrator
Event triggers live on the agent's Overview page, not inside a topic. You will select a Dataverse trigger from the library and point it at the IT Tickets table.
- Return to your IT Service Desk agent in Copilot Studio.
- On the Overview page, scroll down to the Triggers section.
- Select Add trigger.
- From the trigger library, select When a row is added, modified or deleted (the Dataverse trigger).
- Provide authentication if prompted. Trigger connectors authenticate using your agent maker account.
- Select Next.
- In the trigger configuration, set the table to your IT Tickets Dataverse table and the change type to new rows added.
What is an event trigger?
An event trigger tells the agent to wake up and act whenever a specified event happens in an external system. The agent receives a payload containing information about the event and follows your instructions to respond.
Unlike user-initiated topics, event triggers fire without anyone sending a chat message. This makes the agent truly autonomous.
Configure the trigger payload instructions
The trigger payload is the message sent to your agent when the event fires. You can customize it with specific instructions that tell the agent what to do.
- In the trigger payload configuration, replace or add to the default payload content with the following instructions:
- A new IT ticket has been created. Acknowledge receipt and summarize the ticket details from the trigger payload. Assign an initial priority based on the description.
- Save the trigger configuration.
Why put instructions in the payload?
Each trigger payload can carry its own detailed instructions. This keeps trigger-specific behavior separate from the agent's general instructions, preventing conflicts and keeping things clear when you have multiple triggers.
When the agent receives this payload, it reads both the row data and your instructions, then decides how to respond.
Each trigger counts as a message
Every trigger payload counts as a message toward your usage and billing. For a table that changes infrequently (like IT tickets), this is negligible. For high-frequency tables, keep an eye on usage.
You should now see the trigger listed in the Triggers section of your agent's Overview page.
Test the autonomous behavior
Until you publish the agent, event triggers do not fire automatically. You must generate the event first, then manually test the trigger using the test workflow in Copilot Studio.
- Open Power Apps in a separate browser tab.
- Navigate to your IT Tickets table.
- Add a new row with these values:
- Save the new row.
Before you test, what do you think will happen when you send this trigger payload to the agent? Will it acknowledge the ticket and summarize the details, or will something else occur?
- Switch back to Copilot Studio and return to your agent's Overview page.
- Locate the trigger in the Triggers section.
- Select the Test trigger icon beside the trigger. A list of recent trigger instances appears.
- Choose the instance for the row you just added (Monitor flickering) and select Start testing.
- Watch the test panel. The agent should generate an autonomous acknowledgment response that summarizes the ticket details and assigns an initial priority based on the description.
What should I see?
The test chat shows the trigger payload as a message (visible only to you for testing). The agent then responds with an acknowledgment that includes the ticket title, description, and a suggested priority.
You can also open the activity map by selecting the map icon at the top of the test pane to see a visual representation of how the agent processed the trigger payload.
Trigger not appearing in the test list?
Make sure you saved the new row in Power Apps before switching to Copilot Studio. The trigger instance only appears after the event has occurred.
If the agent response does not reference your ticket details, check that your payload instructions do not conflict with the agent's general instructions. Open the activity map to identify any missing inputs.
Still stuck? Why isn't my event trigger firing for new Dataverse rows?
Your IT Service Desk now reacts to real-world events on its own. When a new ticket lands in Dataverse, the agent wakes up and acknowledges it without anyone typing a word. Next up, you will push the system further with the Secret Mission and have the agent write data back into Dataverse from a conversation.
Secret mission
Add an Agent Flow as a Real-Time Tool
Your Ticket Resolution Agent can confirm what changes need to happen, but it cannot actually write data back to Dataverse. In this secret mission, you will create an agent flow that lets the agent create new tickets directly from a conversation, closing the loop from words to action.
Clean Up Your Resources
Clean Up Your Resources
Decide whether to keep your resources running, pause them to come back later, or delete them entirely. All resources in this project use your existing Copilot Studio Premium license. Dataverse storage counts against your environment's allocation, but the sample data is negligible.
Cost warning
Your event trigger counts each firing as a message toward your Copilot Studio usage billing. If the IT Tickets table continues to receive new rows, the trigger fires autonomously each time. Disable it (see the Pause tab below) to stop consuming messages when you are not actively using this project.
Resources you used:
- IT Service Desk agent in Copilot Studio (orchestrator with 2 child agents: Knowledge Base Agent, Ticket Resolution Agent).
- IT Tickets Dataverse table in Power Apps (with sample and test data).
- Event trigger topic watching the IT Tickets table for new rows.
- Create IT Ticket Flow agent flow (if you completed the Secret Mission).
Keep everything running
No action needed. Choose this if you are still actively building on this project or want to use it as a reference architecture for future advanced Copilot Studio work.
- Your agent, child agents, Dataverse table, event trigger, and agent flow all remain active.
- The event trigger continues to fire (and consume messages) whenever a new row is added to the IT Tickets table.
Pause - I'll come back to this later
Disable the event trigger to stop autonomous processing and message consumption while keeping everything else intact.
- In Copilot Studio, open the IT Service Desk agent.
- Go to the Topics page.
- Find the event trigger topic (the one with the "When a row is added, modified or deleted" trigger).
- Toggle the topic off using the Enabled toggle.
- The agent and child agents remain available for manual testing, but no autonomous messages fire until you re-enable the trigger.
Delete - I don't want to use this again
Remove all project resources permanently. This cannot be undone.
- Delete the agent flow (Secret Mission only): In Copilot Studio, select Flows in the left navigation. Select the Create IT Ticket Flow, open the Overview tab, and select Delete.
- Delete the IT Service Desk agent: In Copilot Studio, go to the Agents page. Select the IT Service Desk agent. On the top menu bar, select the three dots next to Settings, then select Delete. Enter the agent name to confirm, then select Delete agent. This removes the orchestrator, both child agents, all topics (including the event trigger), and associated data.
- Delete the IT Tickets Dataverse table: Open Power Apps. Navigate to Tables. Select the IT Tickets table, then select Delete from the menu. Confirm the deletion. All rows (sample data and test tickets) are permanently removed.
Nice Work!
Nice Work!
You just built a production-grade multi-agent IT Service Desk in Microsoft Copilot Studio. Your orchestrator intelligently delegates to specialized child agents, pulls real-time data from an external API, and autonomously reacts to Dataverse events without any user prompt.
You've learned how to:
- Architect a multi-agent system with generative orchestration that routes queries to specialized child agents based on user intent.
- Connect a child agent to an external REST API using HTTP Request nodes for real-time data retrieval.
- Configure an autonomous event trigger that reacts to Dataverse changes without any user interaction.
- Secret Mission: Created an agent flow as a real-time tool that writes data back to Dataverse directly from a conversation.
Ready to quiz yourself?