ym88659208ym87991671
Переменная $response для JS API для смартапов | Документация SmartMarket
Skip to main content

$response

Объект для заполнения поля $response в ответах ассистента.

$response.replies — список ответов, выведенных в процессе обработки реакций.

replies — массив реплик ассистента, содержащий строго типизированные элементы. Предназначен для передачи ответов.

Поддерживаемые элементы replies:

  • text — простой текстовый ответ, каждый элемент выводится отдельным сообщением. Параметр tts задает голосовой текст ответа без разметки для синтеза речи. Параметр ssml задает голосовой текст ответа c разметкой ssml для синтеза речи.

    Параметр auto_listening указывает будет ли смартап слушать ответ пользователя после ответа ассистента.

{
"type": "text",
"text": "....",
"tts": "....",
"ssml": ".....",
"auto_listening": true
}
  • buttons — добавление подсказки.
{
"type": "buttons",
"buttons": [
{
"text": "Переход по адресу",
"url": "https://example.com"
},
{
"text": "Подсказка"
}
]
}
  • image — вывод изображения.
{
"type": "image",
"imageUrl": "http://...",
"hash": "<hash картинки из раздела Контент>"
}
  • card — формирует ответ в виде карточки, которая содержит: заголовок, описание, изображение и кнопку. Содержит обязательное поле поле title.

    Параметр auto_listening указывает будет ли смартап слушать ответ пользователя после ответа ассистента.

{
"type": "card",
"title": "title",
"description": "descr",
"imageUrl": "<url на картинку из раздела Контент>",
"hash": "<hash картинки из раздела Контент>",
"button": {
"text": "text",
"url": "url"
},
"auto_listening": false
}
  • cardList — формирует ответ в виде карточки со списком, которая содержит: заголовок, подзаголовок, кнопку и список ячеек. Карточка включает обязательный заголовок (title), подзаголовок (subtitle), а также обязательные массивы ячеек (cells) и кнопок (buttons). Если кнопки или ячейки не нужны, в полях cells и buttons указывайте пустые массивы.

    При добавлении ячейки, необхододимо указать ее заголовок (title).

    Параметр auto_listening указывает будет ли смартап слушать ответ пользователя после ответа ассистента.

{
"type": "cardList",
"title": "Заголовок карточки",
"subtitle": "Описание",
"cells": [
{
"title": "Заголовок ячейки 1",
"subtitle": "Описание ячейки 1",
"value": "Значение, которое отображается в правой части ячейки 1. Рекомендуемая длина менее 5 символов.",
"iconUrl": "https://example.ru/images/image.png",
"hash": "3a74d5abfc671f47e45d336ed4d41026",
"action": {
"url": "Веб-адрес, который откроется при нажатии ячейки"
}
},
{
"title": "Заголовок ячейки 2",
"subtitle": "Описание ячейки 2",
"value": "Значение, которое отображается в правой части ячейки 2. Рекомендуемая длина менее 5 символов.",
"iconUrl": "https://example.ru/images/image.png",
"hash": "3a74d5abfc671f47e45d336ed4d41026",
"action": {
"text": "Текст, который отправится при нажатии ячейки"
}
}
],
"buttons": [
{
"text": "Название кнопки карточки",
"url": "Веб-адрес, который откроется при нажатии кнопки"
}
],
"auto_listening": false
}
  • raw — используется для передачи собранных вручную ответов. Обязательный параметр body тело ответа, содержание которого будет добавлено в поле payload протоколе ассистента. Параметры, идентифицирующие пользователя будут подставлены автоматически.

    При необходимости можно указать поле messageName и передать в нем необходимое сообщение. По умолчанию передается значение ANSWER_TO_USER. Описание тела сообщения ANSWER_TO_USER вы найдете в разделе SmartApp API.

{
"type":"raw",
"body":{ ... },
"messageName":"ANSWER_TO_USER"
}
caution

Тестовый виджет не отображает ответы с типом raw, если они передаются с помощью $context.response.replies.

Примеры значений

  • Вывод изображения.
script: $response.replies = $response.replies || [];
$response.replies.push({
type: 'image',
imageUrl: ' https://testimageurl.jpg',
hash: '<hash картинки из раздела Контент>',
});
  • Отправка текстового ответа с markdown-разметкой.
script: $response.replies = $response.replies || [];
$response.replies.push({
type: 'raw',
body: {
items: [
{
bubble: {
text: '*Привет всем!*',
markdown: true,
},
},
],
},
});
  • Пример изменения ответа в post-процессе при третьей попытке ассистента ответить одинаково.
init: bind('postProcess', function () {
var $session = $jsapi.context().session;
var $response = $jsapi.context().response;
var answer = $response.replies
? $response.replies.reduce(function (answers, current) {
answers += ' ' + current.text;
return answers;
}, '')
: '';
if ($session.lastAnswer && answer == $session.lastAnswer) {
$session.answerRepetition = $session.answerRepetition || 0;
$session.answerRepetition += 1;
} else {
$session.answerRepetition = 0;
}
if ($session.answerRepetition == 2) {
$response.replies = [
{
type: 'text',
text: 'Похоже мы ходим кругами. Может спросишь о чем-нибудь другом?',
},
];
}
$session.lastAnswer = answer;
});
  • Передача карточки типа grid_card в диалог с пользователем:
var reply = {
type: 'raw',
body: {
emotion: null,
items: [
{
card: {
type: 'grid_card',
items: [
{
type: 'greeting_grid_item',
top_text: {
type: 'text_cell_view',
text: 'SBER Box',
typeface: 'caption',
text_color: 'default',
max_lines: 3,
},
bottom_text: {
type: 'text_cell_view',
text: 'Компактная ТВ-приставка SBER Box – интеллектуальный центр вашего дома',
typeface: 'body3',
text_color: 'default',
max_lines: 3,
margins: {
top: '4x',
},
},
paddings: {
top: '6x',
left: '6x',
right: '6x',
bottom: '6x',
},
actions: [
{
text: 'Подписка Okko в подарок.',
},
],
},
{
type: 'greeting_grid_item',
top_text: {
type: 'text_cell_view',
text: 'SberPortal',
typeface: 'caption',
text_color: 'default',
max_lines: 3,
},
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: [
{
type: 'deep_link',
text: 'Узнать больше',
deep_link: 'https://spasibosberbank.ru/partners/korporativnyy-magazin-sberbanka',
},
],
},
],
columns: 2,
item_width: 'small',
},
},
],
},
messageName: 'ANSWER_TO_USER',
};
$response.replies = $response.replies || [];
$response.replies.push(reply);
Обновлено 15 июля 2022

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней