Getting User Details To Use In Power Virtual Agents (Teams)

Lets use Power Automate inside Power Virtual Agents to get all the users details who is interacting with the bot. We can customize our greetings, or simply use any information that Office365 returns

Things to Know

This examples is based on building a Virtual Agent in Microsoft Teams.
We will be using the ‘Only for teams’ Authentication on the bot.

Summary

By default PVA in Teams has some valuable variables handy, like ‘bot.UserDisplayName‘. This is awesome, but what if we want more information about the logged in user?

This post will show both scenarios, on using the bot.UserDisplayName variable as well as getting all the user details that are stored in Office365 like:
– Email Address
– First Name
– Last Name
– Job Title
– Etc.

We can also use this in the Greetings Topic to address the user by their first name, rather than their display name. (Keep in mind this might affect performance by a couple seconds)

Contents

Bot Setup
Scenario 1 (Display Name)
Scenario 2 (Office365 Details)
Conclusion

Bot Setup

Once you have your Bot created, make sure the Authentication is set to ‘Only for teams’. To check click
Manage > Security, Authentication

For this example we will be using the ‘Only for Teams’ option. This will work for ‘Manual’ as well, but will require additional steps to setup a App Registration in Azure.

Select ‘Only for Teams’

Customize Greeting Scenario 1 (DisplayName)

After enabling the Authentication, you will now have access to Two variables,
bot.UserDisplayName
bot.UserId

Now lets customize our greeting.

Navigate to ‘Topics’ and select the ‘Greeting’ Topic, this is under ‘System Topics’. Click on the Authoring Canvas button.

Inside the message under the Trigger, you can customize the greeting message to include the variable bot.UserDisplayName

Testing this, the Bot now knows my Display Name. This variable can be used in any topic. Which gives the Bot more of a human type feel.

To get all the user details from Office365, scenario 2 will cover this

Customize Greeting Scenario 2 (Office365)

Navigate to ‘Topics’ and select the ‘Greeting’ Topic, this is under ‘System Topics’. Click on the Authoring Canvas button.


Under the ‘Trigger Phrases’ and select ‘Call an action’. We will now build a new Flow to get the user details we want.

You will now be navigated to a new screen where you will build your Flow.
Select the Basic PVA Flow Template

First give the Flow a meaningful name. Mine is:
Power Virtual Agents – Get User Info

Add a Text Input to pass in the Display Name variable

Next add a ‘Search for users‘ action from office365 connector, and pass in the PVA dynamic value from the trigger

Now we have all the user details. The results are returned as an Array. To get around this.
We can add a ‘Get user profile‘ action and pass in the first User Principal Name(UPN)

We have to use the first() expression, so we don’t get put into an Apply to each loop, my expression:

first(outputs('Search_for_users_(V2)')?['body/value'])?['UserPrincipalName']
@{first(outputs(‘Search_for_users_(V2)’)?[‘body/value’])?[‘UserPrincipalName’]}

Lastly in the Return values to PVA action, add all the values you want from ‘Get user profile‘ dynamic content

Click Save, and close on top right of the screen. Back at the PVA Canvas screen, add your Flow

Pass in the bot.UserDisplayName variable

Now we can customize our greeting to only address the user by first name

As a test I created a Topic called User Details

Conclusion

This can be a great way to give your bot more personality. Do keep in mind that this may affect performance.

Authentication on Microsoft Forms

Microsoft Forms is great for many use cases. However, with some use cases you may not want the whole organization to have access to this form.

Summary

In short, we want to setup a way to allow certain users to fill out a MS form.
How can we achieve this?
My Flow below will show how to take a list from SharePoint that has users emails, to only allow them to process the Form.

** Note – You do not have to use SharePoint, you can use any means necessary. **

Setup

First you will need to have a Microsoft Form created – Any MS Form will work

Next, we setup our List of ‘Authenticated’ Emails. Again in this demo I am using SharePoint
I created a simple SharePoint List with a single text field to store email addresses

Steps

In the Flow, we create as normal with a Microsoft Form Trigger and action to get the Details
Trigger – When a new response is submitted
Action – Get response details
Next add a Variable, we make the Type an Array
Under the Variable, add Get items action, and choose our Authenticated users list that we created above

Next, add an Apply to each loop. Select the value from the Get items action.
Inside the loop, add a Append to array variable, select the variable that we initialized above. Value = the column name that stores the email Address in our SharePoint List

** Note – Make sure the Initialize variable is type Array **

Outside the loop – Add a Condition
Select the Array on the left side – Contains – Responder on the right

— We use Contains to check if the User filling out the form is in this Array of emails —

If the user who is filling out the form does not belong to the ‘Authenticated’ list, we Send an Email letting the user know they are unauthorized to fill out this form.
Under the Send an email action, add a Terminate action with Status of Success, this is to ensure the flow stops running, while not throwing an unwanted Failed run

Here is what a User will see when they do not have access

Conclusion

I am sure there are a million ways to add your own intuitive Authentication methods.
I hope my method helps or inspires someone else!
Thanks for reading