Tag: Authentication

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

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

    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

    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