Internal platform changes that are not visible to capsule developers will be communicated via internal status updates.
Updated: September 10, 2019
To ensure that capsules are more precisely targeted, you are now limited to two store-sections
for each capsule.
capsule {
...
store-sections {
section (NewsAndMagazines)
section (BusinessAndFinance)
}
}
Learn more about the deprecation stages.
We've introduced a new runtime flag that changes how a single result is rendered within an input-view
.
If you specify the use-input-views-for-selection-list-detail
runtime flag, you can render the details of a single item in an input view by calling a layout
, layout-match
, or layout-macro
.
Example
// With the `runtime-flag` enabled
input-view {
match-pattern: MyResult (this)
message (...)
render {
if (size(this) == 0) {
// render a form
} else-if (size(this) == 1) {
layout {
select-button-text (select me)
section {
...
}
}
} else {
selection-of (this) {
where-each (result) {
...
}
}
}
}
}
If not specified, then an input-view
calls out to a corresponding result-view
to render the layout for a single result when selecting an item from the selection list.
Learn more about the deprecation stages.
Because there is a loss of precision, we no longer support automatically converting Decimal
types to Integer
. For example, if you have a macro that takes an Integer
parameter, you can't pass in a Decimal
.
You must either update the macro parameter to be a Decimal
, or change the type being passed.
Learn more about the deprecation stages.
In an effort to further standardize Expression Language, we're deprecating the following EL special operators.
$size
: Replace with size(...)
$exists
: Replace with exists(...)
Deprecated
output (Recipe) {
on-empty {
if (servings.$exists) {
drop (servings)
} else-if (course.$exists || meal.$exists || cuisine.$exists) {
ordered-effects {
drop (course)
drop (meal)
drop (cuisine)
}
}
}
}
New
output (Recipe) {
on-empty {
if (exists(servings)) {
drop (servings)
} else-if (exists(course) || exists(meal) || exists(cuisine)) {
ordered-effects {
drop (course)
drop (meal)
drop (cuisine)
}
}
}
}
Learn more about the deprecation stages.
Your input names for an action now must use only alphanumeric characters (A-Z+a-z+0-9), with no dashes or special characters.
Learn more about the deprecation stages.
You must now explicitly import all Bixby-provided JavaScript libraries, such as console
and http
. For more information, see JavaScript API reference.
Learn more about the deprecation stages.
We've deprecated the MD5 JavaScript library.
Learn more about the deprecation stages.
We're delaying the end-of-life for three deprecations until the 19U release:
confirmed-by
DeprecatedTo allow for vertical separation, we've added a divider
child key. This new key creates a dividing line between vbox
components in a given hbox
row.
hbox {
content {
vbox {
content {
single-line {
text {
value ("From #{value(hotel.lowRate)}")
}
}
}
}
divider
vbox {
content {
single-line {
text {
value ("#{value(hotel.rating)} stars")
}
}
}
}
}
}
Here is how the vertical divider
looks on mobile:
Updated: August 19, 2019
The 19N release of Bixby Capsule SDK has been combined with 19O.
We now require that your hints must use named dispatch. You can also add a preferred-hint
to a hint, which can be used in situations where named dispatch is not required.
Example
hints {
for-category (Translators) {
hint ("Ask My Japanese Dictionary what is artificial intelligence in Japanese?") {
preferred-hint ("What is artificial intelligence in Japanese?")
}
hint ("Ask My Japanese Dictionary what is alligator?") {
preferred-hint ("What is alligator in Japanese?")
}
hint ("Ask My Japanese Dictionary what is crab?") {
preferred-hint ("What is crab in Japanese?")
}
hint ("Ask My Japanese Dictionary what is the character for fire?") {
preferred-hint ("What is the character for fire in Japanese?")
}
}
}
Learn more about the deprecation stages.
You can now add an intent
key to the attribution-link
. This allows you to add functionality such as triggering an additional result-view
with an app-launch
.
Example
...
attribution-link {
label ("a label")
url ("a url")
if (false) {
url ("another url")
} else {
intent {
goal: DoSomething
}
}
}
We've introduced a new runtime flag that changes how a single result is rendered within an input-view
.
If you specify the use-input-views-for-selection-list-detail
runtime flag, you can render the details of a single item in an input view by calling a layout
, layout-match
, or layout-macro
.
Example
// With the `runtime-flag` enabled
input-view {
match-pattern: MyResult (this)
message (...)
render {
if (size(this) == 0) {
// render a form
} else-if (size(this) == 1) {
layout {
select-button-text (select me)
section {
...
}
}
} else {
selection-of (this) {
where-each (result) {
...
}
}
}
}
}
If not specified, then an input-view
calls out to a corresponding result-view
to render the layout for a single result when selecting an item from the selection list.
Learn more about the deprecation stages.
We've added a new runtime flag, no-filtering-with-validation
, which changes how Bixby applies validation conditions in order to reduce the number of ambiguous values.
By default, when a cardinality constraint violation occurs because an input has too many available candidates, Bixby attempts to pre-filter the available candidates using the existing input validations. This runtime flag disables that.
For more information, see Runtime Flags.
Example
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
modern-prompt-rejection
support-halt-effect-in-computed-inputs
no-filtering-with-validation
}
}
Learn more about the deprecation stages.
You now have the option to name your hints and endpoints files without a prefix.
Allowed:
my.hints.bxb
my.endpoints.bxb
hints.bxb
endpoints.bxb
Not Allowed:
shints.bxb
myendpoints.bxb
.hints.bxb
.endpoints.bxb
We've added a new runtime flag, no-filtering-with-validation
, which changes how Bixby applies validation conditions in order to reduce the number of ambiguous values.
By default, when a cardinality constraint violation occurs because an input has too many available candidates, Bixby attempts to pre-filter the available candidates using the existing input validations. This runtime flag disables that.
For more information, see Runtime Flags.
Example
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
modern-prompt-rejection
support-halt-effect-in-computed-inputs
no-filtering-with-validation
}
}
Learn more about the deprecation stages.
Because most capsules currently use the default mode
of replace
, we've deprecated the mode
key within prompt
.
Old:
...
error (MultipleItemsMatched) {
property (candidates) {
type (FoodName)
min (Required)
max (Many)
}
on-catch {
prompt (menuItemName) {
min (1)
max (1)
mode (Replace)
candidates (candidates)
}
}
}
...
Learn more about the deprecation stages.
Updated: July 26, 2019
We've added a new runtime flag, no-filtering-with-validation
, which changes how Bixby applies validation conditions in order to reduce the number of ambiguous values.
By default, when a cardinality constraint violation occurs because an input has too many available candidates, Bixby attempts to pre-filter the available candidates using the existing input validations. This runtime flag disables that.
For more information, see Runtime Flags.
Example
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
modern-prompt-rejection
support-halt-effect-in-computed-inputs
no-filtering-with-validation
}
}
Learn more about the deprecation stages.
We've introduced a new runtime flag, modern-default-view-behavior
, which changes behavior when a result view or input view is not defined.
If modern-default-view-behavior
is not set, Bixby will fall back to a default collection
. This behavior is deprecated, and will be removed in a future release.
Example
capsule {
...
runtime-flags {
concepts-inherit-super-type-features
modern-default-view-behavior
support-halt-effect-in-computed-inputs
}
}
We've added a number of reserved utterances. Read Reserved Utterances for the full list.
If you include the new modern-default-view-behavior
runtime flag, any Bixby Views you create now have default views if you do not specify a result-view
or an input-view
that matches the current moment. Bixby uses a default view that can provide a reasonable display of results or selectable options to the user. Your capsule should provide its own views for the best possible conversations with users.
There is no default confirmation-view
, although Bixby falls back to default confirmation dialog and displays if views are not defined for confirmation moments.
For more information, see Runtime Flags.
Learn more about the deprecation stages.
We've introduced a new read-manual
key within navigation-mode
, which provides you with a manual way to handle page navigation. Results still have paging, but you have more control over how this is done. This key helps you with APIs that handle result paging themselves. For example, you might use this with a web API that provides a "cursor" to obtain more results, rather than returning all results.
Example
result-view {
match-pattern: MyResultList (list)
render {
list-of (list.results) {
navigation-mode {
read-manual {
page-selection-question (Do you like one of these?)
item-selection-question (Which one would you like?)
previous-page {
intent {
goal: MyResultList
value: MyPageNumber$expr(list.curPage - 1)
}
}
next-page {
intent {
goal: MyResultList
value: MyPageNumber$expr(list.curPage + 1)
}
}
// optional
with-previous-page-conversation-driver (!list.isFirstPage)
with-next-page-conversation-driver (!list.isLastPage)
}
}
}
}
We've added a new progress-bar
component to let users know the progress of an event or action.
Example
section {
content {
progress-bar (70.2)
}
...
}
We've added a new column-size
key, which determines how many image cards are displayed within a larger list. You can specify 1
, 2
, or 3
cards per column.
Example
list-of (this) {
where-each (car) {
compound-card {
content {
image-card {
aspect-ratio (9:16)
column-size (2)
image-url ("#{raw(car.imageUrl)}")
title-area {
slot1 {
text {
value ("#{raw(car.name)}")
style (Title_M)
}
}
}
}
}
}
}
}
You now have the option to specify amber, blue, green, or red text color
within text
. If not specified, the default color is white.
Updated: July 8, 2019
You can now add a layout
within layout-macro
.
You can't use a layout-macro
with list-of
and selection-of
components if the macro can return a layout.
The NamedPoint
concept within the viv.geo
library capsule now supports rectangular bounding boxes.
We're making Bixby Views more consistent by ensuring each card has only one tappable area. As a result, we're deprecating support for the chin
key for compound-card
.
For more information, see cards in Bixby Views.
Learn more about the deprecation stages.
We've added the ability to add an attribution-link
within sections.
Example
// Within a larger view or layout file
section {
content {
... //other components
attribution-link {
label {
template ("More on BixbyDevelopers.com")
}
url ("https://bixbydevelopers.com")
}
}
}
We've added the option to add spacer
in content
within a section
.
// within a larger Views file
...
section {
content {
title-area { ... }
spacer // 24px
paragraph { ... }
// no spacer, 12px space between these two components
single-line { ... }
}
}
...
In addition to a single date, you can now use viv.time.DateInterval
as the initial-value
for a calendar picker.
We've introduced a new flattenAs
formatting expression function, which flattens specified nodes into a single list, formats them in the specified format, then joins those formatted strings as a conjunctive list ("value1, value2, and value3").
We've updated our SDK deprecation lifecycle, which includes three stages. Learn about these deprecations in our Developers' Guide.
We've deprecated the confirmed-by
key. You should instead use the confirm
key.
Example
confirm {
if (myInput > 65) {
by (MyConfirmation)
}
}
Learn more about the deprecation stages.