Internal platform changes that are not visible to capsule developers will be communicated via internal status updates.
Updated: March 25, 2020
If your capsule opts out of capsule lock by setting the new result-view-capsule-lock
runtime flag to false
, conversation drivers with result moments in your capsule might not behave as expected.
You can now define a layout or a dialog with a macro
. Use macro
to define repeatable portions of your layouts or dialogs, such as a card or a cell for a specific structure or entire portions of a Bixby View. You define the exact parameters within a macro
using a macro-def
. For more information, see Reusing Content with Macros.
result-view {
match: MyConcept(this)
render {
layout {
macro (my-macro) {
param (myParam) {
expression (this)
}
}
}
}
}
Because the Bixby platform is not designed for it, we're deprecating the ability to use Text
type values with Pattern For
specialized training examples, which allow you to refer to specific structured concepts using NL.
For example, if you have a note-taking capsule that has a Pattern For
training entry [g:Note:pattern] Make a note (get groceries)[v:NoteText]
, where NoteText
is role assigned to Text
, you will now get a deprecation warning.
For more information, see the Pattern For section in the Training for NL Developers' Guide.
Learn more about the deprecation stages.
The following NL categories were added this release:
Astrology
CoffeeOrder
CurrencyConversion
MovieTickets
Updated: March 10, 2020
If your capsule uses runtime version 4 and imports the viv.geo
library capsule, your ability to get the user's current location using viv.geo.SearchRegion
is currently limited.
As a workaround, you can revert to using runtime version 3, or you can set the use-most-specific-instantiation-strategy
runtime flag to false
:
use-most-specific-instantiation-strategy (false)
Within Bixby Views, you can now embed YouTube and Vimeo videos using the new youtube
and vimeo
sub-keys, respectively:
Examples
section {
content {
video {
vimeo {
video-id ("376938961")
}
}
}
}
section {
content {
video {
youtube {
video-id ("7zP30QYMUjQ")
}
}
}
}
You now have the option to determine the shape (image-shape
) and size (image-size
) of thumbnail images within Bixby Views.
Circle thumbnail:
Small thumbnail:
By default, Bixby ensures that multi-value properties have unique values by merging duplicate values. The new no-auto-property-value-merging
runtime flag prevents this.
Additionally, you can now use the Expression Language (EL) function dedupe
to merge equivalent elements of a specified node.
Example
action (ReduceStrings) {
type (Constructor)
collect {
input (strings) {
type (String)
min (Optional)
max (Many)
}
}
output (String) {
evaluate {
$expr(dedupe(strings))
}
}
}
We've added a new runtime flag, use-most-specific-instantiation-strategy, that changes the default match mode of instantiation strategies to MostSpecific
. When enabled, all instantiation-strategy files use the most specific match pattern.
Example
capsule {
runtime-version (1) {
overrides {
use-most-specific-instantiation-strategy (true)
}
}
}
We've added a new runtime version that covers a number of runtime flags:
concepts-inherit-super-type-features
no-auto-property-value-merging
no-filtering-with-validation
modern-default-view-behavior
modern-prompt-rejection
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
Updated: March 18, 2020
The size
key in cards and images is now deprecated. Use the new aspect-ratio
key to specify how an image or a card fits in a Bixby View.
Old:
image-card {
size (L)
...
}
New:
image-card {
aspect-ratio (4:3)
...
}
For more information, see Cards in Bixby Views.
Learn more about the deprecation stages.
We've added a new runtime version that covers a number of runtime flags:
concepts-inherit-super-type-features
no-filtering-with-validation
modern-default-view-behavior
modern-prompt-rejection
support-halt-effect-in-computed-inputs
use-authorization-header-for-remote-endpoint-oauth
use-input-views-for-selection-list-detail
For more information, read about runtime version 3.
The following NL categories were added this release:
AudioBook
MovieTickets
Lottery
Trivia
JobSearch
SportsScore
We've deprecated the $user.nickName
Expression Language function because it never returned a value.
Learn more about the deprecation stages.
If you previously used the user-profile-access
permission for accessing the user's location, you now should now use the device-location-access
permission. The user-profile-access
permission will soon be deprecated.
If you are requesting permissions in your capsule-info.bxb
, you must now provide a localized justification using the requested-permissions
key, which is then presented to the user:
capsule-info {
...
requested-permissions {
...
permission (user-profile-access) {
justification (Your location will be used to find restaurants nearby)
}
}
}
Learn more about the deprecation stages.
Updated: January 22, 2020
The following NL categories were added this release:
Weather
Meditation
RealEstate
SleepSounds
Flowers
Gifts
We now allow endpoints to optionally require user oAuth using the optional
sub-key within authorization.user
.
action-endpoint (...) {
...
authorization: user: optional
}
If your endpoint includes optional
user oAuth, Bixby won't automatically prompt the user to login, which is the case when without the optional
key.
If you want to prompt the user with the optional user oAuth, you must do so through your endpoint implementation. Here is an example function for including optional user oAuth within your endpoint:
if ($vivContext.accessToken) { // if this is present, the user is logged in
// access protected resource
http.oauthGetUrl( );
} else {
var doLogin = // some condition if the user should login
if (doLogin) {
var err = new Error('Login required');
err.$type = 'authorization-error';
err.$message = 'You must have log in to authorize access';
throw err; // throwing a type 'authorization-error' error will trigger the login prompt
}
// obviously don't use oauthGetUrl here, the user is not logged in
http.getUrl( );
}