Как реализовать карты в вопросе QnA, который имеет последующие подсказки и использует их в картах - PullRequest
1 голос
/ 17 мая 2019

Я установил простого бота QnA, который связан с сервисом QnA.В рамках сервиса QnA я задал несколько вопросов, в которых есть подсказки (иждивенцы), например, как мне добраться до кампуса через автобус, поезд и т. Д. см. Изображение в ссылке , в функции тестирования Qna maker.Вы можете просто нажать кнопку с именем enable mutli-turn, которая предоставляет функциональные кнопки, чтобы информировать вас о том, что можно / нужно спрашивать дальше через зависимых от ответа См. изображение в ссылке .

Однако при использовании в канале / в эмуляторе ничего подобного не появляется см. Изображение , что немного странно.И, очевидно, я хочу внедрить такую ​​функциональность в бота, поскольку он делает жизнь пользователей намного проще.

Я новичок во всем, что касается бота (я начал в прошлом месяце), поэтому я просмотрелИнтернет, чтобы увидеть то, что я мог найти, но я не мог видеть ничего кроме написания вопросов внутри самого бота, см. документацию Microsoft , которая делает использование QnA maker практически бессмысленным.

То, что мне нужно, это перехватить сообщение от QnA maker, когда оно отвечает пользователю, посмотреть на полученный Json, чтобы найти, есть ли какие-либо иждивенцы, затем запустить другой диалог, который получает имена контекстуальных иждивенцев.и запускает простой цикл создания карт для каждого иждивенца, затем отправляет сообщение пользователю с сгенерированными картами, однако я не уверен, как перехватить Json и искать каких-либо иждивенцев, или есть кнопка, которая мне нужнащелкните внутри лазурь, которая просто делает это.

1 Ответ

1 голос
/ 29 мая 2019

Существует этот экспериментальный образец, выпущенный командой Bot Framework, который демонстрирует, как обрабатывать последующие запросы.

Вы можете загрузить его (вам придется скачатьвесь репозиторий), затем вставьте свои данные в файл appsettings.json, и вы сможете проверить его с помощью эмулятора Bot Framework - это были единственные шаги, которые мне пришлось выполнить.

Ключевая часть этот метод , который проверяет, содержит ли результат какие-либо подсказки, и возвращает ответ соответственно - он вызывается внутри FuctionDialog .

Если вы только когда-либо собираетесьреализовать один уровень подсказок, т. е. у вас есть вопрос, который показывает подсказки, и когда вы щелкнете по одной из этих подсказок, она отобразит ответ, а не переместит вас в другую подсказку, и тогда можно будет извлечь все из логики изМетод ProcessAsync (проверка запросов) вместе с необходимыми классами из папки Models и класса CardHelper изаставьте это работать в вашем существующем приложении - вам не придется беспокоиться о QnABotState, потому что вы будете проходить только один уровень, поэтому вам не нужно отслеживать, где вы находитесь в серии подсказок.например,

var query = inputActivity.Text;           
var qnaResult = await _qnaService.QueryQnAServiceAsync(query, new QnABotState());
var qnaAnswer = qnaResult[0].Answer;
var prompts = qnaResult[0].Context?.Prompts;

if (prompts == null || prompts.Length < 1)
{
    outputActivity = MessageFactory.Text(qnaAnswer);
}
else
{
    outputActivity = CardHelper.GetHeroCard(qnaAnswer, prompts);
}

await turnContext.SendActivityAsync(outputActivity);
...