Build an Expo Follow-Up Agent

Build a reusable Copilot Studio flow that creates expo-specific Outlook drafts.

Introduction

30 Second Summary

After an expo, contact details often sit in separate lists while follow-up waits. Rebuilding the same process for every event turns a repeatable task into manual work.

In this project, you will build an Expo Follow-Up Assistant in Microsoft Copilot Studio that prepares personalized drafts in Office 365 Outlook from an expo key. Its agent flow uses a central directory in SharePoint Online to route each request to the correct expo-specific contact list.

What You'll Build

Picture entering "Prepare follow-up drafts for EXPO-SOUTH" in your Copilot Studio agent to find a personalized unsent message waiting for every South exhibitor in Outlook Drafts.

By the end of this project, you'll have:

  • Conversational follow-up requests that let you provide an expo key in chat to receive a completion summary after the flow runs.
  • Reusable expo routing that lets one workflow load a different contact list for each expo. Adding another expo takes one new list plus one directory row.
  • Personalized Outlook drafts waiting unsent for each exhibitor. Every draft uses the selected expo's contact details plus its response URL from Microsoft Forms.
  • Secret Mission: Add safe branches for unknown expo keys plus exhibitors with missing email addresses.

Are there any prerequisites?

This project assumes existing licensed access to the required Microsoft services.

You need permission to publish agent flows, create lists in one SharePoint site, create Microsoft Forms, and save drafts in an Office 365 Outlook mailbox.

Before We Start

Before any hands-on work, this is your moment to commit to the reusable follow-up process you are building. You will define the manual task it replaces while preserving separate data for each expo.

Set Up Reusable Expo Data

Each expo keeps its contacts isolated from every other event. The later flow needs predictable columns plus a small directory that tells it where to look.

In this step, you will use SharePoint Online to create three Microsoft Lists resources with predictable schemas.

You will also create two Microsoft Forms. The central directory will map each expo key to its own exhibitor list plus response URL.

In this step, get ready to:
  • Create one expo directory plus two separate exhibitor lists.
  • Create a follow-up form for each expo.
  • Connect each expo key to its list plus form URL.
Create the list schemas

A consistent schema gives the later flow the same column names for both expos. The directory stores the routing details that can vary between events.

  • Navigate to your shared SharePoint site in your browser.
  • Sign in with your Microsoft 365 account if prompted.

You should see the home page for the shared site where all three lists will live.

  • Select Site contents from the site navigation.

You should see the resources already stored in the shared site.

  • Select + New.
  • Select List.

You should see the available options for creating a list.

  • Choose Blank list.
  • Enter Expo Directory as the list name.

The creation panel should now show Expo Directory as the new list name.

  • Select Create.

Your new Expo Directory list opens with the existing Title column.

  • Return to Site contents.
  • Repeat the Blank list process to create Expo North Exhibitors.

You should see Expo North Exhibitors in the shared site.

  • Return to Site contents.
  • Repeat the Blank list process to create Expo South Exhibitors.

That is the first foundation in place. Your shared site now holds one directory plus one isolated list for each expo.

  • Open Expo Directory from Site contents.
  • Confirm that the existing Title column remains in the list.

The Title column will hold expo keys such as EXPO-NORTH.

  • Create ExpoName as a single-line text column through + Add column.
  • Create ExhibitorListName as a single-line text column through + Add column.

You should now see ExpoName plus ExhibitorListName beside Title.

  • Create FormUrl as a single-line text column through + Add column.
  • Confirm that Expo Directory shows Title, ExpoName, ExhibitorListName, plus FormUrl.

The directory now has one column for the expo key plus three columns for its routing configuration.

  • Return to Site contents.
  • Open Expo North Exhibitors.

You should see the existing Title column that will hold each company name.

  • Create ContactName as a single-line text column through + Add column.
  • Create Email as a single-line text column through + Add column.

The North list should now show Title, ContactName, plus Email.

  • Return to Site contents.
  • Open Expo South Exhibitors.

The South list starts with the same existing Title column.

  • Create ContactName as a single-line text column through + Add column.
  • Create Email as a single-line text column through + Add column.

Both exhibitor lists now share the exact schema that the reusable flow will expect.

Why use matching exhibitor columns?

