public class QnAServiceMiddleware : IMiddleware { private BotServices services; public QnAServiceMiddleware(BotServices _services) { services = _services; } public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default(CancellationToken)) { bool IsResponseSent = false; if (turnContext.Activity.Type == ActivityTypes.Message) { var qnAResponse = await services.QnAServices["QnABot"].GetAnswersAsync(turnContext); // Name has to match with value mentioned in your .bot file in QnA config node. if (qnAResponse != null && qnAResponse.Length > 0) { qnAResponse = qnAResponse.Where(w => w.Score > 0.5d).ToArray(); if (qnAResponse.Length > 0) { await turnContext.SendActivityAsync(qnAResponse[0].Answer, cancellationToken: cancellationToken); IsResponseSent = true; } } } if (next != null && !IsResponseSent) { await next(cancellationToken).ConfigureAwait(false); } } }