ym88659208ym87991671
Используем JavaScript в сценарии | Документация SmartMarket
Skip to main content

Используем JavaScript в сценарии

Вы можете заменить часть сложной логики смартапа кодом на JavaScript.

Например, вы можете создавать и обрабатывать переменные, добавлять новые типы карточек в ответы ассистента, получать данные о персонаже ассистента, которого выбрал пользователь, и многое другое.

Graph поддерживает JavaScript версии ES5. Также доступны вспомогательные функции и библиотека underscore.js.

note

Выражения на JavaScript можно также использовать в блоках Условия.

Если в вашем смартапе большинство функций реализовано с помощью кода на JavaScript, рассмотрите продолжение развития проекта в Code или других инструментах разработки смартапов.

Предложение блюда на основе персонажа ассистента

У каждого ассистента из семейства Салют есть собственный характер. Учитывайте это, так как каждый из них мог бы предложить одно и то же блюдо по-разному.

Для этого используйте JavaScript сравнение в блоке Условия:

  1. Откройте проект «Кулинарная книга».

  2. В блок Интенты на первом экране, добавьте интент «Посоветуй что-нибудь».

    Кроме интента вы можете использовать блок Подсказка.

  3. Соедините интент с блоком Условия на новом экране.

  4. Добавьте следующие условия:

    $rawRequest.payload.character.name === 'Сбер';
    $rawRequest.payload.character.name === 'Джой';
    $rawRequest.payload.character.name === 'Афина';

    Для сравнения используется значение поля name запроса ассистента. Доступ к запросу ассистента осуществляется с помощью системной переменной $rawRequest.

  5. Соедините каждое из условий с рецептом.

Персонажи различаются не только характерами, но и обращением к пользователю: Джой обращается к пользователю на «ты». Учитывайте это при проектировании ответов, зависящих от персонажа.

Рецепт от персонажа
danger

При попытке протестировать определение персонажа в тестовом виджете возникнет ошибка. Такое поведение вызвано тем, что в тестовом виджете нет доступа к запросу ассистента из переменной $rawRequest.

Конвертер величин

При поиске и создании рецептов может быть полезна функция конвертации различных величин.

Добавьте в смартап возможность конвертировать унции в граммы, кварты в миллилитры и градусы Фаренгейта в градусы Цельсия.

Также покажите пользователю небольшую памятку с помощью нового типа карточек:

  1. Откройте проект «Кулинарная книга».

  2. На первый экран добавьте подсказку «Конвертер».

  3. Соедините подсказку с блоком JS Код на новом экране.

    Вставьте в блок код карточки grid_card. Такой тип карточек можно создавать только с помощью кода на JavaScript. Структуры карточек описаны в разделе SmartApp API.

    $response.replies = $response.replies || [];
    $response.replies.push({
    type: 'raw',
    body: {
    items: [
    {
    card: {
    type: 'grid_card',
    items: [
    {
    type: 'greeting_grid_item',
    top_text: {
    type: 'text_cell_view',
    text: '1 унция',
    typeface: 'caption',
    text_color: 'default',
    max_lines: 3,
    },
    bottom_text: {
    type: 'text_cell_view',
    text: '28 грамм',
    typeface: 'body3',
    text_color: 'default',
    max_lines: 3,
    margins: {
    top: '4x',
    },
    },
    paddings: {
    top: '6x',
    left: '6x',
    right: '6x',
    bottom: '6x',
    },
    },
    {
    type: 'greeting_grid_item',
    top_text: {
    type: 'text_cell_view',
    text: '1 фунт',
    typeface: 'caption',
    text_color: 'default',
    max_lines: 3,
    },
    bottom_text: {
    type: 'text_cell_view',
    text: '16 унций\n 454 грамма',
    typeface: 'body3',
    text_color: 'default',
    max_lines: 3,
    margins: {
    top: '4x',
    },
    },
    paddings: {
    top: '6x',
    left: '6x',
    right: '6x',
    bottom: '6x',
    },
    },
    {
    type: 'greeting_grid_item',
    top_text: {
    type: 'text_cell_view',
    text: '1 ст. ложка',
    typeface: 'caption',
    text_color: 'default',
    max_lines: 3,
    },
    bottom_text: {
    type: 'text_cell_view',
    text: '3 чайные ложки',
    typeface: 'body3',
    text_color: 'default',
    max_lines: 3,
    margins: {
    top: '4x',
    },
    },
    paddings: {
    top: '6x',
    left: '6x',
    right: '6x',
    bottom: '6x',
    },
    },
    {
    type: 'greeting_grid_item',
    top_text: {
    type: 'text_cell_view',
    text: '1 кварта',
    typeface: 'caption',
    text_color: 'default',
    max_lines: 3,
    },
    bottom_text: {
    type: 'text_cell_view',
    text: '4 чашки\n16 ст. ложек\n950 мл',
    typeface: 'body3',
    text_color: 'default',
    max_lines: 3,
    margins: {
    top: '4x',
    },
    },
    paddings: {
    top: '6x',
    left: '6x',
    right: '6x',
    bottom: '6x',
    },
    },
    ],
    columns: 2,
    item_width: 'small',
    },
    },
    ],
    },
    });
  4. На этот же экран добавьте блок Текст и спросите у пользователя «Что вы хотите конвертировать?»

  5. Добавьте подсказки «Унции», «Кварта» и «Фаренгейты».

  6. Соедините подсказки с соответствующими блоками Ввод числа.

    В блоках Ввод числа попросите пользователя указать вес, объем или температуру и сохраните их в переменные $ounces, $quart и $fahrenheit соответственно.

  7. Соедините блоки Ввод числа с соответствующими блоками JS Код, в которых будут выполняться расчеты.

    В блок для преобразования веса добавьте код:

    function convertWeight(weight) {
    return weight / 0.035274;
    }
    $session.grams = convertWeight($session.ounces);

    В блок для преобразования объема добавьте код:

    function convertVolume(volume) {
    return volume * 946.35;
    }
    $session.ml = convertVolume($session.quart);

    В блок для преобразования температуры добавьте код:

    function convertTemp(temperature) {
    return (temperature - 32) / 1.8;
    }
    $session.celsius = convertTemp($session.fahrenheit);

    В блоке JS Код обращение к глобальным переменным выполняется с помощью системной переменной $session. Если вы хотите, чтобы переменные, созданные внутри блока JS Код, были доступны в других блоках, также сохраняйте их с помощью системной переменной $session.

    caution

    В блоке JS Код не должно быть пропущенных строк.

  8. На экраны с вычислениями добавьте блоки Переход и соедините их с соответствующими экранами результатов.

Пример конвертера.

Конвертер единиц
Обновлено 15 июля 2022

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

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