Сбой вызова QnA в Bot Framework, как локально, так и развернутый - PullRequest
2 голосов
/ 26 февраля 2020

Я пытался создать бота, который использует QnA для проверки пользователей на основе категорий. Мне удалось правильно подключиться к QnA и получить пользователю первый уровень, однако проблема возникает, когда я пытаюсь отправить в QnA другой ответ от пользователя.

Вот диалоговое окно, которое работает гладко на это первый запрос.

private async Task<DialogTurnResult> InicioRRHHDialog(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    string intentForQna = IntentEnum.DISPATCH_RRHH;
    var castContextForQna = (WaterfallStepContext)stepContext.Parent;
    var contextForNextStep = stepContext.Context;
    await GetQnaConnection(castContextForQna, intentForQna);
    return await stepContext.NextAsync(contextForNextStep, cancellationToken);
}

Это вызываемый метод GetQnaConnection.

private async Task GetQnaConnection(WaterfallStepContext stepContext, string intent)
{
    servicioQNA = new QnAMakerService(this._qnaService.Url, _qnaRRHHkbId, this._qnaService.QnaEndPointKey);
    var mensaje = await servicioQNA.QueryQnAServiceAsync(intent, null);
    await ShowResults(stepContext, mensaje);
}

И, наконец, метод ShowResults, который я использую для отправки действия обратно пользователю.

private static async Task ShowResults(WaterfallStepContext stepContext, QnAResult[] mensaje)
{
    Activity outputActivity = null;
    QnABotState newState = null;
    var qnaAnswer = mensaje[0].Answer;
    var prompts = mensaje[0].Context?.Prompts;

    if (prompts == null || prompts.Length < 1)
        outputActivity = MessageFactory.Text(qnaAnswer);
    else
    {
        newState = new QnABotState
        {
            PreviousQnaId = mensaje[0].Id,
            PreviousUserQuery = stepContext.Result.ToString()
        };

        outputActivity = CardHelper.GetHeroCard(qnaAnswer, prompts);
    }
    var outputs = new Activity[] { outputActivity };
    foreach (var activity in outputs)
        await stepContext.Context.SendActivityAsync(activity).ConfigureAwait(false);
}

Правильно ли я обрабатываю соединение Qna?

...