Name

sn_ci_analytics.VAConditionBuilderUtil

Description

Primary Utility for VA Condition Builder/Funnel transformation to Appsee.

Script

var VAConditionBuilderUtil = Class.create();
VAConditionBuilderUtil.prototype = {
  initialize: function() {
      this.vAConditionBuilderHelper = new VAConditionBuilderHelper();
      this.tables = {
          "va_conversations": "va_conversations",
          "va_users": "va_users",
          "va_funnels": "va_funnels"
      };
  },
  /**
   * @param { Object } vAComparisonBuilderRows - The required parameters of convertToAppsee @method.

  	 @schema vAComparisonBuilderRows
  		'field' {Object} | Mandatory
  		'operator' {String} | Mandatory
  		'conditionValue' {Boolean}, {String}, {Array}, {Number} | Mandatory - INFO: @typeOf(operator)
  		'comparisonType' {String} | Mandatory
  		'children' {null}, {Array} | Mandatory - INFO: Takes in {@vAComparisonBuilderRows}

   * @returns {Object} - Return Appsee understandable JSON Query
  	 'success' {Boolean} - INFO: Success status of the Query transformation: True - Successfull, False - Unsuccessfull
  	 'query' {Object} - INFO: Response of the transformed query. {null} is success = false.
  	 'error' {String} - INFO: Unsuccessfull error code. {null} is success = true.

  Examples:
  	1. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Favorite",
  			"operator": "matches",
  			"conditionValue": "true",
  			"comparisonType": "NEW_QUERY",
  			"children": null
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"and":[{"IsFavorite":{"exists":true}}]}


  	2. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Channel Name",
  			"operator": "is any of",
  			"conditionValue": ["Slack", "Web Client"],
  			"comparisonType": "NEW_QUERY",
  			"children": null
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"and":[{"and":[{"SessionCustomEvents":{"nested_match":{"and":[{"Name":{"eq":"DynamicProperties"}},{"Properties":{"nested_match":{"and":[{"Channel Name":{"is_any":["Slack","Web Client"]}}]}}}]}}}]}]}


  	3. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Duration",
  			"operator": "greater than",
  			"conditionValue": 10,
  			"comparisonType": "NEW_QUERY",
  			"children": null
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"and":[{"and":[{"SessionDuration":{"gt":10000}}]}]}


  	4. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Self Solve",
  			"operator": "matches",
  			"conditionValue": true,
  			"comparisonType": "NEW_QUERY",
  			"children": null
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"and":[{"and":[{"SessionCustomEvents":{"nested_match":{"and":[{"Name":{"eq":"DynamicProperties"}},{"Properties":{"nested_match":{"and":[{"Self Solve":{"eq":true}}]}}}]}}}]}]}


  	5. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Topic",
  			"operator": "contains any of",
  			"conditionValue": ["Fallback Topic.", "Greetings."],
  			"comparisonType": "NEW_QUERY",
  			"children": [] 
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"and":[{"and":[{"SessionCustomEvents":{"nested_match":{"and":[{"Name":{"contains_any":["Fallback Topic.","Greetings."]}}]}}}]}]}


  	6. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Topic",
  			"operator": "contains any of",
  			"conditionValue": ["Fallback Topic."],
  			"comparisonType": "NEW_QUERY",
  			"children": [
  				{
  					"field": "Last Node Visited",
  					"operator": "matches",
  					"conditionValue": true,
  					"comparisonType": "NEW_QUERY",
  					"children": null
  				}
  			]
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"and":[{"and":[{"SessionCustomEvents":{"nested_match":{"and":[{"Name":{"contains_any":["Fallback Topic."]}}]}}},{"SessionCustomEvents":{"nested_match":{"and":[{"Name":{"eq":"Fallback Topic."}},{"Properties":{"nested_match":{"and":[{"Last Node Visited":{"eq":true}}]}}}]}}}]}]}


  	7. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Events",
  			"operator": "contains any of",
  			"conditionValue": ["Conversation End Reason"],
  			"comparisonType": "NEW_QUERY",
  			"children": []
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"and":[{"and":[{"SessionCustomEvents":{"nested_match":{"and":[{"Name":{"contains_any":["Conversation End Reason"]}}]}}}]}]}


  	8. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Favorite",
  			"operator": "matches",
  			"conditionValue": "true",
  			"comparisonType": "NEW_QUERY",
  			"children": null
  		},
  		{
  			"field": "Channel Name",
  			"operator": "is any of",
  			"conditionValue": ["Slack", "Web Client"],
  			"comparisonType": "AND",
  			"children": null
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"and":[{"IsFavorite":{"exists":true}}, {"and":[{"SessionCustomEvents":{"nested_match":{"and":[{"Name":{"eq":"DynamicProperties"}},{"Properties":{"nested_match":{"and":[{"Channel Name":{"is_any":["Slack","Web Client"]}}]}}}]}}}]}]}



  	9. Input: {vAComparisonBuilderRows}
  		[{
  			"field": "Favorite",
  			"operator": "matches",
  			"conditionValue": "true",
  			"comparisonType": "NEW_QUERY",
  			"children": null
  		},
  		{
  			"field": "Self Solve,
  			"operator": "matches",
  			"conditionValue": true,
  			"comparisonType": "OR",
  			"children": null
  		}]

  		Output: new sn_ci_analytics.VAConditionBuilderUtil().convertToAppsee(vAComparisonBuilderRows)
  		{"or":[{"IsFavorite":{"exists":true}},{"SessionCustomEvents":{"nested_match":{"and":[{"Name":{"eq":"DynamicProperties"}},{"Properties":{"nested_match":{"and":[{"Self Solve":{"eq":true}}]}}}]}}}]}


   */
  convertToAppsee: function(vAComparisonBuilderRows) {
      var query = {};
      try {
          query = this.vAConditionBuilderHelper.transformConditionBuilder(vAComparisonBuilderRows, this.tables.va_conversations);
          if (query)
              return this.vAConditionBuilderHelper.success(query);
          else
              return this.vAConditionBuilderHelper.fail("invalid_query");
      } catch (e) {
          return this.vAConditionBuilderHelper.fail("invalid_query");
      }
  },
  /**
  	* @param { Object } vAFunnelBuilderRows - The required parameters of convertToAppseeFunnel @method.

  		* @schema vAFunnelBuilderRows
  			'StepNumber' {Integer} | Mandatory
  			'VAComparisonModel' {Array} | Mandatory
  				'field' {Object} | Mandatory
  				'conditionVaue' {String | null} | Mandatory
  				'children' {Array} | Mandatory  @typeof VAComparisonModel

  		* @returns {Object} - Return Appsee understandable JSON Query
  			 'success' {Boolean} - INFO: Success status of the Query transformation: True - Successfull, False - Unsuccessfull
  			 'query' {Array} - INFO: Response of the transformed query. {null} is success = false.
  			 'error' {String} - INFO: Unsuccessfull error code. {null} is success = true.

  			1. Input @vAFunnelBuilderRows
  				[
  					{
  						"StepNumber": 1,
  						"VAComparisonModel": [
  							{
  								"field": "Conversation Start (Any)",
  								"conditionValue": null,
  								"children": []
  							}
  						]
  					},
  					{
  						"StepNumber": 2,
  						"VAComparisonModel": [
  							{
  								"field": "Event Trigger",
  								"conditionValue": "AI Search",
  								"children": [
  									{
  										"field": "Last Node Visited",
  										"conditionValue": "2",
  										"children": []
  									},
  									{
  										"field": "End State",
  										"conditionValue": "1",
  										"children": []
  									}
  								]
  							},
  							{
  								"field": "Event Trigger",
  								"conditionValue": "_auto_resolution_",
  								"children": []
  							}
  						]
  					}
  				]  
  			Output: {"success":true,"query":[{"StepNumber":1,"Alternatives":[{"StepType":3,"ExtraValues":{}}]},{"StepNumber":2,"Alternatives":[{"StepType":1,"ExtraValues":{"Last Node Visited":"2","End State":"1"},"Value":"AI Search"},{"StepType":1,"ExtraValues":{},"Value":"_auto_resolution_"}]}],"error":null}


  			2. Input @vAFunnelBuilderRows
  				[
  					{
  						"StepNumber": 1,
  						"VAComparisonModel": [
  							{
  								"field": "Conversation Start (1st)",
  								"conditionValue": null,
  								"children": []
  							}
  						]
  					},
  					{
  						"StepNumber": 2,
  						"VAComparisonModel": [
  							{
  								"field": "Topic Node Visit",
  								"conditionValue": "eefd285053130010cf8cddeeff7b12b9",
  								"children": []
  							}
  						]
  					},
  					{
  						"StepNumber": 3,
  						"VAComparisonModel": [
  							{
  								"field": "Conversation Start (Any)",
  								"conditionValue": null,
  								"children": []
  							}
  						]
  					},
  					{
  						"StepNumber": 4,
  						"VAComparisonModel": [
  							{
  								"field": "Topic Node Visit",
  								"conditionValue": "b19775fa536310103296ddeeff7b12ff",
  								"children": []
  							},
  							{
  								"field": "Event Trigger",
  								"conditionValue": "Confirm Appointment",
  								"children": [
  									{
  										"field": "Channel Name",
  										"conditionValue": "Slack",
  										"children": []
  									}
  								]
  							}
  						]
  					}
  				]

  			Output: {"success":true,"query":[{"StepNumber":1,"Alternatives":[{"StepType":4,"ExtraValues":{}}]},{"StepNumber":2,"Alternatives":[{"StepType":0,"ExtraValues":{},"Value":"eefd285053130010cf8cddeeff7b12b9"}]},{"StepNumber":3,"Alternatives":[{"StepType":3,"ExtraValues":{}}]},{"StepNumber":4,"Alternatives":[{"StepType":0,"ExtraValues":{},"Value":"b19775fa536310103296ddeeff7b12ff"},{"StepType":1,"ExtraValues":{"Channel Name":"Slack"},"Value":"Confirm Appointment"}]}],"error":null}
  **/
  convertToAppseeFunnel: function(vAFunnelBuilderRows) {
      var steps = [];
      try {
          steps = this.vAConditionBuilderHelper.transformConditionBuilder(vAFunnelBuilderRows, this.tables.va_funnels);
          if (steps)
              return this.vAConditionBuilderHelper.success(steps);
          else
              return this.vAConditionBuilderHelper.fail("invalid_steps");
      } catch (e) {
          return this.vAConditionBuilderHelper.fail("invalid_steps");
      }
  },
  convertToAppseeUsers: function(vAComparisonBuilderRows) {
      var query = {};
      try {
          query = this.vAConditionBuilderHelper.transformConditionBuilder(vAComparisonBuilderRows, this.tables.va_users);
          if (query)
              return this.vAConditionBuilderHelper.success(query);
          else
              return this.vAConditionBuilderHelper.fail("invalid_query");

      } catch (e) {
          return this.vAConditionBuilderHelper.fail("invalid_query");
      }
  },
  type: 'VAConditionBuilderUtil'
};

Sys ID

789c7a801bfa20904129415bbc4bcb4b

Offical Documentation

Official Docs: