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