cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Sravan_999
Frequent Visitor

How can I use Dynamic Multi-choices in the PVA chatbot?

Hi,

I’d like to use my SharePoint List Items as dynamic Multi-Choices in the PVA chatbot. So I tried the unified canvas(preview) but I have to create bot in the production type. 

So is there any possibility to get SharePoint List Items and use dynamic multi choices as in the ask question PVA chatbot? Please let me know if there’s any way to solve it.

 

Thanks

2 ACCEPTED SOLUTIONS

Accepted Solutions
HenryJammes
Copilot Studio
Copilot Studio

PVA + Bot Framework Composer to display dynamic choice options

In this first answer, I will provide an example on how to present a chatbot user with dynamic choice options that are retrieved from an external data source. I use Dataverse in this example, but using SharePoint would be similar, as we retrieve the data with a Power Automate cloud flow and pass the data back to Power Virtual Agents.

 

The first thing you'll want to do is retrieve the data from your external source.

In my scenario, I want to display a list of stores that are available for a given city.

 

So, I create a new topic called "Store Locations", give it a few trigger phrases, and add a Question node to ask the user "What is your city"?

I use Power Virtual Agents' default "City" entity to automatically extract the city from a user utterance.

I also save the response as the "UserCity" variable and update the variable to make it global, so I change its scope to "Bot (any topic can access)". This is important for the rest of my demonstration because I will also pass that value to a Bot Framework Composer dialog.

 

HenryJammes_1-1671133550534.png

 

I then create a new cloud flow to look for the list of stores for a given city.

HenryJammes_2-1671133764441.png

 

In Power Automate:

  • I add "User City" as a text input for my flow.
  • I add 1 integer variable 'Number Of Accounts"  and 1 array variable "List Of Accounts Options"
  • I use the "List Rows" from the Dataverse connector to retrieve a list of Accounts with their name, address first line, and I filter the list to only retrieve active accounts that are located in the city the user provided (UserCity).

HenryJammes_3-1671134122587.png


Still in Power Automate:

  • I add an "Append to array variable" for my "List Of Accounts Options" variable. In "Value" I use the dynamic content "Account Name". This also immediately and automatically creates an "Apply to Each" loop.
  • I add another "Append to array variable" for my "Number Of Accounts" variable. In "Value" I simply enter 1.
  • Finally, in the "Return value(s) to Power Virual Agents" step, I add 2 outputs: "Number Of Accounts" and "List Of Accounts Options". For "Number Of Accounts" I can map it to corresponding variable, but for "List Of Accounts Options" I first need to transform it to text format (as it is an array). To that end, I go the "Expression" tab, select "string" and go back to the "Dynamic Content" tab to select "List Of Accounts Options" and click OK.

HenryJammes_4-1671134884366.png

 

Back in Power Virtual Agents:

  • I can see my Power Automate flows has the new 2 outputs created as variables.
  • I make the "ListOfAccoutsOptions" a Bot-scoped variable
  • I use the "NumberOfAccounts" variable in a Condition node so that I can have different user experienced if the city returns 0 results.
  • I save my topic

 

HenryJammes_5-1671135068284.png

 

I'm now going to move over to the Bot Framework Composer.

  • From the list of topics, I click on "Open in Bot Framework Composer".

HenryJammes_6-1671135297639.png

In Bot Framework Composer:

  • If I haven't done so already, I install it, authenticate and create a local folder for my changes
  • I add a new dialog for my bot that I name "ListOfAccountsOptions".

HenryJammes_7-1671135404564.png

  • In order for my dialog to return values to Power Virtual Agents, I add an Output: UserSelectedStore and it's a string.

HenryJammes_8-1671135514509.png

  • Under "BeginDialog", I add a new "Ask a question" node of type "Multi-choice".
  • In the "Prompt with multi-choice" I add "What is your favorite store in ${virtualagent.UserCity}?" as an alternative under "Text". 
  • ${virtualagent.UserCity} will automatically use the City that the user has provided in Power Virtual Agents.

HenryJammes_9-1671136326523.png

  • In "User input (Choice)", I set the "Properpty" to "dialog.result.UserSelectedStore". That way, I will be able to use the selected option in Power Virtual Agents, in a new variable.
  • I choose "value" as the "Ouput format"

