public WebhookResponseModel ChatGotNumber(DflowWebhookRequest dflow)
        {
            var model = new WebhookResponseModel();


            var val = dflow.QueryResult.Parameters.Number;

            if (val == 0)
            {
                model.FulfillmentText = "Sorry, 0 isn't a valid input. Maybe try something else?";
            }

            else
            {
                model.FulfillmentText = $"If you are looking for quotes, try asking me: Get me a quote\n" +
                                        $"or for MBS item number, ask me: what is item {val}";
                model.OutputContexts = dflow.QueryResult.OutputContexts;
            }

            return(model);
        }
        public async Task <ContentResult> DialogflowHandler()
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var model = new WebhookResponseModel();

            var reader = new StreamReader(Request.Body, Encoding.UTF8);

            var dflow = DflowWebhookRequest.FromJson(await reader.ReadToEndAsync());

            switch (dflow.QueryResult.Intent.DisplayName)
            {
            case "Chat.gotNumber-item":
                model.FulfillmentText = await GetItemPrice(dflow.QueryResult.Parameters.Item.ToString());

                break;

            case "MBS.getItemPrice":
            {
                model.FulfillmentText = await GetItemPrice(dflow.QueryResult.Parameters.Item.ToString());

                break;
            }

            case "MBS.getItemPrice-details":
            {
                model.FulfillmentText = await GetItemDetails(dflow.QueryResult.Parameters.Item.ToString());

                break;
            }

            case "MBS.getItemDetails-fee":
            {
                model.FulfillmentText = await GetItemPrice(dflow.QueryResult.Parameters.Item.ToString());

                break;
            }

            case "MBS.getItemDetails":
            {
                model.FulfillmentText = await GetItemDetails(dflow.QueryResult.Parameters.Item.ToString());

                break;
            }

            case "OSHC.GetQuote":
            {
                var duratype = dflow.QueryResult.Parameters.Duration.DurationDuration;
                var duration = dflow.QueryResult.Parameters.Duration.Value;
                if (duratype == "month" && duration < 61 || duratype == "year" && duration < 6)
                {
                    model.FulfillmentText = OshcGetQuote(dflow);
                    Console.WriteLine($"{stopwatch.Elapsed.ToString()} has elapsed");
                    Console.WriteLine(model.FulfillmentText);
                }
                else
                {
                    model.FulfillmentText =
                        "Sorry, the max duration I can get a quote for is 5 years or 60 months.\n" +
                        "Please refer to https://immi.homeaffairs.gov.au/visas/getting-a-visa/visa-listing/student-500 for the max duration of student visa.";
                }

                break;
            }

            case "Chat.gotNumber":
            {
                model = ChatGotNumber(dflow);

                break;
            }
            }

            return(Content(model.ToJson(), "application/json"));
        }