How to implement cards in a QnA question which has follow up prompts and uses them in the cards

前端 未结 2 1190
长情又很酷
长情又很酷 2021-01-15 00:31

I\'ve set up a simple QnA bot which is linked to a QnA service. Within the QnA service I have set up some questions which have follow up prompts(Dependents) e.g. how do I ge

2条回答
  •  -上瘾入骨i
    2021-01-15 01:20

    There is this experimental sample that has been released by the Bot Framework team which demonstrates how to handle follow-up prompts.

    You can download it (you will have to download the whole repo) then plug in your details to the appsettings.json file and you should be able to test it using the Bot Framework Emulator - these were the only steps that I had to perform.

    The key part is this method which checks to see if the result contains any prompts and returns the response accordingly - it is called inside the FuctionDialog.

    If you're only ever going to be implementing a single level of prompts i.e. you have a question which shows prompts and when you click on one of these prompts it will display an answer rather than taking you to another prompt, then it is possible to take the guts of the logic from the ProcessAsync method (checking for prompts) along with the required classes from the Models folder and the CardHelper class and get this to work in your existing application - you won't have to worry about the QnABotState because you'll only be going a single level deep so you don't need to track where you are in the series of prompts. e.g.

    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);
    

提交回复
热议问题