The later workflow reads the same company, contact, plus email fields regardless of the selected expo. Matching column names let one processing path handle both lists.

The rows remain separate because each expo still has its own list. Shared structure gives you reuse without mixing contact data.

Missing a list or column?

  • Return to Site contents to confirm all three list names.
  • Open the affected list.
  • Create the missing single-line text column through + Add column.

Ask for help if the schemas still differ: help me compare my three SharePoint list schemas against the required expo setup

Create the expo follow-up forms

Each expo needs its own response destination. A separate form URL keeps North responses tied to North follow-up while South responses remain tied to South follow-up.

  • Switch to Microsoft Forms in your browser.
  • Sign in with your Microsoft 365 account if prompted.

You should see the Microsoft Forms home page for your organization.

  • Select the option to create a blank form.
  • Name the form Expo North Follow-Up.

You should see Expo North Follow-Up as the form title.

  • Add the short follow-up questions your organization wants to collect.
  • Select Collect responses.

The response settings should now be available for the North form.

  • Choose the response audience appropriate for your organization.
  • Select Copy link.
  • Record the copied URL here: your Expo North Follow-Up response URL.

The North response URL is now ready for the central directory.

  • Return to the Microsoft Forms home page.
  • Repeat the blank-form process to create Expo South Follow-Up.

You should see Expo South Follow-Up among your forms.

  • Add the short follow-up questions your organization wants to collect.
  • Select Collect responses.

The response settings should now be available for the South form.

  • Choose the response audience appropriate for your organization.
  • Select Copy link.
  • Record the copied URL here: your Expo South Follow-Up response URL.

Both expos now have separate response links. That separation will carry through to every draft created later.

Can't copy a response link?

  • Open the affected form.
  • Select Collect responses.
  • Choose an audience before selecting Copy link.

Ask for help if the response options remain unavailable: help me find the response link for my Microsoft Form

Map the expos and add sample contacts

The directory now needs one row per expo. Each row connects a stable expo key to its display name, exhibitor list, plus form URL.

  • Switch back to your shared SharePoint site.
  • Open Expo Directory.

You should see the four directory columns created earlier.

  • Select Edit in grid view.
  • Enter EXPO-NORTH in the first row's Title field.

The first directory row now has the stable key that users will provide to the flow.

  • Enter Expo North in the row's ExpoName field.
  • Enter Expo North Exhibitors in the row's ExhibitorListName field.

The first route now identifies the North display name plus its exact list name.

  • Enter your Expo North Follow-Up response URL in the row's FormUrl field.

The EXPO-NORTH route is complete.

  • Enter EXPO-SOUTH in the second row's Title field.
  • Enter Expo South in the row's ExpoName field.

The second route now has its own stable key plus display name.

  • Enter Expo South Exhibitors in the row's ExhibitorListName field.
  • Enter your Expo South Follow-Up response URL in the row's FormUrl field.

The directory now maps both expo keys to separate resources.

  • Record your safe test recipient here: your mailbox address.

Using your own mailbox keeps every later test draft under your control.

  • Return to Site contents.
  • Open Expo North Exhibitors.

The North list is ready for its sample exhibitors.

  • Select Edit in grid view.
  • Enter Alpine Events in the first row's Title field.

The first North company is now visible in the list.

  • Enter Maya Chen in the row's ContactName field.
  • Enter your mailbox address in the row's Email field.

The first North sample row is complete.

  • Enter Harbor Systems in the next row's Title field.
  • Enter Leo Park in the row's ContactName field.

The North list now contains two distinct sample companies.

  • Enter your mailbox address in the second row's Email field.

Both North rows now point to your safe test mailbox.

  • Return to Site contents.
  • Open Expo South Exhibitors.

The South list is ready for a different set of sample exhibitors.

  • Select Edit in grid view.
  • Enter Cedar Labs in the first row's Title field.

The first South company is now visible in the list.

  • Enter Priya Shah in the row's ContactName field.
  • Enter your mailbox address in the row's Email field.

The first South sample row is complete.

  • Enter Summit Works in the next row's Title field.
  • Enter Jordan Lee in the row's ContactName field.

The South list now contains two distinct sample companies.

  • Enter your mailbox address in the second row's Email field.

Both South rows now point to your safe test mailbox.

