private Response onWhenCoworker(WhenCoworkerDTO userQuery)
        {
            //Console.WriteLine(userQuery.ToJson(true));

            var tp = new TimePeriodDTO()
            {
                StartTime = DateTimeOffset.UtcNow.Date.Add(TimeSpan.Zero),
                EndTime   = DateTimeOffset.UtcNow.Date.Add(new TimeSpan(23, 59, 59))
            };

            // if user hasn't entered any data and time -> set to current date and time
            if (!userQuery.Date.HasValue)
            {
                userQuery.Date = DateTimeOffset.UtcNow;
            }

            // recognize any possible time and data
            tp = RecognizeDate(date: userQuery.Date, oldTp: tp);

            // create params for Event Server request
            var holderRequest = new HolderLocationPeriodDTO()
            {
                QueryType        = QueryType.GetType(userQuery.QueryType),
                HolderName       = userQuery.TargetName.Trim().Replace("?", ""),
                HolderMiddlename = userQuery.TargetMiddlename.Trim().Replace("?", ""),
                HolderSurname    = userQuery.TargetLastname.Trim().Replace("?", ""),
                TimePeriod       = tp,
                IsHolderIn       = userQuery.InOrOut == null ? new bool?() :
                                   userQuery.InOrOut.Trim().Equals("пришла", StringComparison.OrdinalIgnoreCase) ? true : false
            };

            Console.WriteLine(holderRequest.ToJson(true));

            foreach (var eventsListener in GlobalScope.CSEventsListeners)
            {
                eventsListener.PostCommand(new RequestHolderLocation(holderRequest));
            }

            return(200);
        }
        public IntentsModule() : base("")
        {
            base.Post("/intents", params_ => {
                try {
                    // body -> json -> RequestWebHookIntent
                    RequestWebHookIntent incomeWebHook = RequestWebHookIntent.FromJson(RequestStream.FromStream(Request.Body).AsString());
                    IntentType.Type intentType         = IntentType.GetType(incomeWebHook?.QueryResult?.Intent?.Name);
                    object Parameters = incomeWebHook?.QueryResult?.Parameters;

                    // Here is a temporary fix of bug in Dialogflow.
                    // Slack have changed api and today (12.09.2019) Dialogflow not correct works with unswers to slack
                    if (intentType == IntentType.Type.Undefined || (incomeWebHook?.QueryResult?.AllRequiredParamsPresent ?? false) == false)
                    {
                        return(buildFulfillmentMessage(incomeWebHook));
                    }

                    switch (intentType)
                    {
                    case IntentType.Type.Undefined:
                        break;

                    case IntentType.Type.WhereCoworker:
                        //return onWhereCoworker(WhereCoworkerDTO.FromObject(Parameters));
                        onWhereCoworker(WhereCoworkerDTO.FromObject(Parameters));
                        break;

                    case IntentType.Type.WhenCoworker:
                        //return onWhenCoworker(WhenCoworkerDTO.FromObject(Parameters));
                        onWhenCoworker(WhenCoworkerDTO.FromObject(Parameters));
                        break;
                    }

                    return(buildFulfillmentMessage(incomeWebHook));
                } catch (Exception e) {
                    Console.WriteLine("Exception: " + e.Message + "\n" + e.StackTrace);
                }

                return(404);
            });
        }