Bixby Developer Center

Build Conversational Experiences
Guides
References

6817

To better refine how optional fragments/strings in dialog templates behave, we are changing the current behavior.

Note

Fragments and template strings that behave optionally are:

If an optional block contains a non-optional fragment or template that returns an empty string, the block will fail. Take, for example, the following template and corresponding dialog:

template ("I'm looking for the best route [to #{value(location)}]")
dialog (Value) {
match: Location (this)
if (exists (this) && not empty (this.name)) {
template ("#{raw (this.name)}")
} else {
template ("")
}
}

In the example above, if Bixby cannot derive location.name, the whole block fails and returns the empty string, resulting in the following dialog:

"I'm looking for the best route"

If location.name can be derived, the result is something like this instead:

"I'm looking for the best route to San Jose"

However, if an optional block contains an optional component that returns an empty string, the block will not fail. Take this template, for example:

template ("Searching for #{value(search.color)} cars for sale")

Notice that there are no optional braces in the template above. If the fragment #{value(search.color)} returned the empty string and the new allow-empty-fragments-in-dialog-templates runtime flag is set to false, the whole template would return the empty string; however, if the flag is true, the final result is:

"Searching for cars for sale"

This behavior also holds for agreement expressions as well.

This runtime flag is enabled by default in runtime version 8.

Deprecation Stages (learn more)

  • Stage 1: R20J
  • Stage 2: R20M
  • End of Life: None