Session Persistence
Overview
Session Persistence is the Web Widget’s ability to continue the session on a different page on the same web domain where the widget is embedded. This functionality only works for pages loaded within the same tab of the browser.
In order to get the session persistence functionality, you must toggle on “enable cross page persistence” for the API key generated for the Soul Machines Studio project.
Session persistence is only supported on Digital People on HumanOS 2.4+
The widget code snippet must be included on every page where you want the Digital Person to appear.
Using Page Reload, Page Back, and Page Forward buttons of the browser with session persistence enabled will mute the Digital Person once the page loads. This is intentional browser behavior since these actions are not “interactions with the domain” which is a policy implemented by most browsers to determine if autoplay is allowed. More information can be found in this Google article relating to autoplay.
Navigation using Content Cards
There are several ways to implement navigation if you have a persisted widget across multiple pages. As a conversation writer, you can use the Internal Links Card(s) to present links to the desired pages within your domain to the user. The user can then click on the card to navigate to the desired page. The page would reload to the new page and the Digital Person would resume the session from there.
{
"output": {
"generic": [
{
"values": [
{
"text": "Cool! let me show you how i can persist on different page loads with you. \\@showcards(internallink) \nLet's go to the Use Cases page together! \n#PauseTwo\n#PauseTwo\n"
}
],
"response_type": "text",
"selection_policy": "sequential"
}
]
},
"context": {
"public-internallink": {
"id": "internalLink",
"data": {
"url": "https://smitstage.wpengine.com/use-cases-copy/",
"title": "Soul Machines Use Cases",
"imageUrl": "https://smitstage.wpengine.com/wp-content/uploads/baseEightDP-2048x2048.png",
"description": "End-to-end creativity and collaboration platform to enhance your digital worlds with AI avatars."
},
"type": "internalLink"
}
}
}
Example Code for navigation using Internal link Card
Navigation using links on the webpage
Clicking on a link within a webpage can redirect a user to another page, in which case widget embed code must be present on the possible navigable pages to make sure session persistence is maintained.
Custom DP Response on Page Load
When users are redirected to new pages, a Digital Person can greet them with custom responses. Upon loading a new page, the PageMetadata
andpageUrl
(the URL of the loaded page) are automatically sent as inputs to the configured NLP agent configured for the Digital Person project. Therefore to add a custom response per page:
Add an NLP intent that utilizes the
PageMetadata
data as the training phrase.Add a different response based on each URL,
Implement conditional responses based on the
pageUrl
.
Below, you'll find more specific examples.
These examples aim to keep a welcome sentence for the user when they first connect and to not repeat unnecessary phrases or fallback if the URL is not set up to be recognized in the corpus.
Watson (Classic)
In a Watson skill, set up intent with Page Metadata as a user example:
Moving to Dialog in the left-hand menu, modify Welcome to also trigger if the page metadata intent is triggered.
Add a child node underneath the Welcome node that recognizes the page loaded intent.
Add a child node underneath the one you just created (in the screenshot above, it’s called Navigation). Using the $pageUrl that has been sent from the widget (no need to create this anywhere else in Watson), we can change what the assistant recognizes to change the response provided like below:
At the bottom of this node under “Then assistant should” change it to Jump To and select Navigation (If assistant recognizes (condition)).
Repeat steps 4 and 5 for as many URLs as you would like your corpus to recognize. Each should be a child node of Navigation like this:
DialogFlow CX
Configure Welcome intent as described in the section Configuring the welcome event.
On the left side add a new page called “Determine Page”.
Set “Transition” to “Determine Page” at “Welcome Event handler”.
Click ““Determine Page” in the flow diagram to expand it.
In the “Determine Page” Click the + button next to Route.
Click the Intent dropdown and select +new Intent.
Choose a display name (in this case “Page Metadata”) and add “PAGE_METADATA” as the training phase.
Save the intent.
Add a “Condition” for if the
$session.params.pageUrl = '[page url expected]'
. This can be Or, And or a custom expression depending on if you’d like other conditions.Add expected “Fulfillment” of what you would like the DP to say and save the Route.
Change the Transition Page to the same one “Determine page” so that it loops.
Add similar Routes in “Determine Page” for different page URLs, or you can create a Route group and include all “Page Metadata” intent within one route group.