Поддержка разных персонажей


В SmartApp Framework реализована поддержка разных персонажей на уровне сценариев. Это помогает упростить создание сценариев, в которых ответы зависят от персонажа и его пола, а также от пола пользователя.

Чтобы использовать поддержку персонажей, создайте файл static/references/bundles/bundles.json.

Это словарь, в котором ответы виртуального ассистента сгруппированы с помощью элемента bundle. Вы можете самостоятельно решить, как именно группировать ответы ассистента. Например, ответы в рамках одного сценария можно объединить в один bundle.

Добавьте в файл static/references/bundles/bundles.json следующее:

# если файла нет, создайте его
{
  # Вариативность в зависимости от персонажа
  "bundle_hello_scenario": {
    "key_answer.Сбер": [
      "Я — Сбер! Ваш виртуальный ассистент",
      "Меня зовут Сбер. Прошу любить и не жаловаться! Простите за глупую шутку, волнуюсь"
    ],
    "key_answer.Джой": [
      "Меня зовут Джой, я твой виртуальный ассистент!"
    ],
    "key_answer.Афина": [
      "Я Афина. Ваш гениальный ассистент. Простите, виртуальный"
    ],
    "key_answer": [
      "Здравствуйте! Чем могу помочь?"
    ]
  },

  # Вариативность в зависимости от персонажа и пола пользователя
  "bundle_thanks_scenario": {
    "key_1.Афина.female": [
      "Спасибо, красавица!",
      "Большое спасибо! Ты прекрасна!"
    ],
    "key_1.Джой.male": [
      "Благодарю тебя, джентльмен!"
    ]
  },

  # Вариативность в зависимости от пола персонажа и пола пользователя
  "bundle_waiting_scenario": {
    "key_2.female_to_female": [
      "Ты меня ждала, а я была занята..."
    ],
    "key_2.male_to_female": [
      "Ты меня ждала, а я был занят..."
    ],
    "key_2.male_to_male": [
      "Ты меня ждал, а я был занят..."
    ],
    "key_2.female_to_male": [
      "Ты меня ждал, а я была занята..."
    ],

    # Ответ по умолчанию, если ничего не смогли подобрать
    "key_2": [
      "Ждали?! А вот и я!"
    ]

  }
}

Затем используйте bundles, чтобы сформировать ответ внутри сценария.

Пример:

{
    "type": "string",
    "command": "ANSWER_TO_USER",
    "nodes": {
        "pronounceText": "{{ gender_sensitive_text('bundle_scenario_name', 'key_answer') }}",
        "items": [
            {
                "bubble": {
                    "text": "{{ gender_sensitive_text('bundle_scenario_name', 'key_answer') }}"
                }
            }
        ]
    }
}

Когда сценарий формирует ответ пользователю, происходит вызов gender_sensitive_text. Он подставляет нужную фразу в зависимости от активированного персонажа, его пола и пола пользователя. Если ни одна фраза не подходит, используется фраза по умолчанию с ключом key_answer.

Обратите внимание, gender_sensitive_text поддерживает вариативность ответа внутри каждого ключа. Например, ключ key_answer.Сбер содержит 2 фразы. Выбор одной из них произойдет случайно.

Использование шаблонизатора в bundle

Начиная с версии 1.0.7 SmartApp Framework поддерживает шаблонизатор Jinja внутри bundle.

Вы можете использовать его для генерации строк с имеющимися данными:

{
    "bundle_user_id_scenario": {
        "key_answer.Сбер": [
          "Ваш идентификатор: {{ uuid.userId }}"
        ],
        "key_answer.Джой": [
        "Твой идентификатор: {{ uuid.userId }}"
        ],
        "key_answer.Афина": [
        "Ваш идентификатор: {{ uuid.userId }}"
        ]
    }
}

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

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