cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
LindaP
Regular Visitor

Is it possible to reconnect the user to a conversation with a Power Virtual Agent and retain the context and previous chat history?

Hi There!

Using Power Virtual Agents, is possible to reconnect the user to a conversation, retaining both the context and previous chat history?

For example,

  • If the user leaves the website by accidentally closing their browser. Is it possible for the user to continue their session when they revisit the site?
  • If the user opens a new tab within the same domain, is it possible for the chatbot conversation to follow them?

The Azure bot service supports reconnecting to a conversation. Is this available for Power Virtual Agents?

https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-direct-line-3-0-recon...

Is the Conversation ID available as a property to the hosting website to store for the user?

https://docs.microsoft.com/en-us/azure/bot-service/bot-service-resources-identifiers-guide?view=azur...

 

1 ACCEPTED SOLUTION

Accepted Solutions

Hi @LindaP ,

 

I created a workflow to solve your problem. (if you are using a Custom canvas)

Please, follow the steps below:

 

Power Automate steps

1. Download the template here: https://bit.ly/PVA-GetConversationTranscript

2. Open flow.microsoft.com

3. Open Solutions (left menu)

4. Import my solution in your environment

5. Open the solution and click on the workflow

6. Turn on the workflow

7. Edit the workflow

8. Find the action called "Compose - Filter days in the past", I inserted "-7" to search seven days in the past because if you are filtering more than 7, maybe your workflow will be loaded up to 2 minutes and Power Virtual Agents will be shown the error. If you want to search for conversations for more than 7 days, test before implementing this feature and remember to insert subtract value before your day like "-10" (ten days in the past).

9.  Find the action called "List records - Conversation Transcript entity" and select your credentials (is not need to change the environment or entity)

10. Done.

 

Custom Canvas

Important: This solution will be work if you are using inside Custom Canvas, like Custom website, Power Apps Portals, SharePoint, or something like that.

1. Add this code inside your custom canvas: https://powervirtualagents.microsoft.com/en-us/blog/change-your-power-virtual-agents-default-canvas-...

2. Change the fetch method to my code below (only fetch code)

 

New fetch code

fetch(theURL)
            .then(response => response.json())
            .then(conversationInfo => {
                window.WebChat.renderWebChat(
                    {
                        directLine: window.WebChat.createDirectLine({
                            token: conversationInfo.token,
                        }),
                        store: store,
                        styleOptions: styleOptions,
                        overrideLocalizedStrings: {
                            TEXT_INPUT_PLACEHOLDER: 'Type your message'
                        }
                    },
                    document.getElementById('webchat')
                );
                $("#webchat input").parent().parent().parent().append("<div id='conversationId'><span>"+conversationInfo.conversationId+"</span></div>")

            })
            .catch(err => console.error("An error occurred: " + err));

 

3. The idea is the user saves the current Conversation Id if he wants to restore this conversation in the future (like a code number). He can save in your notes and personal documents and in the future, if he wants to see the last conversation, he just sends this code.


conversationid-codesample.png

 

4. Insert this CSS code to improve the layout

 

div#conversationId {
    padding: 0 10px;
    color: #888787;
    font-size: 13px;
    text-align: center;
}

 

5. Done.

 

Power Virtual Agents steps

Important: This solution will be work if you are using inside Custom Canvas, like Custom website, Power Apps Portals, SharePoint, or something like that.

1. Open Greeting topic or your Starter topic

2. Create a question with two options
Question: "Do you want to restore a conversation?"
Options: Yes/No
3. If Yes, create a question with identity type "User's entire response" and change the name of variable like "ConversationId". The idea is the user saves the current Conversation Id if he wants to restore this conversation in the future (like a code number).
5. Create an action calling my workflow (Power Automate) using the ConversationId variable like the input parameter.
6. Create a show message and select the variable ConversationHistory (Power Automate output)

7. Done.

 

I hope this solution helps you to do your scenario.


Did I answer your question? Mark my post as a solution!
Thanks!

Renato Romão,

Connect with me here 😉

Power Virtual Agents course (+2.650 students) : English | Português

View solution in original post

8 REPLIES 8
renatoromao
Super User
Super User

Hi @LindaP ,

 

Unfortunately, we can't do it yet.

You can maintain the history in some channels like Microsoft Teams and Facebook because the chat maintains the historical inside the channel. But if you are using the browser, demo website, or something like that, you will lose the conversation.

 

I created the idea here: https://powerusers.microsoft.com/t5/Power-Virtual-Agents-Ideas/Reconnect-the-conversation-with-user-...

Please, vote and make this answer as the solution to many users' votes.

---

Thanks!
Renato Romão
https://www.linkedin.com/in/renatoromao/


Did I answer your question? Mark my post as a solution!
Thanks!

Renato Romão,

Connect with me here 😉

Power Virtual Agents course (+2.650 students) : English | Português

Thanks @renatoromao . You have confirmed what I thought was not possible yet. Thank you.

 

Have already cast my vote for the idea.

You're welcome! @LindaP 

Please, Accept this answer as the solution.

 

---

Thanks!
Renato Romão
https://www.linkedin.com/in/renatoromao/


Did I answer your question? Mark my post as a solution!
Thanks!

Renato Romão,

Connect with me here 😉

Power Virtual Agents course (+2.650 students) : English | Português
RezaDorrani
Dual Super User II
Dual Super User II

Hi @LindaP and @renatoromao 

 

There is a ConversationHistory entity in CDS that stores information of the user interaction with the bot in json format.

Not sure about anonymous conversations but if user does authenticate I believe that token info is available and one could leverage flow to query the CDS entity to check the last conversation the bot had with the user.

 

@renatoromao thoughts?

 

