Я не думаю, что возможно реализовать это водопадным подходом с разумными усилиями. В простом случае вы можете попробовать проанализировать ответ, в вашем случае это количество спален, а если это не число, вы можете проверить ответ на другой запрос. Проблема здесь в том, что вы должны делать это для всех ответов, а для ответов с открытым текстом будет трудно отличить законный ответ от смены темы.
Итак, вы должны реализовать это, используя подход намерения.
Во-первых, вам нужен детектор намерений, вы можете использовать Luis, поскольку он сильно интегрирован с бот-фреймворком, или реализовать свой собственный детектор намерений.
В вашем случае этот детектор должен обнаруживать намерение - I want to rent a house
(автомобиль и т. Д.).
var intents = new builder.IntentDialog({ recognizers: [luis] });
См. https://docs.botframework.com/en-us/node/builder/chat/IntentDialog Эти примеры кода предназначены для Node.Js, но тот же подход должен работать и для .Net.
Затем для каждого намерения вы должны зарегистрировать соответствующее действие, которое запускает диалог водопада, который получает все необходимые данные.
bot.beginDialogAction("RentHouseAction", RentHouseDialog.name+":/", { matches: "RentHouseAction"});
где RentHouseAction - это действие, которое вы определяете в Luis. RentHouseDialog - это диалог водопада, который находится в библиотеке.
bot.library(RentHouseDialog);
Обратите внимание, что по завершении диалога RentHouseDialog он вернется в то место, где остановился предыдущий диалог. Итак, он снова спрашивает - How many bedrooms
. Чтобы предотвратить такое поведение, вы должны определить, что ваш предыдущий диалог еще не завершен (вы можете использовать для него состояние, в котором вы собираете ответы), и вызвать session.replaceDialog('<>');
.
Надеюсь, это тебе поможет.
person
Sergey L
schedule
29.01.2017