Служба помощника Google, как отфильтровать несколько аудиоответов
Это сложно объяснить, но на самом деле я пытаюсь закодировать свою собственную библиотеку с помощью Google Assistant Service.
me > "set a timer"
GA > "sure, how long"
me > "10 mn"
GA > "ok, timer is set" (1st response)
GA > "Sorry I can't help you" (2nd response)
Реакция нормальная, потому что сервис не поддерживает таймер. Я хочу написать свой таймер, но не могу сохранить первый ответ и заблокировать второй. dialog_state_out.supplemental_display_text содержит только первый, но аудио ядро воспроизводит все данные, которые мы имеем в audio_out.audio_data.
Как разделить 2 ответа, я не вижу разрыва в потоке данных и только 1 запрос сделан.
1 ответ
Правильный способ сделать это - использовать пользовательские действия на устройстве. Вы можете создать собственное действие, которое будет запускать запрос, например "установить таймер", что позволит вам обрабатывать пользовательскую логику и даже поддерживать параметры в самом запросе.
На этой странице документации объясняется, как их настроить. Вы определяете пакет действий с вашими действиями. Вот действие для "мигания":
"actions": [
{
"name": "com.example.actions.BlinkLight",
"availability": {
"deviceClasses": [
{
"assistantSdkDevice": {}
}
]
},
"intent": {
"name": "com.example.intents.BlinkLight",
"parameters": [
{
"name": "number",
"type": "SchemaOrg_Number"
},
{
"name": "speed",
"type": "Speed"
}
],
"trigger": {
"queryPatterns": [
"blink ($Speed:speed)? $SchemaOrg_Number:number times",
"blink $SchemaOrg_Number:number times ($Speed:speed)?"
]
}
},
"fulfillment": {
"staticFulfillment": {
"templatedResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "Blinking $number times"
}
},
{
"deviceExecution": {
"command": "com.example.commands.BlinkLight",
"params": {
"speed": "$speed",
"number": "$number"
}
}
}
]
}
}
}
}
],