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:
AstrologyCoffeeOrderCurrencyConversionMovieTicketsUpdated: 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-featuresno-auto-property-value-mergingno-filtering-with-validationmodern-default-view-behaviormodern-prompt-rejectionsupport-halt-effect-in-computed-inputsuse-authorization-header-for-remote-endpoint-oauthuse-input-views-for-selection-list-detailuse-most-specific-instantiation-strategyUpdated: 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-featuresno-filtering-with-validationmodern-default-view-behaviormodern-prompt-rejectionsupport-halt-effect-in-computed-inputsuse-authorization-header-for-remote-endpoint-oauthuse-input-views-for-selection-list-detailFor more information, read about runtime version 3.
The following NL categories were added this release:
AudioBookMovieTicketsLotteryTriviaJobSearchSportsScoreWe'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:
WeatherMeditationRealEstateSleepSoundsFlowersGiftsWe 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();
}