Resolve Portrait Interaction Optimizer - strange behavior for suggestions in Contact Center

Product Feature: Portrait Interaction Optimizer Decision Engine
Operating System: Windows
Database: SQL Server


In some instances it may be seen that Portrait Interaction Optimizer is returning strange results that do not correspond to the rules laid down by the various selection criteria configured in the Portrait HQ Product.  To see how the decision engine is interpreting the request at runtime it is possible to make use of Portrait Interaction Optimizer's in-built Rule Auditing feature.  This feature makes it possible to request diagnostic information in the form of a rule audit to be returned along with the actions when the GetActions IO web service operation is called. Diagnostics are requested in one of two ways:

  • As part of the IO – WS Get Actions web service request input to the operation. This requests diagnostics for a single call.
  • By setting a 'DIAGNOSTICS' value in the io_application_params table. This requests diagnostics for all calls.

Note: This will severely impact performance and should not be used in a production environment.

Valid values for the diagnostics request are shown below, they may be combined using a comma separator.
(FULL must be used in conjunction with at least one other value, for example, UNMATCHED,FULL)

  • MATCHED return diagnostics for returned actions
  • UNMATCHED return diagnostics for actions that were filtered out by rules
  • FULL include rule execution detail including substituted values

If a careful review of the rule auditing diagnostics establishes that the rules are not behaving as expected, then the next logical step is to assume that a corruption of the data pertaining to rules in the Foundation database has led to the creation of a rogue global rule.  A rogue global rule will, as the name suggests, be applied globally rather than under specific circumstances and can lead to unexpected outcomes in the suggestions returned by the Portrait Interaction Optimizer product.

A global rule can be seen in the Foundation database as any rule specified in the amc_dec_decisions table that does not have a corresponding row in the amc_dec_decision_rule_key table.

It is therefore possible to discern which rules should be global and which ones have come about by means of data corruption by using the following SQL.

SELECT b.decision_id,b.system_name
FROM amc_dec_decision_rule a, amc_dec_decision b
WHERE a.decision_rule_id NOT IN
 SELECT decision_rule_id FROM amc_dec_decision_rule_key
b.decision_id = a.decision_id

If any rogue global rules are found using this method, then the offending entry can be deleted from the foundation database.  To refresh the Foundation database with the rules relating to the relevant HQ selection criteria it is only necessary to make a small cosmetic change to the selection in question before saving, (such as a change to a parameter value) and this will have the effect of reinstating the rule in the Foundation runtime database.  

UPDATED:  April 20, 2017