Rows missing values?

  • Select Edit in grid view in the affected list.
  • Fill every visible blank in the required columns.
  • Confirm that both sample rows use your mailbox address in Email.

Ask for help if a value appears in the wrong column: help me check my expo directory and exhibitor sample rows

Before you check the complete setup, which list plus form URL do you expect each expo key to identify?

  • Open Expo Directory from the shared SharePoint site.
  • Confirm that EXPO-NORTH maps to Expo North, Expo North Exhibitors, plus the North response URL.

The North row should point only to North resources.

  • Confirm that EXPO-SOUTH maps to Expo South, Expo South Exhibitors, plus the South response URL.
  • Return to Site contents.

The South row should point only to South resources.

  • Open Expo North Exhibitors.
  • Confirm that it contains the two intended North sample rows.

You should see two distinct North companies with contact names plus your mailbox address.

  • Return to Site contents.
  • Open Expo South Exhibitors.

You should see two distinct South companies with contact names plus your mailbox address.

  • Switch back to the Microsoft Forms home page.
  • Confirm that Expo North Follow-Up plus Expo South Follow-Up appear among your forms.

You now have three populated SharePoint lists plus two separate form links. The reusable data layer is ready for the workflow.

✔️ Awesome, I've got everything!

Your expo directory, exhibitor lists, sample rows, plus response links are ready.

ⓧ I'd like to double check the setup

Compare your finished resources against this complete setup.

  • The Expo Directory list contains Title, ExpoName, ExhibitorListName, plus FormUrl.
  • The EXPO-NORTH row maps to Expo North, Expo North Exhibitors, plus the Expo North Follow-Up response URL.
  • The EXPO-SOUTH row maps to Expo South, Expo South Exhibitors, plus the Expo South Follow-Up response URL.
  • The Expo North Exhibitors list contains Title, ContactName, plus Email with at least two distinct North sample rows.
  • The Expo South Exhibitors list contains Title, ContactName, plus Email with at least two distinct South sample rows.
  • The Expo North Follow-Up form has a copied Collect responses URL for the appropriate audience.
  • The Expo South Follow-Up form has a copied Collect responses URL for the appropriate audience.

Your reusable data sources are ready. Next up, you will build a small prototype that proves the SharePoint connection before testing its hardcoded limitation.

Build the Hardcoded Prototype

Your separate expo lists now contain distinct sample contacts. The next goal is to prove that an agent flow can retrieve those rows from SharePoint.

You will build the smallest testable version in Microsoft Copilot Studio. A fixed North list gives you a clear baseline for comparing two expo inputs.

In this step, get ready to:
  • Create a flow trigger that accepts an expo key.
  • Add a fixed SharePoint lookup for North exhibitors.
  • Compare the list rows returned by two expo keys.
Create the flow trigger

An agent flow begins with a trigger. The ExpoKey input gives each test run one expo identifier.

  • Use your browser to go to Microsoft Copilot Studio.
  • Sign in with your organizational account.
  • Select Workflows from the left navigation.
  • Select New agent flow.
  • Name the flow Prepare Expo Follow-Up Drafts.
  • Add a text input to When an agent calls the flow.
  • Name the input ExpoKey.

You should now see ExpoKey inside the trigger. The flow has a value that each test can supply.

Can't create the flow?

  • Confirm that your organizational account has permission to create agent flows.
  • Check that you selected the environment where your shared SharePoint site is available.

Ask for help with creating the agent flow or adding ExpoKey.

Configure the prototype actions

The SharePoint Get items action retrieves rows from one selected list. Pointing it at the North list gives this prototype a known source.

Dynamic content carries values from an earlier action into a later action. You will use it to include the supplied expo key in the response.

  • Select the + between When an agent calls the flow and Respond to the agent.
  • Search for SharePoint.
  • Select Get items.

You should see the new Get items action between the trigger and response.

  • Confirm the SharePoint connection with your organizational account if the designer prompts you.
  • Set Site Address to the shared SharePoint site from earlier.

The action now points to the site that contains your three expo lists.

  • Set List Name to Expo North Exhibitors.

Why start with a fixed list?

The fixed list removes routing decisions from the first test. This keeps the initial proof focused on the SharePoint connection.

  • Add a text output to Respond to the agent.
  • Name the output Summary.

