Scripts/Runtime/CallbackHandlers/SimpleIntentHandler.cs (69 lines of code) (raw):

/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the license found in the * LICENSE file in the root directory of this source tree. */ using Facebook.WitAi.Lib; using UnityEngine; using UnityEngine.Events; namespace Facebook.WitAi.CallbackHandlers { [AddComponentMenu("Wit.ai/Response Matchers/Simple Intent Handler")] public class SimpleIntentHandler : WitResponseHandler { [SerializeField] public string intent; [Range(0, 1f)] [SerializeField] public float confidence = .9f; [SerializeField] private UnityEvent onIntentTriggered = new UnityEvent(); [Tooltip("Confidence ranges are executed in order. If checked, all confidence values will be checked instead of stopping on the first one that matches.")] [SerializeField] public bool allowConfidenceOverlap; [SerializeField] public ConfidenceRange[] confidenceRanges; public UnityEvent OnIntentTriggered => onIntentTriggered; protected override void OnHandleResponse(WitResponseNode response) { if (null == response) return; bool matched = false; foreach (var intentNode in response?["intents"]?.Childs) { var resultConfidence = intentNode["confidence"].AsFloat; if (intent == intentNode["name"].Value) { matched = true; if (resultConfidence >= confidence) { onIntentTriggered.Invoke(); } CheckInsideRange(resultConfidence); CheckOutsideRange(resultConfidence); } } if(!matched) { CheckInsideRange(0); CheckOutsideRange(0); } } private void CheckOutsideRange(float resultConfidence) { for (int i = 0; null != confidenceRanges && i < confidenceRanges.Length; i++) { var range = confidenceRanges[i]; if (resultConfidence < range.minConfidence || resultConfidence > range.maxConfidence) { range.onOutsideConfidenceRange?.Invoke(); if (!allowConfidenceOverlap) break; } } } private void CheckInsideRange(float resultConfidence) { for (int i = 0; null != confidenceRanges && i < confidenceRanges.Length; i++) { var range = confidenceRanges[i]; if (resultConfidence >= range.minConfidence && resultConfidence <= range.maxConfidence) { range.onWithinConfidenceRange?.Invoke(); if (!allowConfidenceOverlap) break; } } } } }