2017-01-28 1 views
1

Я хотел бы реализовать следующий сценарий разговора в MS botframeworkКак реализовать «Назад» разговор в Chatbot

Bot: => what can do for you?   => User 
Bot: <= I want to rent a house   <= User 
Bot: => Which city?     => User 
Bot: <=     London   <= User 
Bot: => How many bedrooms    => User 
Bot: <= Ops, I want a home in New York <= User #User wish to change the topic here.. 

В MS botframework, как я могу использовать диалог Waterfall для реализации выше истории? любой совет?

ответ

0

Я не думаю, что это можно реализовать с помощью подхода водопада с разумными усилиями. В простом случае вы можете попытаться проанализировать ответ, в вашем случае это несколько спален, а если это не номер, вы можете проверить ответ на другой запрос. Проблема здесь в том, что вы должны сделать это для всех ответов и для открытых текстовых ответов будет трудно отличить юридический ответ или изменение темы.

Итак, вы должны реализовать его с использованием намеренного подхода.

Во-первых, вам нужен детектор намерений, вы можете использовать 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 это действие, которое вы указали в Луис RentHouseDialog является диалоговым водопад, который находиться в библиотеке.

bot.library(RentHouseDialog); 

Обратите внимание, что, как диалог RentHouseDialog заканчивает он возвращается к месту, где предыдущий диалог прекратился. Итак, он снова спрашивает - How many bedrooms. Чтобы предотвратить это поведение, вы должны обнаружить, что предыдущий диалог еще не завершен (вы можете использовать состояние для него, где вы собираете ответы) и вызвать session.replaceDialog('<>');.

Надеюсь, это вам поможет.

+0

Привет, Сергей, спасибо за ваш ответ, это действительно полезно. Но если ответ «Упс, а не Лондон, Нью-Йорк, пожалуйста!», Так что трудно направить намерение RentHouse, для человека, это очень ясно, конечный пользователь хочет арендовать дом в Нью-Йорке на основе контекста, в моем бот-коде, как я могу это достичь? заранее спасибо –

+0

@YuhuaDeng, что было бы намерением «changeLocation». – stuartd

+0

@stuartd, вы имеете в виду, что Луис может признать «oops, а не Лондон, Нью-Йорк, пожалуйста!» Как changeLocation? , о, позвольте мне попробовать, я скоро отвечу ... –

Смежные вопросы