Clear the Context in the Alexa Conversations Description Language
To provide a natural conversational experience, Alexa Conversations maintains the conversational context within a skill session. For example, in a pizza skill, if the user selects all their pizza toppings and then later changes the size of their pizza, Alexa Conversations retains all the previously chosen pizza toppings.
API argument values are part of the conversational context. By default, Alexa Conversations carries over all arguments between API calls. If you don't want to carry over arguments, you can specify which arguments to reset. You indicate which arguments to reset by applying a policy to your skill.
Policy overview
To reset arguments, you use one of the following two Policy
types in your Alexa Conversations Description Language (ACDL):
-
ResetArguments
– This policy resets the specified arguments of an API after that API is invoked. In other words, when the API is invoked again, Alexa Conversations doesn't use the argument values from the previous API call. However, other APIs can still use the argument values. -
ResetAllArguments
– This policy resets all arguments (across all APIs) after Alexa Conversations invokes a specific API.
To use a policy, you declare the policy and then include the policy in the policies
argument of the skill()
action. The following example shows how to declare and include policies.
getWeatherResetArgumentsPolicy = ResetArguments{arguments =
[getWeather.arguments.cityName, getWeather.arguments.day]}
getWeatherResetAllArgPolicy = ResetAllArguments{action = GetWeather}
mySkill = skill(
locales = [...],
skillLevelResponses = {...},
policies = [getWeatherResetArgumentsPolicy, getWeatherResetAllArgPolicy]
)
For details and examples, see ResetArguments
and ResetAllArguments
.
Policy types
The following section describes the ResetArguments
and ResetAllArguments
policy types.
ResetArguments policy
To prevent carryover of an argument between subsequent calls to the same API, you use the ResetArguments
policy. When you declare a policy based on the ResetArguments
type, you provide a list of arguments to reset after the associated API is called.
To declare a ResetArguments
policy, use the following syntax.
MyPolicyName = ResetArguments{
arguments=
[ MyAPIName.arguments.arg1,
MyAPIName.arguments.arg2,
MyAPIName.arguments.arg3,
...
]
}
You can use the ResetArguments
policy on optional arguments. As with required arguments, optional arguments are carried over by default, unless you set a policy that specifies otherwise. The inclusion of an optional argument in a policy doesn't affect whether Alexa Conversations should or shouldn't request the argument. However, if Alexa Conversations determines that the argument needs to be requested, Alexa Conversations applies the policy.
For examples of how to use ResetArguments
, see the following sections:
- Reset each argument of an API
- Reset some, but not all, arguments of an API
- Reset the attributes of an API return value
- Reset an optional argument
Example: Reset each argument of an API
The following example shows what happens when the skill uses a ResetArguments
policy to reset each argument of the AddCustomPizzaApi
API. When the user invokes AddCustomPizzaApi
a second time, Alexa Conversations asks the user for the size, cheese, crust, and toppings again.
action AddCustomPizzaResult AddCustomPizzaApi(
size, crust, toppings, cheese)
resetPolicy = ResetArguments{
arguments=
[AddCustomPizzaApi.arguments.size,
AddCustomPizzaApi.arguments.crust,
AddCustomPizzaApi.arguments.toppings,
AddCustomPizzaApi.arguments.cheese]}
mySkill = skill(
locales = [...],
skillLevelResponses = {...},
policies = [resetPolicy]
)
Speaker | Speech or Action |
---|---|
User |
"Order a pizza." |
Alexa |
"Okay, what size?" |
User |
"Small." |
Alexa |
"What toppings do you want on your pizza?" |
User |
"Mushrooms, pepperoni, and jalapenos." |
Alexa |
"On what kind of crust? We have traditional, deep-dish, and thin crust." |
User |
"Deep-dish." |
Alexa |
"How do you like the cheese? You can ask for no cheese, light, normal, extra, or double cheese." |
User |
"Light cheese." |
N/A |
Alexa Conversations calls |
At this point, Alexa Conversations resets the arguments associated with the AddCustomPizzaApi
API. Continuing the conversation, when the user orders another pizza, they need to specify the size and toppings from scratch.
Speaker | Speech or Action |
---|---|
User |
"Order another pizza." |
Alexa |
"Okay, what size?" |
User |
"Medium." |
Alexa |
"What toppings do you want on your pizza?" |
User |
"Green peppers and olives." |
Alexa |
"On what kind of crust? We have traditional, deep-dish, and thin crust." |
User |
"Thin." |
Alexa |
"How do you like the cheese? You can ask for no cheese, light, normal, extra, or double cheese." |
User |
"Extra cheese." |
N/A |
Alexa Conversations calls |
Example: Reset some, but not all, arguments of an API
In the following example, the policy specifies that the day
argument of a GetWeather
API should be reset across subsequent calls to GetWeather
. Because the city
argument isn't included in the policy, the city
argument is carried over.
action WeatherResult GetWeather(US_CITY cityName, DATE day)
resetPolicy = ResetArguments{arguments=[GetWeather.arguments.day]}
mySkill = skill(
locales = [...],
skillLevelResponses = {...},
policies = [resetPolicy]
)
Speaker | Speech or Action |
---|---|
User |
"What's the weather in Seattle on Sunday?" |
N/A |
Alexa Conversations calls |
Alexa |
"In Seattle, on Sunday, it will be 70 degrees." |
At this point, Alexa Conversations resets only the day
argument. If the user continues the conversation and asks for the weather a second time, Alexa asks for the day again, but not the city.
Speaker | Speech or Action |
---|---|
User |
"What's the weather?" |
Alexa |
"What day?" |
User |
"Wednesday." |
N/A |
Alexa Conversations calls |
Alexa |
"In Seattle, on Wednesday, it will be 65 degrees." |
Example: Reset the attributes of an API return value
The following example shows how you can reset the attributes of the API return value for the associated API, yet other APIs can still use the collected values.
action WeatherResult GetWeather(US_CITY cityName, DATE day)
action AverageWeatherResult GetAverageWeather(US_CITY cityName, DATE day)
resetPolicy = ResetArguments{arguments=[GetWeather.arguments.cityName, GetWeather.arguments.day]}
mySkill = skill(
locales = [...],
skillLevelResponses = {...},
policies = [resetPolicy]
)
Speaker | Speech or Action |
---|---|
User |
"What's the weather in Seattle on Sunday?" |
N/A |
Alexa Conversations calls |
Alexa |
"In Seattle, on Sunday, it will be 70 degrees." |
At this point, Alexa Conversations resets the city
and day
argument for GetWeather
. The next time the user invokes GetWeather
, Alexa will ask the user for the city
and day
again. However, if the user invokes a different API, such as GetAverageWeather
, the arguments are reused.
Speaker | Speech or Action |
---|---|
User |
"What's the average weather?" |
N/A |
Alexa Conversations calls |
Alexa |
"In Seattle, the yearly average for this Sunday is 68 degrees." |
The GetWeather
API, on the other hand, can't use the previously collected city
and day
argument values, because those values were cleared.
Speaker | Speech or Action |
---|---|
User |
"What's the weather?" |
Alexa |
"What city?" |
User |
"Nashville." |
Alexa |
"What day?" |
User |
"Friday." |
N/A |
Alexa Conversations calls |
Alexa |
"In Nashville, on Friday, it will be 80 degrees." |
Example: Reset an optional argument
The following example shows how you can reset an optional argument.
action Result FindRecipe( optional Cuisine cuisine,
optional Difficulty difficulty)
resetPolicy = ResetArguments{arguments=[FindRecipe.arguments.cuisine,
FindRecipe.arguments.difficulty]}
mySkill = skill(
locales = [...],
skillLevelResponses = {...},
policies = [resetPolicy]
)
Speaker | Speech or Action |
---|---|
User |
"Find me an Indian recipe." |
N/A |
Alexa Conversations calls |
At this point, Alexa Conversations resets the cuisine
argument, so Alexa Conversations doesn't have a cuisine in context anymore.
Speaker | Speech or Action |
---|---|
User |
"Find me an easy recipe." |
N/A |
Alexa Conversations calls |
Alexa |
"I found an easy recipe for Thai food. Would you like to try it?" |
ResetAllArguments policy
You use the ResetAllArguments
policy to prevent the carryover of all arguments (across all APIs) after Alexa Conversations invokes a particular API. In other words, this policy deletes everything from the context, such as elicited arguments and API returns.
API MyAPI (
arg1,
arg2,
arg3
)
resetPolicy = ResetAllArguments(MyAPI)
mySkill = skill(
locales = [...],
skillLevelResponses = {...},
policies = [resetPolicy]
)
Example: Reset all arguments
The following example has both a GetWeather
API and a GetCurrentWeather
API. The ACDL specifies that the context should be reset after GetWeather
is called, but not after GetCurrentWeather
is called.
API GetWeather (
city,
day
)
API GetCurrentWeather (
city
)
resetPolicy = ResetAllArguments(GetWeather)
mySkill = skill(
locales = [...],
skillLevelResponses = {...},
policies = [resetPolicy]
)
Speaker | Speech or Action |
---|---|
User |
"What's the weather in Seattle on Sunday?" |
N/A |
Alexa Conversations calls |
Alexa |
"In Seattle, on Sunday, it will be 70 degrees." |
At this point, Alexa Conversations resets all arguments across all APIs. Continuing the conversation, the user asks for the current weather, which invokes the GetCurrentWeather
API. Because all arguments were reset after the call to GetWeather
, Alexa must ask for the city again.
Speaker | Speech or Action |
---|---|
User |
"What's the current weather?" |
Alexa |
"What city?" |
User |
"Nashville." |
N/A |
Alexa Conversations calls |
Alexa |
"In Nashville, it's 85 degrees." |
Continuing the conversation, the user asks for the weather, which invokes the GetWeather
API. Because no arguments were reset after the call to GetCurrentWeather
, Alexa only needs to ask for the day again.
Speaker | Speech or Action |
---|---|
User |
"What's the weather?" |
Alexa |
"What day?" |
User |
"Friday." |
N/A |
Alexa Conversations calls |
Alexa |
"In Nashville, on Friday, it will be 68 degrees." |
Unsupported use cases
At this time, Alexa Conversations doesn't support the following use cases:
-
Conditionally resetting arguments for the same API. An example of this unsupported behavior is resetting arguments based on a user utterance.
-
Using
ResetArguments
to reset arguments that other APIs use. However, you can clear the entire context by usingResetAllArguments
. -
Using
ResetAllArguments
to reset arguments for two APIs that share the same argument type.
Related topics
- About Alexa Conversations Description Language (ACDL)
- Actions in the Alexa Conversations Core Library
- Types in the Alexa Conversations Core Library
Last updated: Nov 27, 2023