Пример #1
0
        public Task <bool> IsConditionMet(ChatModel chatModel, ChatFlowStep chatFlowStep, Chat_ChildRef childRef)
        {
            if (!initialized)
            {
                throw new ApplicationException("ChatScriptManager is not initialized.  Call Initialize()");
            }

            if (String.IsNullOrEmpty(childRef.Condition))
            {
                return(Task.FromResult(true));
            }

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

            if (AwsUtilityMethods.IsRunningOnAWS)
            {
                AWSXRayRecorder.Instance.BeginSubsegment("Script: Evaluate Condition");
            }
            try
            {
                //logger.DebugFormat("Script: IsConditionMet Start. '{0}'", childRef.Condition);

                return(Task.FromResult(
                           RunScript <bool>((engine, globalValues, flowValues) =>
                {
                    var result = engine.Evaluate(childRef.Condition);

                    if (!(result is bool))
                    {
                        logger.WarnFormat("Script: IsCondition did not return true/false.  Evaluating with Javascript rules. '{0}', result: '{1}'", childRef.Condition, result);
                    }

                    return UtilityMethods.ParseJavascriptBoolean(result);
                }, globalFields, flowFields, null)
                           ));
            }
            catch (Exception ex)
            {
                if (AwsUtilityMethods.IsRunningOnAWS)
                {
                    AWSXRayRecorder.Instance.AddException(ex);
                }
                logger.ErrorFormat("Script: IsConditionMet Error. '{0}' '{1}'", childRef.Condition, ex.Message);
            }
            finally
            {
                if (AwsUtilityMethods.IsRunningOnAWS)
                {
                    AWSXRayRecorder.Instance.EndSubsegment();
                }
            }

            return(Task.FromResult(false));
        }
Пример #2
0
        public async Task <bool> IsConditionMet(ChatModel chatModel, ChatFlowStep chatFlowStep, Chat_ChildRef childRef)
        {
            if (String.IsNullOrEmpty(childRef.Condition))
            {
                return(true);
            }

            logger.DebugFormat("Script: IsConditionMet Start. '{0}'", childRef.Condition);

            var functionName = String.Format($"cond{chatFlowStep.Id}_{childRef.Id}");

            var result = await ExecuteNode(chatModel, chatFlowStep.Flow, functionName, null);

            if (!UtilityMethods.IsNullOrEmpty(result) && result[0] is NodeConditionResponse conditionResponse)
            {
                return(conditionResponse.Result);
            }

            return(false);
        }