#node.js #actions-on-google #dialogflow-es-fulfillment
#node.js #действия в Google #dialogflow-es-выполнение
Вопрос:
Я использую действия в Google и dialogflow для создания открытого приложения для общения. Я создал объект с именем «Рейтинг», и он используется для хранения чисел от 1 до 5, ниже приведен скриншот объекта:
Я использую этот объект в намерении с именем ‘First’. Ниже приведен скриншот:
Самое первое намерение, которое я использую, — это «Идентификатор опроса». Ниже приведен код для намерения идентификатора опроса:
app.intent('Survey ID', (conv, {number}) => {
const id = number;
if(id == 2020){
conv.ask(qstion[0]);
}
else{
conv.close('This is not a valid survey ID');
}
});
Ниже приведен код для «первого» намерения:
app.intent('First', (conv) => {
const rating = conv.parameters.Rating;
if(type[0] === 'RATING'){
if(rating >= 1 amp;amp; rating <= 5){
senddata[0] = qstion[0] rating;
conv.ask(qstion[1]);
}
else{
conv.ask('Please enter a number between 1 and 5');
}
}
});
Я также использую резервный вариант для «первого» намерения. Ниже приведен код для резервного намерения:
app.intent('First - fallback', (conv) => {
const userSaid = conv.query;
conv.close(userSaid);
});
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя я ввожу число от 1 до 5, оно входит в блок else в коде «первого» намерения и говорит: «Пожалуйста, введите число от 1 до 5». И когда я использую любое число, отличное от 1 до 5, оно должно перейти к резервному намерению, но оно переходит к намерению «Идентификатор опроса» и говорит: «Это недопустимый идентификатор опроса».
Предполагаемое поведение заключается в том, что если я ввожу число от 1 до 5, оно должно сохранить его и задать следующий вопрос, и если я скажу что-нибудь еще, оно должно перейти к резервному намерению и отобразить ответ пользователя.
Для справки я также привожу контексты всех трех намерений:
Контекст «Идентификатор опроса»:
«Первый» контекст:
Контекст ‘First-fallback’:
Кто-нибудь может мне помочь с этим, пожалуйста?
Комментарии:
1. Если бы вы посмотрели на запрос JSON, я предполагаю, что значение rating равно не a
number
, а astring
. Возможно, вам потребуется сначала преобразовать значение с помощьюparseInt(conv.parameters.Rating)
2. @NickFelker Я пробовал это, но это не работает
3. Каково значение «Рейтинг»?
4. Если я ввожу 5, значение рейтинга равно «пять»
5. Я изменил объект оценки, вместо «один» я использовал 1, поэтому он работает нормально, если я ввожу любое число от 1 до 5, но если я ввожу 9, он не входит в резервный вариант и по-прежнему говорит: «Это недопустимый идентификатор опроса»