Примечание. Я использую диалоговое управление с отключенным автоматическим делегированием.
Алекса отправляет запрос с dialogState = IN_PROGRESS
и confirmationStatus = DENIED
даже перед отправкой того же запроса с dialogState = COMPLETED
и confirmationStatus = DENIED
.
Ошибка
«Директива« Dialog.Delegate »может использоваться только при активном диалоге
и не было завершено "
намекает на это, но следует отметить, что мы можем начать делегирование диалога для отдельного намерения, находясь в dialogState = COMPLETED
, но не можем сделать это для того же намерения.
Так что, если вы хотите перезапустить диалоговое окно для того же намерения, когда подтверждение намерения отклоняется, вы должны сделать это, пока dialogState все еще IN_PROGRESS . Если вы хотите обработать подтверждение намерения, отклоненное каким-либо другим способом, вы также можете сделать это, когда dialogState имеет значение COMPLETED .
Решением моей вышеупомянутой проблемы является просто изменение dialogState в функции canHandle на IN_PROGRESS вместо COMPLETED .
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'PostMessageIntent' &&
handlerInput.requestEnvelope.request.dialogState === 'IN_PROGRESS' &&
handlerInput.requestEnvelope.request.intent.confirmationStatus === 'DENIED';
}
Нашли это в глубине души - https://forums.developer.amazon.com/comments/206243/view.html
Amazon должен принять к сведению и добавить это в документацию.