Uh oh! We couldn’t find any match.

Please try other search keywords.

Bixby Developer Center

Guides

Guiding Conversations

When a user starts a conversation with Bixby, the conversation might continue based on Bixby's response. For instance, after asking for nearby restaurants, the user might want to see the restaurants in a map view rather in a list. After the user has selected a specific restaurant, they might want to make a reservation, call the restaurant, or get directions to it.

Bixby provides ways for your capsule to drive the conversation forward from a result list. Conversation drivers let you offer shortcut buttons that work with continuations; follow-up questions allow Bixby to ask yes or no questions after result views and take specific actions based on the response.

Conversation Drivers

Imagine that you have a capsule that provides restaurant results.

When users search for nearby pizza places, your capsule could show a list with results. However, you could also provide a "View map" button at the bottom, allowing users to quickly see the results on a map. If the user selects a specific restaurant, the capsule could then provide buttons in a similar fashion to reserve a spot at the restaurant or get directions to the place.

To offer users convenient shortcuts to related actions like this, you can use Conversation Drivers.

You add Conversation Drivers to views using the conversation-drivers parent key. In this example that allows users to buy shirts, the conversation drivers provide a quick way for shirt buyers to switch their shirt size:

result-view {
match: Shirt (this)
render {
if (size(this) == 1) {
layout-match (this) {
mode (Details)
}
}
}
//conversation drivers
conversation-drivers {
switch (this) {
// each case is different depending on
// the currently selected shirt
case (Small) {
conversation-driver {
template ("I'm Extra Small")
}
conversation-driver {
template ("I'm Medium")
}
conversation-driver {
template ("I'm Large")
}
}
case (Medium) {
conversation-driver {
template ("I'm Small")
}
conversation-driver {
template ("I'm Large")
}
conversation-driver {
template ("I'm Extra Large")
}
}
case (Large) {
conversation-driver {
template ("I'm Extra Small")
}
conversation-driver {
template ("I'm Small")
}
conversation-driver {
template ("I'm Extra Large")
}
}
default {
conversation-driver {
template ("I'm Small")
}
conversation-driver {
template ("I'm Medium")
}
conversation-driver {
template ("I'm Large")
}

}
}
}
}

The resulting buttons appear at the bottom of the screen: conversation driver buttons for shirt capsule

When users select one of these buttons, Bixby effectively runs a new utterance using the new template text. These utterances can be trained as continuations.

You can also use conversation drivers in input-view and result-view displays to help users.

Follow-Up Questions

A followup allows Bixby to ask a yes or no question after a result view is rendered, specifying behaviors for when the follow-up is confirmed (a "yes" answer) or denied ("no").

Let's continue the example of a capsule that searches for restaurants, and the user has made a request such as "show me the closest coffee shop". After Bixby shows the result, several things could happen next to continue the conversation:

  • The user gives a new utterance trained as a continuation, such as "call the shop" or "give me directions".

  • The user taps a button for a supplied conversation driver to take an action.

  • The user does nothing, and the conversation ends.

However, you might want Bixby to simply ask the user, "Would you like directions to the shop?"

  • If the user says "yes", Bixby gives directions.

  • If the user says "no", the conversation ends.

"Yes" and "no" utterances can't be trained as continuations, so this can't be implemented as a conversation driver. Instead, it can be implemented as a follow-up.

result-view {
match: Business (this)

message ("I found #{value(this.name)}")

render {
layout-match (this) {
mode (Details)
}
}

followup {
prompt {
dialog (Would you like directions?)
on-confirm {
intent {
goal: NavigateTo
value: Business$expr(this)
}
}
on-deny {
message (Okay.)
}
}
}
}

This result view first renders, with layout-match, a layout for the Business concept. The follow-up begins in the followup block. This block has only one optional child, prompt, which specifies the prompt dialog and its possible behaviors.

  • dialog provides the actual message of the follow-up question: Would you like directions?

  • on-confirm can provide either an intent to execute or a message to display if the follow-up is confirmed (the user says "yes"). In this example, a new intent is created with a goal of NavigateTo and a value of the current Business model. (The value uses the $expr() type coercion construct; for more information, read the Expression Language Reference.)

  • on-deny provides either an intent or a message to display if the follow-up is denied (the user says "no"). In this example, a message is provided.

    The on-deny block is optional. If it's not provided, then a denial of the follow-up will by default do nothing.

While follow-ups prompt the user for action, they are not Prompts in the sense Bixby often uses the term: there is no learning, the prompts are not modal, and so on. The user could respond to a follow-up prompt with an utterance that triggers a continuation, or an entirely new request.