$response

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

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

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

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

  • text — простой текстовый ответ, каждый элемент выводится отдельным сообщением. Параметр tts задает голосовой текст ответа без разметки для синтеза речи. Параметр ssml задает голосовой текст ответа c разметкой ssml для синтеза речи.
{
  "type":"text",
  "text":"....",
  "tts":"....",
  "ssml": "....."
}
  • 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).

    При добавлении ячейки, необхододимо указать ее заголовок (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"
}
Тестовый виджет не отображает ответы с типом 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);

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

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