The response action should now contain an empty Summary value.

  • Enter Prototype confirmation for in the Summary value.
  • Insert ExpoKey from dynamic content after that text.

The response now echoes the expo key supplied by each test. The retrieved rows still come from the selected North list.

Test both expo keys

Each test run records the values received by the flow. It also records the rows returned by each action.

Before you run the first test, which exhibitor list do you expect the fixed action to read?

  • Select Test in the flow designer.
  • Enter EXPO-NORTH for ExpoKey.
  • Start the test run.
  • Select Get items in the completed run.
  • Inspect the output for your North sample company names.

You should see rows from Expo North Exhibitors. The Summary output contains EXPO-NORTH.

Good progress. Your first test proves that the flow can read the North exhibitor rows.

Before you run the second test, do you expect the list rows to change when only ExpoKey changes?

  • Select Test again.
  • Enter EXPO-SOUTH for ExpoKey.
  • Start the second test run.
  • Inspect the Get items output in the completed run.

The Summary output now contains EXPO-SOUTH. The Get items output still contains your North sample companies.

This mismatch is intentional. The changed input reaches the flow. The data source remains fixed.

Did the test run fail?

  • Check that Site Address points to the shared SharePoint site.
  • Confirm that List Name is exactly Expo North Exhibitors.
  • Verify that your organizational account can read the North exhibitor list.

Ask for help with diagnosing the failed Get items test.

What should your flow contain?

  • The When an agent calls the flow trigger receives a text input named ExpoKey.
  • The SharePoint Get items action points to the shared site.
  • The Get items action uses Expo North Exhibitors as its fixed list.
  • The Respond to the agent action returns a text output named Summary containing ExpoKey.
  • Both test runs return North exhibitor rows from Get items.

That is a useful prototype: its test history captures the fixed-list limitation. Next, you will let Expo Directory choose the exhibitor list at runtime.

Resolve the Correct Expo List

Your hardcoded prototype in Microsoft Copilot Studio proved that the agent flow can read SharePoint. Its South test also exposed the problem: the fixed North list ignores ExpoKey.

The Expo Directory already links each expo key to its exhibitor list. This step reads that row before a REST request loads the named list.

In this step, get ready to:
  • Resolve the supplied expo key through Expo Directory.
  • Load the exhibitor list named by the matching directory row.
  • Verify the dynamic route against both expo keys.
Look up the expo directory row

The directory lookup uses an OData filter to match the supplied key against the Title column. A top count of 1 keeps the lookup focused on one directory row.

  • Return to the Prepare Expo Follow-Up Drafts flow in Microsoft Copilot Studio.
  • Add a SharePoint Get items action directly after When an agent calls the flow.

You will see a new SharePoint action card between the trigger and the existing hardcoded action.

  • Select the shared SharePoint site in Site Address.
  • Select Expo Directory in List Name.

The new lookup now points at the central routing list.

  • Enter Title eq ' in Filter Query.
  • Insert the ExpoKey dynamic value immediately after the opening apostrophe.

The filter field now starts with Title eq ' followed by the ExpoKey token.

  • Enter a closing apostrophe after the ExpoKey token.
  • Set Top Count to 1.

The completed filter follows the shape Title eq '<ExpoKey dynamic value>'.

  • Select Test.
  • Enter EXPO-SOUTH for ExpoKey.
  • Run the flow.
  • Inspect the Get items output whose List Name is Expo Directory.

You will see the directory row for EXPO-SOUTH. Good progress. The flow can now resolve that key to Expo South Exhibitors.

Directory row missing?

  • Confirm the lookup uses Expo Directory as its list.
  • Confirm the ExpoKey token sits between the two apostrophes in Filter Query.
  • Confirm the directory contains a row whose Title is exactly EXPO-SOUTH.

Help me troubleshoot my Expo Directory lookup.

Load the list named by the directory

The directory action returns an array named value. An Apply to each loop gives the request access to the matching row's ExhibitorListName value.

  • Add Apply to each directly after the directory Get items action.
  • Select the directory action's value in Select an output from previous steps.

The loop now runs once for the directory row returned by the filter.

  • Add SharePoint Send an HTTP request to SharePoint inside the loop.
  • Rename the new action LoadExhibitors.

