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