Вы можете использовать различные директивы Dialog interface , чтобы запросить у пользователя информацию, необходимую для выполнения его запроса.Когда пользователь взаимодействует с вашим навыком, вы получаете запрос на свой сервер с отображенным намерением и заполненными (или незаполненными) слотами.Даже если вы используете диалоговую модель и заполнили все высказывания для каждого слота, вам придется ответить соответствующей директивой, чтобы продолжить.
Существует три способа обработки диалоговой модели:
1.Делегирование в Alexa
Вы можете использовать директиву Dialog.Delegate
, чтобы Alexa определяла следующий шаг в диалоге, и использует запросы, которые вы определили в диалоговой модели, для извлечения значений слотов, подтверждения значений слотов или подтвержденияполное намерение.
Если у вас есть незаполненные слоты, просто верните директиву delegate
, Alexa будет использовать подсказки, определенные в модели взаимодействия, чтобы заполнить этот слот.Пока свойство dialogState
не равно COMPLETE
, вы можете продолжить делегирование в Alexa.
После завершения разговора входящий IntentRequest
имеет dialogState
из COMPLETED
.Вся необходимая информация теперь доступна в значениях слотов намерения.
Примечание: С директивой Dialog.Delegate
вы не можете отправлять outputSpeech
или reprompt
из своего кода.Вместо этого будут использоваться те, которые определены в модели взаимодействия.А статус COMPLETED
возможен только при использовании Dialog.Delegate
.
2.Управление диалогом
В каждом ходу разговора вы можете взять управление и спросить, что вам нужно, вместо того, чтобы делегировать его в Alexa.Это полезно, особенно когда вы хотите, чтобы слоты были заполнены определенным ордером, или вы хотите подтвердить слоты по мере продвижения, или свойство «мандата» вашего слота имеет динамический характер и так далее.
Вы можете использовать директиву Dialog.ElicitSlot
, чтобы запросить конкретный слот, Dialog.ConfirmSlot
, чтобы подтвердить конкретный слот, и Dialog.ConfirmIntent
, чтобы подтвердить само намерение.
3.Комбинация обоих
Когда вы получаете запрос о намерениях, вы можете вернуть директиву delegate
или любую другую директиву по своему усмотрению.Даже если вы делегируете, в любой момент вы можете взять диалоговое окно вместо продолжения делегирования в Alexa.
Подробнее о другой директиве здесь
ПримерВзаимодействия:
1. Использование директивы delegate
здесь
2. Использование директивы ElicitSlot
здесь
3. Использование директивы ConfirmSlot
здесь
4. Использование директивы ConfirmIntent
здесь