Internal platform changes that are not visible to capsule developers will be communicated via internal status updates.
Updated: June 19, 2020
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.
Learn more about the deprecation stages.
We've deprecated function preconditions. You can use conditionals with endpoints to achieve similar functionality. Read more about Conditionally Specified Endpoints.
Learn more about the deprecation stages.
The following NL categories now support the ko-KR
locale:
Updated: May 15, 2020
In addition to bixby-mobile
, you can now submit your capsule with the new bixby-watch
target.
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.
Learn more about the deprecation stages.
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.
Make sure that you are following the App Punch-Out policies if your on-click
makes users exit Bixby.
Learn more about the deprecation stages.
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.
Learn more about the deprecation stages.
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)
}
}
}
We've added a new runtime version that covers a number of runtime flags. For more information, see the runtime-version (7)
reference.
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
.
Updated: April 23, 2020
The 20D release was combined with 20E.
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’}”)
}
We've added a new runtime version that covers a number of runtime flags:
auto-insert-navigation-conversation-drivers
concepts-inherit-super-type-features
no-auto-property-value-merging
no-filtering-with-validation
modern-default-view-behavior
modern-prompt-rejection
result-view-capsule-lock
support-halt-effect-in-computed-inputs
use-authorization-header-for-remote-endpoint-oauth
use-input-views-for-selection-list-detail
use-most-specific-instantiation-strategy
no-fallback-dialog-in-views
(New in this release)We now support pt-BR reserved utterances.
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.
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)
}
}
}
}
}
...
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.
Learn more about the deprecation stages.
For better security, we now require that all OAuth authorization endpoints, whether remote or local, use HTTPS.
Learn more about the deprecation stages.
We've added the CoffeeOrder
and CurrencyConversion
NL categories.
Learn more about the deprecation stages.
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 evaluatedpost(node)
: the node has already been evaluatedExamples
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))}.
Learn more about the deprecation stages.