--------------------------------------------------------------------------------
If this post helps answer your question, please click on “Accept as Solution” to help other members find it more quickly. If you thought this post was helpful, please give it a Thumbs Up.

Thanks,
Reza Dorrani, MVP
YouTube
Twitter

Great idea @RezaDorrani , but we have a limitation to restore the history to the user 😞

 

But if @LindaP  follow your idea, she can use the authentication to get the user token during the conversation and if the connection has been lost, she can create automation using Power Automate when the record is created on Common Data Service entity called ConversationTranscript, she can read the JSON inside the "Content" field and get the token and identify which user has this token and send the email to him.

It's complex, but works (I think) 🙂 

 

- Create Authentication inside your topic

- Create a workflow inside Power Automate with the trigger "When an item created" (something like that) inside Common Data Service, your bot environment, entity called "ConversationTranscript"

- Create Parse JSON action to get the user token inside the conversation


Did I answer your question? Mark my post as a solution!
Thanks!

Renato Romão,

Connect with me here 😉

Power Virtual Agents course (+2.650 students) : English | Português

@renatoromao 

 

No doubt complicated but should provide the required results.

 

Key here is user authentication because without that it will not be possible to read the users last conversation data.

Also, I beleive conversation history stores data upto a Month only, so the user has to have made their last interaction with the bot within that timespan.

 

--------------------------------------------------------------------------------
If this post helps answer your question, please click on “Accept as Solution” to help other members find it more quickly. If you thought this post was helpful, please give it a Thumbs Up.

Thanks,
Reza Dorrani, MVP
YouTube
Twitter

Thanks for the idea @RezaDorrani. This could work for the scenario where the user is authenticated to the bot.

 

The scenario that I am trying to resolve is for a non-authenticated user.

 

It would be helpful to have the ConversationId exposed during the chat session so the website could store it in the user's cookies. For example, when the user revisits the website then the bot could try and retrieve the conversation using the stored ConversationId via a Flow and CDS lookup (if within the retention period). Otherwise, start a new conversation if a ConversationId is not stored. I am no website expert, but it was just my idea of how it could potentially work.

Hi @LindaP ,

 

I created a workflow to solve your problem. (if you are using a Custom canvas)

Please, follow the steps below:

 

Power Automate steps

1. Download the template here: https://bit.ly/PVA-GetConversationTranscript

2. Open flow.microsoft.com

3. Open Solutions (left menu)

4. Import my solution in your environment

5. Open the solution and click on the workflow

6. Turn on the workflow

7. Edit the workflow

8. Find the action called "Compose - Filter days in the past", I inserted "-7" to search seven days in the past because if you are filtering more than 7, maybe your workflow will be loaded up to 2 minutes and Power Virtual Agents will be shown the error. If you want to search for conversations for more than 7 days, test before implementing this feature and remember to insert subtract value before your day like "-10" (ten days in the past).

9.  Find the action called "List records - Conversation Transcript entity" and select your credentials (is not need to change the environment or entity)

10. Done.

 

Custom Canvas

Important: This solution will be work if you are using inside Custom Canvas, like Custom website, Power Apps Portals, SharePoint, or something like that.

1. Add this code inside your custom canvas: https://powervirtualagents.microsoft.com/en-us/blog/change-your-power-virtual-agents-default-canvas-...

2. Change the fetch method to my code below (only fetch code)

 

New fetch code

fetch(theURL)
            .then(response => response.json())
            .then(conversationInfo => {
                window.WebChat.renderWebChat(
                    {
                        directLine: window.WebChat.createDirectLine({
                            token: conversationInfo.token,
                        }),
                        store: store,
                        styleOptions: styleOptions,
                        overrideLocalizedStrings: {
                            TEXT_INPUT_PLACEHOLDER: 'Type your message'
                        }
                    },
                    document.getElementById('webchat')
                );
                $("#webchat input").parent().parent().parent().append("<div id='conversationId'><span>"+conversationInfo.conversationId+"</span></div>")

            })
            .catch(err => console.error("An error occurred: " + err));

 

3. The idea is the user saves the current Conversation Id if he wants to restore this conversation in the future (like a code number). He can save in your notes and personal documents and in the future, if he wants to see the last conversation, he just sends this code.


conversationid-codesample.png

 

4. Insert this CSS code to improve the layout

 

div#conversationId {
    padding: 0 10px;
    color: #888787;
    font-size: 13px;
    text-align: center;
}

 

5. Done.

 

Power Virtual Agents steps

Important: This solution will be work if you are using inside Custom Canvas, like Custom website, Power Apps Portals, SharePoint, or something like that.

1. Open Greeting topic or your Starter topic

2. Create a question with two options
Question: "Do you want to restore a conversation?"
Options: Yes/No
3. If Yes, create a question with identity type "User's entire response" and change the name of variable like "ConversationId". The idea is the user saves the current Conversation Id if he wants to restore this conversation in the future (like a code number).
5. Create an action calling my workflow (Power Automate) using the ConversationId variable like the input parameter.
6. Create a show message and select the variable ConversationHistory (Power Automate output)

7. Done.

 

I hope this solution helps you to do your scenario.


Did I answer your question? Mark my post as a solution!
Thanks!

Renato Romão,

Connect with me here 😉

Power Virtual Agents course (+2.650 students) : English | Português

View solution in original post

Helpful resources

Announcements
V3_PVA CAmpaign Carousel.png

Community Challenge - Giveaways!

Participate in the Power Virtual Agents Community Challenge

PVA_User Group Leader_768x460.jpg

Manage your user group events

Check out the News & Announcements to learn more.

Carousel 2021 Release Wave 2 Plan 768x460.jpg

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

PowerPlatform 768x460.png

Microsoft Learn

Check out our new Discover Your Career Path blog post series and get all the details.

Top Solution Authors
Top Kudoed Authors
Users online (3,987)