The LoadExhibitors card now belongs to the matched directory branch.

  • Select the shared SharePoint site in Site Address.
  • Set Method to GET.

The request stays on the shared site. Its URI decides which list supplies the rows.

Why use a SharePoint REST request?

The request URI accepts the list title from the directory row at runtime. This keeps one flow reusable across separate exhibitor lists.

Adding another expo only requires another list plus another directory row. The routing logic stays unchanged.

  • Enter _api/web/lists/GetByTitle(' in Uri.
  • Insert the directory row's ExhibitorListName dynamic value after the opening apostrophe.

The URI now contains the dynamic list-name token inside the list-title segment.

  • Append ')/items?$select=Title,ContactName,Email after the ExhibitorListName token.
  • Add the request header by using this configuration:
Accept: application/json; odata=nometadata

What does this request do?

  • The list-title segment uses the directory row's ExhibitorListName value to choose the list.
  • The $select=Title,ContactName,Email query limits each returned row to the fields needed later.
  • The Accept header requests a compact JSON response with a top-level value array.
  • Confirm the Uri follows _api/web/lists/GetByTitle('<ExhibitorListName dynamic value>')/items?$select=Title,ContactName,Email.
  • Confirm the header matches the request configuration above.

Request configuration not lining up?

  • Confirm LoadExhibitors sits inside Apply to each.
  • Confirm the dynamic token comes from ExhibitorListName in the directory action.
  • Confirm the two exhibitor list names match the directory values character for character.

Help me troubleshoot my LoadExhibitors request.

Replace the fixed route and test both expos

The flow currently contains both routing paths. Removing the original hardcoded action leaves the directory-driven request as the only exhibitor lookup.

  • Use the original Get items card's options menu to remove the action that targets Expo North Exhibitors.
  • Confirm Respond to the agent still contains the text output named Summary.

Before you run the North test, which exhibitor rows do you expect LoadExhibitors to return?

  • Select Test.
  • Enter EXPO-NORTH for ExpoKey.
  • Run the flow.
  • Open LoadExhibitors in the completed run.
  • Inspect the response body's value array.

You will see only the sample rows from Expo North Exhibitors.

Before you run the South test, do you expect the value array to stay the same or switch to the South rows?

  • Select Test again.
  • Enter EXPO-SOUTH for ExpoKey.
  • Run the flow.
  • Open LoadExhibitors in the completed run.
  • Inspect the response body's value array.

You will see the distinct sample rows from Expo South Exhibitors. That closes the routing gap. Each expo key now reaches its own list.

Both tests still show North rows?

  • Confirm the original hardcoded Get items action has been removed.
  • Confirm LoadExhibitors uses the ExhibitorListName token from the current directory row.
  • Confirm the EXPO-SOUTH directory row names Expo South Exhibitors.

Help me find why both expo tests return North exhibitors.

✔️ Both expo keys return different rows

Your two tests returned separate exhibitor row sets. The flow now routes through Expo Directory at runtime.

ⓧ I'd like to double check the flow

Compare your flow against this completed configuration.

  • The trigger retains the text input ExpoKey.
  • The directory Get items action targets Expo Directory.
  • Its Filter Query follows Title eq '<ExpoKey dynamic value>'.
  • Its Top Count is 1.
  • An Apply to each loop uses the directory action's value array.
  • The LoadExhibitors action sits inside that loop.
  • Its Method is GET.
  • Its Uri follows _api/web/lists/GetByTitle('<ExhibitorListName dynamic value>')/items?$select=Title,ContactName,Email.
  • Its header matches the JSON-light request configuration entered earlier.
  • The Respond to the agent action retains the text output Summary.

Your flow can now select the correct expo data without changing its core workflow. Next up, you will turn those selected rows into personalized Outlook drafts.

Create Personalized Drafts

Your Microsoft Copilot Studio flow now selects the correct SharePoint exhibitor list for each expo. The flow still stops after loading those rows.

This step turns every returned row into a personalized draft in your Office 365 Outlook mailbox. A counter gives the agent a concrete completion summary.

In this step, get ready to:
  • Prepare sequential processing for the exhibitor rows.
  • Create one personalized Outlook draft for each exhibitor.
  • Verify the published flow with Expo South.
Prepare sequential draft processing

The DraftCount variable records how many messages the flow prepares. It must start at zero before the directory rows are processed.

An inner loop then processes each exhibitor returned by LoadExhibitors.

  • Switch back to Prepare Expo Follow-Up Drafts in Copilot Studio.
  • Select the plus button before the existing directory Apply to each action.
  • Add Initialize variable - Variable.

You will see the new variable action before the directory loop. This position resets the counter once for each flow run.

  • Enter DraftCount in the Name field.
  • Select Integer for Type.

The action now defines a whole-number counter named DraftCount.

  • Enter 0 in the Value field.
  • Select the plus button after LoadExhibitors inside the directory loop.
  • Add an inner Apply to each action.

The inner loop appears beneath LoadExhibitors. It will receive the exhibitor array returned by that request.

  • Enter body('LoadExhibitors')['value'] in Select an output from previous steps.
  • Open the inner loop's settings.
  • Keep concurrency set to Off.

Why keep the loop sequential?

Each iteration updates the shared DraftCount variable. Sequential processing keeps those updates predictable.

Parallel iterations can update a shared variable at overlapping times. The final summary could then report the wrong count.

Build each personalized draft

Each exhibitor row contains the recipient address plus the details needed for a personalized message. The directory row supplies the selected expo name and its form URL.

Why create drafts?

Drafts let you review every recipient and message before anything leaves your mailbox. This keeps tutorial tests safe while preserving a useful follow-up workflow.

The first Outlook action may ask you to confirm a mailbox connection. That prompt is expected because the flow needs mailbox access to create drafts.

  • Select the plus button inside the inner Apply to each action.
  • Add the Office 365 Outlook action named Draft an email message.
  • Choose your signed-in project mailbox connection if Copilot Studio requests one.
  • Enter item()?['Email'] in the To field.

The draft recipient now comes from the current exhibitor row. Each loop iteration can address a different contact.

  • Insert the directory row's ExpoName dynamic value in the Subject field.
  • Type follow-up for after the expo name.
  • Insert item()?['Title'] after that text.

The subject identifies the selected expo and the current exhibitor company.

  • Add a greeting to the Body using item()?['ContactName'].
  • Add a sentence naming the company with item()?['Title'].

The HTML body now greets the current contact and identifies their company.

  • Add a sentence identifying the event with the directory row's ExpoName dynamic value.
  • Insert the directory row's FormUrl dynamic value on a new line in the Body.
  • Select the plus button after Draft an email message.
  • Add Increment variable - Variable.

The draft action now uses the contact details from the inner loop and the expo details from the directory row.

  • Select DraftCount in the increment action's Name field.
  • Enter 1 in the Value field.

Every completed draft now increases DraftCount by one.

Seeing blank draft details?

Confirm the inner loop uses body('LoadExhibitors')['value']. The email and contact expressions must sit inside that loop.

If the response link belongs to the wrong expo, select FormUrl from the current directory row.

help me troubleshoot blank or incorrect values in my Outlook draft action

Verify the published flow

The response must run after the exhibitor loop finishes. That placement ensures the returned count includes every draft created for the selected expo.

  • Move Respond to the agent below the inner exhibitor loop.
  • Keep Respond to the agent inside the directory Apply to each action.

The response now runs after all exhibitors from the matched directory row have been processed.

  • Insert the current directory row's ExpoName dynamic value in the Summary output.
  • Add text explaining that the drafts were prepared.
  • Insert the DraftCount variable after that text.

The response summary now identifies the selected expo and reports its completed draft count.

  • Open Networking for Respond to the agent.
  • Set Asynchronous response to Off.
  • Select Publish.

Your published flow can now return its completion summary as part of the same run.

Before you test, how many drafts do you expect the South exhibitor list to create?

  • Select Test in the flow designer.
  • Enter EXPO-SOUTH for ExpoKey.
  • Run the test.

The run succeeds. Its Summary names Expo South and reports a draft count matching the South exhibitor rows.

  • Return to your Office 365 Outlook mailbox from earlier.
  • Select Drafts.
  • Open one of the new Expo South drafts.

You will see one unsent message for every South exhibitor. Each draft contains the matching contact name and company plus the Expo South form URL.

You have turned the dynamic exhibitor lookup into a reviewable batch of personalized follow-ups. The messages stay safely in Drafts until you choose what happens next.

Your published flow now prepares the correct drafts and reports how many it created. Next, you will give users a conversational way to start it from a Copilot Studio agent.

Connect the Agent Tool

Your published agent flow already turns an expo key into personalized drafts. It still needs a conversational entry point before someone can trigger it from a request.

A Microsoft Copilot Studio agent provides that entry point. You will connect the published flow so the agent can extract an expo key from each request.

In this step, get ready to:
  • Create the Expo Follow-Up Assistant agent.
  • Connect Prepare Expo Follow-Up Drafts as a Flow tool.
  • Test conversational requests for both expo keys.
Create the agent

The agent gives users a chat interface for the follow-up process. Its tool connection will handle the request behind the scenes.

  • Return to Copilot Studio.
  • Select Agents in the left navigation.
  • Select Create blank agent.
  • Enter Expo Follow-Up Assistant as the agent name.
  • Select Create.

You should see the workspace for Expo Follow-Up Assistant. Your conversational shell is now ready for its flow tool.

Can't create the agent?

  • Confirm that your account has permission to create Copilot Studio agents.
  • Check that you are using the Copilot Studio environment containing Prepare Expo Follow-Up Drafts.

Help me troubleshoot why I cannot create the Expo Follow-Up Assistant agent.

Add the flow as a tool

A tool gives the agent a specific action it can invoke during a conversation. This connection lets the agent pass an expo key into your published flow.

  • Select Tools on the Expo Follow-Up Assistant page.
  • Select Add a tool.
  • Choose Flow.
  • Select Prepare Expo Follow-Up Drafts.
  • Select Add and configure.

You should see the flow's tool configuration. The agent can now expose the flow through a conversation once its input and completion behavior are mapped.

How does the tool connection work?

The agent extracts an expo key from the user's message. It supplies that value to the flow's ExpoKey input.

The flow prepares the drafts before returning its Summary output. The agent displays that result in the conversation.

  • Enter Prepares Outlook drafts for a supplied expo key. under Name and Description.
  • Configure ExpoKey under Inputs so the agent fills it from the user's request.
  • Configure Completion to return the flow's Summary.
  • Select Save.

You should see Prepare Expo Follow-Up Drafts in the agent's tool list. The agent now knows what information to send into the flow.

Flow missing from the tool list?

  • Confirm that Prepare Expo Follow-Up Drafts remains published.
  • Check that the agent uses the same Copilot Studio environment as the flow.

Help me find my published flow when adding a Flow tool.

Test both expo requests

The agent turns a conversational request into the ExpoKey input. The flow uses that value to select the correct SharePoint list.

  • Select Test your agent on the agent page.

Before you send the first request, which expo-specific list and form link do you expect the flow to use?

  • Enter Prepare follow-up drafts for EXPO-SOUTH in the chat.
  • Press Enter to send the request.

You should see a completion summary for Expo South. This proves that the agent invoked the flow before returning its Summary.

  • Switch back to your Office 365 Outlook mailbox from earlier.
  • Select Drafts.

You should see one new unsent draft for every South exhibitor. Each draft should name the correct contact and company.

Each new draft should include the Expo South Microsoft Forms response URL. The full conversational handoff now works for EXPO-SOUTH.

  • Return to Test your agent in Copilot Studio.

Before you send the second request, do you expect the new drafts to use the same exhibitor list or a different one?

  • Enter Prepare follow-up drafts for EXPO-NORTH in the chat.
  • Press Enter to send the request.

You should see a completion summary for Expo North. The agent has passed a different ExpoKey into the same flow.

  • Switch back to your Office 365 Outlook mailbox.
  • Select Drafts.

You should see one new unsent draft for every North exhibitor. Each draft should identify Expo North and include the Expo North Follow-Up response URL.

That completes the reusable path. One agent now routes both expo requests through the same published flow.

Agent used the wrong expo?

  • Check the ExpoKey mapping under Inputs.
  • Confirm that the chat request contains either EXPO-NORTH or EXPO-SOUTH exactly.
  • Verify that Completion returns the flow's Summary.

Help me troubleshoot why my agent tool used the wrong expo or failed to return the flow summary.

Secret mission

Add Safe Failure Paths

A reusable expo flow needs a safe response when routing data or contact details are missing. Add branches that reject unknown expo keys and skip exhibitors without email addresses while preserving the successful draft path.

Clean Up Your Resources

Clean Up Your Resources

Choose whether to keep your Microsoft 365 resources connected, pause the agent entry point, or delete the test data. Tutorial testing does not consume Microsoft Copilot Studio capacity.

Cost warning

Every action in a production agent flow execution consumes Copilot Studio capacity. New runs can be blocked after prepaid capacity is exhausted.

  • Choose the Pause or Delete option below to prevent this project from being invoked through the agent.

Resources you used:

  • Three lists in the shared SharePoint site: Expo Directory, Expo North Exhibitors, and Expo South Exhibitors.
  • Two Microsoft Forms: Expo North Follow-Up and Expo South Follow-Up.
  • The published Prepare Expo Follow-Up Drafts flow plus the Expo Follow-Up Assistant agent with its flow tool connection.
  • The personalized test messages in the Office 365 Outlook Drafts folder.

Keep everything running

No action needed. Choose this if you want to continue testing the two expo paths with the same sample data.

  • Keep the three SharePoint lists with their directory mappings and exhibitor rows.
  • Keep both Microsoft Forms with their response links.
  • Leave Prepare Expo Follow-Up Drafts published in Copilot Studio.
  • Leave Expo Follow-Up Assistant connected to the published flow.
  • Retain the Outlook drafts for review or comparison.

Pause - I'll come back to this later

This option disconnects the flow from the agent while preserving the published flow. Your project data remains available for later use.

  • Return to the Agents page in Copilot Studio.
  • Select Expo Follow-Up Assistant.
  • Open its Tools page.
  • Find Prepare Expo Follow-Up Drafts in the tool list.
  • Use the tool's remove control to disconnect it from the agent.
  • Confirm Prepare Expo Follow-Up Drafts no longer appears on the agent's Tools page.

The published flow remains available in Copilot Studio. Your SharePoint lists, Microsoft Forms, and Outlook drafts also stay intact.

Delete - I don't want to use this again

Deletion removes the sample data, forms, drafts, flow, and agent created for this project. Your shared SharePoint site and Microsoft 365 account remain in place.

SharePoint lists:

  • Switch back to Site contents in the shared SharePoint site.
  • Delete Expo Directory from its list settings page.
  • Delete Expo North Exhibitors from its list settings page.
  • Delete Expo South Exhibitors from its list settings page.
  • Confirm the three lists no longer appear in Site contents.

Microsoft Forms:

  • Return to the Microsoft Forms home page from earlier.
  • Delete Expo North Follow-Up through its form options menu.
  • Delete Expo South Follow-Up through its form options menu.
  • Confirm both forms no longer appear on the Forms home page.

Outlook drafts:

  • Return to the Drafts folder in Office 365 Outlook.
  • Select the personalized test drafts created by Prepare Expo Follow-Up Drafts.
  • Delete the selected drafts.
  • Confirm no project test drafts remain in Drafts.

Copilot Studio resources:

  • Return to the Agents page in Copilot Studio.
  • Delete Expo Follow-Up Assistant through its agent options menu.
  • Return to the Workflows page.
  • Delete Prepare Expo Follow-Up Drafts through its flow options menu.
  • Confirm the agent and flow no longer appear on their respective pages.

Deleting Expo Follow-Up Assistant also removes its project-specific tool connection.

Nice Work!

Nice Work!

Brilliant work! You built a reusable follow-up assistant in Microsoft Copilot Studio. One published agent flow now routes between separate expo data sources to prepare the correct drafts in Office 365 Outlook.

You learned how to:

  • Built a configuration-driven directory in SharePoint Online. Each expo key maps to its exhibitor list. Its directory row also stores the matching Microsoft Forms response URL.
  • Used a dynamic SharePoint REST request to load the list named by the selected directory row. Tests for both expo keys now return their own exhibitor data.
  • Connected the published flow to the Expo Follow-Up Assistant. A chat request now produces personalized unsent drafts. Each draft names the correct contact. Each draft includes the correct company. The matching expo form link appears in every message.
  • Secret Mission: Added safe failure paths for unknown expo keys. The flow also skips exhibitors with missing email addresses. Valid requests still create drafts.

Ready to quiz yourself?