Элементы интерфейса смартапов
Элементы интерфейса из массива items
сообщения ANSWER_TO_USER
.
Смартапы могут передавать ассистенту следующие элементы интерфейса:
bubble
— текст;card
— карточка.
Ассистент отображает элементы интерфейса в порядке, в котором они расположены в массиве items
.
bubble
Пример:
{
"bubble": {
"text": "*Привет всем*",
"markdown": true,
"expand_policy": "auto_expand"
}
}
Текст передается в объекте bubble
, который может содержать следующие поля:
Поле | Описание | |
---|---|---|
text
|
Текст, который отобразит ассистент. Максимальная длина: не более 250 символов. |
|
markdown
|
Указывает, что текст содержит маркдаун-разметку, которую необходимо обработать. Если поле отсутствует, применяется значение |
|
expand_policy
|
Поведение шторки ассистента. Параметр актуален при работе с ассистентом на наших устройствах.
По умолчанию |
card
Карточки помогают смартапам организовать сложную информацию на экране ассистента. Внешний вид карточек отличается в зависимости от типа смартапа (Chat App или Canvas App), а так же в зависимости от типа поверхности (SberBox, SberPortal или приложение Сбер Салют).
Карточки бывают следующих типов:
Ниже приводятся JSON-схемы карточек с примерами.
Карточки передаются в объектах card
. Следующие поля присутствуют в карточках любого типа:
Поле | Описание | |
---|---|---|
paddings
|
|
|
can_be_disabled
|
Указывает что карточка может отображаться как отключённая. По умолчанию |
|
Обязательное |
Тип карточки, который определяет наличие различных полей в объекте Возможные значения:
|
grid_card
Карточка с сеткой ячеек:
{
"card": {
"type": "grid_card",
"items": [
{
"type": "greeting_grid_item",
"top_text": {
"type": "text_cell_view",
"text": "СОБЕСЕДНИК",
"typeface": "caption",
"text_color": "default"
},
"bottom_text": {
"type": "text_cell_view",
"text": "Какая высота Эвереста?",
"typeface": "body3",
"text_color": "default",
"max_lines": 3,
"margins": {
"top": "4x"
}
},
"paddings": {
"top": "6x",
"left": "6x",
"right": "6x",
"bottom": "6x"
},
"actions": [
{
"text": "Какая высота Эвереста?"
}
]
},
{
"type": "greeting_grid_item",
"top_text": {
"type": "text_cell_view",
"text": "КОШЕЛЕК",
"typeface": "caption",
"text_color": "default"
},
"bottom_text": {
"type": "text_cell_view",
"text": "Сколько у меня денег?",
"typeface": "body3",
"text_color": "default",
"max_lines": 3,
"margins": {
"top": "4x"
}
},
"paddings": {
"top": "6x",
"left": "6x",
"right": "6x",
"bottom": "6x"
},
"actions": [
{
"text": "Сколько у меня денег?"
}
]
},
{
"type": "greeting_grid_item",
"top_text": {
"type": "text_cell_view",
"text": "ПОГОДА",
"typeface": "caption",
"text_color": "default"
},
"bottom_text": {
"type": "text_cell_view",
"text": "Какая погода вечером в Москве?",
"typeface": "body3",
"text_color": "default",
"max_lines": 3,
"margins": {
"top": "4x"
}
},
"paddings": {
"top": "6x",
"left": "6x",
"right": "6x",
"bottom": "6x"
},
"actions": [
{
"text": "Какая погода вечером в Москве?"
}
]
},
{
"type": "greeting_grid_item",
"top_text": {
"type": "text_cell_view",
"text": "ПЕРЕВОД",
"typeface": "caption",
"text_color": "default"
},
"bottom_text": {
"type": "text_cell_view",
"text": "Отправь маме 500 рублей",
"typeface": "body3",
"text_color": "default",
"max_lines": 3,
"margins": {
"top": "4x"
}
},
"paddings": {
"top": "6x",
"left": "6x",
"right": "6x",
"bottom": "6x"
},
"actions": [
{
"text": "Отправь маме 500 рублей"
}
]
}
],
"columns": 2,
"item_width": "small"
}
}
Поле | Описание | ||
---|---|---|---|
columns
|
Количество столбцов. По умолчанию 1 столбец. |
||
item_width
|
Ширина контента в терминах сеток. Возможные значения:
|
||
Обязательное |
Ячейки карточки. Минимум 1 ячейка. |
||
|
Обязательное |
Тип ячейки. Возможное значение:
|
|
|
Обязательное |
|
|
|
Обязательное |
|
|
|
margins
|
|
|
|
actions
|
Массив объектов, описывающих действия. |
gallery_card
Горизонтальная галерея.
Пример отображения вертикальной галереи:
Пример отображения горизонтальной галереи:
{
"card": {
"type": "gallery_card",
"items": [
{
"type": "media_gallery_item",
"image": {
"url": "https://thumbs.dfs.ivi.ru/storage31/contents/8/e/010ea0147875e28b91ef1ff01cd042.jpg",
"size": {
"width": "medium",
"aspect_ratio": 1.42
}
},
"margins": {
"top": "4x",
"left": "6x",
"right": "6x",
"bottom": "5x"
},
"bottom_text": {
"text": "2019 г. ‧ Комедия/Драма",
"typeface": "caption",
"text_color": "secondary",
"max_lines": 1,
"margins": {
"top": "2x"
}
},
"top_text": {
"text": "Однажды в Голливуде",
"typeface": "footnote1",
"text_color": "default",
"max_lines": 2
}
}
]
}
}
Поле | Описание | ||
---|---|---|---|
Обязательное |
array of objects
Ячейки карточки. Минимум 1 ячейка. |
||
|
Обязательное |
Тип ячейки. Возможное значение:
|
|
|
image
|
Поле обязательно для ячеек с типом |
|
|
|
|
|
|
|
Параметры текста под изображением или под кнопкой Все результаты. Поле обязательно для ячеек с типом |
|
|
|
Иконка кнопки. Поле обязательно для ячеек с типом |
|
|
paddings
|
|
|
|
actions
|
Массив объектов, описывающих действия. Поле обязательно для ячеек с типом |
list_card
Карточки с вертикальным списком ячеек.
{
"card": {
"type": "list_card",
"cells": [
{
"type": "text_cell_view",
"content": {
"text": "200 гонконгских долларов 🇭🇰",
"typeface": "headline3",
"text_color": "default",
"max_lines": 0
},
"paddings": {
"left": "8x",
"top": "10x",
"right": "8x"
}
},
{
"type": "text_cell_view",
"content": {
"text": "1 663 ₽",
"typeface": "headline1",
"text_color": "default",
"max_lines": 0
},
"paddings": {
"left": "8x",
"top": "9x",
"right": "8x"
}
},
{
"type": "text_cell_view",
"content": {
"text": "При покупке от 500 до 1 000 HKD\n100 HKD = 6,36 RUB\nСберБанк Онлайн сейчас",
"typeface": "footnote1",
"text_color": "secondary",
"max_lines": 0
},
"paddings": {
"left": "8x",
"top": "10x",
"right": "8x"
}
},
{
"type": "button_cell_view",
"content": {
"text": "Купить",
"typeface": "button1",
"style": "default",
"type": "accept",
"actions": [
{
"type": "text",
"text": "Купить"
}
],
"margins": {
"left": "10x",
"top": "5x",
"right": "10x",
"bottom": "5x"
}
},
"paddings": {
"left": "6x",
"top": "12x",
"right": "6x",
"bottom": "8x"
}
}
]
}
}
Пример карточки с ячейками типа left_right_cell_view
.
{
"card": {
"type": "list_card",
"cells": [
{
"type": "left_right_cell_view",
"paddings": {
"left": "8x",
"top": "16x",
"right": "4x",
"bottom": "16x"
},
"left": {
"type": "simple_left_view",
"icon": {
"address": {
"type": "url",
"url": "https://cdn.sberdevices.ru/VA/icons/first_session/balance.png"
},
"size": {
"width": "medium",
"height": "medium"
},
"margins": {
"right": "6x"
}
},
"icon_vertical_gravity": "top",
"texts": {
"title": {
"text": "Покажи баланс моей карты",
"typeface": "headline2",
"text_color": "default",
"max_lines": 0
}
}
},
"right": {
"type": "detail_right_view",
"info_and_icon": {
"icon": {
"address": {
"type": "url",
"url": "https://cdn.sberdevices.ru/VA/icons/first_session/balance.png"
},
"size": {
"width": "xlarge",
"height": "xlarge"
},
"margins": {
"left": "8x",
"right": "12x"
}
}
}
},
"actions": [
{
"type": "text",
"text": "Вы нажали на карточку"
}
]
}
]
}
}
Поле | Описание | ||
---|---|---|---|
Обязательное |
Список ячеек карточки. |
||
|
Обязательное |
Тип ячейки, от которого зависит её наполнение. Возможное значение:
|
|
|
|
Левый элемент ячейки. Содержит следующие поля:
|
|
|
|
Правый элемент ячейки. Содержит следующие поля:
Если элемент ячейки задан как |
|
|
|
|
|
|
Обязательное |
Содержимое ячейки, которое зависит от её типа:
Поле присутствует только в приведённых в списке ячейках. |
|
|
|
Разделитель — тонкая полоска, разделяющая ячейки. Применяется только в ячейках типа Содержит следующие поля:
|
|
|
actions
|
Массив объектов, описывающих действия. Применяется только в ячейках типа |
|
|
Обязательное |
Поле актуально только для ячеек с типом Содержит массив объектов, каждый из которых описывает вертикальный упорядоченный блок. Минимальное количество элементов в массиве — 1. Объекты массива содержат следующие поля:
|
Параметры карточек
Текст
Поле | Описание | |||
---|---|---|---|---|
Обязательное |
Текст, который необходимо отобразить. Минимальная длина текста 1 символ. |
|||
Обязательное |
Стиль текста. Возможные значения:
|
|||
Обязательное |
Цвет текста. Возможные значения:
|
|||
margins
|
|
|||
max_lines
|
Максимальное количество строк. По умолчанию 1. Значение 0 указывает на неограниченное количество строк. |
|||
actions
|
Массив объектов, описывающих действия. |
Отступы
Поле | Описание |
---|---|
left
|
Размер отступа. Возможные значения:
Значение по умолчанию |
top
|
Размер отступа. Возможные значения:
Значение по умолчанию |
right
|
Размер отступа. Возможные значения:
Значение по умолчанию |
bottom
|
Размер отступа. Возможные значения:
Значение по умолчанию |
Изображение
Поле | Описание | |||
---|---|---|---|---|
Обязательное |
Адрес изображения. |
|||
hash
|
Хэш изображения. |
|||
placeholder
|
Заглушка, которая отображается, если изображения нет или оно невалидно. |
|||
scale_mode
|
Режим растягивания содержимого. Возможные значения:
|
|||
height
|
Высота контейнера изображения, выраженная в независящих от платформы единицах. Поле игнорируется, если присутствует поле По умолчанию 192. |
|||
placeholder_color
|
Цвет фона. Возможные значения:
|
|||
actions
|
Массив объектов, описывающих действия. |
|||
size
|
Размер изображения. |
|||
|
Обязательное |
Ширина содержимого в терминах сеток. Возможные значения:
|
||
|
Обязательное |
Отношение высоты содержимого к ширине. |
Погодные данные
Пример массива content
ячейки weather_cell_view
:
{
"type": "weather_cell_view",
"content": [
{
"weekday": "Понедельник",
"date": "15 сентября",
"day": "+5°",
"night": "-5°",
"icon": {
"address": {
"type": "url",
"url": "https://example.ru/example.png"
},
"size": {
"width": "small",
"height": "small"
}
}
},
{
"weekday": "Вторник",
"date": "16 сентября",
"day": "+23°",
"night": "+12°",
"icon": {
"address": {
"type": "url",
"url": "https://example.ru/example.png"
},
"size": {
"width": "small",
"height": "small"
}
}
}
],
"paddings": {
"top": "8x"
}
}
Поле | Описание |
Обязательное |
День недели |
Обязательное |
Дата |
Обязательное |
Погода днем |
Обязательное |
Погода ночью |
Обязательное |
Параметры иконки |
Обязательное |
Путь к иконке |
Обязательное |
Размер иконки |
Обязательное |
Ширина иконки.
|
Обязательное |
Высота иконки.
|