Bixby Developer Center

Guides

2020 April–June

Note

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

20G Capsule SDK Release Notes

Updated: June 19, 2020

Deprecated Keys with 'On-Click'

Because they are intended only for cards, we've deprecated the use of url, view-for, and external-link-badge in input-cell.on-click.

Additionally, Bixby automatically displays an external link badge if you specify a URL in your on-click definition.

Deprecation Stages

Learn more about the deprecation stages.

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

JavaScript Preconditions Deprecated

We've deprecated function preconditions. You can use conditionals with endpoints to achieve similar functionality. Read more about Conditionally Specified Endpoints.

Deprecation Stages

Learn more about the deprecation stages.

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

New Korean NL Categories

The following NL categories now support the ko-KR locale:

  • Audio Books
  • Recipes
  • Food Ordering Services
  • Hotel Search and Booking
  • Language Lessons
  • Lottery
  • Real Estate Search
  • Rideshare Services
  • Stocks and Markets

20F Capsule SDK Release Notes

Updated: May 15, 2020

New Watch Target Available for Marketplace

In addition to bixby-mobile, you can now submit your capsule with the new bixby-watch target.

New Approach to User Permissions

We have been working on several enhancements related to user data permissions.

We're breaking up the permissions that were originally given by user-profile-access into separate permission-specific keys: device-location-access for users' location, bixby.contact for users' contacts, and viv.self for users' profile information.

Accordingly, user-profile-access will be deprecated in our 20G release.

We've also added restrictions to these permissions, so that you can change the scope of how much these permissions affect users.

These changes will provide capsule developers the ability to define what specific type of user data (such as location and contacts) that the capsule requests from the user. This update also allows users to control what data they want to share with a capsule or service at a more granular level.

As before, all user data permissions in Bixby are optional. Users can decide whether they want to share data with a capsule and can choose to enable and use the capsule without having to share data with a capsule. Users can also change this anytime from the privacy section in Bixby Settings.

For more information, see the Grant Capsule Permissions topic.

Deprecation Stages

Learn more about the deprecation stages.

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

Bixby Views Updates for Cards

As part of our effort to streamline the behavior of card components and make implementation simpler, the Bixby platform will now render a card as a “card” when it is clickable, and as an “area” when it is not clickable. For example, for capsules that are in the Marketplace, Bixby will automatically render cell-card to look like a cell-area when it is not clickable. No code change is required.

Here are some additional changes to be aware of:

  • You will need to use a card component with a valid on-click when rendering list-of components. With the selection-of component, if you don't have an on-click, Bixby creates an intent for you. We've deprecated the use of has-details for both list-of and selection-of list components.

  • We've introduced a runtime flag, auto-on-click-for-list-of, which is part of runtime-version 7 and, if enabled, preserves the old auto-selection behavior for list-of. For versions before 7, it defaults to true, In runtime 7, it defaults to false, and the absence of the runtime flag enables the always-respect-on-click behavior, which is the new default on-click behavior. You should only add the runtime flag to runtime version 7 if you want to preserve the previous on-click behavior.

  • You can now add a badge, external-link-badge, to a parent component, indicating to users that tapping on the component takes them out of Bixby to an external application. You should add this component to your on-click definition if tapping on this component will navigate the user away from Bixby.

  • With on-click, you can now add a url, which takes the users to the specified URL when they tap on a component.

Note

Make sure that you are following the App Punch-Out policies if your on-click makes users exit Bixby.

Deprecation Stages

Learn more about the deprecation stages.

  • Stage 1: R20F
  • Stage 2: R20I
  • End of Life: None

Input Macros Must Be Qualified

Macros from imported libraries now must be qualified. For example, consider if viv.libraryCapsule has the template macro template-macro-def (Select). If you were to import viv.libraryCapsule and use the Select macro (as in macro (Select) ), this now results in a deprecation warning. As a workaround, you should fully qualify the macro:

macro (viv.libraryCapsule:Select)

You can also use aliases when fully qualifying the macro. If, for example, you import viv.libraryCapsule as libCapsule, then you can instead use the alias as follows:

(libCapsule:Select)

For more information, read about Library Capsules.

Deprecation Stages

Learn more about the deprecation stages.

  • Stage 1: R20F
  • Stage 2: R20I
  • End of Life: None

New EL Function for Length

We've add a new length Expression Language (EL) function that returns the length of the supplied string:

action (IsStringGreaterThanN) {
type (Constructor)
collect {
input (N) {
type (viv.core.Integer)
min (Required) max (One)
}
input (string) {
type (viv.core.Text)
min (Required) max (One)
}
}
output (viv.core.Boolean) {
evaluate {
$expr(length(string) > N)
}
}
}

New Runtime Version 7

We've added a new runtime version that covers a number of runtime flags. For more information, see the runtime-version (7) reference.

Note

If you want dialog to appear for the details page during ordinal selection or when tapping on a summary item, and your capsule is running runtime version 7 or later, you must set the allow-dialogs-on-detail-pages flag to true.

20E Capsule SDK Release Notes

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 about the deprecation stages.

  • 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 about the deprecation stages.

  • 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 about the deprecation stages.

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

New Node Evaluation EL Functions

We've introduced three Expression Language 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 about the deprecation stages.

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