Bixby Developer Center

Guides
References

20E Capsule SDK Release Notes

Note

Internal platform changes that are not visible to capsule developers will be communicated via internal status updates.

Updated: April 23, 2020

Note

The 20D release was combined with 20E.

New Simplified Selection Strategies

You can now use simplified syntax with selection-strategy to handle common filtering by combining both the advice with the advice-for or advice-against keys.

Examples

selection-strategy {
id (reject-bitcoin-payment-restaurants)
match {
food.AcceptsBitcoin(acceptsBitcoin) {
to-input: food.FindRestaurant(_)
}
}
advise-against ("${acceptsBitcoin}”)
}
selection-strategy {
id (prefer-thai-restaurants)
match {
food.CuisineStyle(style) {
to-input: food.FindRestaurant(_)
}
}
advise-for ("${style == ‘Thai’}”)
}

New Runtime Version 6

We've added a new runtime version that covers a number of runtime flags:

New Brazilian Portuguese Reserved Utterances

We now support pt-BR reserved utterances.

New 'Contextual' EL Function

You can now use the contextual EL node evaluation function when you want check if a node is copied over from a previous request, preserving the earlier request's context.

For example, if a user asks a capsule "find sushi restaurants in Miami" and then follows up with "what about Chicago", the type of restaurant, "sushi," is contextual: it was given in the previous request.

Option to Display Result View With Halt

Actions now allow you to show a custom result-view using the display sub-key when you encounter an error and halt.

Example

...
input (value) {
type (MyValue) {
validate {
if (...) {
halt {
dialog ("halting due to condition")
display (value.property)
}
}
}
}
}
...

Updates to 'Time' Key in Activity Support

The time key in activity-support now allows a conditional block. The format for the conditional is as follows:

...
time {
if (isFuture(this.startDate)) { // uses a Date EL function to check if the startDate is upcoming
expression(this.startDate)
} else {
expression(this.endDate)
}
}
...

Additionally, we've deprecated the ability to have empty time values. The key now must either have a simple time, such as (time (someDate)), or a conditional time.

We've also deprecated time values that are min (Optional) or max (Many). The key must now provide a node that contains one, and only one, value.

Deprecation Stages (learn more)

  • Stage 1: R20E
  • Stage 2: R20H
  • End of Life: None

HTTPS Required for OAuth

For better security, we now require that all OAuth authorization endpoints, whether remote or local, use HTTPS.

Deprecation Stages (learn more)

  • Stage 1: R20E
  • Stage 2: R20H
  • End of Life: None

New NL Categories

We've added the CoffeeOrder and CurrencyConversion NL categories.

Deprecation Stages (learn more)

  • Stage 1: R20E
  • Stage 2: R20H
  • End of Life: None

New Node Evaluation EL Functions

We've introduced three EL node evaluation functions, which return a copy of the node with the evaluation state set in the following ways:

  • pre(node): the node has not yet been evaluated (replaces the now deprecated node.pre()).
  • mid(node): the node is currently being evaluated
  • post(node): the node has already been evaluated

Examples

Old:

  • I don't currently have a way to #{action (this.pre())}.
  • I currently don't have the ability to #{action (this.pre())}.

New:

  • I don't currently have a way to #{action(pre(this))}.
  • I currently don't have the ability to #{action(pre(this))}.

Deprecation Stages (learn more)

  • Stage 1: R20E
  • Stage 2: R20H
  • End of Life: None