В 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 }}"]
}
}