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,
The Azure bot service supports reconnecting to a conversation. Is this available for Power Virtual Agents?
Is the Conversation ID available as a property to the hosting website to store for the user?
Do you still have the template link? The one on this post is dead.
Hi! Do you have a still active link for this, please?
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-bot-icon-and-name/
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.
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.
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.
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
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
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
You're welcome! @LindaP
Please, Accept this answer as the solution.
---
Thanks!
Renato Romão
https://www.linkedin.com/in/renatoromao/
Thanks @renatoromao . You have confirmed what I thought was not possible yet. Thank you.
Have already cast my vote for the idea.
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-Power-Virtual-Agents/idi-p/564478
Please, vote and make this answer as the solution to many users' votes.
---
Thanks!
Renato Romão
https://www.linkedin.com/in/renatoromao/