public T GetFieldAnswer <T>(string fieldName)
        {
            var answer = GetFieldAnswerValue(fieldName);

            if (answer == null)
            {
                return(default(T));
            }

            // Special handling for JArray caused by serialization of the data
            if (answer is JArray jarrayAnswer)
            {
                return((jarrayAnswer).ToObject <T>());
            }

            if (answer is T)
            {
                return((T)answer);
            }

            try
            {
                return(ScriptHelpers.ConvertToType <T>(answer));
            }
            catch (JsonReaderException)
            {
            }

            return((T)Convert.ChangeType(answer, typeof(T)));
        }
        public Task <ErrorHandlerResult> ProcessErrorHandler(ChatModel chatModel, ChatFlowStep chatFlowStep)
        {
            if (!initialized)
            {
                throw new ApplicationException("ChatScriptManager is not initialized.  Call Initialize()");
            }

            string        script       = chatFlowStep.ErrorHandler;
            ChatVariables globalFields = chatModel.CurrentState.GlobalAnswers;
            ChatVariables flowFields   = chatModel.CurrentState.GetFlowAnswers(chatFlowStep.Flow);

            if (AwsUtilityMethods.IsRunningOnAWS)
            {
                AWSXRayRecorder.Instance.BeginSubsegment("Script: Process Parser Error Handler");
            }
            try
            {
                return(Task.FromResult(
                           RunScript <ErrorHandlerResult>((engine, globalValues, flowValues) =>
                {
                    dynamic result = engine.Evaluate(script);
                    if (result == null)
                    {
                        return null;
                    }

                    ConvertFieldsToNative(globalFields, globalValues, true);
                    ConvertFieldsToNative(flowFields, flowValues, false);

                    return ScriptHelpers.ConvertToType <ErrorHandlerResult>(result);
                }, globalFields, flowFields, null)
                           ));
            }
            catch (Exception ex)
            {
                if (AwsUtilityMethods.IsRunningOnAWS)
                {
                    AWSXRayRecorder.Instance.AddException(ex);
                }
                logger.ErrorFormat("Script: Process Parser Error Handler Error. '{0}'", ex.Message);
                throw;
            }
            finally
            {
                if (AwsUtilityMethods.IsRunningOnAWS)
                {
                    AWSXRayRecorder.Instance.EndSubsegment();
                }
            }
        }