diff --git a/redfish-core/lib/trigger.hpp b/redfish-core/lib/trigger.hpp
index 75e8287..0cad4ae 100644
--- a/redfish-core/lib/trigger.hpp
+++ b/redfish-core/lib/trigger.hpp
@@ -886,39 +886,50 @@
         json["Links"]["MetricReportDefinitions"] = *linkedReports;
     }
 
-    if (discreteThresholds != nullptr)
+    if (discreteThresholds == nullptr || numericThresholds == nullptr)
     {
-        std::optional<nlohmann::json::array_t> discreteTriggers =
-            getDiscreteTriggers(*discreteThresholds);
-
-        if (!discreteTriggers)
-        {
-            BMCWEB_LOG_ERROR("Property Thresholds is invalid for discrete "
-                             "triggers in Trigger: {}",
-                             id);
-            return false;
-        }
-
-        json["DiscreteTriggers"] = *discreteTriggers;
-        json["DiscreteTriggerCondition"] =
-            discreteTriggers->empty() ? "Changed" : "Specified";
-        json["MetricType"] = metric_definition::MetricType::Discrete;
+        // Current design of telemetry's Trigger interface shouldn't allow that
+        // to happen. If the code goes here, then this is an internal error to
+        // investigate.
+        return false;
     }
-    if (numericThresholds != nullptr)
+
+    if (discrete != nullptr)
     {
-        std::optional<nlohmann::json::object_t> jnumericThresholds =
-            getNumericThresholds(*numericThresholds);
-
-        if (!jnumericThresholds)
+        if (*discrete)
         {
-            BMCWEB_LOG_ERROR("Property Thresholds is invalid for numeric "
-                             "thresholds in Trigger: {}",
-                             id);
-            return false;
-        }
+            std::optional<nlohmann::json::array_t> discreteTriggers =
+                getDiscreteTriggers(*discreteThresholds);
 
-        json["NumericThresholds"] = *jnumericThresholds;
-        json["MetricType"] = metric_definition::MetricType::Numeric;
+            if (!discreteTriggers)
+            {
+                BMCWEB_LOG_ERROR("Property Thresholds is invalid for discrete "
+                                 "triggers in Trigger: {}",
+                                 id);
+                return false;
+            }
+
+            json["DiscreteTriggers"] = *discreteTriggers;
+            json["DiscreteTriggerCondition"] =
+                discreteTriggers->empty() ? "Changed" : "Specified";
+            json["MetricType"] = metric_definition::MetricType::Discrete;
+        }
+        else
+        {
+            std::optional<nlohmann::json::object_t> jnumericThresholds =
+                getNumericThresholds(*numericThresholds);
+
+            if (!jnumericThresholds)
+            {
+                BMCWEB_LOG_ERROR("Property Thresholds is invalid for numeric "
+                                 "thresholds in Trigger: {}",
+                                 id);
+                return false;
+            }
+
+            json["NumericThresholds"] = *jnumericThresholds;
+            json["MetricType"] = metric_definition::MetricType::Numeric;
+        }
     }
 
     if (name != nullptr)
