Ваше описание немного запутано, как на самом деле устанавливается incidents.data
, но кажется возможным, что вместо того, чтобы быть установленным в пустой массив, он вообще не устанавливается.В этом случае я подозреваю, что произошло следующее:
incidents.data
будет неопределенным - Попытка оценки
incidents.data.length
приведет к ошибке - , так каксбой программы, ваш webhook не возвращает результат.Поскольку вы, вероятно, не устанавливали результат в пользовательском интерфейсе для намерения, был возвращен пустой результат.
Вы, вероятно, можете решить эту проблему, выполнив такой тест, как (например)
incidents && incidents.data && incidents.data.length > 0
Другая ваша проблема, однако, заключается в том, что у вас есть заданное значение для сценария, в котором вы на самом деле не хотите, чтобы это было продолжением.Это одна из причин, по которой вам, вероятно, не следует использовать Followup Intents, а вместо этого только устанавливать контекст, когда вы отправляете ответ, где этот контекст имеет смысл, и ищите ответ «Да» в определенном вами контексте.Затем, когда metro_timetable
не понимает запрос, вы не устанавливаете контекст и выдает ошибку.
Для этого вы удалили бы автоматически сгенерированный контекст metro_timetable-followup
из двух Intents,Вы создадите свой собственный контекст, который я назову timetable
для целей этого примера.
В выполнении для metro_timetable
Намерения, если вы ответите чем-то, что требует подтверждения (то есть - когда«да» будет что-то, что пользователь скажет), вы бы задали контекст timetable
с чем-то вроде
conv.contexts.set('timetable',2);
conv.ask('Are you sure?');
. Затем вы можете создать Intent, который проверяет timetable
как входящий контекст и проводит обучениефразы, которые эквивалентны «да».В этом намерении вы будете делать то, что вам нужно, и отвечать.