HenryJammes_0-1671199261377.png

 

  • Still in "User input (Choice)", I scroll down to "List style" and select "suggestedAction" (note: for use in Teams, choose "heroCard" instead.
  • For "Array of choices", instead of simple choices, I choose "= Write an expression".
  • I select the data variable returned from my Power Automate cloud flow using the "=${virtualagent.ListOfAccountsOptions}"

HenryJammes_11-1671136683659.png

  • Once done, I go to the "Publish" tab, select my bot, and click "Publish selected bots"

HenryJammes_12-1671136795330.png

I return to my Power Virtual Agents "Store Locations" topic, and under "All other conditions", I add:

  • A message saying "OK, I have found {x] NumberOfAccounts location(s) in {x}bot.UserCity." using variables.
  • A "Redirect to another topic" node to select the "ListOfAccountsOptions" Bot Framework dialog.
  • A message saying "OK, you selected {x} UserSelectedStore - excellence choice!" using the new variable.

HenryJammes_13-1671137115556.png

And that's it.

The list of options presented to the user is dynamically generated from a Power Automate cloud flow:

HenryJammes_14-1671137358046.png

 

 

 

 

 

View solution in original post

HenryJammes
Copilot Studio
Copilot Studio

PVA unified authoring canvas to display dynamic choice options

In this second answer, I use the unified authoring canvas to provide an example on how to present a chatbot user with dynamic choice options that are retrieved from an external data source. I use Dataverse in this example, but using SharePoint would be similar, as we retrieve the data with a Power Automate cloud flow and pass the data back to Power Virtual Agents.

 

In my scenario, I want to display a list of stores that are available for a given city.

 

In Power Virtual Agents, using the unified authoring canvas:

  • I create a new topic called "Store Locations", give it a few trigger phrases, and add a Question node to ask the user "What is your city"?
    I use Power Virtual Agents' default "City" entity to automatically extract the city from a user utterance.
  • I save the response as the "UserCity" variable.

HenryJammes_15-1671139957781.png

Next, I add a "Call an action" node and choose "Create a flow".

 

I then create a new cloud flow to look for the list of stores for a given city.

HenryJammes_16-1671140163982.png

In Power Automate:

  • I add "User City" as a text input for my flow.
  • I add 1 integer variable 'Number Of Accounts"  and 1 array variable "List Of Accounts Options"
  • I use the "List Rows" from the Dataverse connector to retrieve a list of Accounts with their name, address first line, and I filter the list to only retrieve active accounts that are located in the city the user provided (UserCity).

HenryJammes_3-1671134122587.png


Still in Power Automate:

  • I add an "Append to array variable" for my "List Of Accounts Options" variable. In "Value" I use the dynamic content "Account Name". This also immediately and automatically creates an "Apply to Each" loop.
  • I add another "Append to array variable" for my "Number Of Accounts" variable. In "Value" I simply enter 1.
  • Finally, in the "Return value(s) to Power Virual Agents" step, I add 2 outputs: "Number Of Accounts" and "List Of Accounts Options". For "Number Of Accounts" I can map it to corresponding variable, but for "List Of Accounts Options" I first need to transform it to text format (as it is an array). To that end, I go the "Expression" tab, select "string" and go back to the "Dynamic Content" tab to select "List Of Accounts Options" and click OK.

HenryJammes_4-1671134884366.png

 

Back in Power Virtual Agents:

  • I map the UserCity variable with the "User City" input the cloud flow needs.
  • I can see my cloud flows has the 2 new outputs created as new variables.
  • I use the "NumberOfAccounts" variable in a Condition node so that I can have different user experienced if the city returns 0 results.
  • I save my topic

HenryJammes_17-1671140352034.png

 

I return to my Power Virtual Agents "Store Locations" topic, and under "All other conditions", I add:

  • A message saying "OK, I have found {x} NumberOfAccounts location(s) in {x} UserCity." using variables.
  • A new Question node "What is your favorite store in {x} UserCity ?" with "Options from a list variable" in "Identify" so that the options are dynamic.

HenryJammes_18-1671140665279.png

 

  • In the List Variable I go to the Power Fx formula editor.
  • I transform my ListOfAccountsOptions variable string into a table using this formula:
    ForAll(
        Table(ParseJSON(Topic.ListOfAccountsOptions)),
            Text(ThisRecord.Value)
    )
  • I save response as the "UserSelectedStore" variable.
  • I add a message saying "Awesome, {x} UserSelectedStore is an excellence choice!" using the new variable.

HenryJammes_19-1671140799261.png

 

And that's it.

The list of options presented to the user is dynamically generated from a Power Automate cloud flow:

HenryJammes_20-1671140897925.png

 

 

 

 

 

 

View solution in original post

9 REPLIES 9
HenryJammes
Copilot Studio
Copilot Studio

PVA + Bot Framework Composer to display dynamic choice options

In this first answer, I will provide an example on how to present a chatbot user with dynamic choice options that are retrieved from an external data source. I use Dataverse in this example, but using SharePoint would be similar, as we retrieve the data with a Power Automate cloud flow and pass the data back to Power Virtual Agents.

 

The first thing you'll want to do is retrieve the data from your external source.

In my scenario, I want to display a list of stores that are available for a given city.

 

So, I create a new topic called "Store Locations", give it a few trigger phrases, and add a Question node to ask the user "What is your city"?

I use Power Virtual Agents' default "City" entity to automatically extract the city from a user utterance.

I also save the response as the "UserCity" variable and update the variable to make it global, so I change its scope to "Bot (any topic can access)". This is important for the rest of my demonstration because I will also pass that value to a Bot Framework Composer dialog.

 

HenryJammes_1-1671133550534.png

 

I then create a new cloud flow to look for the list of stores for a given city.

HenryJammes_2-1671133764441.png

 

In Power Automate:

  • I add "User City" as a text input for my flow.
  • I add 1 integer variable 'Number Of Accounts"  and 1 array variable "List Of Accounts Options"
  • I use the "List Rows" from the Dataverse connector to retrieve a list of Accounts with their name, address first line, and I filter the list to only retrieve active accounts that are located in the city the user provided (UserCity).

HenryJammes_3-1671134122587.png


Still in Power Automate:

  • I add an "Append to array variable" for my "List Of Accounts Options" variable. In "Value" I use the dynamic content "Account Name". This also immediately and automatically creates an "Apply to Each" loop.
  • I add another "Append to array variable" for my "Number Of Accounts" variable. In "Value" I simply enter 1.
  • Finally, in the "Return value(s) to Power Virual Agents" step, I add 2 outputs: "Number Of Accounts" and "List Of Accounts Options". For "Number Of Accounts" I can map it to corresponding variable, but for "List Of Accounts Options" I first need to transform it to text format (as it is an array). To that end, I go the "Expression" tab, select "string" and go back to the "Dynamic Content" tab to select "List Of Accounts Options" and click OK.

HenryJammes_4-1671134884366.png

 

Back in Power Virtual Agents:

  • I can see my Power Automate flows has the new 2 outputs created as variables.
  • I make the "ListOfAccoutsOptions" a Bot-scoped variable
  • I use the "NumberOfAccounts" variable in a Condition node so that I can have different user experienced if the city returns 0 results.
  • I save my topic

 

HenryJammes_5-1671135068284.png

 

I'm now going to move over to the Bot Framework Composer.

  • From the list of topics, I click on "Open in Bot Framework Composer".

HenryJammes_6-1671135297639.png

In Bot Framework Composer:

  • If I haven't done so already, I install it, authenticate and create a local folder for my changes
  • I add a new dialog for my bot that I name "ListOfAccountsOptions".

HenryJammes_7-1671135404564.png

  • In order for my dialog to return values to Power Virtual Agents, I add an Output: UserSelectedStore and it's a string.

HenryJammes_8-1671135514509.png

  • Under "BeginDialog", I add a new "Ask a question" node of type "Multi-choice".
  • In the "Prompt with multi-choice" I add "What is your favorite store in ${virtualagent.UserCity}?" as an alternative under "Text". 
  • ${virtualagent.UserCity} will automatically use the City that the user has provided in Power Virtual Agents.

HenryJammes_9-1671136326523.png

  • In "User input (Choice)", I set the "Properpty" to "dialog.result.UserSelectedStore". That way, I will be able to use the selected option in Power Virtual Agents, in a new variable.
  • I choose "value" as the "Ouput format"

HenryJammes_0-1671199261377.png

 

  • Still in "User input (Choice)", I scroll down to "List style" and select "suggestedAction" (note: for use in Teams, choose "heroCard" instead.
  • For "Array of choices", instead of simple choices, I choose "= Write an expression".
  • I select the data variable returned from my Power Automate cloud flow using the "=${virtualagent.ListOfAccountsOptions}"

HenryJammes_11-1671136683659.png

  • Once done, I go to the "Publish" tab, select my bot, and click "Publish selected bots"

HenryJammes_12-1671136795330.png

I return to my Power Virtual Agents "Store Locations" topic, and under "All other conditions", I add:

  • A message saying "OK, I have found {x] NumberOfAccounts location(s) in {x}bot.UserCity." using variables.
  • A "Redirect to another topic" node to select the "ListOfAccountsOptions" Bot Framework dialog.
  • A message saying "OK, you selected {x} UserSelectedStore - excellence choice!" using the new variable.

HenryJammes_13-1671137115556.png

And that's it.

The list of options presented to the user is dynamically generated from a Power Automate cloud flow:

HenryJammes_14-1671137358046.png

 

 

 

 

 

HenryJammes
Copilot Studio
Copilot Studio

PVA unified authoring canvas to display dynamic choice options

In this second answer, I use the unified authoring canvas to provide an example on how to present a chatbot user with dynamic choice options that are retrieved from an external data source. I use Dataverse in this example, but using SharePoint would be similar, as we retrieve the data with a Power Automate cloud flow and pass the data back to Power Virtual Agents.

 

In my scenario, I want to display a list of stores that are available for a given city.

 

In Power Virtual Agents, using the unified authoring canvas:

  • I create a new topic called "Store Locations", give it a few trigger phrases, and add a Question node to ask the user "What is your city"?
    I use Power Virtual Agents' default "City" entity to automatically extract the city from a user utterance.
  • I save the response as the "UserCity" variable.

HenryJammes_15-1671139957781.png

Next, I add a "Call an action" node and choose "Create a flow".

 

I then create a new cloud flow to look for the list of stores for a given city.

HenryJammes_16-1671140163982.png

In Power Automate:

  • I add "User City" as a text input for my flow.
  • I add 1 integer variable 'Number Of Accounts"  and 1 array variable "List Of Accounts Options"
  • I use the "List Rows" from the Dataverse connector to retrieve a list of Accounts with their name, address first line, and I filter the list to only retrieve active accounts that are located in the city the user provided (UserCity).

HenryJammes_3-1671134122587.png


Still in Power Automate:

  • I add an "Append to array variable" for my "List Of Accounts Options" variable. In "Value" I use the dynamic content "Account Name". This also immediately and automatically creates an "Apply to Each" loop.
  • I add another "Append to array variable" for my "Number Of Accounts" variable. In "Value" I simply enter 1.
  • Finally, in the "Return value(s) to Power Virual Agents" step, I add 2 outputs: "Number Of Accounts" and "List Of Accounts Options". For "Number Of Accounts" I can map it to corresponding variable, but for "List Of Accounts Options" I first need to transform it to text format (as it is an array). To that end, I go the "Expression" tab, select "string" and go back to the "Dynamic Content" tab to select "List Of Accounts Options" and click OK.

HenryJammes_4-1671134884366.png

 

Back in Power Virtual Agents:

  • I map the UserCity variable with the "User City" input the cloud flow needs.
  • I can see my cloud flows has the 2 new outputs created as new variables.
  • I use the "NumberOfAccounts" variable in a Condition node so that I can have different user experienced if the city returns 0 results.
  • I save my topic

HenryJammes_17-1671140352034.png

 

I return to my Power Virtual Agents "Store Locations" topic, and under "All other conditions", I add:

  • A message saying "OK, I have found {x} NumberOfAccounts location(s) in {x} UserCity." using variables.
  • A new Question node "What is your favorite store in {x} UserCity ?" with "Options from a list variable" in "Identify" so that the options are dynamic.

HenryJammes_18-1671140665279.png

 

  • In the List Variable I go to the Power Fx formula editor.
  • I transform my ListOfAccountsOptions variable string into a table using this formula:
    ForAll(
        Table(ParseJSON(Topic.ListOfAccountsOptions)),
            Text(ThisRecord.Value)
    )
  • I save response as the "UserSelectedStore" variable.
  • I add a message saying "Awesome, {x} UserSelectedStore is an excellence choice!" using the new variable.

HenryJammes_19-1671140799261.png

 

And that's it.

The list of options presented to the user is dynamically generated from a Power Automate cloud flow:

HenryJammes_20-1671140897925.png

 

 

 

 

 

 

Thank you so much @HenryJammes for the clear explanation. In the unified authoring canvas itself there’s a set variable option or fx, which helps for dynamic values where in the production type there’s no option we need to use the flow and BFC. I really appreciate it, this is very helpful to us.

 

 

nice job

darylvogan
Helper V
Helper V

When I try this, I get this message:

"There is an error: 'BindingKeyNotFoundError'". Seems that it doesn't recognize the parameter being return from Automate to be a string.

 

Any ideas?

darylvogan
Helper V
Helper V

Oops, if I click the ellipses in the top of the card and click "Refresh", it reloads and recognizes the parameter as string.


@darylvogan wrote:

Oops, if I click the ellipses in the top of the card and click "Refresh", it reloads and recognizes the parameter as string.


Indeed there's a transient error - it's mostly a UI glitch that goes away after a refresh

darylvogan
Helper V
Helper V

Getting closer, but still one bump in the road. I'm getting an error in the question action that utilizes the list of values. "Variable is being set to an incorrect type. Assigned: Record, expected: Table. There is an error: 'MissingDisplayName"

 

When selecting the variable to assign response to, it auto-selects record type, so I cannot change/choose it. See screenshot.

Any help is greatly appreciated.

 

 

darylvogan
Helper V
Helper V

I really should work through issue before posting. Fixed it by using the parsing formula in the question action, per the tutorial.


Helpful resources

Announcements

Celebrating the May Super User of the Month: Laurens Martens

  @LaurensM  is an exceptional contributor to the Power Platform Community. Super Users like Laurens inspire others through their example, encouragement, and active participation. We are excited to celebrated Laurens as our Super User of the Month for May 2024.   Consistent Engagement:  He consistently engages with the community by answering forum questions, sharing insights, and providing solutions. Laurens dedication helps other users find answers and overcome challenges.   Community Expertise: As a Super User, Laurens plays a crucial role in maintaining a knowledge sharing environment. Always ensuring a positive experience for everyone.   Leadership: He shares valuable insights on community growth, engagement, and future trends. Their contributions help shape the Power Platform Community.   Congratulations, Laurens Martens, for your outstanding work! Keep inspiring others and making a difference in the community!   Keep up the fantastic work!        

Check out the Copilot Studio Cookbook today!

We are excited to announce our new Copilot Cookbook Gallery in the Copilot Studio Community. We can't wait for you to share your expertise and your experience!    Join us for an amazing opportunity where you'll be one of the first to contribute to the Copilot Cookbook—your ultimate guide to mastering Microsoft Copilot. Whether you're seeking inspiration or grappling with a challenge while crafting apps, you probably already know that Copilot Cookbook is your reliable assistant, offering a wealth of tips and tricks at your fingertips--and we want you to add your expertise. What can you "cook" up?   Click this link to get started: https://aka.ms/CS_Copilot_Cookbook_Gallery   Don't miss out on this exclusive opportunity to be one of the first in the Community to share your app creation journey with Copilot. We'll be announcing a Cookbook Challenge very soon and want to make sure you one of the first "cooks" in the kitchen.   😊Don't miss your moment--start submitting in the Copilot Cookbook Gallery today!     Thank you,  Engagement Team

Announcing Power Apps Copilot Cookbook Gallery

We are excited to share that the all-new Copilot Cookbook Gallery for Power Apps is now available in the Power Apps Community, full of tips and tricks on how to best use Microsoft Copilot as you develop and create in Power Apps. The new Copilot Cookbook is your go-to resource when you need inspiration--or when you're stuck--and aren't sure how to best partner with Copilot while creating apps.   Whether you're looking for the best prompts or just want to know about responsible AI use, visit Copilot Cookbook for regular updates you can rely on--while also serving up some of your greatest tips and tricks for the Community. Check Out the new Copilot Cookbook for Power Apps today: Copilot Cookbook - Power Platform Community.  We can't wait to see what you "cook" up!      

Welcome to the Copilot Studio Community!

You are now a part of a vibrant growing group of peers and industry experts who are here to network, share knowledge, and even have a little fun!   If you have not yet registered, please visit here to learn how to register!   Now that you are a member, you can enjoy the following resources:   The Microsoft Copilot Studio Community Forums If you are looking for support with any part of Microsoft Copilot Studio, our forums are the place to go. They are titled "Forums" and there you will find technical professionals with years of experience who are ready and eager to answer your questions. You now have the ability to post, reply and give "kudos" on the Copilot Studio Community forums! Make sure you conduct a quick search before creating a new post because your question may have already been asked and answered!   Microsoft Copilot Studio Ideas Do you have an idea to improve the Microsoft Copilot Studio experience, or a feature request for future product updates? Then the "Copilot Studio Ideas" section is where you can contribute your suggestions and vote for ideas posted by other Community members. We constantly look to the most voted Ideas when planning updates, so your suggestions and votes will always make a difference.   News & Announcements The Copilot Studio Community News & Announcements is your stop to get all the latest news around Community events and announcements. This is where we share with the Community what is going on and how to participate!   Copilot Studio Samples, Learning and Video Galleries We have galleries that can assist you with information on creating a bot in our Webinars and Video Gallery,  and the ability to share the bots you have created in our Bot Sharing Gallery.  Check out the awesome content being shared there today!   Again, we are excited to welcome you to the Microsoft Copilot Studio Community family! Whether you are brand new to the world of bot creation or you are a seasoned Copilot Studio veteran, our goal is to shape the Community to be your ‘go to’ for support, networking, education, inspiration and encouragement as we enjoy this adventure together!   Let us know in the Community Feedback if you have any questions or comments about your Community experience. To learn more about the Community and your account be sure to visit our Community Support Area boards to learn more!   We look forward to seeing you in the Copilot Studio Community!The Copilot Studio Community Team

Tuesday Tip | How to Report Spam in Our Community

It's time for another TUESDAY TIPS, your weekly connection with the most insightful tips and tricks that empower both newcomers and veterans in the Power Platform Community! Every Tuesday, we bring you a curated selection of the finest advice, distilled from the resources and tools in the Community. Whether you’re a seasoned member or just getting started, Tuesday Tips are the perfect compass guiding you across the dynamic landscape of the Power Platform Community.   As our community family expands each week, we revisit our essential tools, tips, and tricks to ensure you’re well-versed in the community’s pulse. Keep an eye on the News & Announcements for your weekly Tuesday Tips—you never know what you may learn!   Today's Tip: How to Report Spam in Our Community We strive to maintain a professional and helpful community, and part of that effort involves keeping our platform free of spam. If you encounter a post that you believe is spam, please follow these steps to report it: Locate the Post: Find the post in question within the community.Kebab Menu: Click on the "Kebab" menu | 3 Dots, on the top right of the post.Report Inappropriate Content: Select "Report Inappropriate Content" from the menu.Submit Report: Fill out any necessary details on the form and submit your report.   Our community team will review the report and take appropriate action to ensure our community remains a valuable resource for everyone.   Thank you for helping us keep the community clean and useful!

The Copilot Studio community is thrilled to share some exciting news!

We are embarking on a journey to enhance your experience by transitioning to a new community platform. Our team has been diligently working to create a fresh community site, leveraging the very Dynamics 365 and Power Platform tools that our community advocates for.  We're proud to announce that the Copilot Studio community will pioneer this migration starting in June 2024. The move will mark the beginning of a new chapter, and we're eager for you to be a part of it. Following our lead, the rest of the Power Platform product sites will join us over the summer.   Stay tuned for more updates as we get closer to the launch. We can't wait to welcome you to our new community space, designed with you in mind, to connect, learn, and grow together.   Here's to new beginnings and endless possibilities!   If you have any questions, observations or concerns throughout this process please go to https://aka.ms/PPCommSupport. To stay up to date on the latest details of this migration and other important Community updates subscribe to our News and Announcements forums: Copilot Studio, Power Apps, Power Automate, Power Pages  

Users online (3,768)