Avaya Business Rules Engine Integration Guide

Release 3.6 Issue 2 February 2021

© 2021 Avaya Inc. Details?detailId=C20091120112456651010 under the link “Warranty & Product Lifecycle” or All Rights Reserved. such successor site as designated by Avaya. Notice Please note that if You acquired the product(s) from an authorized Avaya Channel Partner While reasonable efforts have been made to outside of the United States and Canada, the ensure that the information in this document is warranty is provided to You by said Avaya complete and accurate at the time of printing, Channel Partner and not by Avaya. Avaya assumes no liability for any errors. Avaya reserves the right to make changes and “Hosted Service” means an Avaya hosted corrections to the information in this document service subscription that You acquire from either without the obligation to notify any person or Avaya or an authorized Avaya Channel Partner organization of such changes. (as applicable) and which is described further in Hosted SAS or other service description Documentation disclaimer documentation regarding the applicable hosted “Documentation” means information published in service. If You purchase a Hosted Service varying mediums which may include product subscription, the foregoing limited warranty may information, operating instructions and not apply but You may be entitled to support performance specifications that are generally services in connection with the Hosted Service as made available to users of products. described further in your service description Documentation does not include marketing documents for the applicable Hosted Service. materials. Avaya shall not be responsible for any Contact Avaya or Avaya Channel Partner (as modifications, additions, or deletions to the applicable) for more information. original published version of Documentation Hosted Service unless such modifications, additions, or deletions were performed by or on the express behalf of THE FOLLOWING APPLIES ONLY IF YOU Avaya. End User agrees to indemnify and hold PURCHASE AN AVAYA HOSTED SERVICE harmless Avaya, Avaya's agents, servants and SUBSCRIPTION FROM AVAYA OR AN AVAYA employees against all claims, lawsuits, demands CHANNEL PARTNER (AS APPLICABLE), THE and judgments arising out of, or in connection TERMS OF USE FOR HOSTED SERVICES ARE with, subsequent modifications, additions or AVAILABLE ON THE AVAYA WEBSITE, deletions to this documentation, to the extent HTTP://SUPPORT.AVAYA.COM/LICENSEINFO made by End User. UNDER THE LINK “Avaya Terms of Use for Hosted Services” OR SUCH SUCCESSOR SITE Link disclaimer AS DESIGNATED BY AVAYA, AND ARE Avaya is not responsible for the contents or APPLICABLE TO ANYONE WHO ACCESSES reliability of any linked websites referenced within OR USES THE HOSTED SERVICE. BY this site or Documentation provided by Avaya. ACCESSING OR USING THE HOSTED Avaya is not responsible for the accuracy of any SERVICE, OR AUTHORIZING OTHERS TO DO information, statement or content provided on SO, YOU, ON BEHALF OF YOURSELF AND these sites and does not necessarily endorse the THE ENTITY FOR WHOM YOU ARE DOING SO products, services, or information described or (HEREINAFTER REFERRED TO offered within them. Avaya does not guarantee INTERCHANGEABLY AS “YOU” AND “END that these links will work all the time and has no USER”), AGREE TO THE TERMS OF USE. IF control over the availability of the linked pages. YOU ARE ACCEPTING THE TERMS OF USE ON BEHALF A COMPANY OR OTHER LEGAL Warranty ENTITY, YOU REPRESENT THAT YOU HAVE Avaya provides a limited warranty on Avaya THE AUTHORITY TO BIND SUCH ENTITY TO hardware and . Refer to your sales THESE TERMS OF USE. IF YOU DO NOT agreement to establish the terms of the limited HAVE SUCH AUTHORITY, OR IF YOU DO NOT warranty. In addition, Avaya’s standard warranty WISH TO ACCEPT THESE TERMS OF USE, language, as well as information regarding YOU MUST NOT ACCESS OR USE THE support for this product while under warranty is HOSTED SERVICE OR AUTHORIZE ANYONE available to Avaya customers and other parties TO ACCESS OR USE THE HOSTED SERVICE. through the Avaya Support website: Licenses THE SOFTWARE LICENSE TERMS http://support.avaya.com/helpcenter/getGeneric AVAILABLE ON THE AVAYA WEBSITE,

February 2021 Avaya Business Rules Engine Integration Guide 2

HTTP://SUPPORT.AVAYA.COM/LICENSEINFO multiple users. “Instance” means a single copy of , UNDER THE LINK “AVAYA SOFTWARE the Software executing at a particular time: (i) on LICENSE TERMS (Avaya Products)” OR SUCH one physical machine; or (ii) on one deployed SUCCESSOR SITE AS DESIGNATED BY software virtual machine (“VM”) or similar AVAYA, ARE APPLICABLE TO ANYONE WHO deployment. DOWNLOADS, USES AND/OR INSTALLS License type(s) AVAYA SOFTWARE, PURCHASED FROM AVAYA INC., ANY AVAYA AFFILIATE, OR AN AVAYA CHANNEL PARTNER (AS Designated System(s) License (DS). End User APPLICABLE) UNDER A COMMERCIAL may install and use each copy or an Instance of AGREEMENT WITH AVAYA OR AN AVAYA the Software only: 1) on a number of Designated CHANNEL PARTNER. UNLESS OTHERWISE Processors up to the number indicated in the AGREED TO BY AVAYA IN WRITING, AVAYA order; or 2) up to the number of Instances of the DOES NOT EXTEND THIS LICENSE IF THE Software as indicated in the order, SOFTWARE WAS OBTAINED FROM ANYONE Documentation, or as authorized by Avaya in OTHER THAN AVAYA, AN AVAYA AFFILIATE writing. Avaya may require the Designated OR AN AVAYA CHANNEL PARTNER; AVAYA RESERVES THE RIGHT TO TAKE LEGAL Processor(s) to be identified in the order by type, ACTION AGAINST YOU AND ANYONE ELSE serial number, feature key, Instance, location or USING OR SELLING THE SOFTWARE other specific designation, or to be provided by WITHOUT A LICENSE. BY INSTALLING, End User to Avaya through electronic means DOWNLOADING OR USING THE SOFTWARE, established by Avaya specifically for this OR AUTHORIZING OTHERS TO DO SO, YOU, purpose. ON BEHALF OF YOURSELF AND THE ENTITY FOR WHOM YOU ARE INSTALLING, Cluster License (CL). End User may install and DOWNLOADING OR USING THE SOFTWARE use each copy or an Instance of the Software (HEREINAFTER REFERRED TO INTERCHANGEABLY AS “YOU” AND “END only up to the number of Clusters as indicated USER”), AGREE TO THESE TERMS AND on the order with a default of one (1) Cluster if CONDITIONS AND CREATE A BINDING not stated. “Cluster” means a group of Servers CONTRACT BETWEEN YOU AND AVAYA INC. and other resources that act as a single system. OR THE APPLICABLE AVAYA AFFILIATE (“AVAYA”). Shrinkwrap License (SR). You may install and Avaya grants You a license within the scope of use the Software in accordance with the terms the license types described below, with the and conditions of the applicable license exception of Heritage Nortel Software, for which agreements, such as “shrinkwrap” or the scope of the license is detailed below. Where “clickthrough” license accompanying or the order documentation does not expressly applicable to the Software (“Shrinkwrap identify a license type, the applicable license will License”). be a Designated System License as set forth below in Section M(i)1 or 2 as applicable. The Transaction License (TR). End User may use applicable number of licenses and units of capacity for which the license is granted will be the Software up to the number of Transactions one (1), unless a different number of licenses or as specified during a specified time period. A units of capacity is specified in the documentation “Transaction” means the unit by which Avaya, at or other materials available to You. “Software” its sole discretion, bases the pricing of its means computer programs in object code, licensing and can be, without limitation, provided by Avaya or an Avaya Channel Partner, measured by the usage, access, interaction whether as stand-alone products, pre-installed on (between client/server or hardware products, and any upgrades, updates, customer/organization), or operation of the patches, bug fixes, or modified versions thereto. “Designated Processor” means a single stand- Software within a specified time period (e.g. per alone computing device. “Server” means a set of hour, per day, per month). Some examples of Designated Processors that hosts (physically or Transactions include but are not limited to each virtually) a software application to be accessed by greeting played/message waiting enabled, each

February 2021 Avaya Business Rules Engine Integration Guide 3

personalized promotion (in any channel), each otherwise stated, each Instance of a product must callback operation, each live agent or web chat be separately licensed and ordered. For example, session, each call routed or redirected (in any if the end user customer or Avaya Channel Partner would like to install two Instances of the channel). End User may not exceed the number same type of products, then two products of that of Transactions without Avaya’s prior consent type must be ordered. and payment of an additional fee. Third Party Components Heritage Nortel Software “Third Party Components” mean certain “Heritage Nortel Software” means the software software programs or portions thereof included in that was acquired by Avaya as part of its the Software or Hosted Service may contain purchase of the Nortel Enterprise Solutions software (including open source software) Business in December 2009. The Heritage Nortel distributed under third party agreements (“Third Software is the software contained within the list Party Components”), which contain terms of Heritage Nortel Products located at regarding the rights to use certain portions of the http://support.avaya.com/LicenseInfo/ under the Software (“Third Party Terms”). As required, link “Heritage Nortel Products,” or such successor information regarding distributed Linux OS site as designated by Avaya. For Heritage Nortel source code (for those products that have Software, Avaya grants Customer a license to distributed Linux OS source code) and identifying use Heritage Nortel Software provided hereunder the copyright holders of the Third Party solely to the extent of the authorized activation or Components and the Third Party Terms that authorized usage level, solely for the purpose apply is available in the products, Documentation specified in the Documentation, and solely as or on Avaya’s website at: embedded in, for execution on, or for http://support.avaya.com/Copyright or such communication with Avaya equipment. Charges successor site as designated by Avaya. The for Heritage Nortel Software may be based on open source software license terms provided as extent of activation or use authorized as specified Third Party Terms are consistent with the license in an order or invoice. rights granted in these Software License Terms, and may contain additional rights benefiting You, Copyright such as modification and distribution of the open source software. The Third Party Terms shall Except where expressly stated otherwise, no use take precedence over these Software License should be made of materials on this site, the Terms, solely with respect to the applicable Third Documentation, Software, Hosted Service, or Party Components, to the extent that these hardware provided by Avaya. All content on this Software License Terms impose greater site, the documentation, Hosted Service, and the restrictions on You than the applicable Third product provided by Avaya including the Party Terms. selection, arrangement and design of the content is owned either by Avaya or its licensors and is The following applies only if the H.264 (AVC) protected by copyright and other intellectual codec is distributed with the product. THIS property laws including the sui generis rights PRODUCT IS LICENSED UNDER THE AVC relating to the protection of databases. You may PATENT PORTFOLIO LICENSE FOR THE not modify, copy, reproduce, republish, upload, PERSONAL USE OF A CONSUMER OR post, transmit or distribute in any way any OTHER USES IN WHICH IT DOES NOT content, in whole or in part, including any code RECEIVE REMUNERATION TO (i) ENCODE and software unless expressly authorized by VIDEO IN COMPLIANCE WITH THE AVC Avaya. Unauthorized reproduction, transmission, STANDARD ("AVC VIDEO") AND/OR (ii) dissemination, storage, and or use without the DECODE AVC VIDEO THAT WAS ENCODED express written consent of Avaya can be a BY A CONSUMER ENGAGED IN A PERSONAL criminal, as well as a civil offense under the ACTIVITY AND/OR WAS OBTAINED FROM A applicable law. VIDEO PROVIDER LICENSED TO PROVIDE AVC VIDEO. NO LICENSE IS GRANTED OR Virtualization SHALL BE IMPLIED FOR ANY OTHER USE. The following applies if the product is deployed ADDITIONAL INFORMATION MAY BE on a virtual machine. Each product has its own OBTAINED FROM MPEG LA, L.L.C. SEE ordering code and license types. Unless HTTP://WWW.MPEGLA.COM

February 2021 Avaya Business Rules Engine Integration Guide 4

Service Provider country or territory where the Avaya product is used. THE FOLLOWING APPLIES TO AVAYA CHANNEL PARTNER’S HOSTING OF AVAYA Preventing Toll Fraud PRODUCTS OR SERVICES. THE PRODUCT “Toll Fraud” is the unauthorized use of your OR HOSTED SERVICE MAY USE THIRD telecommunications system by an unauthorized PARTY COMPONENTS SUBJECT TO THIRD party (for example, a person who is not a PARTY TERMS AND REQUIRE A SERVICE corporate employee, agent, subcontractor, or is PROVIDER TO BE INDEPENDENTLY not working on your company's behalf). Be aware LICENSED DIRECTLY FROM THE THIRD that there can be a risk of Toll Fraud associated PARTY SUPPLIER. AN AVAYA CHANNEL with your system and that, if Toll Fraud occurs, it PARTNER’S HOSTING OF AVAYA PRODUCTS can result in substantial additional charges for MUST BE AUTHORIZED IN WRITING BY your telecommunications services. AVAYA AND IF THOSE HOSTED PRODUCTS USE OR EMBED CERTAIN THIRD PARTY Avaya Toll Fraud intervention SOFTWARE, INCLUDING BUT NOT LIMITED TO SOFTWARE OR CODECS, If You suspect that You are being victimized by Toll Fraud and You need technical assistance or THE AVAYA CHANNEL PARTNER IS support, call Technical Service Center Toll Fraud REQUIRED TO INDEPENDENTLY OBTAIN Intervention Hotline at +1-800-643-2353 for the ANY APPLICABLE LICENSE AGREEMENTS, United States and Canada. For additional support AT THE AVAYA CHANNEL PARTNER’S EXPENSE, DIRECTLY FROM THE telephone numbers, see the Avaya Support APPLICABLE THIRD PARTY SUPPLIER. website: http://support.avaya.com, or such successor site as designated by Avaya. WITH RESPECT TO CODECS, IF THE AVAYA Security Vulnerabilities CHANNEL PARTNER IS HOSTING ANY PRODUCTS THAT USE OR EMBED THE H.264 Information about Avaya’s security support CODEC OR H.265 CODEC, THE AVAYA policies can be found in the Security Policies and CHANNEL PARTNER ACKNOWLEDGES AND Support section of AGREES THE AVAYA CHANNEL PARTNER IS https://support.avaya.com/security RESPONSIBLE FOR ANY AND ALL RELATED FEES AND/OR ROYALTIES. THE H.264 (AVC) Suspected Avaya product security vulnerabilities CODEC IS LICENSED UNDER THE AVC are handled per the Avaya Product Security PATENT PORTFOLIO LICENSE FOR THE Support Flow PERSONAL USE OF A CONSUMER OR (https://support.avaya.com/css/P8/documents/1 OTHER USES IN WHICH IT DOES NOT 00161515). RECEIVE REMUNERATION TO: (I) ENCODE Downloading Documentation VIDEO IN COMPLIANCE WITH THE AVC STANDARD ("AVC VIDEO") AND/OR (II) For the most current versions of Documentation, DECODE AVC VIDEO THAT WAS ENCODED see the Avaya Support website: BY A CONSUMER ENGAGED IN A PERSONAL http://support.avaya.com, or such successor site ACTIVITY AND/OR WAS OBTAINED FROM A as designated by Avaya. VIDEO PROVIDER LICENSED TO PROVIDE Contact Avaya Support AVC VIDEO. NO LICENSE IS GRANTED OR SHALL BE IMPLIED FOR ANY OTHER USE. See the Avaya Support website: ADDITIONAL INFORMATION FOR H.264 (AVC) http://support.avaya.com for product or Hosted AND H.265 (HEVC) CODECS MAY BE Service notices and articles, or to report a OBTAINED FROM MPEG LA, L.L.C. SEE problem with your Avaya product or Hosted HTTP://WWW.MPEGLA.COM. Service. For a list of support telephone numbers and contact addresses, go to the Avaya Support Compliance with Laws website: http://support.avaya.com (or such You acknowledge and agree that it is Your successor site as designated by Avaya), scroll to responsibility for complying with any applicable the bottom of the page, and select Contact Avaya laws and regulations, including, but not limited to Support. laws and regulations related to call recording, Trademarks data privacy, intellectual property, trade secret, fraud, and music performance rights, in the

February 2021 Avaya Business Rules Engine Integration Guide 5

The trademarks, logos and service marks (“Marks”) displayed in this site, the Documentation, Hosted Service(s), and product(s) provided by Avaya are the registered or unregistered Marks of Avaya, its affiliates, its licensors, its suppliers, or other third parties. Users are not permitted to use such Marks without prior written consent from Avaya or such third party which may own the Mark. Nothing contained in this site, the Documentation, Hosted Service(s) and product(s) should be construed as granting, by implication, estoppel, or otherwise, any license or right in and to the Marks without the express written permission of Avaya or the applicable third party. Avaya is a registered trademark of Avaya Inc. All non-Avaya trademarks are the property of their respective owners.

Linux® is the registered trademark of Linus Torvalds in the U.S. and other countries.

February 2021 Avaya Business Rules Engine Integration Guide 6

Contents

Chapter 1: AVAYA SOFTWARE DEVELOPMENT KIT LICENSE AGREEMENT ...... 12

Chapter 2: AACC Connector Setup and Troubleshooting ...... 26 AACC Connector and Related Components ...... 26 AACC Configuration ...... 26 AACC Connector Configuration ...... 26 Prerequisites ...... 26 Overview ...... 27 Configuring metrics_connector_communication.properties ...... 27 Configuring snmp.properties ...... 29 Adding new ACDs and Agent Groups via Web Admin ...... 30 ABRE System Properties - summarizer.preferred-metrics ...... 30 AACC Real-time Skillset Statistics ...... 30 AACC Connector Troubleshooting ...... 36 Overview ...... 36 Checking Configurations ...... 36 Diagnosing Issues with the Overall Solution ...... 36 Diagnosing Issues on the ABRE ...... 37 Diagnosing Issues on the AACC Connector ...... 38 Diagnosing Issues on the AACC ...... 41

Chapter 3: Admin API - REST Interface ...... 43 Overview ...... 43 Avaya Business Rules Engine 3.6 Admin API version ...... 43 Entities which were Supported in v3 (Avaya Dynamic Routing 3.1) ...... 43 Entities which were Supported in v4 (Avaya Dynamic Routing 3.2) ...... 44 Entities and Features which were Supported in v5 (Avaya Dynamic Routing 3.3) ...... 50 What's New in Avaya Business Rules Engine 3.6 ...... 51 Limits of POST, PUT, DELETE Commands ...... 51 Authentication and Authorization Mechanism ...... 52 Working with Different Tenants ...... 53 Operations Supported ...... 55 Retrieve Operations (GET) ...... 56 Insert Operations (POST) ...... 57 Update Operations (PUT) ...... 57 Delete Operations (DELETE) ...... 57 Error Codes ...... 58 List of Avaya Business Rules Engine Error Codes ...... 58 Prerequisites for Segmentation Tables ...... 59

February 2021 Avaya Business Rules Engine Integration Guide 7

Prerequisites for Strategy Settings ...... 59 Prerequisites for Lookup Tables ...... 60 Prerequisites for Applications...... 60 Prerequisites for Locations...... 60 Prerequisites for Company...... 60 Prerequisites for ACD ...... 61 Requests and Responses: structural considerations ...... 61 Transactions ...... 65 Post Operation: Writing IDs to the Response body ...... 65

Chapter 4: Alarms Setup and Description ...... 68 Configuring each Avaya Business Rules Engine node to point to an SNMP server ...... 68 Configuring each Avaya Business Rules Engine node to point to System Manager ...... 69 Configuring CMS/AACC Connector to point to an SNMP server ...... 70 Configuring CMS/AACC Connector to point to System Manager ...... 71 Configuring Alarms on System Manager (SMGR) ...... 72 MIB file ...... 73 Upgrade...... 74 Avaya Business Rules Engine SNMP Threshold Configuration ...... 74 Triggering a Test Alarm for Avaya Business Rules Engine ...... 75 Triggering a Test Alarm for CMS Connector ...... 76 Triggering a Test Alarm for AACC Connector ...... 77 Avaya Business Rules Engine 3.6 Alarm Descriptions ...... 77

Chapter 5: CMS Connector Setup and Troubleshooting ...... 84 CMS Connector and Related Components ...... 84 CMS Configuration ...... 84 CMS Connector Configuration ...... 86 metrics_connector_communication.properties ...... 86 cmsConfiguration.xml ...... 87 cmsReportConfiguration.xml ...... 88 snmp.properties ...... 90 Adding new ACDs and Agent Groups via Web Admin ...... 91 CMS Metrics ...... 92 Appendix A - Modify RTA Configuration ...... 94 CMSC Troubleshooting ...... 95 Overview ...... 95

February 2021 Avaya Business Rules Engine Integration Guide 8

Diagnosing Issues with the Overall Solution ...... 96 Diagnosing Issues on the CM ...... 97 Diagnosing Issues on the CMS ...... 100

Chapter 6: Decision REST Interface ...... 111 Description ...... 111 Characteristics of the REST Decision Request ...... 111 URI Examples ...... 112 Working with Different Tenants ...... 112 Example Code Using Apache HTTP Client ...... 114

Chapter 7: ICR Core Integration ...... 119 Terminology ...... 119 Introduction...... 120 Overall Architecture ...... 120 Managing ICR Skills in AAEPM ...... 121 ICR Core Integration - 1. Installing and Configuring the Extension ...... 122 Extension Operation ...... 122 Sending Segmentation Attributes to the Extension ...... 124 Sending Custom Parameters to the Extension ...... 125 Avaya Business Rules Engine Response Handling ...... 125 Installing the Extension ...... 126 Defining the Preferred ICR Core ...... 128 Overall Flow ...... 129 ICR Core Integration - 2. Creating an SSA to Invoke the Extension ...... 130 Preparing the Orchestration Designer (OD)...... 130 Enabling the ICR Connector ...... 130 Enabling the Use of CAV in OD Applications ...... 131 Example SSA Details ...... 132 ICR Core Integration - 3. Avaya Business Rules Engine Configuration ...... 143 Avaya Business Rules Engine Request Composed by the Extension ...... 143 Example ICR-Avaya Business Rules Engine Decision Function ...... 144 Remaining Configuration...... 150 ICR Core Integration: Log Analysis ...... 154 Avaya Business Rules Engine log ...... 154 ICR Core ...... 160 CXI ...... 172 SSA log ...... 208

Chapter 8: Out-Of-Box Strategy Scripts ...... 221 Experience Selection ...... 221 Application Selection ...... 222

February 2021 Avaya Business Rules Engine Integration Guide 9

Percent Allocation - Based on Daily Traffic ...... 223 Percent Allocation - Based on Current Traffic ...... 225 Best EWT - Configurable Default Route ...... 226 Best EWT - Main Agent Group using EWT, Alternate Agent Group using Agent Availability ...... 228 Best EWT - Two Destination Layers ...... 230 Best EWT - Service ...... 232 Best EWT - Callback Assist when EWT greater than a threshold ...... 234 Percent Allocation and Best EWT ...... 236 Percent Allocation and Best EWT with Two Destination Layers...... 238 Best INQUEUE based on Location ...... 240 Appendix A - RAVA algorithm ...... 241

Chapter 9: RDR Reference ...... 242 About RDRs ...... 242 RDRs Location ...... 242 Avaya Business Rules Engine Internal Database (Internal DB) ...... 242 Customer Provided External Database (External DB) ...... 242 RDR Space Provisioning ...... 243 Database Space Estimation ...... 243 Data Purge ...... 243 RDR DB Persistence Error Handler Configuration ...... 243 RDR Content ...... 243 Diagnostic Information Available in an RDR ...... 245 ROUTING_DECISION Columns ...... 247 DESTINATION_EXT_RESPONSE Columns...... 251 External Access to the Internal PostgreSQL RDR DB ...... 252 Exploring RDR DB with PostgreSQL Administration Tool ...... 253 Sample RDR Queries ...... 254 Retrieve all RDRs After a Specific Date and Time ...... 254 Retrieve all RDRs Using Current Date ...... 254 Retrieve Number of Decisions to Each Destination ...... 254 Configuring Script and Execution ...... 255 Single Data Center Topologies ...... 255 Dual Data Center Topologies ...... 256 Configuring RDRs to External Database ...... 259 Table Creation Commands ...... 260 Table Upgrade Commands ...... 262 Configuration for External MySQL RDR DB ...... 263 node.properties Configuration ...... 263 Tables Creation Commands ...... 263 Tables Upgrade Commands ...... 265

February 2021 Avaya Business Rules Engine Integration Guide 10

Configuration for External Oracle RDR DB ...... 266 node.properties Configuration ...... 266 Tables Creation Commands ...... 266 Tables Upgrade Commands ...... 269 Configuration for External Microsoft SQL Server RDR DB ...... 270 node.properties Configuration ...... 270 Tables Creation Commands ...... 271 Tables Upgrade Commands ...... 272 RDR DB Troubleshooting ...... 274 RDR DB Connection Troubleshooting ...... 274 RDR DB Logs ...... 279

February 2021 Avaya Business Rules Engine Integration Guide 11

Chapter 1: AVAYA SOFTWARE DEVELOPMENT KIT LICENSE AGREEMENT

REVISED: October 14, 2020 READ THIS CAREFULLY BEFORE ELECTRONICALLY ACCESSING OR USING THIS PROPRIETARY PRODUCT! THIS IS A LEGAL AGREEMENT (“AGREEMENT”) BETWEEN YOU, INDIVIDUALLY, AND/OR THE LEGAL ENTITY FOR WHOM YOU ARE OPENING, INSTALLING, DOWNLOADING, COPYING OR OTHERWISE USING THE AVAYA SOFTWARE DEVELOPMENT KIT (“SDK”) (COLLECTIVELY, AS REFERENCED HEREIN, “YOU”, “YOUR”, OR “LICENSEE”) AND AVAYA INC. OR ANY AVAYA AFFILIATE (COLLECTIVELY, “AVAYA”). IF YOU ARE ACCEPTING THE TERMS AND CONDITIONS OF THIS AGREEMENT ON BEHALF OF A LEGAL ENTITY, YOU REPRESENT AND WARRANT THAT YOU HAVE FULL LEGAL AUTHORITY TO ACCEPT ON BEHALF OF AND BIND SUCH LEGAL ENTITY TO THIS AGREEMENT. BY OPENING THE MEDIA CONTAINER, BY INSTALLING, DOWNLOADING, COPYING OR OTHERWISE USING THE AVAYA SOFTWARE DEVELOPMENT KIT (“SDK”) OR AUTHORIZING OTHERS TO DO SO, YOU SIGNIFY THAT YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS AGREEMENT. IF YOU DO NOT HAVE SUCH AUTHORITY OR DO NOT WISH TO BE BOUND BY THE TERMS OF THIS AGREEMENT, SELECT THE "DECLINE" BUTTON AT THE END OF THE TERMS OF THIS AGREEMENT OR THE EQUIVALENT OPTION AND YOU SHALL HAVE NO RIGHT TO USE THE SDK.

1.0 DEFINITIONS. 1.1 “Affiliates” means any entity that is directly or indirectly controlling, controlled by, or under common control with Avaya Inc. For purposes of this definition, “control” means the power to direct the management and policies of such party, directly or indirectly, whether through ownership of voting securities, by contract or otherwise; and the terms “controlling” and “controlled” have meanings correlative to the foregoing. 1.2 “Avaya Software Development Kit” or “SDK” means Avaya technology, which may include Software, Client Libraries, Specification Documents, Software libraries, application programming interfaces (“API”), Software tools, Sample Application Code and Documentation. 1.3 “Client Libraries” mean any enabler code specifically designated as such and included in a SDK. Client Libraries may also be referred to as “DLLs”, and represent elements of the SDK required at runtime to communicate with Avaya products or other SDK elements. 1.4 “Change In Control” shall be deemed to have occurred if any person, entity or group comes to own or control, directly or indirectly, beneficially or of record, voting securities (or any other form of controlling interest) which represent more than fifty percent (50%) of the total voting power of the Licensee.

February 2021 Avaya Business Rules Engine Integration Guide 12

1.5 “Derivative Work(s)” means any translation (including translation into other computer languages), port, compiling of Source Code into object code, combination with a pre-existing work, modification, correction, addition, extension, upgrade, improvement, compilation, abridgment or other form in which an existing work may be recast, transformed or adapted or which would otherwise constitute a derivative work under the United States Copyright Act. Permitted Modifications will be considered Derivative Works. 1.6 “Documentation” includes programmer guides, CDs, manuals, materials, and information appropriate or necessary for use in connection with the SDK. Documentation may be provided in machine-readable, electronic or hard copy form. 1.7 “Intellectual Property” means any and all: (i) rights associated with works of authorship throughout the world, including copyrights, neighboring rights, moral rights, and mask works, (ii) trademark and trade name rights and similar rights, (iii) trade secret rights, (iv) patents, algorithms, designs and other industrial property rights, (v) all other intellectual and industrial property rights (of every kind and nature throughout the world and however designated) whether arising by operation of law, contract, license, or otherwise, and (vi) all registrations, initial applications, renewals, extensions, continuations, divisions or reissues thereof now or hereafter in force (including any rights in any of the foregoing). 1.8 “Permitted Modification(s)” means Licensee’s modifications of the Sample Application Code as needed to create applications, interfaces, workflows or processes for use with Avaya products. 1.9 “Specification Document” means any notes or similar instructions in hard copy or machine readable form, including any technical, interface and/or interoperability specifications that define the requirements and conditions for connection to and/or interoperability with Avaya products, systems and solutions. 1.10 “Source Code” means human readable or high-level statement version of software written in the source language used by programmers and includes one or more programs. Source Code programs may include one or more files, such as user interface markup language (.mxml), action script (.as), precompiled Flash code (.swc), java script (.js), hypertext markup language (.html), active server pages (.asp), C# or C# .Net source code (.cs), java source code (.java), java server pages (.jsp), java archives (.), graphic interchange format (.gif), cascading style sheet (.css), audio files (.wav) and extensible markup language (.xml) files. 1.11 “Sample Application Code” means Software provided for the purposes of demonstrating functionality of an Avaya product through the Avaya Software Development Kit. 1.12 “Software” means data or information constituting one or more computer or apparatus programs, including Source Code or in machine-readable, compiled object code form.

2.0 LICENSE GRANT. 2.1 SDK License. A. Provided Licensee pays to Avaya the applicable license fee (if any), Avaya hereby grants Licensee a limited, non-exclusive, non-transferable license (without the right to sublicense, except as set forth in 2.1B(iii)) under the Intellectual Property of Avaya and, if applicable, its licensors and suppliers to (i) use the SDK solely for the purpose of Licensee's internal development efforts to develop applications, interfaces, value-added services and/or solutions, workflows or processes to work in conjunction with Avaya products; (ii) to Client

February 2021 Avaya Business Rules Engine Integration Guide 13

Libraries for redistribution with Licensee’s complementary applications that have been developed using this SDK, subject to the terms and conditions set forth herein; (iii) use Specification Documents solely to enable Licensee’s products, services and application solutions to exchange messages and signals with Avaya products, systems and solutions to which the Specification Document(s) apply; (iv) modify and create Derivative Works of the Sample Application Code, Specification Documents and Documentation solely for internal development of applications, interfaces, workflows or processes for use with Avaya products, integration of such applications, interfaces, workflows and processes with Avaya products and interoperability testing of the foregoing with Avaya products; and (v) compile or otherwise prepare for distribution the Sample Application Code with Permitted Modifications, into an object code or other machine-readable program format for distribution and distribute the same subject to the conditions set forth in Section 2.1B. B. The foregoing license to use Sample Application Code is contingent upon the following: (i) Licensee must ensure that the modifications made to the Sample Application Code as permitted in clause (iv) of Section 2.1A are compatible and/or interoperable with Avaya products and/or integrated therewith, (ii) Licensee may distribute Licensee’s application that has been created using this SDK, provided that such distribution is subject to an end user pursuant to Licensee’s current end user license agreement (“Licensee EULA”) that is consistent with the terms of this Agreement and, if applicable, any other agreement with Avaya (e.g., the Avaya DevConnect Program Agreement), and is equally as protective as Licensee’s standard software license terms, but in no event shall the standard of care be less than a reasonable degree of care, and (iii) Licensee ensures that each end user who receives Client Libraries or Sample Application Code with Permitted Modifications has all necessary licenses for all underlying Avaya products associated with such Client Libraries or Sample Application Code. Your Licensee EULA must include terms concerning restrictions on use, protection of proprietary rights, disclaimer of warranties, and limitations of liability. You must ensure that Your End Users using applications, interfaces, value-added services and/or solutions, workflows or processes that incorporate the API, Client Libraries, Sample Code or Permitted Modifications adhere to these terms, and You agree to notify Avaya promptly if You become aware of any breach of the terms of Licensee EULA that may impact Avaya. You will take all reasonable precautions to prevent unauthorized access to or use of the SDK and notify Avaya promptly of any such unauthorized access or use. C. Licensee acknowledges and agrees that it is licensed to use the SDK only in connection with Avaya products (and if applicable, in connection with services provided by or on behalf of Avaya). D. With respect to Software that contains elements provided by third party suppliers, Licensee may install and use the Software in accordance with the terms and conditions of the applicable license agreements, such as “shrinkwrap” or “click-through” licenses, accompanying or applicable to the Software. 2.2 No Standalone Product. Nothing in this Agreement authorizes or grants Licensee any rights to distribute or otherwise make available to a third party the SDK, in whole or in part, or any Derivative Work in source or object code format on a standalone basis other than the modifications permitted in Section 2.1B of this Agreement. 2.3 Proprietary Notices. Licensee shall not remove any copyright, trade mark or other proprietary notices incorporated in the copies of the SDK, Sample Application Code and redistributable files in Licensee’s possession or control or any modifications thereto.

February 2021 Avaya Business Rules Engine Integration Guide 14

Redistributions in binary form or other suitable program format for distribution, to the extent expressly permitted, must also reproduce Avaya’s copyright, trademarks or other proprietary notices as incorporated in the SDK in any associated Documentation or “splash screens” that display Licensee copyright notices. 2.4 Third-Party Components. You acknowledge certain software programs or portions thereof included in the SDK may contain software distributed under third party agreements (“Third Party Components”), which may contain terms that expand or limit rights to use certain portions of the SDK (“Third Party Terms”). Information identifying the copyright holders of the Third Party Components and the Third Party Terms that apply is available in the attached Schedule 1 (if any), SDK, Documentation, or on Avaya’s web site at: http://support.avaya.com/Copyright (or such successor site as designated by Avaya). The open source software license terms provided as Third Party Terms are consistent with the license rights granted in this Agreement, and may contain additional rights benefiting You, such as modification and distribution of the open source software. The Third Party Terms shall take precedence over this Agreement, solely with respect to the applicable Third Party Components, to the extent that this Agreement imposes greater restrictions on You than the applicable Third Party Terms. Licensee is solely responsible for procuring any necessary licenses for Third Party Components, including payment of licensing royalties or other amounts to third parties, for the use thereof. 2.5 Copies of SDK. Licensee may copy the SDK only as necessary to exercise its rights hereunder. 2.6a No Reverse Engineering. Licensee shall have no rights to any Source Code for any of the software in the SDK, except for the explicit rights to use the Source Code as provided to Licensee hereunder. Licensee agrees that it shall not cause or permit the disassembly, decompilation or reverse engineering of the Software. Notwithstanding the foregoing, if the SDK is rightfully located in a member state of the European Union and Licensee needs information about the Software in the SDK in order to achieve interoperability of an independently created software program with the Software in the SDK, Licensee will first request such information from Avaya. Avaya may charge Licensee a reasonable fee for the provision of such information. If Avaya refuses to make such information available, then Licensee may take steps, such as reverse assembly or reverse compilation, to the extent necessary solely in order to achieve interoperability of the Software in the SDK with an independently created software program. To the extent that the Licensee is expressly permitted by applicable mandatory law to undertake any of the activities listed in this section, Licensee will not exercise those rights until Licensee has given Avaya twenty (20) days written notice of its intent to exercise any such rights. 2.6.b License Restrictions. To the extent permissible under applicable law, Licensee agrees not to: (i) publish, sell, sublicense, lease, rent, loan, assign, convey or otherwise transfer the SDK; (ii) distribute, disclose or allow use the SDK, in any format, through any timesharing service, service bureau, network or by any other means; (iii) distribute or otherwise use the Software in the SDK in any manner that causes any portion of the Software that is not already subject to an OSS License to become subject to the terms of any OSS License; (iv) link the Source Code for any of the software in the SDK with any software licensed under the Affero General Public License (Affero GPL) v.3 or similar licenses; (v) access information that is solely available to root administrators of the Avaya products, systems, and solutions; (vi) develop applications, interfaces, value-added services and/or solutions, workflows or processes that causes adverse effects to Avaya and third-party products, services, solutions, such as, but not limited to, poor performance, software crashes and cessation of their proper functions; and (vii) develop applications, interfaces, value-added services and/or solutions, workflows or processes

February 2021 Avaya Business Rules Engine Integration Guide 15

that blocks or delays emergency calls; (viii) emulate an Avaya SIP endpoint by form or user interface design confusingly similar as an Avaya product ; (ix) reverse engineer Avaya SIP protocol messages; or (x) permit or encourage any third party to do any of (i) through (x), inclusive, above. 2.7 Responsibility for Development Tools. Licensee acknowledges that effective utilization of the SDK may require the use of a development tool, compiler and other software and technology of third parties, which may be incorporated in the SDK pursuant to Section 2.4. Licensee is solely responsible for procuring such third party software and technology and the necessary licenses, including payment of licensing royalties or other amounts to third parties, for the use thereof. 2.8 U.S. Government End Users. The SDK shall be classified as "commercial computer software" and the Documentation is classified as "commercial computer software documentation" or "commercial items," pursuant to FAR 12.212 or DFAR 227.7202, as applicable. Any use, modification, reproduction, release, performance, display or disclosure of the SDK or Documentation by the Government of the United States shall be governed solely by the terms of the Agreement and shall be prohibited except to the extent expressly permitted by the terms of the Agreement. 2.9 Limitation of Rights. No right is granted to Licensee to sublicense its rights hereunder. All rights not expressly granted are reserved by Avaya or its licensors or suppliers and, except as expressly set forth herein, no license is granted by Avaya or its licensors or suppliers under this Agreement directly, by implication, estoppel or otherwise, under any Intellectual Property right of Avaya or its licensors or suppliers. Nothing herein shall be deemed to authorize Licensee to use Avaya's trademarks or trade names in Licensee's advertising, marketing, promotional, sales or related materials. 2.10 Independent Development. 2.10.1 Licensee understands and agrees that Avaya, Affiliates, or Avaya’s licensees or suppliers may acquire, license, develop for itself or have others develop for it, and market and/or distribute applications, interfaces, value-added services and/or solutions, workflows or processes similar to that which Licensee may develop. Nothing in this Agreement shall restrict or limit the rights of Avaya, Affiliates, or Avaya’s licensees or suppliers to commence or continue with the development or distribution of such applications, interfaces, value-added services and/or solutions, workflows or processes. 2.10.2 Nonassertion by Licensee. Licensee agrees not to assert any Intellectual Property related to the SDK or applications, interfaces, value-added services and/or solutions, workflows or processes developed using the SDK against Avaya, Affiliates, Avaya’s licensors or suppliers, distributors, customers, or other licensees of the SDK. 2.11 Feedback and Support. Licensee agrees to provide any information, comments, problem reports, enhancement requests and suggestions regarding the performance of the SDK (collectively, “Feedback”) via any public or private support mechanism, forum or process otherwise indicated by Avaya. Avaya monitors applicable mechanisms, forums, or processes but is under no obligation to implement any of Feedback, or be required to respond to any questions asked via the applicable mechanism, forum, or process. Licensee hereby assigns to Avaya all right, title, and interest in and to Feedback provided to Avaya. 2.12(a) Fees and Taxes. To the extent that fees are associated with the license of the SDK, Licensee agrees to pay to Avaya or pay directly to the applicable government or taxing

February 2021 Avaya Business Rules Engine Integration Guide 16

authority, if requested by Avaya, all taxes and charges, including without limitation, penalties and interest, which may be imposed by any federal, state or local governmental or taxing authority arising hereunder excluding, however, all taxes computed upon Avaya’s net income. If You move any Software, including the SDK, and as a result of such move, a jurisdiction imposes a duty, tax, levy or fee (including withholding taxes, fees, customs or other duties for the import and export of any such Software), then You are solely liable for, and agree to pay, any such duty, taxes, levy or other fees. 2.12(b) Audit. Avaya shall have the right, at its cost and expense, to inspect and/or audit (i) by remote polling or other reasonable electronic means at any time and (ii) in person during normal business hours and with reasonable notice Licensee’s books, records, and accounts, to determine Licensee’s compliance with this Agreement. In the event such inspection or audit uncovers non-compliance with this Agreement, then without prejudice to Avaya’s termination rights hereunder, Licensee shall promptly pay Avaya any applicable license fees. Licensee agrees to keep a current record of the location of the SDK. 2.13 No Endorsement. Neither the name Avaya, Affiliates nor the names of contributors may be used to endorse or promote products derived from the Avaya SDK without specific prior written permission from Avaya. 2.14 High Risk Activities. The Avaya SDK is not fault-tolerant, and is not designed, manufactured or intended for use or resale as on-line control equipment or in hazardous environments requiring failsafe performance, such as in the operation of nuclear facilities, aircraft navigation or aircraft communications systems, mass transit, air traffic control, medical or direct life support machines, dedicated emergency call handling systems or weapons systems, in which the failure of the Avaya SDK could lead directly to death, personal injury, or severe physical or environmental damage ("high risk activities"). If Licensee uses the Avaya SDK for high risk activities, Licensee does so at Licensee’s own risk and Licensee assumes all responsibility and liability for such use to the maximum extent such limitation or exclusion is permitted by applicable law. Licensee agrees that Avaya and its suppliers will not be liable for any claims or damages arising from or related to use of the Avaya SDK for high risk activities to the maximum extent such limitation or exclusion is permitted by law. 2.15 No Virus. Licensee warrants that (i) the applications, interfaces, value-added services and/or solutions, workflows or processes Licensee develops using this SDK will not contain any computer program file that includes time code limitations, disabling devices, or any other mechanism which will prevent the Avaya product (including other software, firmware, hardware), services and networks from being functional at all times (collectively “Time Bombs”); and (ii) the applications, interfaces, value-added services and/or solutions, workflows or processes Licensee develops using this SDK will be free of computer viruses, malicious or other harmful code, black boxes, malware, trapdoors, and other mechanisms which could: a) damage, destroy or adversely affect Avaya product, or services and/or end users; b) allow remote/hidden attacks or access through unauthorized computerized command and control; c) spy (network sniffers, keyloggers), and d) damage or erase such applications, interfaces, value-added services and/or solutions, workflows or processes developed using this SDK or data, or any computer files or systems of Avaya, Affiliates, and/or end users (collectively “Virus”). In addition to any other remedies permitted in the Agreement, if Licensee breaches its warranties under this Section, Licensee will, at its expense, take remedial action to eliminate any Time Bombs and/or Viruses and prevent re-occurrence (including implementing appropriate processes to prevent further occurrences) as well as provide prompt, reasonable assistance to Avaya to materially reduce the effects of the Time Bomb and/or Virus.

February 2021 Avaya Business Rules Engine Integration Guide 17

2.16 Disclaimer. Any software security feature is not a guaranty against malicious code, deleterious routines, and other techniques and tools employed by computer “hackers” and other third parties to create security exposures. Compromised passwords represent a major security risk. Avaya encourages You to create strong passwords using three different character types, change Your password regularly and refrain from using the same password regularly. You must treat such information as confidential. You agree to notify Avaya immediately upon becoming aware of any unauthorized use or breach of Your user name, password, account, API Key, or other credentials as provided by Avaya for use of the SDK, or subscription. You are responsible for ensuring that Your networks and systems are adequately secured against unauthorized intrusion or attack and regularly back up of Your data and files in accordance with good computing practices. 2.17 Third Party Licensed Software A. “Commercial Third Party Licensed Software” is software developed by a business with the purpose of making money from the use of that licensed software. “Freeware Licensed Software” is a software which is made available for use, free of charge and for an unlimited time, but is not Open Source Licensed Software. “Open Source Software" or "OSS" is as defined by the Open Source Initiative (“OSI”) https://opensource.org/osd and is software licensed under an OSI approved license as set forth at https://opensource.org/licenses/alphabetical (or such successor site as designated by OSI). These are collectively referred to herein as “Third Party Licensed Software”. B. Licensee represents and warrants that Licensee, including any employee, contractor, subcontractor, or consultant engaged by Licensee, is to the Licensee’s knowledge, in compliance and will continue to comply with all license obligations for Third Party Licensed Software used in the Licensee application created using the SDK including providing to end users all information required by such licenses as may be necessary. LICENSEE REPRESENTS AND WARRANTS THAT, TO THE LICENSEE’S KNOWLEDGE, THE OPEN SOURCE LICENSED SOFTWARE EMBEDDED IN OR PROVIDED WITH LICENSEE APPLICATION OR SERVICES DOES NOT INCLUDE ANY OPEN SOURCE LICENSED SOFTWARE CONTAINING TERMS REQUIRING ANY INTELLECTUAL PROPERTY OWNED OR LICENSED BY AVAYA OR END USERS TO BE (A) DISCLOSED OR DISTRIBUTED IN SOURCE CODE OR OBJECT CODE FORM; (B) LICENSED FOR THE PURPOSE OF MAKING DERIVATIVE WORKS; OR (C) REDISTRIBUTABLE ON TERMS AND CONDITION NOT AGREED UPON BY AVAYA OR END USERS. Subject to any confidentiality obligations, trade secret or other rights or claims of Licensee suppliers, Licensee will respond to requests from Avaya or end users relating to Third Party Licensed Software associated with Licensee's use of Third Party Licensed Software. Licensee will cooperate in good faith by furnishing the relevant information to Avaya or end users and the requester within two (2) weeks from the time Avaya or end user provided the request to Licensee.

3. OWNERSHIP. 3.1 As between Avaya and Licensee, Avaya or its licensors or suppliers shall own and retain all Intellectual Property rights, in and to the SDK and any corrections, bug fixes, enhancements, updates, improvements, or modifications thereto and Licensee hereby irrevocably transfers, conveys and assigns to Avaya, its licensors and its suppliers all of its right, title, and interest therein. Avaya or its licensors or suppliers shall have the exclusive right to apply for or register

February 2021 Avaya Business Rules Engine Integration Guide 18

any patents, mask work rights, copyrights, and such other proprietary protections with respect thereto. Licensee acknowledges that the license granted under this Agreement does not provide Licensee with title or ownership to the SDK, but only a right of limited use under the terms and conditions of this Agreement. 3.2 Grant Back License to Avaya. Licensee hereby grants to Avaya an irrevocable, perpetual, non-exclusive, sublicensable, royalty-free, fully paid up, worldwide license under any and all of Licensee's Intellectual Property rights related to any Permitted Modifications, to (i) use, make, sell, execute, adapt, translate, reproduce, display, perform, prepare derivative works based upon, distribute (internally and externally) and sublicense the Permitted Modifications and their derivative works, and (ii) sublicense others to do any, some, or all of the foregoing.

4.0 SUPPORT. 4.1 No Avaya Support. Avaya will not provide any support for the SDK provided under this Agreement or for any Derivative Works, including, without limitation, modifications to the Source Code or applications built by Licensee using the SDK. Avaya shall have no obligation to provide support for the use of the SDK, or Licensee's application, services or solutions which may or may not include redistributable Client Libraries or Sample Application Code, to any third party to whom Licensee delivers such applications, services or solutions. Avaya further will not provide fixes, patches or repairs for any defects that might exist in the SDK or the Sample Application Code provided under this Agreement. In the event that Licensee desires support services for the SDK, and, provided that Avaya offers such support services (in its sole discretion), Licensee will be required to enter into an Avaya DevConnect Program Agreement or other support agreement with Avaya. 4.2 Licensee Obligations. Licensee acknowledges and agrees that it is solely responsible for developing and supporting any applications, interfaces, value-added services and/or solutions, workflows or processes developed under this Agreement, including but not limited to (i) developing, testing and deploying such applications, interfaces, value-added services and/or solutions, workflows or processes; (ii) configuring such applications, interfaces, value-added services and/or solutions, workflows or processes to interface and communicate properly with Avaya products; and (iii) updating and maintaining such applications, interfaces, value-added services and/or solutions, workflows or processes as necessary for continued use with the same or different versions of end user and/or third party licensor products, and Avaya products.

5.0 CONFIDENTIALITY. 5.1 Protection of Confidential Information. Licensee acknowledges and agrees that the SDK and any other Avaya technical information obtained by it under this Agreement (collectively, “Confidential Information”) is confidential information of Avaya. Licensee shall take all reasonable measures to maintain the confidentiality of the Confidential Information. Licensee further agrees at all times to protect and preserve the SDK in strict confidence in perpetuity, and shall not use such Confidential Information other than as expressly authorized by Avaya under this Agreement, nor shall Licensee disclose any Confidential Information to third parties without Avaya's written consent. Licensee further agrees to immediately 1) cease all use of all Confidential Information (including copies thereof) in Licensee's possession, custody, or control; 2) stop reproducing or distributing the Confidential Information; and 3) destroy the Confidential Information in Licensee’s possession or under its control, including Confidential Information on

February 2021 Avaya Business Rules Engine Integration Guide 19

its computers, disks, and other digital storage devices upon termination of this Agreement at any time and for any reason. Upon request, Licensee will certify in writing its compliance with this Section. The obligations of confidentiality shall not apply to information which (a) has entered the public domain except where such entry is the result of Licensee's breach of this Agreement; (b) prior to disclosure hereunder was already rightfully in Licensee's possession; (c) subsequent to disclosure hereunder is obtained by Licensee on a non-confidential basis from a third party who has the right to disclose such information to the Licensee; (d) is required to be disclosed pursuant to a court order, so long as Avaya is given adequate notice and the ability to challenge such required disclosure. 5.2 Press Releases. Any press release or publication regarding this Agreement is subject to prior written approval of Avaya.

6.0 NO WARRANTY. The SDK and Documentation are provided “AS-IS” without any warranty whatsoever. AVAYA SPECIFICALLY AND EXPRESSLY DISCLAIMS ANY WARRANTIES OR CONDITIONS, STATUTORY OR OTHERWISE, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND SATISFACTORY QUALITY. AVAYA DOES NOT WARRANT THAT THE SDK AND DOCUMENTATION ARE SUITABLE FOR LICENSEE'S USE, THAT THE SDK OR DOCUMENTATION ARE WITHOUT DEFECT OR ERROR, THAT OPERATION WILL BE UNINTERRUPTED, OR THAT DEFECTS WILL BE CORRECTED. FURTHER, AVAYA MAKES NO WARRANTY REGARDING THE RESULTS OF THE USE OF THE SDK AND DOCUMENTATION. NEITHER AVAYA NOR ITS SUPPLIERS MAKE ANY WARRANTY, EXPRESS OR IMPLIED, THAT THE SDK OR DOCUMENTATION IS SECURE, SECURITY THREATS AND VULNERABILITIES WILL BE DETECTED OR SOFTWARE WILL RENDER AN END USER’S OR LICENSEE’S NETWORK OR PARTICULAR NETWORK ELEMENTS SAFE FROM INTRUSIONS AND OTHER SECURITY BREACHES.

7.0 CONSEQUENTIAL DAMAGES WAIVER. EXCEPT FOR PERSONAL INJURY CLAIMS, AVAYA SHALL NOT BE LIABLE FOR ANY INCIDENTAL, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH, ARISING OUT OF OR RELATING TO THIS AGREEMENT OR USE OF THE SDK, OR FOR THE LOSS OR CORRUPTION OF DATA, INFORMATION OF ANY KIND, BUSINESS, PROFITS, OR OTHER COMMERCIAL LOSS, HOWEVER CAUSED, AND WHETHER OR NOT AVAYA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

8.0 LIMITATION OF LIABILITY. EXCEPT FOR PERSONAL INJURY CLAIMS, IN NO EVENT SHALL AVAYA'S TOTAL LIABILITY TO LICENSEE IN CONNECTION WITH, ARISING OUT OF OR RELATING TO THIS AGREEMENT EXCEED FIVE HUNDRED DOLLARS ($500). THE PARTIES AGREE THAT THE LIMITATIONS SPECIFIED IN THIS SECTION WILL APPLY EVEN IF ANY LIMITED REMEDY PROVIDED IN THIS AGREEMENT IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSE.

February 2021 Avaya Business Rules Engine Integration Guide 20

9.0 INDEMNIFICATION. Licensee shall indemnify and hold harmless Avaya, Affiliates and their respective officers, directors, agents, suppliers, customers and employees “Indemnified Parties”) from and against all claims, demand, suit, actions or proceedings (“Claims”) and damages, losses, liabilities, costs, expenses, and fees (including fees of attorneys and other professionals) (“Damages”) based upon an allegation pertaining to wrongful use, misappropriation, or infringement of a third party’s Intellectual Property right arising from or relating to Licensee’s use of the SDK, alone or in combination with other software, such as operating systems and codecs, and the, direct or indirect, use, distribution or sale of any software, Derivative Works or other products (including but not limited to applications, interfaces, and application programming interfaces) developed utilizing the SDK. Licensee shall defend, indemnify and hold harmless the Indemnified Parties from and against all Claims and Damages arising out of or related to: (i) personal injury (including death); (ii) damage to any person or tangible property caused, or alleged to be caused by Licensee or Licensee’s application created by using the SDK; (iii) the failure by Licensee or Licensee’s application created by using the SDK to comply with the terms of this Agreement or any applicable laws; (iv) the breach of any representation, or warranty made by Licensee herein; or (v) Licensee’s breach of any obligation under the Licensee EULA.

10.0 TERM AND TERMINATION. 10.1 This Agreement will continue through December 31st of the current calendar year. The Agreement will automatically renew for one (1) year terms, unless terminated as specified in Section 10.2 or 10.3 below. 10.2 Either party shall have the right to terminate the Agreement, upon thirty (30) days written notice to the other party. 10.3 Notwithstanding language to the contrary, Avaya may terminate this Agreement immediately, upon written notice to Licensee for breach of Section 2 (License Grant), Section 5 (Confidentiality) or Section 12 (Compliance with Laws). Avaya may also terminate this Agreement immediately by giving written notice if a Change In Control should occur or if Licensee becomes insolvent, or voluntary or involuntary proceedings by or against Licensee are instituted in bankruptcy or under any insolvency law, or a receiver or custodian is appointed for Licensee, or proceedings are instituted by or against Licensee for corporate reorganization or the dissolution of Licensee, which proceedings, if involuntary, have not been dismissed within thirty (30) days after the date of filing, or Licensee makes an assignment for the benefit of its creditors, or substantially all of the assets of Licensee are seized or attached and not released within sixty (60) days thereafter, or if Licensee has ceased or threatened to cease to do business in the regular course. 10.4 Upon termination or earlier termination of this Agreement, Licensee will immediately cease a) all uses of the Confidential Information; b) Licensee agrees to destroy all adaptations or copies of the Confidential Information stored in any tangible medium including any document or work containing or derived (in whole or in part) from the Confidential Information, and certify its destruction to Avaya upon termination of this License. Licensee will promptly cease use of, distribution and sales of Licensee products that embody any such Confidential Information, and destroy all Confidential Information belonging to Avaya as well as any materials that embody any such Confidential Information. All licenses granted will terminate.

February 2021 Avaya Business Rules Engine Integration Guide 21

10.5 The rights and obligations of the parties contained in Sections 2.3, 2.6, 2.7, 2.10, 2.11, 2.12, 3, and 5 through 18 shall survive any expiration or termination of this Agreement.

11.0 ASSIGNMENT. Avaya may assign all or any part of its rights and obligations hereunder. Licensee may not assign this Agreement or any interest or rights granted hereunder to any third party without the prior written consent of Avaya. The term "assign" includes, but is not limited to, any transaction in which there is a Change In Control or reorganization of Licensee pursuant to a merger, sale of assets or stock. This Agreement shall terminate immediately upon occurrence of any prohibited assignment.

12.0 COMPLIANCE WITH LAWS. Licensee shall comply with all applicable laws and regulations, including without limitation those applicable to data privacy, intellectual property, trade secret, fraud, music performance rights and the export or re-export of technology and will not export or re-export the SDK or any other technical information provided under this Agreement in any form in violation of the export control laws of the United States of America and of any other applicable country. For more information on such export laws and regulations, Licensee may refer to the resources provided in the websites maintained by the U.S. Commerce Department, the U.S. State Department and the U.S. Office of Foreign Assets Control.

13.0 WAIVER. The failure to assert any rights under this Agreement, including, but not limited to, the right to terminate in the event of breach or default, will not be deemed to constitute a waiver of the right to enforce each and every provision of this Agreement in accordance with their terms.

14.0 SEVERABILITY. If any provision of this Agreement is determined to be unenforceable or invalid, this Agreement will not be rendered unenforceable or invalid as a whole, and the provision will be changed and interpreted so as to best accomplish the objectives of the original provision within the limits of applicable law.

15.0 GOVERNING LAW AND DISPUTE RESOLUTION. 15.1 Governing Law. This Agreement and any dispute, claim or controversy arising out of or relating to this Agreement (“Dispute”), including without limitation the formation, interpretation, breach or termination of this Agreement, or any issue regarding whether a Dispute is subject to arbitration under this Agreement, will be governed by New York State laws, excluding conflict of law principles, and the United Nations Convention on Contracts for the International Sale of Goods. 15.2 Dispute Resolution. Any Dispute will be resolved in accordance with the provisions of this Section 15. The disputing party shall give the other party written notice of the Dispute in

February 2021 Avaya Business Rules Engine Integration Guide 22

accordance with the notice provision of this Agreement. The parties will attempt in good faith to resolve each controversy or claim within 30 days, or such other longer period as the parties may mutually agree, following the delivery of such notice, by negotiations between designated representatives of the parties who have dispute resolution authority. 15.3 Arbitration of Non-US Disputes. If a Dispute that arose anywhere other than in the United States or is based upon an alleged breach committed anywhere other than in the United States cannot be settled under the procedures and within the timeframe set forth in Section 15.2, it will be conclusively determined upon request of either party by a final and binding arbitration proceeding to be held in accordance with the Rules of Arbitration of the International Chamber of Commerce by a single arbitrator appointed by the parties or (failing agreement) by an arbitrator appointed by the President of the International Chamber of Commerce (from time to time), except that if the aggregate claims, cross claims and counterclaims by any one party against the other party exceed One Million US Dollars at the time all claims, including cross claims and counterclaims are filed, the proceeding will be held in accordance with the Rules of Arbitration of the International Chamber of Commerce by a panel of three arbitrator(s) appointed in accordance with the Rules of Arbitration of the International Chamber of Commerce. The arbitration will be conducted in the English language, at a location agreed by the parties or (failing agreement) ordered by the arbitrator(s). The arbitrator(s) will have authority only to award compensatory damages within the scope of the limitations of Section 8 and will not award punitive or exemplary damages. The arbitrator(s) will not have the authority to limit, expand or otherwise modify the terms of this Agreement. The ruling by the arbitrator(s)) will be final and binding on the parties and may be entered in any court having jurisdiction over the parties or any of their assets. The parties will evenly split the cost of the arbitrator(s)’ fees, but Avaya and Customer will each bear its own attorneys' fees and other costs associated with the arbitration. The parties, their representatives, other participants and the arbitrator(s) will hold the existence, content and results of the arbitration in strict confidence to the fullest extent permitted by law. Any disclosure of the existence, content and results of the arbitration will be as limited and narrowed as required to comply with the applicable law. By way of illustration, if the applicable law mandates the disclosure of the monetary amount of an arbitration award only, the underlying opinion or rationale for that award may not be disclosed. 15.4 Choice of Forum for US Disputes. If a Dispute by one party against the other that arose in the United States or is based upon an alleged breach committed in the United States cannot be settled under the procedures and within the timeframe set forth in Section 15.2, then either party may bring an action or proceeding solely in either the Supreme Court of the State of New York, New York County, or the United States District Court for the Southern District of New York. Except as otherwise stated in Section 15.3 each party consents to the exclusive jurisdiction of those courts, including their appellate courts, for the purpose of all actions and proceedings arising out of or relating to this Agreement. 15.5 Injunctive Relief. Nothing in this Agreement will be construed to preclude either party from seeking provisional remedies, including, but not limited to, temporary restraining orders and preliminary injunctions from any court of competent jurisdiction in order to protect its rights, including its rights pending arbitration, at any time. The parties agree that the arbitration provision in Section 15.3 may be enforced by injunction or other equitable order, and no bond or security of any kind will be required with respect to any such injunction or order. 15.6 Time Limit. Actions on Disputes between the parties must be brought in accordance with this Section within 2 years after the cause of action arises.

February 2021 Avaya Business Rules Engine Integration Guide 23

16.0 IMPORT/EXPORT CONTROL. Licensee is advised that the SDK is of U.S. origin and subject to the U.S. Export Administration Regulations (“EAR”). The SDK also may be subject to applicable local country import/export laws and regulations. Diversion contrary to U.S. and/or applicable local country law and/or regulation is prohibited. Licensee agrees not to directly or indirectly export, re-export, import, download, or transmit the SDK to any country, end user or for any use that is contrary to applicable U.S. and/or local country regulation or statute (including but not limited to those countries embargoed by the U.S. government). Licensee represents that any governmental agency has not issued sanctions against Licensee or otherwise suspended, revoked or denied Licensee's import/export privileges. Licensee agrees not to use or transfer the SDK for any use relating to nuclear, chemical or biological weapons, or missile technology, unless authorized by the U.S. and/or any applicable local government by regulation or specific written license. Additionally, Licensee is advised that the SDK may contain encryption algorithm or source code that may not be exported to government or military end users without a license issued by the U.S. Bureau of Industry and Security and any other country’s governmental agencies, where applicable.

17.0 AGREEMENT IN ENGLISH. The parties confirm that it is their wish that the Agreement, as well as all other documents relating hereto, including all notices, have been and shall be drawn up in the English language only. Les parties aux présentes confirment leur volonté que cette convention, de même que tous les documents, y compris tout avis, qui s'y rattachent, soient rédigés en langue anglaise.

18.0 ENTIRE AGREEMENT. This Agreement, its exhibits, schedules and other agreements or documents referenced herein, constitute the full and complete understanding and agreement between the parties and supersede all contemporaneous and prior understandings, agreements and representations relating to the subject matter hereof. No modifications, alterations or amendments shall be effective unless in writing signed by both parties to this Agreement.

19. Redistributable Client Files. The list of SDK client files that can be redistributed, if any, are in the SDK in a file called Redistributable.txt. Schedule 1 to Avaya SDK License Agreement Third Party Notices CODECS: WITH RESPECT TO ANY CODECS IN THE SDK, YOU ACKNOWLEDGE AND AGREE YOU ARE RESPONSIBLE FOR ANY AND ALL RELATED FEES AND/OR ROYALTIES, IF ANY. IT IS YOUR RESPONSIBILITY TO CHECK. THE H.264 (AVC) CODEC IS LICENSED UNDER THE AVC PATENT PORTFOLIO LICENSE FOR THE PERSONAL USE OF A CONSUMER OR OTHER USES IN WHICH IT DOES NOT RECEIVE REMUNERATION TO: (I) ENCODE VIDEO IN COMPLIANCE WITH THE AVC STANDARD ("AVC VIDEO") AND/OR (II) DECODE AVC VIDEO THAT WAS ENCODED BY A

February 2021 Avaya Business Rules Engine Integration Guide 24

CONSUMER ENGAGED IN A PERSONAL ACTIVITY AND/OR WAS OBTAINED FROM A VIDEO PROVIDER LICENSED TO PROVIDE AVC VIDEO. NO LICENSE IS GRANTED OR SHALL BE IMPLIED FOR ANY OTHER USE. ADDITIONAL INFORMATION FOR THE H.264 (AVC) CODEC MAY BE OBTAINED FROM MPEG LA, L.L.C. SEE HTTP://WWW.MPEGLA.COM.

February 2021 Avaya Business Rules Engine Integration Guide 25

Chapter 2: AACC Connector Setup and Troubleshooting

AACC Connector and Related Components

There are typically: • Avaya Aura Contact Center with Geographic High Availability. • A pair (one per DC) of AACC Connectors working in Active/Standby mode; both receiving data from the AACC and one sending data to Kafka Cluster in each DC (each CORE consumes metrics from Kafka within the same DC). • all COREs working in Active mode; all containing a snapshot of real-time metrics, and all servicing decision requests. Note: The solution can also work with a single of each: AACC, AACC Connector, and CORE. AACC Configuration

The AACC Connector receives skillset statics data sent by the AACC via the AACC Real-time Statistics Multicast (RSM) interface. The multicast address and port should be configured on the AACC. The default multicast IP address is 234.5.6.10, port 6050 for "Moving Window" Skillset, 6040 for "Interval to Date" Skillset. The real-time statistics of Skillset must be turn on. Please refer to Avaya Aura Contact Center Server Administration for details. AACC Connector Configuration Prerequisites

• Ensure that the AACC Connector is installed as per the Avaya Business Rules Engine 3.6 Planning Guide and Avaya Business Rules Engine 3.6 Installation Guide. The AACC Connector server must be either in the same subnet as the AACC server from which the AACC Connector is supposed to receive the RSM data via multicast interface, or in the subnet that the RSM multicast messages can reach. • The ABRE AACC Connector Installation Type and WebLM Server Address are configured properly as per the Avaya Business Rules Engine 3.6 Installation Guide.

February 2021 Avaya Business Rules Engine Integration Guide 26

Overview

The files below need to be correctly configured on the AACC Connectors. Please note that the AACC Connector Installation Type and WebLM Server Address should have been configured already after the installation as per Avaya Business Rules Engine 3.6 Installation Guide. • metrics_connector_communication.properties o Connection to Avaya Business Rules Engine Kafka cluster; o AACC Connector failover, o AACC server(s) and multicast address and port number; • snmp.properties o SNMP configurations;

IMPORTANT: • All files are in ${AVAYA_HOME}/aacc-connector/config/application • If changes are made to the metrics_connector_communication.properties or snmp.properties files, the AACC Connector needs to be restarted for the changes to take effect. • The configurations should be done on each AACC Connector. Configuring metrics_connector_communication.properties

AACC Connector connects to ABRE's nodes and publishes metrics to the Kafka cluster in ABRE. Configure the IP Addresses of all the ABRE nodes, as described below. # Kafka parameter for publishing Destination Metrics # Use ',' as separator for grouping server addresses of same DC # Use '|' as separator for grouping DC addresses # Format: IP01-dc1:port,IP02-dc1:port|IP01-dc2:port,IP02-dc2:port kafka.cluster.dataCenters=172.28.128.4:9092,172.28.128.5:9092,172 .28.128.6:9092|173.28.128.4:9092,173.28.128.5:9092,173.28.128.6:9 092 If there are two AACC Connectors, they work as an Active/Standby pair, and fail-over to each other. Configure the IP Addresses of the two AACC Connectors.

Note: If there is only one AACC Connector, do not make any changes to these parameters. failover.group.hosts defines which IP Addresses are part of the same cluster. Only one AACC Connector can send metrics to ABRE. So if you have two AACC Connectors, one in

February 2021 Avaya Business Rules Engine Integration Guide 27

DC1 (IPDC1) and another in DC2 (IPDC2), that work as active / stand-by, the configuration should as follows: failover.bind_addr is the external IP Address of the AACC Connector. The fail-over mechanism will try to bind a TCP port to this IP Address, the IP Address needs to be visible to the network. In DC1, AACC Connector IP Address = IPDC1 failover.bind_addr=IPDC1 failover.group.hosts=IPDC1[port],IPDC2[port]

In DC2, AACC Connector IP Address = IPDC2 failover.bind_addr=IPDC2 failover.group.hosts=IPDC1[port],IPDC2[port]

# Failover parameters failover.bind_addr=192.168.0.1 failover.bind_port=7830 #Format: HostA[portA],HostB[portB] failover.group.hosts=192.168.0.1[7830],192.168.0.2[7830]

The AACC Connector receives skillset statistics sent by the AACC Server(s) via RSM interface (IP Multicast). Configure the multicast IP address and port number that should match what are configured on the AACC server side. Configure the list of AACC servers from which the connector is supposed to receive the skillset statistics and specify the interval that the connector should at least receive one skillset data package or report failure otherwise. #multicast input stream multicast.group.address=234.5.6.10 multicast.port=6050 # 'multicast.source.hosts' parameter defines a list of AACC servers this connector can process data # Format: multicast.source.hosts=, multicast.source.hosts=192.168.0.20 multicast.failure.threshold.seconds=300

February 2021 Avaya Business Rules Engine Integration Guide 28

Configuring snmp.properties

The snmp.properties file configures the parameters needed by AACCConnector to send alarms. Example for SNMP v2: snmp.1.version=v2 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe

Example for SNMP v3: snmp.1.version=v3 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe snmp.1.user.name=initial snmp.1.user.securityName=initial snmp.1.user.authenticationProtocol=MD5 snmp.1.user.authenticationPassword=12345678 snmp.1.user.privacyProtocol=DES snmp.1.user.privacyPassword=12345678

Note: • Supported protocols are: SNMPv2 and SNMPv3 (property snmp.[targetId].version) • Do not change the snmp oid. • You can configure several SNMP servers by repeating the same keys with different targetId: snmp.[targetId].version Example: snmp.1.version=v2 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe snmp.2.version=v2 snmp.2.trapDestination=10.130.92.201/10162 snmp.2.oid=.1.3.6.1.4.1.6889.2.78 snmp.2.community=asmcpe

February 2021 Avaya Business Rules Engine Integration Guide 29

Adding new ACDs and Agent Groups via Web Admin

To add a new ACD in the Avaya Business Rules Engine, we have to follow these steps to make sure the metrics are properly handled by the AACC Connector and sent to the Avaya Business Rules Engine cluster. • Add an ACD via Web Admin. o The Native ID of the ACD must match the server name of the Avaya Aura Contact Center Manager Server which sends the real-time skillset statistics via IP multicast. o Complete other fields. • Add an Agent Group to the ACD via Web Admin. o The Native ID of the Agent Group must match the skillset ID that represents this Agent Group. The skillset IDs are defined on the AACC and are included in the real-time skillset statistics. o Choose the ACD that was defined above. o Complete other fields. ABRE System Properties - summarizer.preferred- metrics

By default, five most important metrics are selected, i.e. EWTMEDIUM,STAFFED,AVAILABLE,CALLSOFFERED and PERCENTINS, which are provided in the CMS integration scenario. In the AACC integration scenario, the real-time skillset statistics have "Agent Available", "Agents In Service", "Expected Waiting Time" and "CallsOffered" which are equivalent to EWTMEDIUM,STAFFED,AVAILABLE and CALLSOFFERED in the CMS case respectively. However, there is no equivalent skillset data for PERCENTINS. To be able to use the canned scripts in both CMS and AACC integration scenarios, those common metrics share the same ABRE metric names. Please see the section "AACC Real-time Skillset Statistics" for the complete list of skillset statistics. There is no need to change the default settings of summarizer.preferred-metrics unless different skillset statistics should be selected. AACC Real-time Skillset Statistics

Skillset statistics provide instantaneous state and cumulative performance measurement information on a per-skillset basis. The following Skillset statistics are supported:

Skillset statistics Description ABRE Metric Name

Skillset Id The number of SkillsetID agents that are

February 2021 Avaya Business Rules Engine Integration Guide 30

Skillset statistics Description ABRE Metric Name currently waiting for calls and are logged on for this skillset.

Agents Available The number of AVAILABLE agents that are currently waiting for calls and are logged on for this skillset.

Agents In Service The number of STAFFED agents logged on for this skillset.

Agents On Skillset Calls The number of AgentsOnSkillsetCall agents currently on calls that were queued to this skillset.

Agents Not Ready The number of AgentsNotReady agents logged on for this skillset who are currently in the Not Ready state.

Calls Waiting The number of CallsWaiting calls currently waiting for an agent with this skillset.

Longest Waiting Time Since The longest LongestWaitingTimeSinceLastCall Last Call waiting time of all idle agents who are currently waiting to answer calls for this skillset.

February 2021 Avaya Business Rules Engine Integration Guide 31

Skillset statistics Description ABRE Metric Name

Maximum Waiting Time The maximum MaxWaitingTime waiting time spent by all calls that are currently waiting for an agent with this skillset.

Waiting Time The total WaitingTime waiting time spent by all calls that are currently waiting for an agent with this skillset.

Expected Waiting Time The time that a EWTMEDIUM new call is expected to wait before being answered by an agent with this skillset.

Call Answered After Threshold The number of CallsAnsweredAfterThreshold calls that were answered after experiencing a delay greater than or equal to the service level threshold for this skillset.

Longest Waiting Time Since The longest LongestWaitingTimeSinceLogin Login waiting time of idle agents who are waiting to answer calls for this skillset. Measurement of waiting time begins at logon.

February 2021 Avaya Business Rules Engine Integration Guide 32

Skillset statistics Description ABRE Metric Name

Agents On DN Calls The number of AgentsOnDNCalls agents logged on for this skillset who are currently handling a DN call.

Skillset State The state of the SkillsetState skillset (In Service or Out of Service).

Agent Unavailable The number of AgentsUnavailable agents who are currently unavailable to take calls. This value is calculated based on . Agents in Service . Agents on Avaya Aura® Contact Center calls . Agents on DN Calls . Agents Available . Agents Not Ready

Network Calls Waiting The number of NetworkCallsWaiting network calls currently waiting for this skillset.

Network Calls Answered The number of NetworkCallsAnswered network calls answered by an agent with this skillset.

Queued Call Answered The number of QueuedCallAnswered queued calls

February 2021 Avaya Business Rules Engine Integration Guide 33

Skillset statistics Description ABRE Metric Name that were answered for the skillset within the last interval-to-date or moving window.

Total Calls Answered Delay The delay TotalCallsAnsweredDelay experienced by all calls that were answered by an agent with this skillset from the time the calls were queued to the skillset until they were answered.

Total Calls Answered The total TotalCallsAnswered number of calls answered by an agent with this skillset.

AgentOnNetworkSkillsetCall The number of AgentOnNetworkSkillsetCall agents who are handling incoming network calls.

AgentOnOtherSkillsetCall The number of AgentOnOtherSkillsetCall agents who are assigned to this skillset but are on active calls for other skillsets (local or network).

AgentOnACDDNCall The number of AgentOnACDDNCall agents who are assigned to this skillset but are

February 2021 Avaya Business Rules Engine Integration Guide 34

Skillset statistics Description ABRE Metric Name also active on ACD calls.

AgentOnNACDDNCall The number of AgentOnNACDDNCall agents who are assigned to this skillset but are also active on NACD calls.

CallsOffered The number of CALLSOFFERED local and incoming network CDN calls queued to this skillset.

SkillsetAbandoned The number of SkillsetAbandoned local and incoming network CDN calls that were abandoned while being queued to this skillset.

SkillsetAbandonedDelay The amount of SkillsetAbandonedDelay delay experienced by local and incoming network CDN calls that were abandoned while being queued to this skillset.

SkillsetAbandonedAfterT The number of SkillsetAbandonedAfterThreshold hreshold local and incoming network CDN calls whose Skillset Abandoned Delay values

February 2021 Avaya Business Rules Engine Integration Guide 35

Skillset statistics Description ABRE Metric Name were greater than or equal to the service level threshold.

NetworkCallsOffered The number of NetworkCallsOffered incoming network CDN calls queued to this skillset.

AACC Connector Troubleshooting Overview

The AACC Connector receives skillset statics data sent by the AACC via the AACC Real-time Statistics Multicast (RSM) interface. Then it processes the metrics and sends them to Avaya Business Rules Engine. Avaya Business Rules Engine can then associate the metrics with the correct ACDs and Agent Groups configured in its database and store the metrics in the data grid (memory space) for quick retrieval and use in making real-time decisions (such as routing). Diagnosing problems with the metric feed can take several steps, as the issue can be with the network, AACC, AACC Connector, and/or Avaya Business Rules Engine.

Checking Configurations

Please double-check the configurations as per the “AACC Configuration” and “AACC Connector Configuration” sections above.

Diagnosing Issues with the Overall Solution

NTPD Service

The time on all the Avaya Business Rules Engine nodes and AACC Connectors must be the same. All servers used for Avaya Business Rules Engine should have Network Time Protocol (NTP) set-up to point to the same NTP Source Server (detailed instructions on Red Hat website).

IP Multicast

February 2021 Avaya Business Rules Engine Integration Guide 36

The AACC Connector server must be either in the same subnet as the AACC server from which the AACC Connector is supposed to receive the RSM data via multicast interface, or in the subnet that the RSM multicast messages can reach. Please refer to the Avaya Business Rules Engine 3.6 Installation Guide.

Diagnosing Issues on the ABRE

The ABRE Web Admin ACD table shows the metrics status of each ACD.

Figure 1: BRE Web Admin ACD table If the ABRE node does not get the metrics data as expected, for instance, the Metrics Status of AACC-ACD1 is “100% Stale” in the screenshot above, the admin user can check whether the ABRE node receives any metrics data from the AACC Connector or not following the steps below. Procedure 1. Login the ABCE node to which the AACC Connector is configured to send metrics as root user; 2. Run the command “/opt/Avaya/third-party/kafka/kafka_2.11-2.0.0/bin/kafka-console- consumer.sh --bootstrap-server localhost:9092 --topic destination-metrics” 3. Check the output of this command. If it shows the metrics received then go to the next step, otherwise, go to the section “Diagnosing Issues on the AACC Connector”. 4. The output would show the metrics in detail as illustrated in the example below. [root@abre-node1 ~]# /opt/Avaya/third-party/kafka/kafka_2.11-2.0.0/bin/kafka-console- consumer.sh --bootstrap-server localhost:9092 --topic destination-metrics

February 2021 Avaya Business Rules Engine Integration Guide 37

[{"systemId":"AACC-Server- 1","nativeId":"10003","creationTime":1601576760059,"resolutionMode":"SYSTEM_ID_N ATIVE_DESTINATION_ID","destinationType":0,"metricsMap":{"EWTMEDIUM":"2","Agen tOnNetworkSkillsetCall":"21","WaitingTime":"9","NetworkCallsAnswered":"17","AgentsOn DNCalls":"13","AgentsUnavailable":"15","SkillsetState":"1","SkillsetAbandonedAfterThres hold":"28","LongestWaitingTimeSinceLastCall":"7","AgentsNotReady":"5","TotalCallsAns weredDelay":"19","LongestWaitingTimeSinceLogin":"12","SkillsetAbandoned":"26","Max WaitingTime":"8","QueuedCallAnswered":"18","AgentOnACDDNCall":"23","CALLSOFFE RED":"25","NetworkCallsOffered":"29","STAFFED":"3","AVAILABLE":"2","AgentsOnSkill setCall":"4","AgentOnNACDDNCall":"24","CallsWaiting":"6","CallsAnsweredAfterThresho ld":"11","SkillsetAbandonedDelay":"27","NetworkCallsWaiting":"16","TotalCallsAnswered ":"20","AgentOnOtherSkillsetCall":"22"},"tenantId":"1","processed":false}] Please check all the “systemId” and “nativeId” in the output to ensure that the “Native ID” of the ACD and the “Native ID” of the Agent Group have the matched “systemId” and “nativeId” respectively. For instance, if you have an ACD configured with “AACC-Server-1” as its “Native ID” and an Agent Group configured with “10004” as its “Native ID” of that ACD, then in the output there should be metrics such as [{"systemId":"AACC-Server-1","nativeId":"10004", ……}]. 5. Correct the Native ID of the ACD/Agent Group configuration as per the section “Adding new ACDs and Agent Groups via Web Admin” above if the configuration is wrong. 6. If you are sure that the ACD/Agent Group is configured with the correct Native ID but you could not find the corresponding metrics in the output, it is possible that that particular AACC server does not send the skillset statics data or the AACC Connector does not receive it. Please go to the section “Diagnosing Issues on the AACC Connector”.

Diagnosing Issues on the AACC Connector

AACC Connector Configuration First, please ensure that the AACC Connector is configured properly as per the section “AACC Connector Configuration” above. Please double-check that, as highlighted in the Avaya Business Rules Engine 3.6 Installation Guide, the AACC Connector server is either in the same subnet as the AACC server from which the AACC Connector is supposed to receive the RSM data via multicast interface, or in the subnet that the RSM multicast messages can reach.

Checking AACC Connector Status Use the command “systemctl status aacc-connector” to check the AACC Connector status, e.g. [root@abre-aacc1 ~]# systemctl status aacc-connector ● aacc-connector.service - Avaya AACC Connector for Avaya Business Rules Engine 3.6-SNAPSHOT-13bee

February 2021 Avaya Business Rules Engine Integration Guide 38

Loaded: loaded (/etc/systemd/system/abre/aacc- connector.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2020-09-11 13:02:51 MDT; 3 weeks 2 days ago Process: 21616 ExecStartPost=/opt/Avaya/aacc- connector/bin/start-ma-if-no-abre.sh (code=exited, status=0/SUCCESS) Process: 21613 ExecStartPost=/bin/logger -p crit -t ${DR_USER} aacc-connector started. (code=exited, status=0/SUCCESS) Process: 21582 ExecStartPre=/opt/Avaya/aacc-connector/bin/pre- start-aacc-connector.sh ${AVAYA_HOME} ${DR_USER} ${DR_USER_GROUP} (code=exited, status=0/SUCCESS) Main PID: 21612 (su) CGroup: /system.slice/aacc-connector.service ‣ 21612 /bin/su - avayadr -c /opt/Avaya/aacc- connector/bin/aacc-connector.sh

AACC Connector License Please check on the license server if this AACC Connector has successfully acquired the proper license, e.g. VALUE_BRE_AACC_CONN, VALUE_BRE_GR_AACC_CONN or VALUE_BRE_LAB_AACC_CONN, based on the installation type of the AACC Connector. If the AACC Connector does not acquire the proper license please check the file aacc- license.properties in the folder //aacc- connector/config/application, e.g. /opt/Avaya/aacc-connector/config/application, to verify that the “datacenter.type” and “datacenter.weblm” are configured properly. To correct the configuration please refer to the section “Configure ABRE AACC Connector Installation Type and WebLM Server Address” in the Avaya Business Rules Engine 3.6 Installation Guide.

AACC Connector Log The admin user can check if there is any ERROR message in the log files in the folder //aacc-connector/logs/application, e.g. /opt/Avaya/aacc- connector/logs/application/aacc-connector.log. For example, if the error message indicates that the AACC Connector did not receive any data from the AACC server specified in file metrics_connector_communication.properties, e.g. 192.180.0.20, then please go to the section “Diagnosing Issues on the AACC”.

|ERROR|c.a.a.c.failure.InputFailureDetector [192.180.0.20] has not been sending information for more than 300 secs

February 2021 Avaya Business Rules Engine Integration Guide 39

The admin user can also turn on the debug log of some AACC Connector modules by changing the level="INFO" to level="DEBUG" in the file //aacc- connector/config/logging/aacc-connector-logging.xml, e.g. /opt/Avaya/aacc- connector/config/logging/aacc-connector-logging.xml. It is not recommended to turn on the debug log in production with high traffic, so please change the log level back to INFO once the debug messages have been captured.

Network Trace The admin user can use the tool tcpdump to capture network traffic on the AACC Connector server to check if it received any multicast message sent from the AACC server to the multicast IP address and port specified in multicast.source.hosts, multicast.group.address and multicast.port respectively in the file metrics_connector_communication.properties (Please refer to the section AACC Connector Configuration). E.g. /usr/sbin/tcpdump -i ens192 -w multicast-trace.trc

Figure 2: multicast-trace.trc

If it did not receive the expected multicast message, please go to the section “Diagnosing Issues on the AACC”.

February 2021 Avaya Business Rules Engine Integration Guide 40

Diagnosing Issues on the AACC

Network Trace The AACC administrator can use tools such as Wireshark on the AACC server to check if the AACC server sends the real-time statistics of Skillset via IP Multicast.

Checking AACC Services and Configurations The AACC administrator to check the RSM_Service status, Multicast Address and Port Configurations and Multicast Stream Control. Refer to Avaya Aura Contact Center Server Administration on the Avaya support site for details.

Figure 3: CCMS – System Control and Monitor Utility

February 2021 Avaya Business Rules Engine Integration Guide 41

Figure 4 Figure 5: RTD Multicast Controller

Figure 6: RTD Multicast Configuration

February 2021 Avaya Business Rules Engine Integration Guide 42

Chapter 3: Admin API - REST Interface

Overview

Avaya Business Rules Engine uses the Service Layer in Config Store to retrieve, insert, update or delete configuration entities needed for its routing operation. By using Web Admin application, an operator can manage all these operations from a web interface, along with global and system properties, users and roles. Now, we present Admin API, a RESTful web service that enables external systems to retrieve, insert, delete or modify Avaya Business Rules Engine configuration entities.

Avaya Business Rules Engine 3.6 Admin API version

Avaya Business Rules Engine 3.6 supports Admin API version 6 (v6) only. v6 includes all the entities supported in previous releases, although some behaviors may have changed as described below.

Entities which were Supported in v3 (Avaya Dynamic Routing 3.1) v3 of the API supported CRUD operations on Decision Functions, Strategy Scripts, Timetables, Lookup tables, and Segmentation Tables. These operations are also supported in Avaya Business Rules Engine 3.6 with v6. • Decision Function entity

Operation URL http Description method

/v6/decisionfunctions DELETE Delete a list of Decision Functions

/v6/decisionfunctions GET Get a list of Decision Functions, the result is paginated

/v6/decisionfunctions POST Insert a list of Decision Functions

/v6/decisionfunctions PUT Update a list of Decision Functions

/v6/decisionfunctions/{id} GET Get a single Decision Function, referenced by its ID

February 2021 Avaya Business Rules Engine Integration Guide 43

• Strategy Script entity

Operation URL http method Description

/v6/strategyscripts DELETE Delete a list of Strategy Scripts

/v6//strategyscripts GET Get a list of Strategy Scripts, the result is paginated

/v6//strategyscripts POST Insert a list of Strategy Scripts

/v6//strategyscripts PUT Update a list of Strategy Scripts

/v6//strategyscripts/{id} GET Get a single Strategy Script, referenced by its ID

• Timetable entity

Operation URL http method Description

/v6/timetables DELETE Delete a list of Timetables

/v6//timetables GET Get a list of Timetables, the result is paginated

/v6//timetables POST Insert a list of Timetables

/v6//timetables PUT Update a list of Timetables

/v6//timetables/{id} GET Get a single Timetable, referenced by its ID

Entities which were Supported in v4 (Avaya Dynamic Routing 3.2)

• Max page size is limited to 20 entities; if a request asks for more than 20, the response will cap to 20. • For Strategy Scripts and Decision Functions, the script code must be supplied now using standard JSON escaped strings. Base 64 is no longer supported. • Segmentation Table (ST) API changes: instead of a single entity containing ST metadata + Segmentation Rules + Strategy Settings, now metadata and rules are treated as different entities, to be able to better handle errors and validations, and produce much smaller payloads in most cases • These operations are also supported in Avaya Business Rules Engine with v6.

February 2021 Avaya Business Rules Engine Integration Guide 44

Operation URL http method Description

/v6/segmentationtables/rules/{id} GET Get a single Segmentation Rule, by its ID

/v6/segmentationtables/{tableId}/rules DELETE Delete a list of rules from the given Segmentation Table, the list of ID's needs to be provided in the body

/v6/segmentationtables/{tableId}/rules GET Retrieve a list of rules from the given Segmentation Table, the list is paginated (see Swagger for further information)

/v6/segmentationtables/{tableId}/rules POST Insert a list of rules into the given Segmentation Table (see Swagger for further information)

/v6/segmentationtables/{tableId}/rules PUT Update a list of rules in the given Segmentation Table (see Swagger for further information)

/v6/segmentationtables/{tableId}/rules/{id}/moveRule PUT Move a rule in the Segmentation Table by one place in the specified direction (see Swagger for further information)

/v6/segmentationtables/ DELETE Delete a list of Segmentation Tables, the list of ID's needs to be provided in the body

/v6/segmentationtables/ GET Retrieve a list of Segmentation Table, the list is paginated

February 2021 Avaya Business Rules Engine Integration Guide 45

Operation URL http method Description (see Swagger for further information)

/v6/segmentationtables/ POST Insert a list of Segmentation Tables (see Swagger for further information)

/v6/segmentationtables/ PUT Update a list of Segmentation Tables (see Swagger for further information)

/v6/segmentationtables/{id} GET Get a single Segmentation Table, by its ID

/v6/segmentationtables/{id}/getRulesOrder GET Get the order of a current set of rules, return a list of rule IDs (see Swagger for further information)

/v6/segmentationtables/{id}/orderRules PUT Update the order of rules for the specified Segmentation Table (see Swagger for further information)

• Added Lookup Tables (Metadata and single row operations)

Operation URL http Description method

/v6/lookuptables GET Get a list of Lookup Tables' metadata. The list is paginated (see Swagger for further information)

/v6/lookuptables/{id} GET Get a single Lookup Table's metadata, referenced by its ID

/v6/lookuptables POST Insert a list of Lookup Tables' metadata

February 2021 Avaya Business Rules Engine Integration Guide 46

Operation URL http Description method

/v6/lookuptables PUT Update a list of Lookup Tables' metadata

/v6/lookuptables DELETE Delete a list of Lookup Tables' metadata

/v6/lookuptables/{id}/entries GET Get the list of Lookup Table entries for a single table. The list is paginated (see Swagger for further information)

/v6/lookuptables/{id}/entries/{key} GET Get one entry of a single Lookup Table, referenced by its key

/v6/lookuptables/{id}/entries POST Insert a list of Lookup Table entries

/v6/lookuptables/{id}/entries PUT Update a list of Lookup Table entries

/v6/lookuptables/{id}/entries DELETE Delete a list of Lookup Table entries

• Added ACD entity

Operation URL http method Description

/v6/acds DELETE Delete a list of ACDs

/v6/acds GET Get a list of ACDs, the result is paginated

/v6/acds POST Insert a list of ACDs

/v6/acds PUT Update a list of ACDs

/v6/acds/{id} GET Get a single ACD, referenced by its ID

• Added Company entity

Operation URL http method Description

/v6/companies DELETE Delete a list of Companies

/v6/companies GET Get a list of Companies, the result is paginated

/v6/companies POST Insert a list of Companies

/v6/companies PUT Update a list of Companies

February 2021 Avaya Business Rules Engine Integration Guide 47

Operation URL http method Description

/v6/companies /{id} GET Get a single Company, referenced by its ID

• Added Location entity

Operation URL http method Description

/v6/locations DELETE Delete a list of Locations

/v6/locations GET Get a list of Locations, the result is paginated

/v6/locations POST Insert a list of Locations

/v6/locations PUT Update a list of Locations

/v6/locations/{id} GET Get a single Location, referenced by its ID

• Added Agent Group entity

Operation URL http method Description

/v6/agentgroups DELETE Delete a list of Agent Groups

/v6/agentgroups GET Get a list of Agent Groups, the result is paginated

/v6/agentgroups POST Insert a list of Agent Groups

/v6/agentgroups PUT Update a list of Agent Groups

/v6/agentgroups/{id} GET Get a single Agent Group, referenced by its ID

• Added Application entity

Operation URL http method Description

/v6/applications DELETE Delete a list of Applications

/v6/applications GET Get a list of Applications, the result is paginated

/v6/applications POST Insert a list of Applications

/v6/applications PUT Update a list of Applications

February 2021 Avaya Business Rules Engine Integration Guide 48

Operation URL http method Description

/v6/applications/{id} GET Get a single Application, referenced by its ID

• Added Service entity

Operation URL http method Description

/v6/services DELETE Delete a list of Services

/v6/services GET Get a list of Services, the result is paginated

/v6/services POST Insert a list of Services

/v6/services PUT Update a list of Services

/v6/services/{id} GET Get a single Service, referenced by its ID

• Added Global Property (GP) entity

Operation URL http method Description

/v6/globalproperties DELETE Not supported

/v6/globalproperties GET Get a list of GPs, the result is paginated

/v6/globalproperties POST Insert a list of GPs

/v6/globalproperties PUT Update a list of GPs

/v6/globalproperties/{id} GET Get a single GP, referenced by its ID

• Added StrategySettings entity

Operation URL http Description method

/v6/strategysettings DELETE Delete a list of Strategy Settings

/v6/strategysettings GET Get a list of Strategy Settings, the result is paginated

/v6/strategysettings POST Insert a list of Strategy Settings

February 2021 Avaya Business Rules Engine Integration Guide 49

Operation URL http Description method

/v6/strategysettings PUT Update a list of Strategy Settings

/v6/strategysettings/{id} GET Get a single Strategy Settings, referenced by its ID

/v6/strategysettings/{name}/settings GET Get a single Strategy Settings, referenced by its Name and Segmentation Table Name Entities and Features which were Supported in v5 (Avaya Dynamic Routing 3.3)

• Destination Address changes (e.g. Agent Groups, Services, and Applications) have been modified, such that, if a Destination Address needs to be updated, its addressId must be provided (when adding an Address do not provide an addressId). { "propertiesValues": [], "id": "9ac04711-bcd6-4593-8db5-ed1404c2b2d5", "name": "ExtendedContext", "channel": "VOICE", "addresses": [ { "id": "9e132d55-0376-45a9-b06c- c597f9ae936a", "name": "0", "address": "http://ivr.alive.com/voicePortal/extendedCallerDataInput/Start" } ] }

• Added Timezone entity

February 2021 Avaya Business Rules Engine Integration Guide 50

Operation URL http method Description

/v6/timezones DELETE Delete a list of Timezones

/v6/timezones GET Get a list of Timezones, the result is paginated

/v6/timezones POST Insert a list of Timezones

/v6/timezones PUT Update a list of Timezones

/v6/timezones/{id} GET Get a single Timezone, referenced by its ID

Timetables have a Timezone associated with them.

What's New in Avaya Business Rules Engine 3.6

• Added Multi-Tenancy support to Admin API

• Added Tenant entity

Operation URL http method Description

/v6/tenants DELETE Delete a list of Tenants

/v6/tenants GET Get a list of Tenants, the result is paginated

/v6/tenants POST Insert a list of Tenants

/v6/tenants PUT Update a list of Tenants

/v6/tenants/{id} GET Get a single Tenant, referenced by its ID

Limits of POST, PUT, DELETE Commands

These limits are applicable to POST, PUT, DELETE commands: • Admin API limits the number of entities that can be processed in a single request, in order to not overload the system. The limits are the same ones imposed by Web Admin. Web Admin respects the limits set in System Properties, which can be adjusted up to a maximum value imposed by the product. If any request exceeds these limits, it will be rejected. • The request body size is limited to 2 MB (megabytes). If any incoming request is greater that this size, it will receive HTTP status code <413> and be rejected.

February 2021 Avaya Business Rules Engine Integration Guide 51

• To limit the size of headers, the IDs of newly created entities, are added to the body of the response, rather than the header. • Admin API operations (especially with long lists) can take a long time (up to 15 minutes). If the request needs even more time than that, it will timeout and return an error code <504>. • Special characters, such as backslash \, or double quote ", should be escaped in the JSON object. For example, abc\dce, should be abc\\dce, or abc"dce should be abc\"dce. The GET command will return escaped strings in the JSON object; similarly, the POST/PUT commands, should provide these characters escaped in the JSON object.

Authentication and Authorization Mechanism

Admin API supports Basic-Authentication. To consume this API, there must be a user in the system - created through Web Admin - whose role enables access to Admin API, as illustrated in the following picture.

Figure 7: Edit role It is also possible to configure a more granular set of permissions to a given role, enabling some operations and not others. In the picture below, we can see the operations View, Add, Update and Delete enabled for entities such as Segmentation Table, Time table and Decision Tracer (among others), but not for Strategy Settings.

February 2021 Avaya Business Rules Engine Integration Guide 52

Figure 8: Edit Permissions Authorization via System Manager Single Sign-on Avaya Business rule engine can be integrated with System Manager for authorization and authentication. If SMGR SSO feature is enabled for BRE, Admin API authentication also works via System Manager, that means that each request to Admin API will try to authenticate in System Manager. Authorization cache is enabled by default on Admin API in order to reduce number of requests to SMGR. User authorization token will be stored in cache after first request and can be kept there for configurable amount of time. Please refer to Avaya Business Rules Engine Cluster Management guide on how to configure cache expiry timeouts or disable this feature. Please note that disabling authorization cache may lead to significant performance lose for consecutive Admin API requests and Avaya Business Rules Engine Import Export Tool.

Working with Different Tenants

"TenantFullName" header should be provided, along with authorization header, to work with a particular tenant. Tenant Full Name along with the Authorization header, allows the user to authorize into a particular tenant and work with its content. Each user should have a Role with set of permissions allowing access to the particular tenant (or a Role that was propagated from the parent Tenant). If TenantFullName is not provided, requests go to the System Tenant. The JSON schemas for all entities remain the same, so entities can be obtained from one tenant and posted to another, by simply changing tenant's full name. The Admin API client software must provide the following request headers, when invoking the API:

February 2021 Avaya Business Rules Engine Integration Guide 53

quest Description Syntax Example Header

Authorization The HTTP Authorization Authorization: Authorization: Basic request header contains YWRtaW46QXZheWE the credentials to xMjMh authenticate a user agent with a server. For Admin API the credentials are user:password encoded in Base64 format. You can use the following link for encoding: https://www.base64enc ode.org

Accept The Accept request Accept: Accept: header advertises which / expressed as MIME types, the client is able to recognize and manage

Content- The Content-Type entity Content-Type: Content-Type: Type header is used to application/json application/json indicate the media type of the resource. In responses, a Content-Type header tells the client what the content type of the returned content actually is.

TenantFullN The TenantFullName TenantFullName: TenantFullName: ame header is used to / Tenant you are making a request to. The name is build using the following format: "t1" - for Tenant, "t1/LoB" - for LoB.Leave this header empty to

February 2021 Avaya Business Rules Engine Integration Guide 54

quest Description Syntax Example Header work with System Tenant.

If we want to access the Admin API with user: admin and password: 123456 , we would pass the following request headers: HTTP Request Headers to Access Admin API Authorization: Basic YWRtaW46QXZheWExMjMh Accept: application/json Content-Type: application/json

Where YWRtaW46QXZheWExMjMh corresponds to admin:Avaya123! in Base64 format.

Operations Supported

We have enabled Swagger, where you can see the different operations supported. You can access Swagger at https://[IP]/abre-admin-api/swagger-ui.html

Figure 9: ABRE REST API Swagger UI

February 2021 Avaya Business Rules Engine Integration Guide 55

Figure 10: Acd Rest Controller expanded view

Figure 11: Acd Rest Controller – POST screen

(*) Authorization: alphanumeric string with user and password encoded in Base64 (Basic authentication)

Retrieve Operations (GET)

When the ID is provided in the URI, an entity is returned in JSON format. If the ID is not provided, a list of entities is returned in JSON format. See sample entities in JSON format in the Swagger document.

February 2021 Avaya Business Rules Engine Integration Guide 56

Pagination: we can indicate, in the URL, parameters for page and size, to retrieve a specific page and a number of elements on it Example: https:///abre_admin_api/abre/adminapi/v6/timetables?page=1&size=10 If the user indicates a page that doesn't exist, a link will be sent to the last page which has results. In the "links" response header, users receive the link to the next and previous page, if they exist. For example: "links": "; rel=\"next\""

Insert Operations (POST)

Admin API supports bulk inserts. The client must not provide the IDs of the entities, since they are generated by Avaya Business Rules Engine. The entity/ies to insert must not exist in Avaya Business Rules Engine, otherwise an error is returned. See examples of JSON in the Swagger documentation

In the Location header, the client will receive the location of the created entities

Update Operations (PUT)

Admin API supports bulk updates. The client must provide the IDs of the entities to update. The entity/ies to update must exist in Avaya Business Rules Engine, otherwise an error is returned. See examples of JSON in the Swagger documentation

Delete Operations (DELETE)

Admin API supports bulk deletes. The client must provide the IDs of the entities to delete. We must supply in the body of the request, a list of IDs of entity/ies to delete in JSON format. The entity/ies to delete must exist in Avaya Business Rules Engine, otherwise an error is returned. Example: ["1ded846e-7dae-403c-abb5-c12711863891","2ded846e-7dae-403c-abb5- c12711863891","3ded846e-7dae-403c-abb5-c12711863891"]

February 2021 Avaya Business Rules Engine Integration Guide 57

Error Codes

All successful operations return HTTP code 20x (for POST operations, it is 201, while for GET, for example, it is 200). If a user could not be authenticated, 401 is returned If a user could be authenticated but he has no permissions, 403 is returned If the request body size is greater than 2 MB (megabytes), 413 is returned and the request is rejected. If a request needs more than 15 minutes to process, it will timeout and return error code 504. All other errors return code 500 plus an error code, a description, the id of the object and the id of the transaction in JSON format Example of an error reported in the response body { "errorDescription": "Duplicate name: A11. The name should be unique accross all entities of the same type", "trxId": "0fad8e36-c76e-46bd-b510-46533fbfd52c", "objType": "Acd", "reference": "name (value:)", "Error": { "description": "Entity already exists", "error_code": "ERROR_5008" } }

List of Avaya Business Rules Engine Error Codes

Error Description

ERROR_5008 Entity already exists

ERROR_5009 Entity does not exist

ERROR_5010 Entity could not be inserted

ERROR_5011 Entity could not be updated

ERROR_5012 Entity could not be deleted

February 2021 Avaya Business Rules Engine Integration Guide 58

Error Description

ERROR_5013 Entity could not be retrieved

ERROR_5014 Entity name already exist

ERROR_5015 IDs do not match

ERROR_5016 Reference error (prerequisites don't exists)

ERROR _5017 Unique field duplicated

ERROR _5018 IDs must not be sent

ERROR _5019 Entity limit exceeded

ERROR_5018 useRowEvaluationMode cannot be changed

ERROR_5099 Operation error *

(*) Logs and audit records can be found in [AVAYA_HOME]/third- party/gigaspaces/gigaspaces-xap-12.3.1-ga-b19300/logs/ folder.

Prerequisites for Segmentation Tables

For insert and update operations on Segmentation Rules, the following constraints apply: • Strategy Settings with the specified name should exist. • Destination Aliases should match the Destination Aliases in the Strategy Script (related through Strategy Settings). • If Strategy Settings contain time dependent variables, the Timetables should exist. • Destinations used in the Segmentation Rule, should exist.

For insert and update operations on Segmentation Tables, the following constraints apply: • If Lookup Table dimensions are provided, the provided Lookup Table should exist.

Prerequisites for Strategy Settings

The Strategy Settings entity is related to a Strategy Script and a Timetable, and the following constraints apply: • The Timetable referenced by name must exist.

February 2021 Avaya Business Rules Engine Integration Guide 59

• The intervals of the Timetable need to be the same intervals defined in the time dependent variables. • The Strategy Script referenced should exist. • The Destination Aliases, variables, and variable types need to match the Strategy Script definitions.

Prerequisites for Lookup Tables

The operations related to Lookup Tables are categorized into: metadata operations and entries operations. The Lookup Table referenced by ID must exist. When inserting a Lookup Table, not only its name must be unique but all the Dimension names must be also unique.

Prerequisites for Applications

Mandatory fields: • ID (for POST operation should not be sent) • Name • Channel Type (VOICE, CHAT, EMAIL, VIDEO, SMS, FACEBOOK, TWITTER, WEB) • Address: At least one entry of address must be exist.

Prerequisites for Locations

Mandatory fields: • ID (for POST operation should not be sent) • Name Optional: • Global Properties - should already exist to use them.

Prerequisites for Company

Mandatory Fields: • ID (for POST operation should not be sent) • Name

February 2021 Avaya Business Rules Engine Integration Guide 60

Optional: • Global Properties - should already exist to use them.

Prerequisites for ACD

Mandatory Fields: • ID (for POST operation should not be sent) • Name Optional: • Global Properties - should already exist to use them.

Requests and Responses: structural considerations

The values of a Strategy Settings consist of a list of variables and their values, but since there are many different kinds of variables, the way to build the values differs. The property "values" is a map, in which the key of the map is the name of the variable and the value is the value of the variable; the value can be a single value, or a set of values if the variable is "per Destination", "per Interval" or "per Destination Interval". Example: If the Strategy Settings has 4 variables {"SIMPLE_VAR", "PER_INTERVAL_VAR", "PER_DEST_VAR", "PER_DEST_INTERVAL_VAR"}, 2 Destination Aliases {"DA1", "DA2"}, and a Timetable with {"INTERVAL1", "INTERVAL2"} the following structure describes the settings:

Property Map Key Map 1st 2nd Description (not Key Value nesting nesting JSON code) level level

values : { values is a map of key value pairs, where key is the variable name and value is the variable value (a JSON Object with fields: discriminator, value, and multiValue)

February 2021 Avaya Business Rules Engine Integration Guide 61

Property Map Key Map 1st 2nd Description (not Key Value nesting nesting JSON code) level level

SIMPLE_VAR: { value : Simple variable "variable_v with the name alue" } SIMPLE_VAR and a single value = "variable_value"

PER_DESTIN { {discriminat Per destination ATION_VAR: multiValue or : "DA1", variable with the : [ name PER_DESTINATI ON_VAR, which has a value for each Destination Alias in the referred script, the Destination Aliases are DA1 and DA2. In this case single value is empty, but multi value is filled with each Destination Alias value

value : "variable_v alue" },

{ discriminat or : "DA2",

value : "variable_v alue"}

] }

PER_INTERV { {discriminat The structure of AL_VAR: multiValue or : per interval : [ "INTERVA variables is the L1", same as per destination variables, but instead of using

February 2021 Avaya Business Rules Engine Integration Guide 62

Property Map Key Map 1st 2nd Description (not Key Value nesting nesting JSON code) level level Destination Aliases as discriminators, use Interval names instead.

value : "variable_v alue" },

{discriminat or : "INTERVA L2",

value : "variable_v alue"}

] }

PER_DEST_I { {discriminat Per destination NTERVAL_VA multiValue or : "DA1", interval variables, R: : [ have 2 levels multi variable values, first level is the Destination Alias, and inside that, there is another multi value, which is the Interval name.

multiValue: {discriminat [ or : "INTERVAL 1",

value : "variable_v alue"},

{discriminat or :

February 2021 Avaya Business Rules Engine Integration Guide 63

Property Map Key Map 1st 2nd Description (not Key Value nesting nesting JSON code) level level "INTERVAL 2",

value : "variable_v alue"}

]} ,

{discriminat or : "DA2",

multiValue: {discriminat [ or : "INTERVAL 1",

value : "variable_v alue"},

{discriminat or : "INTERVAL 2",

value : "variable_v alue"}

]}

]}

}

As the variables support default values, the "value" field can be null (last leaf) in which case the variable uses the default value. If the variable value contains a null, the default value for the variable is used. The value can either be set to null (e.g. "value": null) or the value header may not be provided at all (as in the example below) to indicate usage of the default value. Example: " values

February 2021 Avaya Business Rules Engine Integration Guide 64

": { "routeC": {}, "queueCapThreshold": { "multiValue": [ { "discriminator": "DEST_ALIAS1" , "value": "00" }, { "discriminator": "DEST_ALIAS2" , "value": "00" }, { "discriminator": "DEST_ALIAS3" }, { "discriminator": "DEST_ALIAS4" },

In the example, routeC is a single variable, with the default value; queueCapThereshold is a per Destination variable, and the script has 4 Destination Aliases: DEST_ALIAS1 and DEST_ALIAS2 each have a defined value in the Strategy Settings, DEST_ALIAS3 and DEST_ALIAS4 have no specified value in the Strategy Settings, so the value from the Strategy Script Metadata will be used instead.

Transactions

Every operation on a single object is a transaction, but for bulk operations, all the objects are considered part of a single transaction. For instance, if we have an insert of a list of Timetables, if one of them fails all the other inserts are rolled back.

Post Operation: Writing IDs to the Response body

February 2021 Avaya Business Rules Engine Integration Guide 65

Figure 12: Post Operation screen 1

Figure 13: Post Operation screen 2

February 2021 Avaya Business Rules Engine Integration Guide 66

Figure 14: Post Operation screen 3

February 2021 Avaya Business Rules Engine Integration Guide 67

Chapter 4: Alarms Setup and Description

Configuring each Avaya Business Rules Engine node to point to an SNMP server

The file ${AVAYA_HOME}/abre/config/processing-units/snmp.properties contains the properties to send alarms to an SNMP server (e.g. SAL). The administrator of the SNMP server should provide the values of some of these properties. This file should be changed by using only CMT commands and on all ABRE nodes. Please refer to the ABRE Cluster Management Guide. The CMS Connector nodes have their own snmp.properties file. This file needs to be changed manually, following the steps described in the related section below. Example for SNMP v2: snmp.1.version=v2 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe

Example for SNMP v3: snmp.1.version=v3 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe snmp.1.user.name=initial snmp.1.user.securityName=initial snmp.1.user.authenticationProtocol=MD5 snmp.1.user.authenticationPassword=12345678 snmp.1.user.privacyProtocol=DES snmp.1.user.privacyPassword=12345678

Notes: • Supported protocols are: SNMPv2 and SNMPv3 (property snmp.[targetId].version) • Do not change the snmp oid • The authenticationPassword and privacyPassword should have at least 8 characters • You can configure several SNMP servers by repeating the same keys with different numeric targetId: snmp.[targetId].version

February 2021 Avaya Business Rules Engine Integration Guide 68

• To apply the changes, an Avaya Business Rules Engine Cluster Services restart is required. The procedure to restart can be found in the Cluster Management Guide document • After restarting the services, it is recommended to execute the Sanity Test Checklist procedure described in the Cluster Management Guide

Configuring each Avaya Business Rules Engine node to point to System Manager

The file ${AVAYA_HOME}/abre/config/processing-units/snmp.properties contains the properties to send alarms to a System Manager. The administrator of the System Manager should provide the values of some of these properties. For information on configuring SNMP on System Manager, see the section "TrapListener service" in the chapter "Managing events" in Administering Avaya Aura® System Manager. This file should be changed by using only CMT commands and on all ABRE nodes. Please refer to the ABRE Cluster Management Guide. The CMS Connector nodes have their own snmp.properties file. This file needs to be changed manually, following the steps described in the related section below. ABRE Alarms should also be configured on System Manager. Please see related section below. Example for SNMP v2: snmp.1.version=v2 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe

Example for SNMP v3: snmp.1.version=v3 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe snmp.1.user.name=initial snmp.1.user.securityName=initial snmp.1.user.authenticationProtocol=MD5 snmp.1.user.authenticationPassword=12345678 snmp.1.user.privacyProtocol=DES snmp.1.user.privacyPassword=12345678

Notes: • Example above uses port 10162, port should match what is configured in SMGR (see TrapListener configuration in SMGR)

February 2021 Avaya Business Rules Engine Integration Guide 69

• Example above uses community asmcpe, community should match what is configured in SMGR (see TrapListener configuration in SMGR) • Do not change the snmp oid • The user.securityName is same as the user.name • The authenticationPassword and privacyPassword should have at least 8 characters • If the Privacy Protocol is set to "AES" in TrapListener configuration on System Manager, the user.privacyProtocol must be set to AES128 • You can configure several SNMP servers by repeating the same keys with different numeric targetId: snmp.[targetId].version • To apply the changes, an Avaya Business Rules Engine Cluster restart is required. The procedure to restart can be found in the Cluster Management Guide document • After restarting the services, it is recommended to execute the Sanity Test Checklist procedure described in the Cluster Management Guide.

Configuring CMS/AACC Connector to point to an SNMP server

Edit the /config/application/snmp.properties file and set the parameters to send alarms to an SNMP server. The administrator of the SNMP server should provide the values of some of these properties. Example for SNMP v2: snmp.1.version=v2 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe

Example for SNMP v3: snmp.1.version=v3 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe snmp.1.user.name=initial snmp.1.user.securityName=initial snmp.1.user.authenticationProtocol=MD5 snmp.1.user.authenticationPassword=12345678 snmp.1.user.privacyProtocol=DES snmp.1.user.privacyPassword=12345678

Notes:

February 2021 Avaya Business Rules Engine Integration Guide 70

• The protocols supported are SNMPv2 and SNMPv3 • Do not change the snmp.oid • The authenticationPassword and privacyPassword should have at least 8 characters • To apply the changes, a CMS Connector restart is required. The procedure to restart can be found in the Cluster Management Guide document

Configuring CMS/AACC Connector to point to System Manager

Edit the /config/application/snmp.properties file and set the parameters to send alarms to a System Manager. The administrator of the System Manager should provide the values of some of these properties. For information on configuring SNMP on System Manager, see the section "TrapListener service" in the chapter "Managing events" in Administering Avaya Aura® System Manager. Example for SNMP v2: snmp.1.version=v2 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe

Example for SNMP v3: snmp.1.version=v3 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe snmp.1.user.name=initial snmp.1.user.securityName=initial snmp.1.user.authenticationProtocol=MD5 snmp.1.user.authenticationPassword=12345678 snmp.1.user.privacyProtocol=DES snmp.1.user.privacyPassword=12345678

Note:

• Example above uses port 10162, port should match what is configured in SMGR (see TrapListener configuration in SMGR) • Example above uses community asmcpe, community should match what is configured in SMGR (see TrapListener configuration in SMGR) • Do not change the snmp oid • The user.securityName is same as the user.name • The authenticationPassword and privacyPassword should have at least 8 characters • If the Privacy Protocol is set to "AES" in TrapListener configuration on System Manager, the user.privacyProtocol must be set to AES128 • To apply the changes, a CMS Connector restart is required. The procedure to restart can be found in the ABRE Cluster Management Guide document.

February 2021 Avaya Business Rules Engine Integration Guide 71

Configuring Alarms on System Manager (SMGR)

In order for System Manager to display Avaya Business Rules Engine alarms properly, a “Common Alarm Definition File” must be configured and installed on SMGR by creating an Extension Pack. The extension pack for Avaya Business Rules Engine is available under Avaya Business Rules Engine Downloads at http://support.avaya.com. Note: the file is named something like BusinessRulesEngine3.6GACommonAlarmDefinitionExtensionPack.jar. If the file's extension name is changed (e.g. to .) during download by the browser, manually change it back to .jar . To install the extension pack on a running SMgr, follow these steps:

1. Copy the Avaya Business Rules Engine Extension Pack to the SMgr (this directory will be used for the ${PATH_TO_EXTENSION_PACK} information in step 4. 2. Log into SMgr as root user. 3. Navigate (cd) to this folder: $MGMT_HOME/plug/install/unix 4. Execute the following tool:

o ./install_plugin_files.sh false Postgres 'jdbc:postgresql://localhost/avmgmt' $JBOSS_HOME avmgmt ${PATH_TO_EXTENSION_PACK} The ${PATH_TO_EXTENSION_PACK} information should be replaced by the Avaya Business Rules Engine Extension Pack file name and full path. o for example: ./install_plugin_files.sh false Postgres 'jdbc:postgresql://localhost/avmgmt' $JBOSS_HOME avmgmt /home/cust/BusinessRulesEngine3.6GACommonAlarmDefinitionExtensionPack.j

5. Log into SMGR web console and go to Home » Services » Inventory » Manage Elements and add an entry for ABRE with the following attributes:

• Name: a name for the administration site, e.g. "Web Admin" • Type: Other Applications • Node: IP/hostname to access node where ABRE Web Admin is installed • Add Access Profile o Name: a name for the access profile o Type: EMURL o Protocol: http (or https) o Host: IP/hostname to access node where ABRE Web Admin is installed o Port: 80 if Protocol is http (or 443 if Protocol is https)

February 2021 Avaya Business Rules Engine Integration Guide 72

o Path: /abre-admin/ o Order: 0 Example screenshots from System Manager below:

Figure 15: Example-1 SMGR

Figure 16: Example-2 SMGR

MIB file

The MIB (Management Information Base) file describes SNMP network elements. If it is needed to configure your SNMP target server, you can find it in [ABRE_HOME]/tools/ABRE- MIB.txt.

February 2021 Avaya Business Rules Engine Integration Guide 73

Upgrade

When upgrading ABRE from versions previous to ABRE 3.4, the snmp.properties file needs to be manually re-configured to reflect the previous SNMP setup. This file can be found in [ABRE_HOME]/config/processing-units/snmp.properties. For CMS Connector, the snmp.properties file is automatically set-up during upgrade.

Avaya Business Rules Engine SNMP Threshold Configuration

Avaya Business Rules Engine declares and listens for a set of alarms configured in a file called alerts.xml, located at ${AVAYA_HOME}/abre/third-party/gigaspaces/gigaspaces-xap- premium-10.2.1-ga/config/alerts/alerts.xml. Once one of these alarms is notified by Gigaspaces XAP (the In-Memory Data Grid platform used by Avaya Business Rules Engine), an SNMP alarm is raised. Example:

Figure 17: CPU SNMP Alarm displayed in SMgr Interface

Figure 18: Gigaspaces XAP's GSM Memory Alarm displayed in SMgr Interface

For each alarm, there are 3 different parameters to set: ,

Available Thresholds:

February 2021 Avaya Business Rules Engine Integration Guide 74

Figure 19: Available Threshold

Note: To apply the thresholds, a system restart is required. See Cluster Management Guide. After restarting the services, it is recommended to execute the Sanity Test Checklist procedure described in the Avaya Business Rules Engine Cluster Management Guide.

Triggering a Test Alarm for Avaya Business Rules Engine

In order to test the configuration, a test alarm can be triggered. Go to Decision API using a Web Browser and look for operation /rest/getdestination: http://[IP]/abre-decision-api/#!/rest/getDestination Click on Model Schema to copy it to body text field. Note tenantFullName is an optional parameter and can be omitted.

February 2021 Avaya Business Rules Engine Integration Guide 75

Figure 20: Model Schema Click "Try it out". A result code -202 in the response is returned. This means we are trying to use a non- existent Decision Function If the alarm configuration is correct, we should see an alarm in the SNMP server.

Figure 21: Test Alarm - ABRE

Triggering a Test Alarm for CMS Connector

This test works in an environment without any CMS sending real metrics Stop CMS Connector and CMS Simulator (if it is up) (See Cluster Management Guide) Start CMS Connector (See Cluster Management Guide) After 5 minutes, CMS Connector will be alarming that it is not receiving metrics, you should get alarm raised in the SNMP Server

Figure 22: Test Alarm – CMS Connector

February 2021 Avaya Business Rules Engine Integration Guide 76

Triggering a Test Alarm for AACC Connector

Edit the file /config/application/metrics_connector_commun ication.properties to add a dummy IP address to the field “multicast.source.hosts”, e.g. multicast.source.hosts=192.168.0.200 Start (or restart) AACC Connector, e.g. systemctl start aacc-connector After 5 minutes, AACC Connector will be alarming that it is not receiving metrics from the dummy host. You should get alarm raised in the SNMP Server, e.g.

Figure 23: Test Alarm – AACC Connector

Avaya Business Rules Engine 3.6 Alarm Descriptions

Description of Avaya Business Rules Engine alarms can be found below.

NOTE Below are the values that appear in the MMF file for SAL. • * Other is set to Warning, in the SMgr XML file, as SMgr does not accept Other. • ** When alarm is being cleared, Other is set to Cleared and type=RES, in the SMgr XML file.

Type OID Alarm Type Alarm Name Message Even t Id

SNMP .1.3.6.1.4.1 Major routingEngineNo There is no Tenant defined 1 .6889.2.78. Tenant with that name 3.2.2.4

SNMP .1.3.6.1.4.1 Major routingEngineScr Script Error while 2 .6889.2.78. iptErrorWhilePro processing 3.2.2.5 cessing

SNMP .1.3.6.1.4.1 Minor routingEngineErr Error while processing 3 .6889.2.78. orWhileProcessin 3.2.2.6 g

February 2021 Avaya Business Rules Engine Integration Guide 77

Type OID Alarm Type Alarm Name Message Even t Id

SNMP .1.3.6.1.4.1 Major routingEngineNo There is no Decision 4 .6889.2.78. DecisionFunction Function defined with that 3.2.2.7 name

SNMP .1.3.6.1.4.1 Major routingEngineScr Groovy script didn't choose 5 .6889.2.78. iptNoDestination a destination 3.2.2.8

SNMP .1.3.6.1.4.1 Major routingEngineScr Groovy script didn't choose 6 .6889.2.78. iptNoDestination a selected destination 3.2.2.9 Address address

SNMP .1.3.6.1.4.1 Other * routingEngineScr Script has set an error code 7 .6889.2.78. iptErrorCode for resultCode 3.2.2.10

SNMP .1.3.6.1.4.1 Major routingEngineSav Error while saving decision 8 .6889.2.78. eDecision 3.2.2.11

SNMP .1.3.6.1.4.1 Major configStoreFeatur Error while getting Agent 9 .6889.2.78. eGetAgentGroup Group by Destination Alias 3.3.1.1 ByDestAlias

SNMP .1.3.6.1.4.1 Major configStoreFeatur Error while getting ACD 10 .6889.2.78. eGetAcdById by Id 3.3.2.1

SNMP .1.3.6.1.4.1 Major configStoreFeatur Error while getting ACD 11 .6889.2.78. eGetAcdByName by Name 3.3.3.1

SNMP .1.3.6.1.4.1 Major configStoreFeatur Error while getting Agent 12 .6889.2.78. eGetAgentGroup Group by Name 3.3.4.1 ByName

SNMP .1.3.6.1.4.1 Major configStoreFeatur Error while getting Agent 13 .6889.2.78. eGetAgentGroup Group List by Service 3.3.5.1 ListByService

SNMP .1.3.6.1.4.1 Major configStoreFeatur Error while getting Agent 16 .6889.2.78. eGetAgentGroup Group list by ACD 3.3.8.1 ListByAcd

February 2021 Avaya Business Rules Engine Integration Guide 78

Type OID Alarm Type Alarm Name Message Even t Id

SNMP .1.3.6.1.4.1 Major configStoreFeatur Error while getting Entity 17 .6889.2.78. eGetEntityByNa by name 3.3.9.1 me

SNMP .1.3.6.1.4.1 Other contextStoreFeatu Error while getting data for 18 .6889.2.78. reGetData contextId 3.4.1.1

SNMP .1.3.6.1.4.1 Other metricsFeatureGe Error while getting metrics 19 .6889.2.78. tMetrics for ownerId 3.5.1.1

SNMP .1.3.6.1.4.1 Other metricsFeatureGe Error while getting metric 20 .6889.2.78. tMetric for ownerId and metric 3.5.2.1 name

SNMP .1.3.6.1.4.1 Other metricsFeatureGe Error while getting metrics 23 .6889.2.78. tMetricsCounter counter 3.5.3.1

SNMP .1.3.6.1.4.1 Other metricsFeatureGe Error while getting ACD 21 .6889.2.78. tAcdMetricStatus Metrics Status 3.5.4.1

SNMP .1.3.6.1.4.1 Major segmentationFeat Error while doing 22 .6889.2.78. ureDoSegmentati segmentation 3.6.1.1 on

SNMP .1.3.6.1.4.1 Major routingEngineSer Server is currently under 25 .6889.2.78. verOverload heavy load 3.8.1.1

SNMP .1.3.6.1.4.1 Critical routingEngineSer Server rejected a request 26 .6889.2.78. verRejectRequest due to the license issue 3.8.1.2

SNMP .1.3.6.1.4.1 Major routingEngineSer Server received more 27 .6889.2.78. verExceedTraffic requests per hour than the 3.8.1.3 Target licensed traffic target

SNMP .1.3.6.1.4.1 Critical rtMonitoringPuSt ABRE module status is 100 .6889.2.78. atsHasBeenChan UNDEPLOYED, 5.4.1.1 ged CRASHED,

February 2021 Avaya Business Rules Engine Integration Guide 79

Type OID Alarm Type Alarm Name Message Even t Id COMPROMISED or UNKNOWN

SNMP .1.3.6.1.4.1 Critical rtMonitoringPuSt ABRE module status is 102 .6889.2.78. atsHasBeenRemo STOPPED 5.4.1.3 ved

SNMP .1.3.6.1.4.1 Other metricsStatusAdd Add metrics status failed 200 .6889.2.78. because there already 2.1.1 exists another object

SNMP .1.3.6.1.4.1 Other metricsStatusFind Wanted metrics status but 201 .6889.2.78. it does not exist yet 2.1.2

SNMP .1.3.6.1.4.1 Other AcdMetricsStatus ACD Metrics stale 204 .6889.2.78. ProcessingListene percentage crossed above 2.1.5 rAboveWarning warning threshold Mark

SNMP .1.3.6.1.4.1 Major AcdMetricsStatus ACD Metrics stale 205 .6889.2.78. ProcessingListene percentage crossed above 2.1.6 rAboveCriticalM critical threshold ark

SNMP .1.3.6.1.4.1 Major CpuUtilizationAl CPU Utilization above 250 .6889.2.78. ert threshold level 2.2.1.1

SNMP .1.3.6.1.4.1 Other / CpuUtilizationAl CPU Utilization below 251 .6889.2.78. Cleared ** ertCleared threshold level 2.2.1.2

SNMP .1.3.6.1.4.1 Major PhysicalMemory Physical memory 252 .6889.2.78. UtilizationAlert utilization above threshold 2.2.2.1 level

SNMP .1.3.6.1.4.1 Other / PhysicalMemory Physical memory 253 .6889.2.78. Cleared UtilizationAlertCl utilization below threshold 2.2.2.2 eared level

SNMP .1.3.6.1.4.1 Major HeapMemoryUtil JVM heap memory 254 .6889.2.78. izationAlert utilization above threshold 2.2.3.1 level

February 2021 Avaya Business Rules Engine Integration Guide 80

Type OID Alarm Type Alarm Name Message Even t Id

SNMP .1.3.6.1.4.1 Other / HeapMemoryUtil JVM heap memory 255 .6889.2.78. Cleared izationAlertClear utilization below threshold 2.2.3.2 ed level

SNMP .1.3.6.1.4.1 Major MirrorPersistence A Mirror persistency 256 .6889.2.78. FailureAlert failure alert, triggered upon 2.2.4.1 a failed replication from primary Space to Mirror Space, due to an error (e.g. a DB error)

SNMP .1.3.6.1.4.1 Other / MirrorPersistence Mirror persistency failure 257 .6889.2.78. Cleared FailureAlertClear cleared 2.2.4.2 ed

SNMP .1.3.6.1.4.1 Major rdrPersistenceDat Unable to persist RDRs 300 .6889.2.78. aBaseError due to database error 9.1.1

SNMP .1.3.6.1.4.1 Major savingObjectToK Unable to save object into 303 .6889.2.78. afkaError Kafka 9.1.4

SNMP .1.3.6.1.4.1 Warning gracePeriodWarni License entered into grace 310 .6889.2.78. ng period 6.1.1.1

SNMP .1.3.6.1.4.1 Critical featureNotEnable Feature not enabled on 311 .6889.2.78. d WebLM. 6.1.1.2

SNMP .1.3.6.1.4.1 Warning countedLicenses Feature does not have 312 .6889.2.78. NotEnough enough counted licenses on 6.1.1.3 WebLM.

SNMP .1.3.6.1.4.1 Major notGettingMetric Not getting RT feed from 701 .6889.2.78. s Metrics Source 7.1.1.1

SNMP .1.3.6.1.4.1 Other / gettingMetrics Getting RT feed from 702 .6889.2.78. Cleared Metrics Source 7.1.1.2

February 2021 Avaya Business Rules Engine Integration Guide 81

Type OID Alarm Type Alarm Name Message Even t Id

SNMP .1.3.6.1.4.1 Critical connectionToElas Unable to connect to 704 .6889.2.78. ticError Elasticsearch 9.1.6

SNMP .1.3.6.1.4.1 Other elasticQueryTime Elasticsearch timeout 705 .6889.2.78. out waiting for query result 9.1.7

SNMP .1.3.6.1.4.1 Major auditLogPersisten Unable to persist Audit 706 .6889.2.78. ceDataBaseError Log records due to 9.1.8 database error

SNMP .1.3.6.1.4.1 Critical gatewayChannel Replication Gateway 800 .6889.2.78. OutOfSync outgoing channel out of 8.1.1 sync

SNMP .1.3.6.1.4.1 Critical configStoreSpace Configuration spaces are 801 .6889.2.78. OutOfSync out of sync between data 8.2.1 centers

SNMP .1.3.6.1.4.1 Critical kafkaProcessOffli Kafka process is offline. It 851 .6889.2.78. ne was not found among 10.1.1 running processes.

SNMP .1.3.6.1.4.1 Critical elasticProcessOff Elasticsearch process is 852 .6889.2.78. line offline. It was not found 10.1.2 among running processes

SNMP .1.3.6.1.4.1 Critical logstashProcess Logstash process is 853 .6889.2.78. Offline offline. It was not found 10.1.3 among running processes

SNMP .1.3.6.1.4.1 Critical zookeeperProces Zookeeper process is 854 .6889.2.78. sOffline offline. It was not found 10.1.4 among running processes

SNMP .1.3.6.1.4.1 Major insufficientDiskSp Disk Space utilization on 855 .6889.2.78. ace root partition above 10.1.5 threshold level

SNMP .1.3.6.1.4.1 Critical kafkaMirrorProce Kafka Mirror process is 856 .6889.2.78. ssOffline offline. It was not found 10.1.6 among running processes

February 2021 Avaya Business Rules Engine Integration Guide 82

Type OID Alarm Type Alarm Name Message Even t Id

SNMP .1.3.6.1.4.1 Warning elasticClusterHea Elasticsearch Cluster is 857 .6889.2.78. lthYellowProblem experiencing issues 10.1.7 (status 'yellow')

SNMP .1.3.6.1.4.1 Major kafkaClusterHealt Kafka Cluster is 858 .6889.2.78. hProblem experiencing issues 10.1.8

SNMP .1.3.6.1.4.1 Critical cmsConnectorAv CMS Connector process is 859 .6889.2.78. ailabilityProblem offline. It was not found 10.1.9 among running processes

SNMP .1.3.6.1.4.1 Major elasticClusterHea Elasticsearch Cluster is 860 .6889.2.78. lthRedProblem experiencing issues 10.1.10 (status 'red')

SNMP .1.3.6.1.4.1 Critical aaccConnectorAv AACC Connector process 861 .6889.2.78. ailabilityProblem is offline. It was not found 10.1.11 among running processes

February 2021 Avaya Business Rules Engine Integration Guide 83

Chapter 5: CMS Connector Setup and Troubleshooting

CMS Connector and Related Components

There are typically: • A pair of CMSs (CMS Primary, CMS Secondary) working in Active/Standby mode; one CMS sending data to the CMS Connectors. • A pair (one per DC) of CMS Connectors (CMSC1 and CMSC2) working in Active/Standby mode; both receiving data from the CMS and one sending data to Kafka Cluster in each DC (each CORE consumes metrics from Kafka within the same DC). • All COREs working in Active mode; all containing a snapshot of real-time metrics, and all servicing decision requests. Note Pairs of CMSs, pairs of CMSCs, multiple COREs can be configured to increase reliability; however, the solution can also work with a single of each: CMS, CMSC, and CORE.

CMS Configuration

The CMS needs to have the appropriate report to send the correct metrics to Avaya Business Rules Engine. This report is called abre3. (the file abre3.gem is available in the Avaya Business Rules Engine installation package )

IMPORTANT: If you are upgrading to ABRE 3.6, ensure that the abre3.gem CMS report is added to your CMS, in particular, if the metrics auto-adjustment feature will be used.

Ensure that on the CMS Server(s): • The minimum rt_socket version is 4.5.7 • The .gem file for the report exists /export/home/pserv/rt_socket/GEM/abre3.gem • The report is configured in the rta.conf file: /export/home/pserv/rt_socket/rta.conf • One rt_socket feed is required per ACD. It is a CMS limitation.

February 2021 Avaya Business Rules Engine Integration Guide 84

• The refresh time is designed to be 10 seconds. If a higher number is required, please, change the System Properties » Metric Services » acdMetricStatus.staleThreshold to a higher number also (otherwise, the metrics will appear stale in Web Admin). • The hosts file has entries for the CMS Connectors IP Addresses and hostnames. • The rta.conf file contains configuration as shown below. Each 'session' section encapsulates information for sending an RT Socket report to one CMS Connector. Configure a 'session' for each CMS Connector. # rta.conf - set configuration variables # set -a # export all variables set in this file HACMS=yes # change to yes if HA CMS and auto-failover desired # #------Session 1 ------#------(with EXAMPLE settings, NOT defaults) ------HOST1=rtsocket # the receiving server's host name in /etc/hosts PORT1=7200 # the receiving server's port ACD1=1 # ACD being monitored POPTS1="" # applicable command line options REPORT1=abre3 # respective custom report name MONITOR_LIST1="1-2000" # skills to monitor REFRESH1=10 # respective report refresh rate DEST_APP1="Avaya Business Rules Engine" # destination app for rt_socket or Generic-RTA #------Session 2 ------HOST2=rtsocket2 # the receiving server's host name in /etc/hosts PORT2=7200 # the receiving server's port ACD2=1 # ACD being monitored POPTS2="" # applicable command line options REPORT2=abre3 # respective custom report name MONITOR_LIST2="1-2000" # skills to monitor REFRESH2=10 # respective report refresh rate DEST_APP2="Avaya Business Rules Engine" # destination app for rt_socket or Generic-RTA

February 2021 Avaya Business Rules Engine Integration Guide 85

To modify the rta.conf file, you need to know the VI editor. For more information, see Appendix A.

CMS Connector Configuration

The files below need to be correctly configured on the CMS Connectors. In order to: • setup the connection to Avaya Business Rules Engine Kafka cluster and CMS Connector failover, configure: metrics_connector_communication.properties • setup the connection to CMS RT Socket servers, configure: cmsConfiguration.xml • interpret the reports sent from the CMSs, configure: cmsReportConfiguration.xml • send alarms, configure: snmp.properties

IMPORTANT: • All files are in ${AVAYA_HOME}/cms-connector/config/application • If changes are made to the metrics_connector_communication.properties, cmsConfiguration.xml, cmsReportConfiguration.xml, or snmp.properties files, the CMS Connector needs to be restarted for the changes to take effect. • The same configuration is needed on both CMS Connector 1 (CMSC1) and CMS Connector 2 (CMSC2). metrics_connector_communication.properties

The file metrics_connector_communication.properties is used to configure the connection to ABRE's Kafka cluster and the CMS Connectors' fail-over. CMSC connects to ABRE's nodes and publishes metrics to the Kafka cluster in ABRE. Configure the IP Addresses of all the ABRE nodes, as described below. # Kafka parameter for publishing Destination Metrics # Use ',' as separator for grouping server addresses of same DC # Use '|' as separator for grouping DC addresses # Format: IP01-dc1:port,IP02-dc1:port|IP01-dc2:port,IP02-dc2:port kafka.cluster.dataCenters=172.28.128.4:9092,172.28.128.5:9092,172 .28.128.6:9092|173.28.128.4:9092,173.28.128.5:9092,173.28.128.6:9 092

February 2021 Avaya Business Rules Engine Integration Guide 86

If there are two CMS Connectors, they work as an Active/Standby pair, and fail-over to each other. Configure the IP Addresses of the two CMSCs. Note: If there is only one CMSC, do not make any changes to these parameters. failover.group.hosts defines which IP Addresses are part of the same cluster. Only one CMS Connector can send metrics to ABRE. So if you have two CMS Connectors, one in DC1 (IPDC1) and another in DC2 (IPDC2), that work as active / stand-by, the configuration should as follows: failover.bind_addr is the external IP Address of the CMS Connector. The fail-over mechanism will try to bind a TCP port to this IP Address, the IP Address needs to be visible to the network. In DC1, CMS Connector IP Address = IPDC1 failover.bind_addr=IPDC1 failover.group.hosts=IPDC1[port],IPDC2[port]

In DC2, CMS Connector IP Address = IPDC2 failover.bind_addr=IPDC2 failover.group.hosts=IPDC1[port],IPDC2[port]

# Failover parameters failover.bind_addr=192.168.0.1 failover.bind_port=7830 #Format: HostA[portA],HostB[portB] failover.group.hosts=192.168.0.1[7830],192.168.0.2[7830] cmsConfiguration.xml

The file cmsConfiguration.xml is used to configure which CMS (RT_Socket) connections feed the CMS Connector. At any given time, the CMS Connector accepts only one RT Socket session (either from CMS Primary or CMS secondary). Similarly, only one CMS (RT Socket) sends data at a time; usually CMS Primary sends data, but if the primary goes down, then CMS Secondary sends data after the fail-over timeout. The IP Addresses are those of the CMS Primary and CMS Secondary respectively. CMS Connector Setup - Single pair

February 2021 Avaya Business Rules Engine Integration Guide 87

CMSpair1 135.122.60.98 135.122.60.99

The file configuration can be extended if there are multiple CMS pairs feeding the CMS Connectors, each CMS pair monitors a different set of Agent Groups. For example: CMS Connector Setup - Multiple pairs CMSpair1 135.122.60.98 135.122.60.99 CMSpair2 135.122.60.100 135.122.60.101 cmsReportConfiguration.xml

The file cmsReportConfiguration.xml file is used to interpret the reports sent from the CMS. Make sure you configure the following: report name="abre3": primaryPort="7200"

February 2021 Avaya Business Rules Engine Integration Guide 88

: Field mapping has to be done to match the CMS RT_Socket report (on the CMS server). No changes are needed to the field definitions when using the default abre3 report. The default RT_Socket report contains the following fields, using "(column-number)FIELD" notation: (1)F1, (2)SPLIT, (3)INQUEUE, (4)AVAILABLE, (5)ASA, (6)ABNCALLS, (7)ACDID, (8)OLDESTCALL, (9)AVGTALKTIME, (10)AVGABNTIME, (11)STAFFED, (12)EWTHIGH, (13)EWTMEDIUM, (14)EWTLOW, (15)WAT, (16)PERCENTINSL, (17)SERVICELEVEL, (18)CALLSOFFERED, (19)ACDNAME, (20)SKILLNAME

Figure 24: Socket Output

It is mandatory to define the ACDs and Agent Groups in ABRE to match the RT-Socket report.

ACDs The cmsReportConfiguration.xml file must include the key mapping for each ACD, as follows:

The key mapping can be interpreted as follows: "1ACMS1" is a combination of ACDID and ACDNAME, which are columns 7 and 19 from the RT_Socket report. | F1| 1011| 1| 0| 210| 10| 1| 112| 114| 116| 93| 20| 40| 90| 10| 83| 30| 50| ACMS1| A1_ BasL1_LA "somestring" is the ACD Native ID configured in the ABRE Web Admin. If one incoming CMSC metric should feed multiple ABRE ACDs, then all these ABRE ACDs should have their Native ID configured to the same string used in the CMSC cmsReportConfiguration.xml file. The string used in the CMSC cmsReportConfiguration.xml file can be anything (not limited to the ACD ID as in previous releases). Previously, the metrics were matched to the ABRE ACD ID. In order to maintain backwards compatibility, during upgrade, the ACD ID is copied to the ACD Native ID. Once the ACD is mapped in the file cmsReportConfiguration.xml and the CMS Connector is restarted, the metrics are consumed by the connector. The report can be seen in the log file ${AVAYA_HOME}/cms-connector/logs/application/cms-connector.log (it looks just as illustrated in the picture above).

February 2021 Avaya Business Rules Engine Integration Guide 89

Agent Groups Agent Groups must be configured in ABRE. Make sure the field 'Native ID' of the Agent Group in ABRE, matches the SKILLID (the second column, the one after 'F1') (in this example it is 1011) in the RT-Socket report. snmp.properties

The snmp.properties file configures the parameters needed by CMS Connector to send alarms. Example for SNMP v2: snmp.1.version=v2 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe

Example for SNMP v3: snmp.1.version=v3 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe snmp.1.user.name=initial snmp.1.user.securityName=initial snmp.1.user.authenticationProtocol=MD5 snmp.1.user.authenticationPassword=12345678 snmp.1.user.privacyProtocol=DES snmp.1.user.privacyPassword=12345678

Note: • Supported protocols are: SNMPv2 and SNMPv3 (property snmp.[targetId].version) • Do not change the snmp oid. • You can configure several SNMP servers by repeating the same keys with different targetId: snmp.[targetId].version Example: snmp.1.version=v2 snmp.1.trapDestination=10.130.92.200/10162 snmp.1.oid=.1.3.6.1.4.1.6889.2.78 snmp.1.community=asmcpe snmp.2.version=v2 snmp.2.trapDestination=10.130.92.201/10162 snmp.2.oid=.1.3.6.1.4.1.6889.2.78 snmp.2.community=asmcpe

February 2021 Avaya Business Rules Engine Integration Guide 90

Adding new ACDs and Agent Groups via Web Admin

To add a new ACD in the Avaya Business Rules Engine, we have to follow these steps to make sure the metrics are properly handled by the CMS Connector and sent to the Avaya Business Rules Engine cluster. Add an ACD via Web Admin. The ACD internal entity ID can be found in ABRE Web Admin, by clicking on the ACD of interest and looking at the ACD Edit pop-up window. Copy that "ID". Open cmsReportConfiguration.xml. Add an entry in the section e.g. Save the cmsReportConfiguration.xml file. Restart the CMS Connector service Make sure the Native ID of the Agent Groups, linked to the ACD, match the Skill ID (column 2) in the RT_Socket feed. Note: If there are two CMS Connectors, perform these steps on both. Find attached a sample file: cmsReportConfiguration.xml Note: In order to view the CMS Connector feed (as in the example above), you need to change the log level as follows:

• Edit the file ${AVAYA_HOME}/cms-connector/config/logging/cms- connector-logging.xml

• Set the log level to DEBUG

Logging settings to the CMS Connector component

Save the file

February 2021 Avaya Business Rules Engine Integration Guide 91

Wait until the connector refreshes the configuration (max 30 seconds), and you will see metrics in the file ${AVAYA_HOME}/cms-connector/logs/application/cms- connector.log Reset the log level back to INFO, by editing and saving the file again Logging settings to the CMS Connector component

CMS Metrics

This is the list of fields in "abre3" report:

Sr. CMS/RTS Fields RTS Type DR3 Metric Description (columns) Field Name size

1 F1 2 string Static "F1" string

2 SPLIT 4 number SPLIT The number of the split/skill for which data was collected i.e. the Skill ID

3 INQUEUE 4 number INQUEUE The number of split/skill ACD calls that are currently waiting in queue for this split/skill

4 AVAILABLE 4 number AVAILABLE The number of agents that are currently available in this split/skill

5 ANSTIME/ACDCA 5 number ASA Avg. speed of answer. The LLS length of time that is spent by callers in queue or ringing before an agent answers the call.

6 ABNCALLS 3 number ABNCALLS Abandon calls. The number of CALLSOFFERED that are abandoned while in queue

February 2021 Avaya Business Rules Engine Integration Guide 92

Sr. CMS/RTS Fields RTS Type DR3 Metric Description (columns) Field Name size or ringing at an agent position

7 ACD 1 number ACDNUM The ACD number for which data was collected i.e. the ACD ID

8 OLDESTCALL 5 number OLDESTCA Oldest call waiting. The LL number of seconds that the oldest split/skill ACD call has waited in queue or ringing

9 ACDTIME/ACDCA 5 number AVGTALKT Avg. ACD talk time, LLS IME calculated as ACDTIME/ACDCALLS

10 ABNTIME/ABNCA 5 number AVGABNTI Avg. time to abandon, LLS ME calculated as ABNTIME/ABNCALLS

11 STAFFED 4 number STAFFED Number of Staffed agents in the split/skill, i.e. currently logged in (regardless of their Busy/ACW/AUX state)

12 EWTHIGH 5 number EWTHIGH Expected wait time (high.) The EWT metric for HIGH- PRIORITY calls in the skill/split

13 EWTMEDIUM 5 number EWTMEDIU Expected wait time M (medium). The EWT metric for MEDIUM-PRIORITY calls in the skill/split

14 EWTLOW 5 number EWTLOW Expected wait time (low). The EWT metric for LOW- PRIORITY calls in the skill/split

15 WAT 5 number WAT Weighted Advance Time

16 100*(ACCEPTABL 3 number PERCENTI The percentage of E/CALLSOFFERE NSL ACDCALLS that are D) answered by an agent within

February 2021 Avaya Business Rules Engine Integration Guide 93

Sr. CMS/RTS Fields RTS Type DR3 Metric Description (columns) Field Name size the predefined acceptable service level from the total calls offered to the ACD. Calculated as 100*(ACCEPTABLE/CALLS OFFERED)

17 SERVICELEVEL 4 number SERVICEL The number of seconds EVEL within which calls must be answered or connected in order to be considered acceptable

18 CALLSOFFERED 5 number CALLSOFF The number of calls that ERED queued to the split/skill and that completed during the interval

19 ACDNAME 20 string ACDNAME ACD Name (a unique ACD identifier string defined at CMS level) i.e. the ACD Name

20 SKILLNAME 20 string SKILLNAM Name of the split/skill when E available. If not defined the skill ID is provided by CMS

Separators 19 Pipe "|" to be used as separator between fields

Total RECORD 133 SIZE

Appendix A - Modify RTA Configuration

Login to CMS server as root using a telnet or ssh tool Type command cd /export/home/rt_socket on the terminal as shown below and hit Enter Make a copy of rta.conf file before making any modifications. Command to run as an example:

Command: cp rta.conf rta.conf.orig

February 2021 Avaya Business Rules Engine Integration Guide 94

Type command vi rta.conf. “Monitor_List1” has the skill range defined for session 1, so you can choose to either add a new skill number or range, or modify/delete an existing skill number. After making the required changes, press ESC and type wq! to save and quit the changes.

Note: The maximum supported input parameter split/skill field characters is 50. The recommendation is not to break skills into small group unless necessary. If you choose to break the skill range or define single skill entries, then you should separate them using semicolon. Example of breaking skill range or multiple skill/skill range in Monitor_List Monitored_List1=”1790-1793;7010;7012” Run command ./stoprta and enter the session number to stop the session for which you have modified the skill Run command ./startrta and enter the session number to start the stopped session for which you have modified the skill

CMSC Troubleshooting

NOTE: This is not meant to be a comprehensive guide on the CM nor CMS. It contains some pointers only (and may be outdated). For debugging of the CM and CMS, please rely on the CM and CMS official customer documentation.

Overview

The picture below depicts the components involved in processing metrics.

February 2021 Avaya Business Rules Engine Integration Guide 95

Figure 25: Metrics Service In the case of the Avaya CM, ACD metrics are collected by the CMS. The CMS sends reports to the CMS Connector which in turn processes the metrics, maps them to Avaya Business Rules Engine entities such as ACDs, and sends them to Avaya Business Rules Engine. Avaya Business Rules Engine can then associate the metrics with the correct Agent Groups configured in its database and store the metrics in the data grid (memory space) for quick retrieval and use in making real-time decisions (such as routing). Similarly, Other connectors can feed Avaya Business Rules Engine with metrics. Diagnosing problems with the metric feed can take several steps, as the issue can be with the CMS, and/or CMS Connector, and/or Avaya Business Rules Engine.

Diagnosing Issues with the Overall Solution

NTPD Service

The time on all the Avaya Business Rules Engine nodes and CMS Connectors must be the same. All servers used for Avaya Business Rules Engine should have Network Time Protocol (NTP) set-up to point to the same NTP Source Server (detailed instructions on Red Hat website).

February 2021 Avaya Business Rules Engine Integration Guide 96

In the following example, it seems the ntpd configuration is different. [root@OTHER1 cms-connector]# date Mon Nov 23 10:18:23 EST 2015 [root@OTHER1 cms-connector]# ps -ef |grep ntpd root 14200 13294 0 10:18 pts/0 00:00:00 grep ntpd root 19390 1 0 Oct26 ? 00:00:04 ntpd -s 135.9.81.247 [root@MGMT1 logs]# date Mon Nov 23 10:18:54 EST 2015 [root@MGMT1 logs]# ps -ef |grep ntpd ntp 2062 1 0 Oct26 ? 00:00:04 ntpd -u ntp:ntp -p /var/run/ntpd.pid -g root 22005 15833 0 10:18 pts/1 00:00:00 grep ntpd

There is a difference of 30 seconds between the two servers; this is unacceptable. They are using different NTP settings, this would have to be fixed.

Diagnosing Issues on the CM

In this section, we are going to cover the configuration necessary on the CM, so it is able to communicate with the CMS. Using SAT

To view the CM configuration use an application called SAT (System Access Terminal). To connect to it: Log into the CM. In the command shell, run the command sat and enter, again, the password. When asked about the terminal type, we need to select SUNT. This is very important, since it is the terminal type that allows us to use the function keys we are going to learn about soon. The command prompt is displayed and, from there, we can start editing or viewing CM configuration.

February 2021 Avaya Business Rules Engine Integration Guide 97

Figure 26: CM Issue

Using Function Keys in SAT

Function key Operation performed

F1 Cancel

F2 Refresh

F3 Accept/Confirm

F4 Clear

F5 Help

F6 Update

F7 Next Page

F8 Previous Page

Also, we can use the arrow keys to navigate through the various fields of the pages.

February 2021 Avaya Business Rules Engine Integration Guide 98

Checking out the CMS Configuration on CM

After we have logged into SAT, we run the following command: display communication-interface processor-channels We should see the CMS configured as one of the processor channels in the page. The following picture illustrates what we should see: a row (number 1, outlined in red) that tells us the CMS - by its hostname, denfinch - is consuming the channel 5001, to receive data from CM and generate reports. So this tells us, the CMS has a channel configured, and this channel is properly set.

Figure 27: CMS Configuration The other setting we may want to verify is the node name.To do it, in SAT, we type F1 to cancel the current operation and run the command display node-names ip. It is important to ensure the CMS is correctly mapped both in terms of IP and hostname. In the following picture, we see the hostname is correctly mapped to the CMS we are planning to use, so everything is configured as expected.

Since everything is fine, we can leave SAT. To do so, in the command prompt, just run the command logoff.

February 2021 Avaya Business Rules Engine Integration Guide 99

Diagnosing Issues on the CMS

There are some settings in the CMS that might cause communication problems with the CMS, CMS Connector or both. Through this section, we are going to cover each one. CM Related Settings

We need to verify the CM settings in the CMS. Each CMS can map up to 8 ACD boxes and all these ACDs have to be correctly configured. If, for any reason, an IP address and/or hostname to any CM is wrong (typo, IP address of another CM instead of the one expected, etc.), there might be either communication problems or the report we see may not correspond to the one we expect (wrong or inexistent skills, etc.). To verify the CM instances configured in the CMS, we have to: Using a tool such as PuTTy, log into the CMS server Verify if the ACD (CM) IP address is correctly set in the hosts file (this configuration is in the /etc/hosts file) Run the cmssvc application Select option 7, to display the switch information (press ENTER to confirm the option) Step 2, 3, 4, shown below:

Figure 28: Step 2-4 At this point, we are sure the CM is correctly mapped in the hosts file and we are already looking at the switch information page in the cmssvc application. From the picture above, we verified that the hostnames used to identify the CM machine with IP address 135.122.60.176 are qa_switch and denpsqacm2. The former name is displayed in the list of managed ACDs in this CMS, as we can see in the picture below, it is CM ACD ID #3:

February 2021 Avaya Business Rules Engine Integration Guide 100

Figure 29: Selecting ACD

So, if the IP address is in the hosts file and the hostname used in the CMS ACD settings match and correspond to the CM we are planning to use, we have verified correct CM configuration on the CMS.

RT-Socket Channel Setup

A real-time socket is used to communicate CM metrics from the CMS to its clients. CMS Connector is one of its clients, and is part of Avaya Business Rules Engine. The RT-Socket sessions are all configured in the file /export/home/pserv/rt_socket/rta.conf. The following picture contains the information for session 1, which points to the CMS Connector we are using. The more relevant fields, as well as their respective meaning and context, are explained in the following table:

Field Comments

HOST The IP address of the CMS Connector

PORT The CMS Connector port to send the metrics report to.

ACD The ACD identifier in the CMS (this information is available in the CMS, it is an ID from the CMS perspective **)

REPORT The report used to generate the metrics data to be transmitted

REFRESH The interval used to refresh the metrics data

February 2021 Avaya Business Rules Engine Integration Guide 101

Figure 30: Rocket Channel Setup

We see in the table above, that the CM ACD ID is something we can figure out by using a CMS application. When we used the cmssvc application to check the switch information, we already saw the CM we are planning to use, is listed as CM ACD ID #3. If we would like to confirm the CM ACD ID in the CMS settings, we could also use the CMS ASC II tool, and the way to go into it is described below. Using a tool such as PuTTy, log into the CMS server Run the following command: su - cms We will eventually be informed about backup states, but ignore all of them and press ENTER to continue. Then, the CMS ASC II application should be displayed, as in the following picture:

February 2021 Avaya Business Rules Engine Integration Guide 102

Figure 31: System Setup - Switch In the CMS ASC II main menu, using the Down arrow key, go to System Setup sub-menu and, then, use the Right arrow key to expand it. Then hit ENTER to select the option Switch Setup. The next page that is displayed asks for the ACD number we want to see details about. If we know it, just enter the number and press ENTER, then select 'Find One' option and hit ENTER again. If we don't know the number, we can just hit ENTER, then select 'List All' in the pop-up menu that appears. We can see all these things in the picture below:

Figure 32: qa switch

February 2021 Avaya Business Rules Engine Integration Guide 103

Figure 33: List all ACDs In this example, 'List all' was selected and, in the output illustrated in the next picture, we can see that the ACD ID to the CM we are using in this tutorial is 3. RT-Socket Enablement Another verification we have to make is the status of the real-time socket. The session we have configured has to be alive, up and running; otherwise there will be no communication between the endpoints (CMS, CMS clients). Operation on the RT-Socket sessions can be performed using the /export/home/pserv/rt_socket/menurta application. We run this command in the shell and are able to see a screen like the following:

To (re)start a session, we have to select Option 1 and hit ENTER. If the session is already running, we will be prompted to stop it and then it will be restarted. Select Option 3 for the status. Once the session is running, this is what the output looks like:

February 2021 Avaya Business Rules Engine Integration Guide 104

Figure 34: Output

Verifying Custom Reports on CMS ASC II

The CMS ASC II application can be used to verify the reports and, if we want, test them in the terminal/shell. To do so, we need to first find the report we want to run, by going to the CMS ASC II main menu and selecting Custom Reports » Real-Time | Historical and finally selecting the desired one from the list. In this example, for Avaya Business Rules Engine, the report we would want to verify is real-time and called abre304.

Figure 35: User permission

February 2021 Avaya Business Rules Engine Integration Guide 105

The next step is to inform the ACD ID, which is 4 in this example. If we want, we can also provide the particular skills we want to look at, just in case we want to filter information in the report that will be displayed.

Figure 36: Input Once we hit ENTER twice (first one confirms the input, second one executes the Run command), a report is displayed, and refreshed at the interval defined by us:

Important Information regarding the CM/CMS reporting mechanism

February 2021 Avaya Business Rules Engine Integration Guide 106

• CM and CMS only communicate ACTIVE information. If there is no agent logged into a skill, no information will be reported for the skill (we don't even see metrics in the feed). This is expected behavior. • EWT is calculated ONLY WHEN a call is at least in queue. • Once an agent answers a call - and only then - the EWT starts to change. PuTTy and Function Keys Since PuTTy uses xterm as the terminal type, we may be unable to use function keys directly in the shell. But there's a workaround for it: press Ctrl + P and it will put us in the 'function' mode. Then, instead of the Fn button, just type in the number corresponding to the function. Example: if we would like to close a window, instead of using F5, just use Ctrl + P and, then, type in the number 5. Some useful function keys are, in the context of the CMS ASC II:

Key Operation

F1 Help

F3 Options

F5 Close window

Diagnosing Issues on the CMS Connector (CMSC)

CMS Connector Logfile Edit the file "cms-connector-logging.xml" located in the ${AVAYA_HOME}/cms- connector/config/logging directory and change the log level from INFO to DEBUG. Look for the following entry: It should be changed to:

Let the system refresh the configuration by waiting at least 30 seconds and then look for the file "cms_connector.log" located inside ${AVAYA_HOME}/cms- connector/logs/application directory.

February 2021 Avaya Business Rules Engine Integration Guide 107

If you see actual/live data from your CMS skill reports, it means the feed from the CMS is being received and processed. On the other hand, if you only see Simulated metrics (for Demo Data configuration) in the log file, it means something is not correct in the configuration. Possible issues at this point are: • The cmsReportConfiguration.xml file doesn't have the ACDs mapped to Avaya Business Rules Engine's ACD entity IDs; • The IP Address/Port of the CMS is not configured in the cmsConfiguration.xml file.

Configuring syslog using logback.xml logback.xml contains a declaration for a logger, which writes to syslog. As of Avaya Business Rules Engine 3.4, connection errors that cause a metrics space to be unreachable (and so metrics are lost) are logged into syslog. For these cases, by default, the logger logs into the local syslog at port 514 (the default port). If another syslog should be used, this can be achieved by changing 2 properties in the logback.xml file: The logs will appear in the alternate syslog, with the tag ABRE, e.g. Jan 18 17:26:37 localhost ABRE[17954]: -03:00 2017 558 1 abre | 0 |@2017-01-18/17:26:37.558|locatorsUpdaterScheduler-1|ERROR|Cannot create the connection using locator 127.0.0.1

CMS-Connector Connection Status Errors In order to check for errors with the CMS-Connector connection to Avaya Business Rules Engine servers, look at the log file located in: ${AVAYA_HOME}/cms-connector/logs/gs. The name of the logs varies, but follows the pattern /

Diagnosing Issues in Avaya Business Rules Engine

This section explains how to check Agent Group metrics at the Avaya Business Rules Engine metrics data grid level using Gigaspaces UI tool. IMPORTANT

February 2021 Avaya Business Rules Engine Integration Guide 108

This content is targeted at Avaya Support personnel only. It assumes previous background on Gigaspaces, and a valid GS distribution running on a non-Avaya Business Rules Engine server with desktop interface.

Launch "XAP Management Center" (a.k.a. GS UI) using "gs-ui.sh/.bat" script, connect to Avaya Business Rules Engine cluster using Lookup Locators, navigate to the Space Browser and then select the "Routing Core" space.

Figure 37: XAP Management Center Execute the following query: select uid,* from com.avaya.ept.dr.services.metrics.space.model.DestinationMetrics WHERE rownum<5000 (Optional) You could correlate the "destinationId" on each DestinationMetrics object with the IDs in the AgentGroup table at Avaya Business Rules Engine configuration DB. However, this is not needed because SKILLNAME field should provide human-friendly identification for each Skill/AgentGroupsh

Figure 38: Destination Metrics

February 2021 Avaya Business Rules Engine Integration Guide 109

Verify the ACD metrics status in GigaSpaces from the "RT Metrics" space. Notice: "RT Metrics" does not contain data from RT socket, it only contains the data for ACD Status Semaphore display purposes.

Figure 39: Query select uid,* from com.avaya.ept.dr.services.metrics.space.model.AcdMetricsStatus WHERE rownum<5000 In the following example, the totalCount column should match the number of AgentGroups associated with the ACD. In order to have ACD Semaphores Green with 0% stale, staleMetricsCount and staleMetricsPercentage must be 0. In the following example, there's 1 Agent Group causing problems, so we have 11% stale data (staleMetricsCount / totalCount == 1/9 == 0.11)

Figure 40: ACD Semaphores

February 2021 Avaya Business Rules Engine Integration Guide 110

Chapter 6: Decision REST Interface

The Decision Rest interface was also known as the Routing Rest interface.

Description

This interface allows developers to send decision requests to Avaya Business Rules Engine from any client application, through the use of a REST interface (over the HTTP protocol). Most IVR and Web application frameworks support building REST clients in an easy way. Examples include: any Java, Ruby or .NET web application, AAEP/OD applications, as well as the majority of IVR application frameworks (both on premise and cloud). The REST interface requires customers to provide a Load Balancer between the client applications and Avaya Business Rules Engine nodes.

Characteristics of the REST Decision Request

URI Structure http://host/abre-decision-api/rest/getdestination

HTTP Method POST

Authentication N/A

Body content JSON format

Request "content-type": "application/json" headers

default Query string parameter type required description parameters value

February 2021 Avaya Business Rules Engine Integration Guide 111

URI Structure http://host/abre-decision-api/rest/getdestination

values allowed: true or false, otherwise server will return error code 400 (bad request) trackDecision boolean no true if false, Avaya Business Rules Engine will not store the decision in the RDR DB and counters will not be updated.

URI Examples

• http://10.130.124.31/abre-decision-api/rest/getdestination?trackDecision=true • http://10.130.124.31/abre-decision-api/rest/getdestination • http://10.130.124.31/abre-decision-api/rest/getdestination?trackDecision=false Note: Examples 1 and 2 are the same, since the default value is true.

Working with Different Tenants

Each Decision Request is executed in the scope of a particular Tenant. The "tenantFullName" attribute identifies the particular Tenant/LoB. Not providing this parameter, sends the Decision Request to the System Tenant. REQUEST BODY MODEL SCHEMA RoutingServiceRequest { decisionFunctionName (string, optional), decisionFunctionVersion (string, optional), interactionId (string, optional), from (string, optional), to (string, optional), customParameters (object, optional), segAttributes (object, optional), channel (string, optional), tenantFullName (string, optional)

February 2021 Avaya Business Rules Engine Integration Guide 112

}

Even though none of the above JSON attributes are mandatory to hit Avaya Business Rules Engine, the customParameters and segAttributes objects must be populated at least in the form:

{ "customParameters": {}, "segAttributes": {} }

This empty JSON object to Avaya Business Rules Engine means that it will execute the Decision Function marked as "Default", with LIVE Status and without any custom parameters nor segmentation attributes. RESPONSE BODY MODEL SCHEMA DecisionDTO { countDecision (boolean, optional), selectedDestAddress (string, optional), interactionId (string, optional), debugString (string, optional), locationId (string, optional), selectedDestNativeId (string, optional), selectedDestName (string, optional), locationName (string, optional), companyName (string, optional), segLabel (string, optional), timestamp (string, optional), segTable (string, optional), selectedDestId (string, optional), strategySettingsName (string, optional), resultCode (integer, optional), extendedResponse (object, optional), selectedDestType (string, optional) }

February 2021 Avaya Business Rules Engine Integration Guide 113

Example Code Using Apache HTTP Client

Libraries used: • httpclient-4.5.2.jar • httpmime-4.5.2.jar • httpclient-cache-4.5.2.jar • httpclient-win-4.5.2.jar • httpcore-4.4.4.jar • commons-logging-1.2.jar • fluent-hc-4.5.2.jar

Example of a simple request import java.io.IOException;

import org.apache.http.client.ClientProtocolException; import org.apache.http.client.fluent.Executor; import org.apache.http.client.fluent.Request; import org.apache.http.entity.ContentType;

/** * This example is using Apache HTTP Client. * Feel free to use any Java library that implements the HTTP(s) protocol */ public class RestExample {

public static void main(String[] args) throws ClientProtocolException, IOException { Executor = Executor.newInstance();

// Remember to create a POST request, since any other method will fail.

February 2021 Avaya Business Rules Engine Integration Guide 114

// Avaya Business Rules Engine would respond: 405 Request method not supported Request = Request.Post("https://10.130.125.110/abre_decision_api/rest/getdest ination");

// Don't wait more than 1 second for Avaya Business Rules Engine to respond request.connectTimeout(1000); // Also, setting the timeout for the TCP/IP connection request.socketTimeout(1000);

// Payload of this request is a json object String decisionFunction = "\"decisionFunctionName\": \"Standard_DF\","; String interactionId = "\"interactionId\": \"12345\","; String from = "\"from\": \"5132288888\","; String to = "\"to\": \"1868527\","; String customParameters = "\"customParameters\": {\"segTable\":\"CableTV\"},"; String segAttributes = "\"segAttributes\": {" + "\"Package\":\"BASIC\"," + "\"State\":\"TX\"," + "\"Tenure\":\"10\"," + "\"Bundle\":\"NO\"" + "},"; String channel = "\"channel\": \"VOICE\"";

// put the JSON object in the request body and set the content-type to application/json request.bodyString("{" + decisionFunction + interactionId + from + to

February 2021 Avaya Business Rules Engine Integration Guide 115

+ customParameters + segAttributes + channel + "}", ContentType.APPLICATION_JSON);

// The response of this operation will return a JSON object as well String response = executor.execute(request).returnContent().asString(); System.out.println(response); } }

This is the JSON object that is hard-coded in the example above. REQUEST BODY { "decisionFunctionName": "Standard_DF", "interactionId": "12345", "from": "5132288888", "to": "1868527", "customParameters": {"segTable":"CableTV"}, "segAttributes": { "Package":"BASIC", "State":"TX", "Tenure":"10", "Bundle":"NO" }, "channel": "VOICE" }

And this is the JSON object that Avaya Business Rules Engine sends back as response: RESPONSE SAMPLE {

February 2021 Avaya Business Rules Engine Integration Guide 116

"timestamp": 1472136804602, "selectedDestId": "4ac6d78d-54c1-4b1a-aa8d-203654b95879", "selectedDestNativeId": "1013", "selectedDestType": "AGENT_GROUP", "selectedDestName": "Basic-Level-1_Dallas_A2", "selectedDestAddress": "12101214", "extendedResponse": { "defaultDest": "21101504", "defaultApp": "10000004", "playPrompt":"legalAnn-eng.wav" }, "resultCode": 10, "debugString": "SGds:S", "interactionId": "12345", "countDecision": true, "locationName": "Dallas", "companyName": "Alive", "segLabel": "BAS_NEW_NB_TX", "segTable": "CableTV", "strategySettingsName": null }

This example was based on the Demo data provided with Avaya Business Rules Engine installer. Possible result codes are:

Result Description Code

10 Destination Found

-1 The segmentation rule has no Destination

-2 The segmentation rule has multiple Destinations available but no Strategy Script was provided

-3 Destination was not selected

February 2021 Avaya Business Rules Engine Integration Guide 117

Result Description Code

-4 Segmentation Rule was not found or there was an error while processing the Strategy Script

-13 Address was not selected

February 2021 Avaya Business Rules Engine Integration Guide 118

Chapter 7: ICR Core Integration

Terminology

Term Meaning

AAEP Avaya Aura Experience Portal

AAEPM Avaya Aura Experience Portal Management

AAEPMS Avaya Aura Experience Portal Management System

ANI Automatic Number Identification

ASR Automatic Speech Recognition

BSR Best Service Routing

DNIS Dialed Number Identification Service

DSS Dynamic Self Service

EHA Error Handling Application

ICR Intelligent Customer Routing

ICR-CCA Intelligent Customer Routing - Call Control Application

MPP Media Processing Platform

SSA Self-Service Application

TTS Text To Speech

WTA Wait Treatment Application

OD Orchestration Designer

ABRE Avaya Business Rules Engine

Extension Module developed to integrate ICR Core and Avaya Business Rules Engine module (the latter serves the former with its experience selection capabilities)

CXI CCXML Interpreter

February 2021 Avaya Business Rules Engine Integration Guide 119

Introduction

The Avaya Business Rules Engine ICR Core extension module (a.k.a. extension) is a component that allows the latter to use the former as a decision engine. It is packed as a JAR file and deployed as an ICR Core library, as described later in this page. Whenever it is installed and enabled in an ICR Core runtime, ICR Core's default routing mechanisms are ignored and Avaya Business Rules Engine is consumed through a RESTful web service to make decisions that CCA is going to use to take a step in a call flow, such as a call transfer. Overall Architecture

The following picture illustrates the typical architecture in which Avaya Business Rules Engine and ICR Core can be combined, through the use of this extension.

Figure 41: ICR Core Integration Architecture The call flows in this setup can be summarized as follows:

Step Description

1 A call arrives to the system. It may come over the public telephony network (PSTN) or over TCP/IP, and is first handled by s session border controller (SBC). We may see a Gateway in the middle, responsible mostly for the message translation between different protocols. The AASM is aware of all the elements in the architecture, as well as all the routing policies to coordinate the call flow.

2 Simplifying a bit the next steps, the call arrives at the AAEP and, more specifically, at the ICR CCA.

February 2021 Avaya Business Rules Engine Integration Guide 120

Step Description

3 This call control application, ICR CCA, is interpreted and executed by MPP's CCXML interpreter. This ICR CCA is configured in AAEPMS, and it can manage many applications such as a SSA, WTAs and EHAs. These manageable applications are all VXML, executed by MPP's voice browser, and the first one to be executed from the ICR CCA is the SSA.

4 The SSA starts executing. The SSA talks to ICR Core through the PDC.

5 The SSA invokes the extension module through a component called PDC. Internally, when the request arrives, ICR Core identifies the extension's entry point and forwards the request to it.

6 This entry point mentioned in the previous step is where a call to Avaya Business Rules Engine is made. Both the input and output of this communication are described in a next section. Avaya Business Rules Engine, then, determines the best experience for the call and sends it back to the extension, which, in turn, is responsible for preparing the information to be sent to the CCA.

7 This is composed of two actions happening in parallel:

Action Description

When CCA has the destination, as well as all other attributes that WTA is compose the experience determined by Avaya Business Rules Engine, started it starts a WTA that interacts with the caller while an agent is not yet ready to answer the call.

A virtual call is placed on the AACM, while control of the call flow is still Virtual call with AAEP. This call is then queued to a skill and AACM works on is placed managing the agents associated with that skill to get the call answered.

8 Once an agent is available to answer the call, WTA is completed and the agent is connected.

9 Caller and agent are merged and start interacting with each other

Managing ICR Skills in AAEPM

Invoking an ICR Core extension from an SSA requires a parameter called ICR skill number. This is not only a mandatory field, but it must be assigned to a skill number that exists in the AAEP configuration. However, it is important to know this parameter is meaningless to Avaya Business Rules Engine. ICR skills are configured in AAEPM, by selecting ICR Configuration » Skill in the left menu. Each skill is composed by a unique ID (the one used as the number when invoking the

February 2021 Avaya Business Rules Engine Integration Guide 121

extension), a name, a default VDN, the default VDN's call center and a list of destinations. The skill involved in each ICR Core invocation is sent in the route request. In the example below, we see an ICR skill whose identifier is 1.

Figure 42: ICR Skill ICR Skill Number: useless to Avaya Business Rules Engine, but necessary Avaya Business Rules Engine does NOT use ICR Skill numbers to make its decisions. To Avaya Business Rules Engine, the meaningful information encapsulated by the ICR Core request comes in an object known as caller context. It is in this object that fields such as the decision function name, segmentation attributes and custom parameters are defined. Although it is meaningless to Avaya Business Rules Engine, ICR skill numbers specified in an invocation MUST correspond to existing ICR skills. If not, ICR Core throws an exception early in the flow, and the extension is not called. So, in order to make this integration work, at least one ICR Skill must be configured in AAEPMS, although this information is ignored by the extension. From a functional perspective, this ICR Skill can be used as a default Destination. Whenever ICR SSA is unable to communicate with Avaya Business Rules Engine, the GENERIC_ERROR result will alert CCA of the situation. In these cases, the CCA will request a default destination from ICR Core, based in the ICR Skill Id used previously by SSA. Next step: Installing and Configuring the Extension

ICR Core Integration - 1. Installing and Configuring the Extension

Extension Operation

Avaya Business Rules Engine ICR Core extension allows ICR Core to use Avaya Business Rules Engine as its decision engine. It has a single entry point, ICRExtension, responsible for the following actions: Collect the parameters sent in the request, encapsulated by an object known as caller context; Compose an Avaya Business Rules Engine request based on this input; Invoke Avaya Business Rules Engine to make a decision to be used by the ICR CCA to take the next step in the call flow;

February 2021 Avaya Business Rules Engine Integration Guide 122

Parse the Avaya Business Rules Engine response and create a DestinationInformation object, to be sent to the application that invoked ICR Core - usually a SSA;

The table below illustrates the parameters that may be sent in the caller context object, and how they are manipulated by the extension:

Caller context Avaya Business Rules Engine request population Mandatory key/value pair Input from calling application ?

customParams The text is expected to come in the following format: NO customParam1=value1;...;customParamN=va lueN It is parsed, decomposed into key/value pairs and these pairs are added to the custom parameters map sent in the Avaya Business Rules Engine request.

decisionFunction The value is used to set the decision function in the YES Avaya Business Rules Engine request

decisionFunctionVersi The value is used to set the decision function version NO on in the Avaya Business Rules Engine request

segAttributes The text is expected to come in the following NO format: segAttr1=value1;...;segAttrN=valueN It is parsed, decomposed into key/value pairs and these pairs are added to the segmentation attributes map sent in the Avaya Business Rules Engine request.

requeue Indicates whether the current request is related to a YES requeue performed by the ICR CCA. This entry is sent to Avaya Business Rules Engine through the custom parameters map. Acceptable values to this field are true (whenever the call comes from a re- queue scenario) and false (first call to the extension from a calling application, such as a SSA).

ani This value is used as the 'From' attribute in the Avaya YES Business Rules Engine request

ucid This value is used as the 'Interaction ID' attribute in YES the Avaya Business Rules Engine request

February 2021 Avaya Business Rules Engine Integration Guide 123

Caller context Avaya Business Rules Engine request population Mandatory key/value pair Input from calling application ?

dnis This value is used as the 'To' attribute in the Avaya YES Business Rules Engine request

appName Identifies the calling application. This entry is sent to NO Avaya Business Rules Engine through the custom parameters map

previousICRExecInfo This entry is used to hold the Avaya Business Rules NO Engine extended response of the previous execution, in re-queue scenarios. The extension caches the Avaya Business Rules Engine extended response of the latest execution and assigns this content to this entry, to make the history of the previous execution available to Avaya Business Rules Engine next time it is invoked. The field is fed by Avaya Business Rules Engine! It is important to understand that Avaya Business Rules Engine is responsible for the content assigned to this field. The more information added to the extended response, each time Avaya Business Rules Engine is invoked, the more information available to Avaya Business Rules Engine if re-queue happens and it is invoked again by the extension.

All the parameters described above are identified by well-known and constant, predefined keys. However, the extension is also able to handle other parameters set in the SSA level, as described in the following sub-sections.

Sending Segmentation Attributes to the Extension

A client like an SSA may set individual segmentation attributes as entries in the caller context. To let the extension recognize these entries as such, they MUST START with the preffix abreSeg, followed by the actual name of the segmentation dimension. The extension takes this key and extracts the attribute name by removing the preffix. Example: if a segmentation table has a dimension called Package, this attribute can be sent in the caller context identified by abreSegPackage.

February 2021 Avaya Business Rules Engine Integration Guide 124

Sending Custom Parameters to the Extension

The extension considers as a custom parameter ANY entry, in the caller context, that doesn't match the well-known attributes described in the table above and the segmentation attributes just described in the previous section (the ones identified by the preffix abreSeg). Avaya Business Rules Engine Response Handling

Avaya Business Rules Engine response is in JSON format and is used by the extension to compose the DestinationDetail object to be sent back to MPP. The table below summarises how the mapping between Avaya Business Rules Engine's response and DestinationDetail is made.

DestinationDetail Value assigned to the field field

refer The value assigned to this attribute comes from the Avaya Business Rules Engine extended response entry identified by the key 'refer'. Possible values are true and false.

result The result is determined by the extension, depending on the Avaya Business Rules Engine response. The two possible values are GENERIC_ERROR and AGENT AVAILABLE, and the following picture illustrates the logic used by the extension to determine the actual value.

destination The destination identified by the Avaya Business Rules Engine. The complete destination address is composed by a VDN and a property that must be added to the extended response, called sip.domain. Without the SIP domain as part of the destination, the transfer is very likely to fail. So, make sure Avaya Business Rules Engine provides the SIP domain of the ACD system needed.

customData The full Avaya Business Rules Engine extended response is set as the DestinationDetail's custom data, and used, later, as historical data whenever a requeue happens.

February 2021 Avaya Business Rules Engine Integration Guide 125

Installing the Extension

The connector is part of the Avaya Business Rules Engine installation package (ISO). The package can be found at. To install the extension in an ICR Core server, first make sure your ICR Core is at least version 7.0, Feature Pack 1 (7.0.1). Any previous version does not support extensions. You can find this information by looking at the file /opt/Avaya/ICR/ICR_InstallLog.log, in the server the ICR Core is installed. After this verification, proceed with the following actions: Log into the ICR Core server, as super user o Connect to the ICR Core server with non-root credentials; o Run su - o Provide the root password Upload the bundle to the server, in any directory of your preference (example: /tmp) Unpack the bundle ( -zxvf abre-icrcore-ext-1.0.tar.gz). Move to the directory abre-icrcore-ext Make sure the script is executable (chmod +x install_extension.sh) Run the script install_extension.sh in the command line (./install_extension.sh)

Problems running the script? In case you run into problems running the script, run the following command: sed -i -e 's/\r$//' install_extension.sh After the command completes, run the script again.

The installer is responsible for the following steps: Moving the extension and its dependencies to the expected folder (/opt/Avaya/ICR/ICRCore/tomcat/webapps/icrcore/WEB-INF/lib) Moving the extension's properties file (abre_icrext.properties) to the expected directory (/opt/Avaya/ICR/ICRCore/tomcat/webapps/icrcore/WEB-INF/classes) Declaring the extension's entry point in the ICR Core application context file (/opt/Avaya/ICR/ICRCore/tomcat/webapps/icrcore/WEB- INF/applicationContext.xml) Restarting the icrcore service to apply the changes and load the extension

The block below shows the output of the installation:

Installation outcome

[root@aaepicr2 icrcore-abre-ext]# ./install_extension.sh

February 2021 Avaya Business Rules Engine Integration Guide 126

------ICR Core Avaya Business Rules Engine Extension Installation ------Stopping ICRCore service at Sun Jul 17 19:13:55 EDT 2016 .... successful

ICRCore Stop Status: [ OK ] Starting ICRCore service at Sun Jul 17 19:14:07 EDT 2016 .... successful. ICRCore is ready at Sun Jul 17 19:14:22 EDT 2016

ICRCore Start Status: [ OK ]

Installation outcome:

1. Extension and its dependencies moved to /opt/Avaya/ICR/ICRCore/tomcat/webapps/icrcore/WEB-INF 2. abre_icrext.properties moved to /opt/Avaya/ICR/ICRCore/tomcat/webapps/icrcore/WEB-INF/classes 3. The ICR Core application context already includes a reference to the entry point of the extension

Make sure you assign a value to the property abre.service.base.url that matches:

1. EITHER the IP of a server that contains an Avaya Business Rules Engine installed as single-server OR 2. or the IP of the server running a load balancer of a DR3 installed as cluster

---- IMPORTANT ---- The ICR Core service must be restarted also in the AAEPMS !!!

Open the file abre_icrext.properties located at /opt/Avaya/ICR/ICRCore/tomcat/webapps/icrcore/WEB-INF/classes, and set the property abre.service.base.url with the full location of the RESTful API used to place requests to Avaya Business Rules Engine, as follows:

February 2021 Avaya Business Rules Engine Integration Guide 127

abre_icrext.properties ################################################################# ################### # Properties file to be establish communication with Avaya Business Rules Engine. # ################################################################# ###################

# Environment setup abre.service.base.url=http://10.130.92.191/abre-decision- api/rest/getdestination

8. Go to the AAEPMS and start the ICR Core Service (AAEPMS » System Management)

Figure 43: Start Service At this point, ICR Core should be already started, and the extension already loaded and operational. Defining the Preferred ICR Core

ICR Core is usually installed in a HA setup, in which the ICR Core instances are accessed through a load balancer responsible for the distribution of incoming requests amongst all the active instances.The scope of each ICR Core's instance is configured through an application called runtimeconfig, illustrated in the following picture:

February 2021 Avaya Business Rules Engine Integration Guide 128

Figure 44: Define ICR Core Whenever an ICR Core instance is configured as Preferred, which is the case of the single instance displayed in the picture, it will be seen as the instance to be chosen each time a request arrives. As well as a preferred instance, a failover ICR Core can also be defined. If neither preferred nor failover instances are configured through runtimeconfig (meaning that both check boxes are not selected, on each instance listed in the table), the load balancer takes place and balances the distribution of requests amongst the available ICR Core boxes.

Overall Flow

In the following diagram provides an overview of the call flow, the key components, as well as the type of the information exchanged amongst them. The ICR PDC, which communicates between the SSA and the ICR Core, is not mentioned in the diagram, as it is not a component client applications and/or customers interact with directly.

Figure 45: Call overflow structure Next step: Creating an SSA to Invoke the Extension The next section explains, in detail, how an SSA (OD application) may be composed/configured in order to invoke the Avaya Business Rules Engine ICR Core Extension and handle the extension responses.

February 2021 Avaya Business Rules Engine Integration Guide 129

ICR Core Integration - 2. Creating an SSA to Invoke the Extension

In the previous section, the extension installation and configuration was described in detail. At this point, the extension should be already functional, and ready to be invoked. One typical way of invoking it, is through an OD application, such as a Self-Service Application (SSA). The SSA delivered with the extension, as an example application, is going to be explained in detail. Both the input fields - to Avaya Business Rules Engine - and the output parameters - consumed by ICR CCA - will be introduced, so that application creators are aware of all the mandatory information that must be provided to the extension and to the ICR CCA, both from the SSA.

Preparing the Orchestration Designer (OD)

OD's default settings are not enough to create an OD application invoking an ICR Core extension. Also, the default settings do not support the creation of Configurable Application Variables (CAV), a very useful instrument to collect information from users, through the AAEPMS. In the following sections, the configuration of these additional features will be explained in detail. Enabling the ICR Connector

The ICR Connector (a.k.a. PDC) is delivered as part of the ICR Core bundle. To enable the connector in the Orchestration Designer, the plug-in called com.avaya.icr.PDC.ui.jar must be saved in the OD plugins directory (/eclipse/plugins). If OD is open at the time this plug-in is added to this directory, it must be restarted to reflect the changes. When OD is restarted/opened, your OD application must enable the plug-in; to enable it, follow the steps below: Select the project in the Project explorer Click on the secondary button of the mouse, to open the context, floating menu Select Properties in this menu In the left menu of the Properties window, select the item Orchestration Designer Select the tab Pluggable Connectors Enable the item ICR Connector in the list of connectors that shows up Press OK and the changes will be applied to the project

The following picture illustrates the connector in the Project Properties window.

February 2021 Avaya Business Rules Engine Integration Guide 130

Figure 46: Project Properties

Enabling the Use of CAV in OD Applications

The same procedure described for ICR Connector enablement can be followed to enable the use of CAV in an OD project. Select the project in the Project explorer. Click on the secondary button of the mouse, to open the context, floating menu. Select Properties in this menu. In the left menu of the Properties window, select the item Orchestration Designer Select the tab Pluggable Connectors. Enable the item AVP/AEP Configurable Application Variables in the list of connectors that shows up. Press OK and the changes will be applied to the project.

Figure 47: AVP/AEP Configurable Application Variables

February 2021 Avaya Business Rules Engine Integration Guide 131

Example SSA Details

The example SSA is one of the deliverables packed with the extension. It is a reference application used to illustrate the steps one must follow to use the extension in the context of the architecture shown earlier in this document. This SSA is an OD application managed by an ICR:CCA application configured in AAEPMS and can be deployed in web containers such as Apache Tomcat. It is fetched by the MPP, and its invocation happens within the context of the CCXML application fetched from the ICR Core. The overall flow of the application is illustrated in the following picture:

Figure 48: Example SSA Details There is a node called CallABRE from where - and through the PDC - the ICR Core extension is invoked. When this node completes its execution, the Exit node is responsible for filling in all the fields/attributes to be used in the CCXML to determine the logic to be executed next, and with which data.

CallABRE Node Details

Before diving into the SSA flow, it is important to understand some of the variables declared in it. The table below summarizes them:

Variable Details

callerContext This is a complex variable passed to the ICR PDC (and, consequently, to the extension), composed by the following fields:

Field Value / meaning Mandato ry?

ani The call originator (set as the 'From' attribute YES in the Avaya Business Rules Engine request)

February 2021 Avaya Business Rules Engine Integration Guide 132

Variable Details

appName The name of the application invoking the NO extension

customPara Fed by a CAV used to provide a set of NO ms parameters to be added to the custom parameters in the Avaya Business Rules Engine request. The parameters must be provided following the pattern below: customParam1=value1;...;customPar amN=valueN

decisionFun Fed by a CAV, indicates the name of the YES ction decision function to be executed in Avaya Business Rules Engine

dnis The number to be used as the destination of YES the call (set as the 'To' attribute in the Avaya Business Rules Engine request)

requeue Helps identifying whether the request is NO coming from a re-queue scenario or not. In this variable, it is a constant value, false.

segAttribute Adding this field to the caller context is one NO s way - but not the only - to provide a set of key-value pairs to be added to the segmentation attributes map of the Avaya Business Rules Engine request. When adding this field to the caller context, make sure you follow this format: segAttr1=value1;...;segAttrN=valu eN The name of the attributes must be the name of the segmentation dimensions defined in the segmentation table. Take this value as an example: Package=PREMIUM;State=TX In the segmentation table to be used by Avaya Business Rules Engine to process the request, the dimensions called Package and State must exist. The names used for each segmentation attribute, therefore, MUST

February 2021 Avaya Business Rules Engine Integration Guide 133

Variable Details correspond to dimensions declared in the segmentation table.

segTableNa Fed by a CAV, indicates the name of the NO me segmentation table to be used in Avaya Business Rules Engine

ucid The universal call ID, read from the MPP YES session and used as the interaction ID of the Avaya Business Rules Engine request

requeueCaller This context is very similar in structure to the caller context just described, Context with the only difference being that it is used in re-queue scenarios (assigned, therefore, to the shared variable callercontext, in the Exit node, as it will be seen in the next section of this page).

Field Value / meaning Mandat ory?

ani The call originator (set as the 'From' attribute YES in the Avaya Business Rules Engine request)

appName The name of the application invoking the NO extension

customParam Fed by a CAV used to provide a set of NO s parameters to be added to the custom parameters in the Avaya Business Rules Engine request. The parameters must be provided following the pattern below:customParam1=value1;...;cust omParamN=valueN

decisionFuncti Fed by a CAV, indicates the name of the YES on decision function to be executed in Avaya Business Rules Engine

dnis The number to be used as the destination of YES the call (set as the 'To' attribute in the Avaya Business Rules Engine request)

previousICRE Holds the experience provided in the call NO xecInfo before the current re-queue. This experience is represented by a set of attributes added to the Avaya Business Rules Engine extended response, but from the previous request (that

February 2021 Avaya Business Rules Engine Integration Guide 134

Variable Details failed and caused, therefore, the re-queue). From this variable, it is possible to determine the destination used in the previous experience, which may be valuable in determining the next one to be considered in the current request. Notice the OD screenshot below ("CallABRE" node): Assign < requeueCallerContext:previousICRExecInfo DestinationInformation1:extra_info>

requeue Helps identifying whether the request is NO coming from a re-queue scenario or not. In this variable, it is a constant value, true.

segAttributes Adding this field to the caller context is one YES way - but not the only - to provide a set of key-value pairs to be added to the segmentation attributes map of the Avaya Business Rules Engine request. When adding this field to the caller context, make sure you follow this format: segAttr1=value1;...;segAttrN=valu eN The name of the attributes must be the name of the segmentation dimensions defined in the segmentation table. Take this value as an example: Package=PREMIUM;State=TX In the segmentation table to be used by Avaya Business Rules Engine to process the request, the dimensions called Package and State must exist. The names used for each segmentation attribute, therefore, MUST correspond to dimensions declared in the segmentation table.

segTableNam Fed by a CAV indicates a set of attributes to NO e be used in the call segmentation, in Avaya Business Rules Engine. These attributes must be provided following the pattern below: segAttr1=value1;...;segAttrN=valu eN

February 2021 Avaya Business Rules Engine Integration Guide 135

Variable Details

ucid The universal call ID, read from the MPP YES session and used as the interaction ID of the Avaya Business Rules Engine request

decisionFuncti The SSA CAV to set the Avaya Business Rules Engine Decision Function on name

segTableNam The SSA CAV to set the Avaya Business Rules Engine Segmentation Table e name

segAttributes The SSA CAV to set the Avaya Business Rules Engine segmentation attributes

skillToSend The SSA CAV to set the ICR skill number to use. Be careful and use only numbers corresponding to ICR skills pre-configured in AAEPMS

skill A complex variable composed by a field called 'value', that holds the ICR skill number to be used. This field is a mandatory input to invoke the ICR Core extension module

February 2021 Avaya Business Rules Engine Integration Guide 136

The following picture illustrates how these variables are configured in Orchestration Designer:

Figure 49: Variables configuration in Orchestration Designer The SSA node that actually invokes Avaya Business Rules Engine looks like the picture below:

February 2021 Avaya Business Rules Engine Integration Guide 137

Figure 50: SSA node invokes ABRE In the picture above, the field skill:value is assigned to the number provided by the user in a CAV. This is the ICR skill to be sent to the ICR Core extension module through PDC. Next, the values set on the SSA Configurable Variables are captured and assigned to the fields of the caller context variable, callerContext. This is a very important input from SSA that instructs the ICR Core extension on how to prepare the request to be sent to Avaya Business Rules Engine. Later, the PDC InvokeExtension node is used to invoke the extension itself. When the extension returns, the final assignment operation makes sure the details about the current execution are also captured and sent to CCA in a caller context entry called previousICRExecInfo. Finally, the Exit node is used to set a bunch of variables CCA is going to use as input to take the next step in the call flow. The meaning and usage of these variables are detailed in the next section. Note about additional parameters Another way of sending segmentation attributes to the extension As already described in previous sections, an entry named segAttributes can be added to the caller context, and segmentation attributes can be informed using a pre-defined format. However, application creators may want to collect segmentation attributes from users, one at a time, through typing or voicing. In such cases, individual variables can be created and the values assigned to them can be added to the caller context, following another convention. In this case, entries in the caller context must be identified by a key with the prefix abreSeg. Example: if a segmentation table has a dimension called Package, this attribute can be sent in the caller context identified by abreSegPackage. This prefix is used by the extension to identify the entry must be used as a segmentation attribute. Following the convention is, therefore, very important, as it helps the extension to build the Avaya Business Rules Engine request correctly. Sending custom parameters to the extension

February 2021 Avaya Business Rules Engine Integration Guide 138

The extension considers as a custom parameter ANY entry, in the caller context, that does not match the well-known attributes described in the table below and the segmentation attributes just described in the previous section (the ones identified by the prefix abreSeg).

Exit Node Details

As just described, the Exit node is very important in this flow, as it is used to populate the many variables used by CCA to take the next step in a call flow. These values come from the extension, based on a routing decision made by Avaya Business Rules Engine. The following picture shows all the assignments performed in the Exit node, complemented by a description of each variable, below.

Figure 51: Exit node details

Attribute Description

ssaResult The result of the SSA. The possible values to this attribute are: • AGENT_AVAILABLE: agents are available in a call center to receive calls; • AGENT_NOT_AVAILABLE: no agents are logged in a call center or all logged in agents are in AUX. In such conditions, ICR CCA starts the Generic EHA on SSA exit. The default EHA can also be overridden by starting the custom EHA on SSA exit; • GENERIC_ERROR: an error has occurred. ICR CCA starts the Generic EHA; • OUT_OF_HOURS: the call has arrived when a call center is closed. ICR CCA starts the Non Business Hours EHA;

February 2021 Avaya Business Rules Engine Integration Guide 139

Attribute Description An empty value indicates the call is completed. In this case, it is disconnected. How the extension determines the SSA result The SSA result is determined by the extension, according to the following rules:

skillId The skill ID identified by the SSA. ICR CCA uses the skillId value to display the calls on the ICR Monitor page of Experience Portal Manager and to requeue the calls. Not used by the extension It is important to reinforce Skill numbers have no influence BOTH in regular and requeue scenarios, whenever the extension is used to make routing decisions in an ICR Core setup.

vdn The VDN to which ICR CCA queues or transfers a call. This information comes from Avaya Business Rules Engine.

acd The call center name to which ICR CCA queues or transfers a call.

acdtype The call center type.

skilldefaultvdn The VDN to which ICR CCA transfers a call when an error occurs.

ewt The estimated wait time (EWT) on the destination specified by a VDN parameter. ICR CCA uses the ewt value to display the EWT for the calls in a queue on the ICR Monitor page of Experience Portal Manager.

refer A value that indicates whether to queue or transfer a call. The possible values are: true: To transfer the call. false: to queue the call This information is set in Avaya Business Rules Engine, in the Decision Function script.

February 2021 Avaya Business Rules Engine Integration Guide 140

Attribute Description

ccxmlapplicationurl The CCXML application URL

wta The name of the WTA (configured in the AAEP as the managed application of the ICR:CCA) to start. When empty, the default WTA is used.

eha The name of the EHA (configured in the AAEP as the managed application of the ICR:CCA) that starts when an error occurs. When empty, the generic EHA is used.

AAI Information that you want to pass in the UUI header of a call in a queued or a transferred call.

querystring The parameter to provide custom information to WTA

_avayaExitInfo1 The value that denotes that the SDR record is for SSA. You need this value to filter the SDR records related to SSA in the Custom Report feature of Experience Portal Manager.

UUI The call's universal identifier

enableExternalMessage The value that indicates whether ICR CCA can send external messages to WTA. ICR CCA sends the updated EWT and Queue position values to WTA. The possible values are: • true: To send an external message to WTA. • false: To prevent sending an external message to WTA. An empty value indicates that ICR CCA must not send the external message to WTA.

onRequeueUseExtension The value that indicates whether ICR CCA can requeue the call using extension. The possible values are: • true: To use extension to get routing information on requeueing the call. • false: extension is not going to be used. An empty value indicates that ICR CCA must not use extension on requeueing the call. Set this flag to true to involve the extension in requeue Whenever you want to use the extension to handle requeue scenarios, set this flag to true.

callercontext The complex variable that contains caller context information that is required when call is requeued using extension.

February 2021 Avaya Business Rules Engine Integration Guide 141

Attribute Description Notice that, in re-queue scenarios, the SSA is feeding the extension with another caller context object. It is identical, in structure, to the object named callerContext, but the flag 'requeue' is assigned to true this time. Don't change the caller context structure It is very important to follow exactly the structure defined to these caller context objects, because the extension module relies on these key/value pairs to find the information it needs to compose the Avaya Business Rules Engine request. Requeue caller context is immutable This object, defined in the SSA level, is NOT modified by the CCA and is passed AS IS in EVERY requeue. It means that, whenever a requeue happens more than once in a flow, given the configuration of this sample SSA, the same caller context, with the same values, will be sent to Avaya Business Rules Engine through the extension.

In order to have UCID automatically generated by the CCA, we must go to its Advanced Properties under CCA » Advanced Parameters and select Yes to the property called 'Generate UCID'. The picture below illustrates this action:

Figure 52: Generate UCID

February 2021 Avaya Business Rules Engine Integration Guide 142

This property is set to No by default, so keep in mind this step is necessary. Next step: Avaya Business Rules Engine Configuration The next page explains, in details, how Avaya Business Rules Engine should be configured.

ICR Core Integration - 3. Avaya Business Rules Engine Configuration

In this page, some reference scripts and entities will be detailed to give a practical example of how Avaya Business Rules Engine can be configured to receive a request from the extension and compose a response. The response can be used to create and send a DestinationDetail object back to the application that originated the invocation of the extension.

Avaya Business Rules Engine Request Composed by the Extension

When the ICR Core extension module invokes Avaya Business Rules Engine, the request gets filled in with the following fields:

Field Value and general comments

To Holds the DNIS of the call

From Holds the ANI of the call

Interaction ID Holds the UCID of the call

Segmentation Holds all the segmentation attributes provided by the user, through an SSA Attributes configurable variable (from AAEP)

Custom Holds the custom parameters provided by the user, through an SSA Parameters configurable variable (from AAEP). The custom parameters map contains:

• Segmentation Table name (a separate configurable variable/field in the SSA, displayed in AAEP) • Any other parameter filled in the SSA, through AAEP (there is a field in the SSA Configurable Variables page where an arbitrary list of custom parameters can be provided, in the following format: customParam 1 = value 1 ;...; customParam N = value N

February 2021 Avaya Business Rules Engine Integration Guide 143

Field Value and general comments

Decision Holds the name of the Decision Function to be used in Avaya Business Function Name Rules Engine. This field is filled in by the user, in an SSA configurable variable (from AAEP)

Example ICR-Avaya Business Rules Engine Decision Function

The following decision function serves as an example to customers to write their own scripts to handle calls coming from the ICR Core extension module. It contains the basic logic for receiving and handling a request, running the segmentation and composing a response. Decision Function ICR-ABRE-DF import groovy.transform.Field

/********************************************************************* ************************* * This script is an example of how Avaya Business Rules Engine and ICR Core can be integrated.

********************************************************************** ************************/ debugEnable() debug("*************************************************************** **********************************") debug("***** Simple script to evaluate the integration between Avaya Business Rules Engine and ICR *****")

// Constants @Field final DESTINATION_FOUND = 10 @Field final SEGMENTATION_RETURNED_EMPTY_LIST = -1 @Field final UNABLE_TO_SELECT_DESTINATION = -3 @Field final UNABLE_TO_DO_SEGMENTATION = -4 @Field final ERROR_MISCONFIGURATION_NO_ADDRESS = -13

February 2021 Avaya Business Rules Engine Integration Guide 144

/** * Segmentation is run against some parameters coming in the request, as usual. * The difference in this example is that both the segmentation table name and the * segmentation and custom parameters are set by customers in a SSA, through the use * of Configurable Application Variables (CAVs). * * For more details about the SSA configuration, refer to the Avaya Business Rules Engine Installation Guide. */ def segmentationTable = request.getCustomParameters().get("segTableName") ?: "ICR-ABRE-ST"; def segmentationResult = segmentation.doSegmentation(segmentationTable, request.getSegAttributes())

/** * Avaya Business Rules Engine may be invoked either in a regular condition (first call from * ICR Core, for example) or in a re-queue scenario (when a previous destination used to queue * the call on AACM caused an error and ICR Core is invoked once more by CCA to provide an * alternative to it). Since ICR Core relies on ICR Core to compose the next experience to be * delivered to CCA, Avaya Business Rules Engine is invoked again, and the 're-queue' flag is * helpful as an additional filter when determining the next destination to be used. * * Another field that comes in the request, under re-queue conditions, is the destination * selected in the previous Avaya Business Rules Engine execution, so it can be avoided this time, * even if the segmentation shows it as a candidate. */

February 2021 Avaya Business Rules Engine Integration Guide 145

def previousDestination = "" if (request.getCustomParameters().containsKey("requeue")) { if (request.getCustomParameters().get("requeue") == "true") { debug("This request is coming from a re-queue context, from ICR CCA") } } if (request.getCustomParameters().containsKey("previousDestination")) { if (request.getCustomParameters().get("previousDestination") != null) { previousDestination = request.getCustomParameters().get("previousDestination") debug("Re-Queue detected! Destination used before was " + previousDestination) } }

/** * The application the request is coming from. It is usually a SSA managed by a CCA. */ if (request.getCustomParameters().containsKey("appName")) { debug("This request comes from an application named " + request.getCustomParameters().get("appName")) }

// If there was an error while doing segmentation or segmentation rule was not found if (decisionBuilder.lastDegubStepIsError() | decisionBuilder.lastDebugStepIsNotFound()) { error(UNABLE_TO_DO_SEGMENTATION, "Error: Segmentation Result was not found or there was an error") return

February 2021 Avaya Business Rules Engine Integration Guide 146

} debug("Segmentation Result: LABEL=" + segmentationResult.label) if (segmentationResult.destinationList.size == 0) { error(SEGMENTATION_RETURNED_EMPTY_LIST, "Error: Segmentation Result has an empty destination list") return }

// Getting Segmentation Result data if (segmentationResult.destinationList.size == 1) { // Only one agent group decisionBuilder.resultCode(DESTINATION_FOUND); def destAliasDestination = segmentationResult.destinationList.first() debug("Single destination has been selected: " + (destAliasDestination.destinationAlias ? destAliasDestination.destinationAlias?.name + ":": "") + destAliasDestination?.destination?.name + " / " + destAliasDestination.destinationType.name()) def destination = destAliasDestination.destination;

// If there was an error while getting destination entity if (decisionBuilder.hasErrorCode()) { return }

decisionBuilder.destination(destination)

// If there was an error while doing segmentation or segmentation rule was not found if (decisionBuilder.lastDegubStepIsError() | decisionBuilder.lastDebugStepIsNotFound()) { error(UNABLE_TO_SELECT_DESTINATION, "Error: Destination was not selected or there was an error")

February 2021 Avaya Business Rules Engine Integration Guide 147

return }

if (decisionBuilder.hasErrorCode()) { return }

setAddress(destination) return }

/** * It is very important to follow the rules below when using Avaya Business Rules Engine integrated with ICR Core: * * 1. add a boolean entry identified by the key 'refer' in the extended response. * - 'true' indicates a blind transfer to the selected destination may happen. * - 'false' (preferred) indicates the transfer will be consultative, which means AAEP places a virtual call * on AACM and keeps controlling the flow (and a better experience, through WTA, will be provided to customers) * 2. add a string entry identified by the key 'sip.domain' indicating the SIP domain of the entities (destination, ACD, etc) in the setup * 3. add a string entry identified by the key 'previousDestination', which will be the selected destination in this execution. * Whenever a re-queue happens, this same destination address will be sent to Avaya Business Rules Engine in the next request made from * ICR Core extension module, and can be used to better define the next destination to be used in the re-queue. * * Still about the SIP domain: you may prefer to set the SIP domain information as an ACD global property and retrieve this information from

February 2021 Avaya Business Rules Engine Integration Guide 148

* the ACD, in the script. It is completely OK if you do so, just remember to get this information and set it as * the extended response entry in the way it is described above. */ def setAddress(destination) { def address = "" def addresses = destination?.addresses?.values() if (!addresses) { decisionBuilder.resultCode(ERROR_MISCONFIGURATION_NO_ADDRESS); decisionBuilder.appendStep("checkAddresses", destination, addresses, "") } else if (addresses.size() > 1) { decisionBuilder.resultCode(ERROR_MISCONFIGURATION_NO_ADDRESS); } else { address = addresses.first() decisionBuilder.addExtendedResponse("refer", "false") decisionBuilder.addExtendedResponse("sip.domain", "edp.avaya.com") decisionBuilder.addExtendedResponse("previousDestination", address + "@" + "edp.avaya.com") } decisionBuilder.selectedDestAddress(address) }

There are 3 fields set in the Decision Function, that are very important to the ICR Core extension when building the DestinationDetail object to send to MPP. They are: Refer - true when a blind transfer has to be made; false when an assisted transfer is desired; SIP domain, used to compose the Address of the Destination (determined by Avaya Business Rules Engine) a. Whenever the client relies on the extension to provide the full Destination Address (SIP domain included), the SIP domain must be provided in the extended response, identified by this key (sip.domain). In this case, SIP domain can be provided hard-coded, as in the example above, or retrieved from a Global Property defined in the ACD or even the Destination

February 2021 Avaya Business Rules Engine Integration Guide 149

b. If the client consuming the extension takes the responsibility to complete the destination address with the SIP domain, on its own, this extended response entry is not necessary The current destination is set as the previousDestination. In cases of re-queue, this Address is going to be considered from the previous destination used, that made the re- queue happen Such fields are set in the Avaya Business Rules Engine decision's extended response map, parsed and consumed in the ICR Core extension module. The following fields can be populated as extended response entries in ABRE scripts that will be mapped to ICR SDK DestinationDetails fields by ICR Core Extension, the fields have the same name on both sides.

Extended Example Response / ICR SDK DestinationDetail fields

ewt decisionBuilder.addExtendedResponse("ewt", 10)

ewtTop decisionBuilder.addExtendedResponse("ewtTop", 15)

ewtHigh decisionBuilder.addExtendedResponse("ewtHigh", 16)

ewtMedium decisionBuilder.addExtendedResponse("ewtMedium", 9)

ewtLow decisionBuilder.addExtendedResponse("ewtLow", 7)

agentStaffed decisionBuilder.addExtendedResponse("agentStaffed", 20)

priority decisionBuilder.addExtendedResponse("priority", 10)

percAnsSL decisionBuilder.addExtendedResponse("percAnsSL", 5)

estimatedQpos decisionBuilder.addExtendedResponse("estimatedQpos", 10)

acd decisionBuilder.addExtendedResponse("acd", "ACD01")

Remaining Configuration

The following elements are all entities in Avaya Business Rules Engine used to exercise the integration. They are, therefore, examples for customers to set their own environment and make use the ICR Core extension module.

February 2021 Avaya Business Rules Engine Integration Guide 150

Reference Segmentation Table 'ICR-ABRE-ST'

Field Description / value / comments

Name ICR-ABRE-ST

Description Segmentation Table to exercise the integration between ICR Core and Avaya Business Rules Engine

Dimensions Package - String Tenure - Numeric

Min Destinations 1 allowed

Max Destinations 5 allowed

Display Destinations Display destination names & Destination aliases, up to 5

Include Strategy No strategy

Table Evaluation Row Priority Mode Mode

Two Segmentation Rules were created. The first one exercises a valid VDN (the Phantom call to the AACM is going to work) and the other holds an invalid VDN, to simulate the SIP Phantom call failure (forcing the re-queue).

Figure 53: Segmentation Table content

Reference ACD

To create a new ACD, we also have to save a Company and a Location in the system. The following tables describe these records.

Location Field Value

Name São Paulo

February 2021 Avaya Business Rules Engine Integration Guide 151

Location Field Value

Description SP

Company Field Value

Name The Company

Description The Company

The ACD is created as follows:

Figure 54: ACD

February 2021 Avaya Business Rules Engine Integration Guide 152

Agent Groups

Figure 55: Agent Groups The first Agent Group defines a single address, 64711, which is, in this example, supposed to be a valid VDN configured in the ACD system. The second also contains a single address, 64790, which is invalid, nonexistent in the AACM used in this example. It is used to trigger a re-queue scenario. Since the VDN used to place the virtual call is invalid, a re-queue is necessary, and the ICR Core Extension module is invoked again to determine the next destination to be used to queue the call. Next section: Analyzing the Flows from Log Files The next and last page for ICR integration with Avaya Business Rules Engine is dedicated to the log files generated by the many applications involved: SSA, ICR Core and Avaya Business Rules Engine. These log files contain all the information one would need to fully understand the flow and investigate any suspect behavior at runtime.

February 2021 Avaya Business Rules Engine Integration Guide 153

ICR Core Integration: Log Analysis

During a call flow, some log files are fed with messages that can be used both to understand the behavior of the many components in the architecture and to troubleshoot/debug. In this page, the most relevant files will be introduced, as well as tips to go through the text looking for meaningful information.

Avaya Business Rules Engine log

Avaya Business Rules Engine itself does not create any file specifically used to register decision making. Instead, it prints out all the information in log files, all located at ${AVAYA_HOME}/abre/logs/application. The one we need is called abre-core.log, and the box below illustrates how the messages we want look like. ... <14>Jul 12 14:43:52 MGMT1 ABRE[27464]: -04:00 2016 93 1 abre | 0 |2016-07-12/14:43:52.093|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ********************************************************************** *************************** <14>Jul 12 14:43:52 MGMT1 ABRE[27464]: -04:00 2016 93 1 abre | 0 |2016-07-12/14:43:52.093|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ***** Simple script to evaluate the integration between Avaya Business Rules Engine and ICR ***** <14>Jul 12 14:43:52 MGMT1 ABRE[27464]: -04:00 2016 96 1 abre | 0 |2016-07-12/14:43:52.096|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request comes from an application named ICRSSA <14>Jul 12 14:43:52 MGMT1 ABRE[27464]: -04:00 2016 97 1 abre | 0 |2016-07-12/14:43:52.097|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Segmentation Result: LABEL=1 <14>Jul 12 14:43:52 MGMT1 ABRE[27464]: -04:00 2016 97 1 abre | 0 |2016-07-12/14:43:52.097|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Single destination has been selected: AG-01 / AGENT_GROUP <14>Jul 12 14:43:52 MGMT1 ABRE[27464]: -04:00 2016 101 1 abre | 0 |2016-07-12/14:43:52.101|GS-LRMI Custom Pool-pool-4-thread- 2|INFO|BestDestination PROCESSED, decision result:{"@type":"com.avaya.ept.dr.services.routing.model.dto.DecisionD TO","timestamp":1468349032092,"selectedDestId":"7ecb127d-1b0f- 4c9a966e52189164eca6","selectedDestNativeId":"1","selectedDestType":"A GENT_GROUP","selectedDestName":"AG01","selectedDestAddress":"64711","e xtendedResponse":{"@type":"java.util.HashMap","sip.domain":"edp.avaya. com","previousDestination":"[email protected]","refer":"false"},"res ultCode":10,"debugString":"SGds:S","interactionId":"100000036714683488 18","countDecision":true,"locationName":"Sao Paulo","companyName":"The

February 2021 Avaya Business Rules Engine Integration Guide 154

Company","segLabel":"Premium-01","segTable":"ICR-ABRE- ST","strategySettingsName":null} <14>Jul 12 14:43:54 MGMT1 ABRE[27464]: -04:00 2016 816 1 abre | 0 |2016-07-12/14:43:54.816|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ********************************************************************** ******************************** <14>Jul 12 14:43:54 MGMT1 ABRE[27464]: -04:00 2016 816 1 abre | 0 |2016-07-12/14:43:54.816|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ***** Simple script to evaluate the integration between Avaya Business Rules Engine and ICR Core ***** <14>Jul 12 14:43:54 MGMT1 ABRE[27464]: -04:00 2016 817 1 abre | 0 |2016-07-12/14:43:54.817|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request is coming from a re-queue context, from ICR CCA <14>Jul 12 14:43:54 MGMT1 ABRE[27464]: -04:00 2016 817 1 abre | 0 |2016-07-12/14:43:54.817|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Re-Queue detected! Destination used before was [email protected] <14>Jul 12 14:43:54 MGMT1 ABRE[27464]: -04:00 2016 817 1 abre | 0 |2016-07-12/14:43:54.817|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request comes from an application named ICRSSA <14>Jul 12 14:43:54 MGMT1 ABRE[27464]: -04:00 2016 818 1 abre | 0 |2016-07-12/14:43:54.818|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Segmentation Result: LABEL=1 <14>Jul 12 14:43:54 MGMT1 ABRE[27464]: -04:00 2016 818 1 abre | 0 |2016-07-12/14:43:54.818|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Single destination has been selected: AG-01 / AGENT_GROUP <14>Jul 12 14:43:54 MGMT1 ABRE[27464]: -04:00 2016 820 1 abre | 0 |2016-07-12/14:43:54.820|GS-LRMI Custom Pool-pool-4-thread- 2|INFO|BestDestination PROCESSED, decision result: {"@type":"com.avaya.ept.dr.services.routing.model.dto.DecisionDTO","ti mestamp":1468349034815,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG01","selectedDestAddress":"64711","extendedR esponse":{"@type":"java.util.HashMap","complement":"extended_response_ on_the_fly","sip.domain":"edp.avaya.com","previousDestination":"64711@ edp.avaya.com","refer":"false"},"resultCode":10,"debugString":"SGds:S" ,"interactionId":"10000003671468348818","countDecision":true,"location Name":"Sao Paulo","companyName":"The Company","segLabel":"Premium- 01","segTable":"ICR-ABRE-ST","strategySettingsName":null} <14>Jul 12 14:43:57 MGMT1 ABRE[27464]: -04:00 2016 361 1 abre | 0 |2016-07-12/14:43:57.361|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ********************************************************************** ********************************

February 2021 Avaya Business Rules Engine Integration Guide 155

<14>Jul 12 14:43:57 MGMT1 ABRE[27464]: -04:00 2016 361 1 abre | 0 |2016-07-12/14:43:57.361|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ***** Simple script to evaluate the integration between Avaya Business Rules Engine and ICR Core ***** <14>Jul 12 14:43:57 MGMT1 ABRE[27464]: -04:00 2016 362 1 abre | 0 |2016-07-12/14:43:57.362|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request is coming from a re-queue context, from ICR CCA <14>Jul 12 14:43:57 MGMT1 ABRE[27464]: -04:00 2016 362 1 abre | 0 |2016-07-12/14:43:57.362|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Re-Queue detected! Destination used before was [email protected] <14>Jul 12 14:43:57 MGMT1 ABRE[27464]: -04:00 2016 362 1 abre | 0 |2016-07-12/14:43:57.362|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request comes from an application named ICRSSA <14>Jul 12 14:43:57 MGMT1 ABRE[27464]: -04:00 2016 362 1 abre | 0 |2016-07-12/14:43:57.362|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Segmentation Result: LABEL=1 <14>Jul 12 14:43:57 MGMT1 ABRE[27464]: -04:00 2016 363 1 abre | 0 |2016-07-12/14:43:57.363|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Single destination has been selected: AG-01 / AGENT_GROUP <14>Jul 12 14:43:57 MGMT1 ABRE[27464]: -04:00 2016 364 1 abre | 0 |2016-07-12/14:43:57.364|GS-LRMI Custom Pool-pool-4-thread- 2|INFO|BestDestination PROCESSED, decision result: {"@type":"com.avaya.ept.dr.services.routing.model.dto.DecisionDTO","ti mestamp":1468349037360,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG- 01","selectedDestAddress":"64711","extendedResponse":{"@type":"java.ut il.HashMap","complement":"extended_response_on_the_fly","sip.domain":" edp.avaya.com","previousDestination":"[email protected]","refer":"fa lse"},"resultCode":10,"debugString":"SGds:S","interactionId":"10000003 671468348818","countDecision":true,"locationName":"Sao Paulo","companyName":"The Company","segLabel":"Premium- 01","segTable":"ICR-ABRE-ST","strategySettingsName":null} <14>Jul 12 14:43:59 MGMT1 ABRE[27464]: -04:00 2016 909 1 abre | 0 |2016-07-12/14:43:59.909|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ********************************************************************** ******************************** <14>Jul 12 14:43:59 MGMT1 ABRE[27464]: -04:00 2016 909 1 abre | 0 |2016-07-12/14:43:59.909|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ***** Simple script to evaluate the integration between Avaya Business Rules Engine and ICR Core *****

February 2021 Avaya Business Rules Engine Integration Guide 156

<14>Jul 12 14:43:59 MGMT1 ABRE[27464]: -04:00 2016 909 1 abre | 0 |2016-07-12/14:43:59.909|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request is coming from a re-queue context, from ICR CCA <14>Jul 12 14:43:59 MGMT1 ABRE[27464]: -04:00 2016 909 1 abre | 0 |2016-07-12/14:43:59.909|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Re-Queue detected! Destination used before was [email protected] <14>Jul 12 14:43:59 MGMT1 ABRE[27464]: -04:00 2016 910 1 abre | 0 |2016-07-12/14:43:59.910|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request comes from an application named ICRSSA <14>Jul 12 14:43:59 MGMT1 ABRE[27464]: -04:00 2016 910 1 abre | 0 |2016-07-12/14:43:59.910|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Segmentation Result: LABEL=1 <14>Jul 12 14:43:59 MGMT1 ABRE[27464]: -04:00 2016 910 1 abre | 0 |2016-07-12/14:43:59.910|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Single destination has been selected: AG-01 / AGENT_GROUP <14>Jul 12 14:43:59 MGMT1 ABRE[27464]: -04:00 2016 912 1 abre | 0 |2016-07-12/14:43:59.912|GS-LRMI Custom Pool-pool-4-thread- 2|INFO|BestDestination PROCESSED, decision result: {"@type":"com.avaya.ept.dr.services.routing.model.dto.DecisionDTO","ti mestamp":1468349039908,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG- 01","selectedDestAddress":"64711","extendedResponse":{"@type":"java.ut il.HashMap","complement":"extended_response_on_the_fly","sip.domain":" edp.avaya.com","previousDestination":"[email protected]","refer":"fa lse"},"resultCode":10,"debugString":"SGds:S","interactionId":"10000003 671468348818","countDecision":true,"locationName":"Sao Paulo","companyName":"The Company","segLabel":"Premium- 01","segTable":"ICR-ABRE-ST","strategySettingsName":null} <14>Jul 12 14:44:02 MGMT1 ABRE[27464]: -04:00 2016 441 1 abre | 0 |2016-07-12/14:44:02.441|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ********************************************************************** ******************************** <14>Jul 12 14:44:02 MGMT1 ABRE[27464]: -04:00 2016 442 1 abre | 0 |2016-07-12/14:44:02.442|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ***** Simple script to evaluate the integration between Avaya Business Rules Engine and ICR Core ***** <14>Jul 12 14:44:02 MGMT1 ABRE[27464]: -04:00 2016 443 1 abre | 0 |2016-07-12/14:44:02.443|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request is coming from a re-queue context, from ICR CCA <14>Jul 12 14:44:02 MGMT1 ABRE[27464]: -04:00 2016 443 1 abre | 0 |2016-07-12/14:44:02.443|GS-LRMI Custom Pool-pool-4-thread-2|INFO|

February 2021 Avaya Business Rules Engine Integration Guide 157

SCRIPT - Re-Queue detected! Destination used before was [email protected] <14>Jul 12 14:44:02 MGMT1 ABRE[27464]: -04:00 2016 443 1 abre | 0 |2016-07-12/14:44:02.443|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request comes from an application named ICRSSA <14>Jul 12 14:44:02 MGMT1 ABRE[27464]: -04:00 2016 443 1 abre | 0 |2016-07-12/14:44:02.443|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Segmentation Result: LABEL=1 <14>Jul 12 14:44:02 MGMT1 ABRE[27464]: -04:00 2016 443 1 abre | 0 |2016-07-12/14:44:02.443|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Single destination has been selected: AG-01 / AGENT_GROUP <14>Jul 12 14:44:02 MGMT1 ABRE[27464]: -04:00 2016 445 1 abre | 0 |2016-07-12/14:44:02.445|GS-LRMI Custom Pool-pool-4-thread- 2|INFO|BestDestination PROCESSED, decision result: {"@type":"com.avaya.ept.dr.services.routing.model.dto.DecisionDTO","ti mestamp":1468349042441,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG- 01","selectedDestAddress":"64711","extendedResponse":{"@type":"java.ut il.HashMap","complement":"extended_response_on_the_fly","sip.domain":" edp.avaya.com","previousDestination":"[email protected]","refer":"fa lse"},"resultCode":10,"debugString":"SGds:S","interactionId":"10000003 671468348818","countDecision":true,"locationName":"Sao Paulo","companyName":"The Company","segLabel":"Premium- 01","segTable":"ICR-ABRE-ST","strategySettingsName":null} <14>Jul 12 14:44:04 MGMT1 ABRE[27464]: -04:00 2016 987 1 abre | 0 |2016-07-12/14:44:04.987|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ********************************************************************** ******************************** <14>Jul 12 14:44:04 MGMT1 ABRE[27464]: -04:00 2016 987 1 abre | 0 |2016-07-12/14:44:04.987|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ***** Simple script to evaluate the integration between Avaya Business Rules Engine and ICR Core ***** <14>Jul 12 14:44:04 MGMT1 ABRE[27464]: -04:00 2016 988 1 abre | 0 |2016-07-12/14:44:04.988|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request is coming from a re-queue context, from ICR CCA <14>Jul 12 14:44:04 MGMT1 ABRE[27464]: -04:00 2016 988 1 abre | 0 |2016-07-12/14:44:04.988|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Re-Queue detected! Destination used before was [email protected] <14>Jul 12 14:44:04 MGMT1 ABRE[27464]: -04:00 2016 988 1 abre | 0 |2016-07-12/14:44:04.988|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request comes from an application named ICRSSA

February 2021 Avaya Business Rules Engine Integration Guide 158

<14>Jul 12 14:44:04 MGMT1 ABRE[27464]: -04:00 2016 988 1 abre | 0 |2016-07-12/14:44:04.988|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Segmentation Result: LABEL=1 <14>Jul 12 14:44:04 MGMT1 ABRE[27464]: -04:00 2016 989 1 abre | 0 |2016-07-12/14:44:04.990|GS-LRMI Custom Pool-pool-4-thread- 2|INFO|BestDestination PROCESSED, decision result: {"@type":"com.avaya.ept.dr.services.routing.model.dto.DecisionDTO","ti mestamp":1468349044986,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG- 01","selectedDestAddress":"64711","extendedResponse":{"@type":"java.ut il.HashMap","complement":"extended_response_on_the_fly","sip.domain":" edp.avaya.com","previousDestination":"[email protected]","refer":"fa lse"},"resultCode":10,"debugString":"SGds:S","interactionId":"10000003 671468348818","countDecision":true,"locationName":"Sao Paulo","companyName":"The Company","segLabel":"Premium- 01","segTable":"ICR-ABRE-ST","strategySettingsName":null} <14>Jul 12 14:44:07 MGMT1 ABRE[27464]: -04:00 2016 524 1 abre | 0 |2016-07-12/14:44:07.524|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ********************************************************************** ******************************** <14>Jul 12 14:44:07 MGMT1 ABRE[27464]: -04:00 2016 525 1 abre | 0 |2016-07-12/14:44:07.525|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - ***** Simple script to evaluate the integration between Avaya Business Rules Engine and ICR Core ***** <14>Jul 12 14:44:07 MGMT1 ABRE[27464]: -04:00 2016 525 1 abre | 0 |2016-07-12/14:44:07.525|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request is coming from a re-queue context, from ICR CCA <14>Jul 12 14:44:07 MGMT1 ABRE[27464]: -04:00 2016 525 1 abre | 0 |2016-07-12/14:44:07.525|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Re-Queue detected! Destination used before was [email protected] <14>Jul 12 14:44:07 MGMT1 ABRE[27464]: -04:00 2016 526 1 abre | 0 |2016-07-12/14:44:07.526|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - This request comes from an application named ICRSSA <14>Jul 12 14:44:07 MGMT1 ABRE[27464]: -04:00 2016 526 1 abre | 0 |2016-07-12/14:44:07.526|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Segmentation Result: LABEL=1 <14>Jul 12 14:44:07 MGMT1 ABRE[27464]: -04:00 2016 526 1 abreg | 0 |2016-07-12/14:44:07.526|GS-LRMI Custom Pool-pool-4-thread-2|INFO| SCRIPT - Single destination has been selected: AG-01 / AGENT_GROUP <14>Jul 12 14:44:07 MGMT1 ABRE[27464]: -04:00 2016 528 1 abre | 0 |2016-07-12/14:44:07.528|GS-LRMI Custom Pool-pool-4-thread- 2|INFO|BestDestination PROCESSED, decision result:

February 2021 Avaya Business Rules Engine Integration Guide 159

{"@type":"com.avaya.ept.dr.services.routing.model.dto.DecisionDTO","ti mestamp":1468349047524,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG- 01","selectedDestAddress":"64711","extendedResponse":{"@type":"java.ut il.HashMap","complement":"extended_response_on_the_fly","sip.domain":" edp.avaya.com","previousDestination":"[email protected]","refer":"fa lse"},"resultCode":10,"debugString":"SGds:S","interactionId":"10000003 671468348818","countDecision":true,"locationName":"Sao Paulo","companyName":"The Company","segLabel":"Premium- 01","segTable":"ICR-ABRE-ST","strategySettingsName":null} <14>Jul 12 14:45:34 MGMT1 ABRE[27464]: -04:00 2016 588 1 abre | 0 |2016-07-12/14:45:34.588|pool-46-thread-1|INFO|INVOKING WEBLM CONNECTOR <14>Jul 12 14:45:34 MGMT1 ABRE[27464]: -04:00 2016 602 1 abre | 0 |2016-07-12/14:45:34.602|pool-46-thread-1|INFO|License internal state enabled=true ...

This is an example where many re-queue cycles happened in sequence. In such scenarios, notice that Avaya Business Rules Engine receives not only the information to compose a brand new decision, but some historical data related to the previous request. This information is key to a script writer, for example, who can apply some additional filters when building the experience to be delivered on the current request.

ICR Core

The most important log file in ICR Core is called AvayaICRDebug.log, found at /ICRCore/tomcat/logs. AvayaICRDebug.log. The box below shows a log snippet that contains the most relevant messages one could use to analyze a call flow from the ICR Core's standpoint. AvayaICRDebug.log ... 2016-07-12 14:40:19,524|INFO |com.avaya.icr.core.service.SkillLookUpService|http-20443-1|[CCXML- Session-ID: aaepicr-2016194184018-18] -- WebService request recevied from host = [ 10.130.125.112 ] for operation = [ getDestinationEx ] and skill id = [ 1 ] 2016-07-12 14:40:19,524|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20443- 1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Checking for license availability...

February 2021 Avaya Business Rules Engine Integration Guide 160

2016-07-12 14:40:19,525|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20443- 1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Validating icrcore service status. 2016-07-12 14:40:19,525|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Validating ICR skill Id = 1 2016-07-12 14:40:19,527|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Performing best destination selection for skill = [ 1 ] using custom extension module - ICRCORE-ABRE-EXT 2016-07-12 14:40:19,527|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20443- 1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Following are the caller context information received from the application : [Context] key = ani, value = 64500 [Context] key = appName, value = ICRSSA [Context] key = customParams, value = Custom1=CustomValue;Custom2=CustomValue2 [Context] key = decisionFunction, value = ICR-ABRE-DF [Context] key = dnis, value = 64600 [Context] key = requeue, value = false [Context] key = segAttributes, value = Package=PREMIUM;Tenure=14 [Context] key = segTableName, value = ICR-ABRE-ST [Context] key = ucid, value = 10000003671468348818 2016-07-12 14:40:19,528|INFO |com.avaya.icr.sdk.util.ICRLogManager|http-20443-1|Creating Default logger for com.avaya.ept.dr.icr.extensions.icr.util.LogManager 2016-07-12 14:40:19,528|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20443-1|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:19,528|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20443-1|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:19,528|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20443-1|Getting Data from the Shared ExternalCache 2016-07-12 14:40:19,532|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Cache is still empty. No previous execution for Session ID aaepicr-2016194184018-18 2016-07-12 14:40:19,532|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20443-1|Entry StoreData(aaepicr-2016194184018-18_count)

February 2021 Avaya Business Rules Engine Integration Guide 161

2016-07-12 14:40:19,710|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20443-1|Exit StoreData(aaepicr-2016194184018-18_count) 2016-07-12 14:40:19,765|INFO |com.avaya.icr.sdk.util.ICRLogManager|http-20443-1|Creating Default logger for com.avaya.icr.sdk.util.ICRUtils 2016-07-12 14:40:19,790|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ICRCORE-ABRE-EXT POST message body: {"decisionFunctionName":"ICR-ABRE- DF","interactionId":"10000003671468348818","from":"64500","to":"64600" ,"customParameters":{"appName":"ICRSSA","segTableName":"ICR-ABRE- ST","requeue":"false","Custom1":"CustomValue","Custom2":"CustomValue2" },"segAttributes":{"Tenure":"14","Package":"PREMIUM"}} 2016-07-12 14:40:19,791|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE REST URL: http://10.130.125.107/abre-decision- api/rest/getdestination 2016-07-12 14:40:19,812|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE HTTP Response Code: 200 2016-07-12 14:40:19,813|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE Response: {"timestamp":1468349032092,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG- 01","selectedDestAddress":"64711","extendedResponse":{"sip.domain":"ed p.avaya.com","refer":"false","previousDestination":"[email protected] m"},"resultCode":10,"debugString":"SGds:S","interactionId":"1000000367 1468348818","countDecision":true,"locationName":"São Paulo","companyName":"The Company","segLabel":"Premium- 01","segTable":"ICR-ABRE-ST","strategySettingsName":null} 2016-07-12 14:40:19,824|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20443-1|Entry StoreData(aaepicr-2016194184018-18) 2016-07-12 14:40:19,826|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20443-1|Exit StoreData(aaepicr-2016194184018-18) 2016-07-12 14:40:19,826|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager

February 2021 Avaya Business Rules Engine Integration Guide 162

|http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ICR Skill ID: 1 2016-07-12 14:40:19,826|ERROR|com.avaya.icr.sdk.util.ICRUtils|http- 20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Skill record is null for destination [Destination VO [ ICRSkill = { 1 }, QueueVDN = null, PollingVDN = null, Acd = { null }, AcdSkill = { null }, BusinessGroup = { null },HolidayGroup = { null }, identifier = { null},skillRecord = {null} ]] 2016-07-12 14:40:19,826|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Destination to be used: [email protected] 2016-07-12 14:40:19,826|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Refer property value: false 2016-07-12 14:40:19,828|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE extended response: {"sip.domain":"edp.avaya.com","refer":"false","previousDestination":"6 [email protected]"} 2016-07-12 14:40:19,828|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Destination Detail custom data: {"sip.domain":"edp.avaya.com","refer":"false","previousDestination":"6 [email protected]"} 2016-07-12 14:40:19,828|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20443-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Returning routing results : DestinationDetail [identifier=null, [email protected], acd=null, acdType=Avaya-CM, [email protected], defaultACD=LABACD, result=AGENT_AVAILABLE, ewt=-1, refer=false, customData={"sip.domain":"edp.avaya.com","refer":"false","previousDest ination":"[email protected]"}, elapsedTime=0, ccxmlAppUrl=, ewtTop=- 1, ewtHigh=-1, ewtMedium=-1, ewtLow=-1, agentsStaffed=-1, agentsAvailable=-1, estimatedQpos=-1, cmskillnumber=-1, priority=-1, percAnsSL=] 2016-07-12 14:40:22,512|INFO |com.avaya.icr.core.service.SkillLookUpService|http-20080-1|[CCXML- Session-ID: aaepicr-2016194184018-18] -- WebService request recevied from host = [ 135.122.99.97 ] for operation = [ getDestinationEx ] and skill id = [ 1 ]

February 2021 Avaya Business Rules Engine Integration Guide 163

2016-07-12 14:40:22,512|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20080- 1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Checking for license availability... 2016-07-12 14:40:22,512|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20080- 1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Validating icrcore service status. 2016-07-12 14:40:22,512|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Validating ICR skill Id = 1 2016-07-12 14:40:22,513|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Performing best destination selection for skill = [ 1 ] using custom extension module - ICRCORE-ABRE-EXT 2016-07-12 14:40:22,513|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20080- 1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Following are the caller context information received from the application : [Context] key = customParams, value = Custom1=CustomValue;Custom2=CustomValue2 [Context] key = appName, value = ICRSSA [Context] key = previousICRExecInfo, value = {"sip.domain":"edp.avaya.com","refer":"false","previousDestination":"6 [email protected]"} [Context] key = segAttributes, value = Package=PREMIUM;Tenure=14 [Context] key = segTableName, value = ICR- ABRE-ST [Context] key = dnis, value = 64600 [Context] key = ucid, value = 10000003671468348818 [Context] key = ani, value = 64500 [Context] key = decisionFunction, value = ICR-ABRE-DF [Context] key = requeue, value = true 2016-07-12 14:40:22,513|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:22,513|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:22,513|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Getting Data from the Shared ExternalCache 2016-07-12 14:40:22,514|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:22,514|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Getting Data from the Shared ExternalCache

February 2021 Avaya Business Rules Engine Integration Guide 164

2016-07-12 14:40:22,515|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous extension executions for Session ID aaepicr- 2016194184018-18: 1 2016-07-12 14:40:22,515|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Entry StoreData(aaepicr-2016194184018-18_count) 2016-07-12 14:40:22,516|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Exit StoreData(aaepicr-2016194184018-18_count) 2016-07-12 14:40:22,518|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous ICR Execution has a parameter 'sip.domain' with value 'edp.avaya.com' 2016-07-12 14:40:22,518|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous ICR Execution has a parameter 'refer' with value 'false' 2016-07-12 14:40:22,518|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous ICR Execution has a parameter 'previousDestination' with value '[email protected]' 2016-07-12 14:40:22,518|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ICRCORE-ABRE-EXT POST message body: {"decisionFunctionName":"ICR-ABRE- DF","interactionId":"10000003671468348818","from":"64500","to":"64600" ,"customParameters":{"appName":"ICRSSA","sip.domain":"edp.avaya.com"," segTableName":"ICR-ABRE- ST","requeue":"true","previousDestination":"[email protected]","refe r":"false","Custom1":"CustomValue","Custom2":"CustomValue2"},"segAttri butes":{"Tenure":"14","Package":"PREMIUM"}} 2016-07-12 14:40:22,518|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE REST URL: http://10.130.125.107/abre-decision- api/rest/getdestination 2016-07-12 14:40:22,530|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager

February 2021 Avaya Business Rules Engine Integration Guide 165

|http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE HTTP Response Code: 200 2016-07-12 14:40:22,531|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE Response: {"timestamp":1468349034815,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG- 01","selectedDestAddress":"64711","extendedResponse":{"complement":"ex tended_response_on_the_fly","sip.domain":"edp.avaya.com","refer":"fals e","previousDestination":"[email protected]"},"resultCode":10,"debug String":"SGds:S","interactionId":"10000003671468348818","countDecision ":true,"locationName":"São Paulo","companyName":"The Company","segLabel":"Premium-01","segTable":"ICR-ABRE- ST","strategySettingsName":null} 2016-07-12 14:40:22,532|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Entry StoreData(aaepicr-2016194184018-18) 2016-07-12 14:40:22,533|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-1|Exit StoreData(aaepicr-2016194184018-18) 2016-07-12 14:40:22,533|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ICR Skill ID: 1 2016-07-12 14:40:22,533|ERROR|com.avaya.icr.sdk.util.ICRUtils|http- 20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Skill record is null for destination [Destination VO [ ICRSkill = { 1 }, QueueVDN = null, PollingVDN = null, Acd = { null }, AcdSkill = { null }, BusinessGroup = { null },HolidayGroup = { null }, identifier = { null},skillRecord = {null} ]] 2016-07-12 14:40:22,533|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Destination to be used: [email protected] 2016-07-12 14:40:22,533|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Refer property value: false 2016-07-12 14:40:22,533|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE extended response:

February 2021 Avaya Business Rules Engine Integration Guide 166

{"complement":"extended_response_on_the_fly","sip.domain":"edp.avaya.c om","refer":"false","previousDestination":"[email protected]"} 2016-07-12 14:40:22,534|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Destination Detail custom data: {"complement":"extended_response_on_the_fly","sip.domain":"edp.avaya.c om","refer":"false","previousDestination":"[email protected]"} 2016-07-12 14:40:22,534|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20080-1|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Returning routing results : DestinationDetail [identifier=null, [email protected], acd=null, acdType=Avaya-CM, [email protected], defaultACD=LABACD, result=AGENT_AVAILABLE, ewt=-1, refer=false, customData={"complement":"extended_response_on_the_fly","sip.domain":" edp.avaya.com","refer":"false","previousDestination":"[email protected]. com"}, elapsedTime=0, ccxmlAppUrl=, ewtTop=-1, ewtHigh=-1, ewtMedium=- 1, ewtLow=-1, agentsStaffed=-1, agentsAvailable=-1, estimatedQpos=-1, cmskillnumber=-1, priority=-1, percAnsSL=] 2016-07-12 14:40:25,049|INFO |com.avaya.icr.core.service.SkillLookUpService|http-20080-2|[CCXML- Session-ID: aaepicr-2016194184018-18] -- WebService request recevied from host = [ 135.122.99.97 ] for operation = [ getDestinationEx ] and skill id = [ 1 ] 2016-07-12 14:40:25,050|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20080- 2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Checking for license availability... 2016-07-12 14:40:25,050|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20080- 2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Validating icrcore service status. 2016-07-12 14:40:25,050|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Validating ICR skill Id = 1 2016-07-12 14:40:25,050|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Performing best destination selection for skill = [ 1 ] using custom extension module - ICRCORE-ABRE-EXT 2016-07-12 14:40:25,050|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20080- 2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Following are the caller context information received from the application : [Context] key = customParams, value = Custom1=CustomValue;Custom2=CustomValue2 [Context] key = appName, value = ICRSSA [Context] key =

February 2021 Avaya Business Rules Engine Integration Guide 167

previousICRExecInfo, value = {"sip.domain":"edp.avaya.com","refer":"false","previousDestination":"6 [email protected]"} [Context] key = segAttributes, value = Package=PREMIUM;Tenure=14 [Context] key = segTableName, value = ICR- ABRE-ST [Context] key = dnis, value = 64600 [Context] key = ucid, value = 10000003671468348818 [Context] key = ani, value = 64500 [Context] key = decisionFunction, value = ICR-ABRE-DF [Context] key = requeue, value = true 2016-07-12 14:40:25,050|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:25,050|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:25,050|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Getting Data from the Shared ExternalCache 2016-07-12 14:40:25,056|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:25,056|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Getting Data from the Shared ExternalCache 2016-07-12 14:40:25,056|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous extension executions for Session ID aaepicr- 2016194184018-18: 2 2016-07-12 14:40:25,056|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Entry StoreData(aaepicr-2016194184018-18_count) 2016-07-12 14:40:25,058|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Exit StoreData(aaepicr-2016194184018-18_count) 2016-07-12 14:40:25,058|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Checking if Shared ExternalCache is available: true 2016-07-12 14:40:25,058|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Getting Data from the Shared ExternalCache 2016-07-12 14:40:25,059|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Caller context updated with previous ICR execution info:

February 2021 Avaya Business Rules Engine Integration Guide 168

{"complement":"extended_response_on_the_fly","sip.domain":"edp.avaya.c om","refer":"false","previousDestination":"[email protected]"} 2016-07-12 14:40:25,059|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous ICR Execution has a parameter 'complement' with value 'extended_response_on_the_fly' 2016-07-12 14:40:25,060|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous ICR Execution has a parameter 'sip.domain' with value 'edp.avaya.com' 2016-07-12 14:40:25,060|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous ICR Execution has a parameter 'refer' with value 'false' 2016-07-12 14:40:25,060|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Previous ICR Execution has a parameter 'previousDestination' with value '[email protected]' 2016-07-12 14:40:25,061|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ICRCORE-ABRE-EXT POST message body: {"decisionFunctionName":"ICR-ABRE- DF","interactionId":"10000003671468348818","from":"64500","to":"64600" ,"customParameters":{"complement":"extended_response_on_the_fly","appN ame":"ICRSSA","sip.domain":"edp.avaya.com","segTableName":"ICR-ABRE- ST","requeue":"true","previousDestination":"[email protected]","refe r":"false","Custom1":"CustomValue","Custom2":"CustomValue2"},"segAttri butes":{"Tenure":"14","Package":"PREMIUM"}} 2016-07-12 14:40:25,061|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE REST URL: http://10.130.125.107/abre-decision- api/rest/getdestination 2016-07-12 14:40:25,075|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE HTTP Response Code: 200 2016-07-12 14:40:25,076|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE

February 2021 Avaya Business Rules Engine Integration Guide 169

EXTENSION] ABRE Response: {"timestamp":1468349037360,"selectedDestId":"7ecb127d-1b0f-4c9a-966e- 52189164eca6","selectedDestNativeId":"1","selectedDestType":"AGENT_GRO UP","selectedDestName":"AG- 01","selectedDestAddress":"64711","extendedResponse":{"complement":"ex tended_response_on_the_fly","sip.domain":"edp.avaya.com","refer":"fals e","previousDestination":"[email protected]"},"resultCode":10,"debug String":"SGds:S","interactionId":"10000003671468348818","countDecision ":true,"locationName":"São Paulo","companyName":"The Company","segLabel":"Premium-01","segTable":"ICR-ABRE- ST","strategySettingsName":null} 2016-07-12 14:40:25,077|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Entry StoreData(aaepicr-2016194184018-18) 2016-07-12 14:40:25,078|DEBUG|com.avaya.icr.sdk.cache.ExternalCacheManager|http- 20080-2|Exit StoreData(aaepicr-2016194184018-18) 2016-07-12 14:40:25,078|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ICR Skill ID: 1 2016-07-12 14:40:25,078|ERROR|com.avaya.icr.sdk.util.ICRUtils|http- 20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Skill record is null for destination [Destination VO [ ICRSkill = { 1 }, QueueVDN = null, PollingVDN = null, Acd = { null }, AcdSkill = { null }, BusinessGroup = { null },HolidayGroup = { null }, identifier = { null},skillRecord = {null} ]] 2016-07-12 14:40:25,079|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Destination to be used: [email protected] 2016-07-12 14:40:25,079|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Refer property value: false 2016-07-12 14:40:25,079|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] ABRE extended response: {"complement":"extended_response_on_the_fly","sip.domain":"edp.avaya.c om","refer":"false","previousDestination":"[email protected]"} 2016-07-12 14:40:25,079|DEBUG|com.avaya.ept.dr.icr.extensions.icr.util.LogManager |http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- [ABRE EXTENSION] Destination Detail custom data:

February 2021 Avaya Business Rules Engine Integration Guide 170

{"complement":"extended_response_on_the_fly","sip.domain":"edp.avaya.c om","refer":"false","previousDestination":"[email protected]"} 2016-07-12 14:40:25,079|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20080-2|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Returning routing results : DestinationDetail [identifier=null, [email protected], acd=null, acdType=Avaya-CM, [email protected], defaultACD=LABACD, result=AGENT_AVAILABLE, ewt=-1, refer=false, customData={"complement":"extended_response_on_the_fly","sip.domain":" edp.avaya.com","refer":"false","previousDestination":"[email protected]. com"}, elapsedTime=0, ccxmlAppUrl=, ewtTop=-1, ewtHigh=-1, ewtMedium=- 1, ewtLow=-1, agentsStaffed=-1, agentsAvailable=-1, estimatedQpos=-1, cmskillnumber=-1, priority=-1, percAnsSL=] 2016-07-12 14:40:27,600|INFO |com.avaya.icr.core.service.SkillLookUpService|http-20080-3|[CCXML- Session-ID: aaepicr-2016194184018-18] -- WebService request recevied from host = [ 135.122.99.97 ] for operation = [ getDestinationEx ] and skill id = [ 1 ] 2016-07-12 14:40:27,600|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20080- 3|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Checking for license availability...

2016-07-12 14:40:27,600|DEBUG|com.avaya.icr.core.ssi.RouteSelector|http-20080- 3|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Validating icrcore service status. 2016-07-12 14:40:27,600|INFO |com.avaya.icr.core.ssi.RouteSelector|http-20080-3|[CCXML-Session-ID: aaepicr-2016194184018-18] -- Validating ICR skill Id = 1 ...

From line 8 to 16, the extension prints the caller context received in the request. This is useful to see all the parameters sent to the extension, through the caller context object. Next, in line 22, there is information about the ICR cache. As it is the first time the extension is being invoked by the SSA, the cache is still empty. This cache is used to store the latest extended response received from the Avaya Business Rules Engine, sent back to Avaya Business Rules Engine each time the extension is invoked again, in a requeue condition. In lines 60 and 100, another message indicates how many times the extension was executed within the same MPP session, with information stored each time the extension is called. In line 26, it is possible to see the full Avaya Business Rules Engine request body, formatted in JSON, which contains all the information Avaya Business Rules Engine needs to execute and make a decision.

February 2021 Avaya Business Rules Engine Integration Guide 171

Line 29 contains the associated Avaya Business Rules Engine response, also in JSON format. There it is possible to see what was returned by Avaya Business Rules Engine, from the selected destination to all the fields of the extended response. Finally, in lines 66 and 110, new calls to Avaya Business Rules Engine can be seen. This is a log snippet extract from a requeue exercise, when the destination (a.k.a. VDN) returned by Avaya Business Rules Engine was, on purpose, set to AUX, forcing the requeue to happen and the extension to be invoked again, three more times. All the messages related to the extension, in this log file, are identified by the tag [ABRE EXTENSION], making it easier to identify meaningful messages when debugging a call flow.

CXI

CXI, available in AAEPMS, can also be used to understand the whole call flow and, also, how and when dialogs are created, finished, and how CCA communicates to other components such as the ICR Core and MPP. The CXI logs can be found under AAEPMS » Real-time Monitoring » System Monitor. In this page, select the AAEP server you want to see the logs, like in the picture below:

In the page opened when you click the link indicated by the red arrow above, click on the link called Service Menu. In the new page displayed, select the item Logs in the side menu and, finally, CXI.

The log files we are interested on usually follow the pattern 'CCXML-SessionSlot- .log' in their name. The block below shows some messages from one of these files.

February 2021 Avaya Business Rules Engine Integration Guide 172

CCXML-SessionSlot-016.log 2016-07-12 14:40:18,701||FINE|CXI|18730|Session=aaepicr-2016194184018- 18|######## (Thread: -190842000) Constructing Session: 16786252|aaepicr#### 2016-07-12 14:40:18,714||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending SessionStarted message to SessionManager.|aaepicr#### 2016-07-12 14:40:18,714||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: SessionStarted & size: 71|aaepicr#### 2016-07-12 14:40:18,714||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::Run) Fetching Url : http://135.122.99.97:6080/ICRCCApp/jsp/start.jsp?%5f%5fVPapploggingurl =https%3a%2f%2f135%2e122%2e99%2e92%2faxis%2fservices%2fVPReport4&%5f%5 fVPapploggingurl%5f2=https%3a%2f%2f135%2e122%2e99%2e97%2faxis%2fservic es%2fVPReport4&%5f%5fVPapplog=%2faxis2%2fservices%2fVPAppLogService&%5 f%5fVPvpms=135%2e122%2e99%2e92%7c135%2e122%2e99%2e97&%5f%5fVPappvars=% 2faxis2%2fservices%2fVPAppVarsService&%5f%5fVPVarAppDate=0&%5f%5fVPVar AppURL=https%3a%2f%2f135%2e122%2e99%2e92%2faxis%2fservices%2fVPAppRunt imeVars&%5f%5fVPVarAppURL2=https%3a%2f%2f135%2e122%2e99%2e97%2faxis%2f services%2fVPReport4&%5f%5fVPVarGlobalDate=1468348554038&%5f%5fVPbread crumb=disabled&%5f%5fVPmaxbackuplogfiles=10&%5f%5fVPlogname=%25default %256BwWYXmzTKa2OIei&%5f%5fVPlogpassword=CTeYQuZOnPsJrlgBfgUHJyha%2fwvA J%2bor%2fHdbYCTuCtKIoIesHMsJuszkk0a%2f1BtX&%5f%5fVPappname=0%3aCCA&ses sion%5f%5f%5fsessionid=aaepicr%2d2016194184018%2d18|aaepicr#### 2016-07-12 14:40:18,715||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::script_element) |aaepicr#### 2016-07-12 14:40:18,715||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::script_element) Expanded relative uri to 'http://135.122.99.97:6080/ICRCCApp/jsp/../jscript/functions.js'.|aaep icr#### 2016-07-12 14:40:18,716||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending CallAlertingAck message to SessionManager.|aaepicr#### 2016-07-12 14:40:18,717||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: CallAlertingAck & size: 48|aaepicr#### 2016-07-12 14:40:18,721||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.alerting message to CXI.|aaepicr#### 2016-07-12 14:40:18,721||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.signal message to CXI.|aaepicr#### 2016-07-12 14:40:18,724||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 173

2016-07-12 14:40:18,724||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,725||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 174

2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,726||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,727||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,727||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,727||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,727||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,727||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,727||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,727||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 175

2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,728||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 176

2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,729||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,730||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element)

February 2021 Avaya Business Rules Engine Integration Guide 177

|aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,731||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,732||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,732||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,732||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,732||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 178

2016-07-12 14:40:18,732||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,732||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,732||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr### # 2016-07-12 14:40:18,732||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 179

2016-07-12 14:40:18,733||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,734||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,735||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,735||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,735||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,735||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 180

2016-07-12 14:40:18,735||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,735||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,735||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,735||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,736||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,736||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,736||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,736||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,736||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,736||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,736||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,736||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,737||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 23 milliseconds|aaepicr#### 2016-07-12 14:40:18,737||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::!!!!!!!!!!!!!!!!!Loop DOUBTED!!!!!!!!!!!!!) loop count is 1|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 181

2016-07-12 14:40:18,737||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::missed) event 'ccxml.loaded'|aaepicr#### 2016-07-12 14:40:18,737||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 16 milliseconds|aaepicr#### 2016-07-12 14:40:18,738||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:18,738||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 125|aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,739||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 182

2016-07-12 14:40:18,740||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,740||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,740||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,740||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,740||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,740||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,740||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,740||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,741||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,741||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,741||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr####'>http://135.122.99.97:6080/ICRCCApp/jsp/ec cxml.jsp'>|aaepicr#### 2016-07-12 14:40:18,741||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 177|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 183

2016-07-12 14:40:18,741||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::fetch_element) |aaepicr#### 2016-07-12 14:40:18,741||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 20 milliseconds|aaepicr#### 2016-07-12 14:40:18,742||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::missed) event 'connection.signal'|aaepicr#### 2016-07-12 14:40:18,768||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 22 milliseconds|aaepicr#### 2016-07-12 14:40:18,796||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:18,796||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 122|aaepicr#### 2016-07-12 14:40:18,796||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:18,796||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::accept_element) |aaepicr#### 2016-07-12 14:40:18,796||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending CallAccept message to SessionManager.|aaepicr#### 2016-07-12 14:40:18,796||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: CallAccept & size: 58|aaepicr#### 2016-07-12 14:40:18,797||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::goto_element) |aaepicr#### 2016-07-12 14:40:18,797||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:18,797||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:18,797||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 99|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 184

2016-07-12 14:40:19,269||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Received CallConnected message for a connection; No cpa results, setting classification to empty|aaepicr#### 2016-07-12 14:40:19,270||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.connected message to CXI.|aaepicr#### 2016-07-12 14:40:19,270||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:19,270||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 114|aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::dialogstart_element) |aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 124|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 185

2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending DialogPrepare message to SessionManager.|aaepicr#### 2016-07-12 14:40:19,271||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: DialogPrepare & size: 158|aaepicr#### 2016-07-12 14:40:19,395||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending DialogStart message to SessionManager.|aaepicr#### 2016-07-12 14:40:19,395||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: DialogStart & size: 56|aaepicr#### 2016-07-12 14:40:19,396||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending dialog.started message to CXI.|aaepicr#### 2016-07-12 14:40:19,396||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:19,397||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,397||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 108|aaepicr#### 2016-07-12 14:40:19,397||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,397||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,397||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::fetch_element) |aaepicr#### 2016-07-12 14:40:19,397||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,403||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 186

2016-07-12 14:40:19,403||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::script_element) |aaepicr#### 2016-07-12 14:40:19,403||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,403||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 147|aaepicr#### 2016-07-12 14:40:19,545||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.signal message to CXI.|aaepicr#### 2016-07-12 14:40:19,545||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.signal message to CXI.|aaepicr#### 2016-07-12 14:40:19,545||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:19,546||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,546||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 103|aaepicr#### 2016-07-12 14:40:19,546||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:19,547||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::!!!!!!!!!!!!!!!!!Loop DOUBTED!!!!!!!!!!!!!) loop count is 1|aaepicr#### 2016-07-12 14:40:19,547||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,547||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 103|aaepicr#### 2016-07-12 14:40:19,793||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.signal message to CXI.|aaepicr#### 2016-07-12 14:40:19,793||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:19,794||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::!!!!!!!!!!!!!!!!!Loop DOUBTED!!!!!!!!!!!!!) loop count is 2|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 187

2016-07-12 14:40:19,794||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,794||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 103|aaepicr#### 2016-07-12 14:40:19,975||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending dialog.exit message to CXI.|aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 188

2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 94|aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 126|aaepicr#### 2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 127|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 189

2016-07-12 14:40:19,978||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 135|aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 121|aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 119|aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 133|aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 110|aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 133|aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 190

2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 117|aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::send_element) |aaepicr#### 2016-07-12 14:40:19,979||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending start_wta message to CXI.|aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::DefaultEventProcessor) putting send.successful with sendid (100672347) to queue|aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element)

February 2021 Avaya Business Rules Engine Integration Guide 191

|aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::dialogstart_element) |aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:19,980||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:19,981||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 123|aaepicr#### 2016-07-12 14:40:19,981||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending DialogPrepare message to SessionManager.|aaepicr#### 2016-07-12 14:40:19,981||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: DialogPrepare & size: 307|aaepicr#### 2016-07-12 14:40:19,981||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 111|aaepicr#### 2016-07-12 14:40:20,001||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending DialogStart message to SessionManager.|aaepicr#### 2016-07-12 14:40:20,001||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: DialogStart & size: 56|aaepicr#### 2016-07-12 14:40:20,002||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending dialog.started message to CXI.|aaepicr#### 2016-07-12 14:40:20,002||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,002||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,003||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 118|aaepicr#### 2016-07-12 14:40:20,003||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element)

February 2021 Avaya Business Rules Engine Integration Guide 192

expr='Event:[dialog.started] State:[calling_agent] Initiating no media call to destination : [email protected]'>|aaepicr#### 2016-07-12 14:40:20,003||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 157|aaepicr#### 2016-07-12 14:40:20,003||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::createcall_element) |aaepicr#### 2016-07-12 14:40:20,004||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending CallCreate message to SessionManager.|aaepicr#### 2016-07-12 14:40:20,004||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: CallCreate & size: 246|aaepicr#### 2016-07-12 14:40:20,004||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,004||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,004||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,005||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::fetch_element) |aaepicr#### 2016-07-12 14:40:20,005||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,006||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::fetch_element)

February 2021 Avaya Business Rules Engine Integration Guide 193

p:[email protected]&insert=false', type='text/ecmascript', method='GET', timeout='15s', namelist='', fetchid='', synch='', maxage='0' , maxstale='0' , enctype='application/x-www-form- urlencoded'>|aaepicr#### 2016-07-12 14:40:20,006||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Received CallConnected message for a connection; No cpa results, setting classification to empty|aaepicr#### 2016-07-12 14:40:20,006||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.progressing message to CXI.|aaepicr#### 2016-07-12 14:40:20,007||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,007||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 2 milliseconds|aaepicr#### 2016-07-12 14:40:20,010||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,010||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::script_element) |aaepicr#### 2016-07-12 14:40:20,010||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,010||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 160|aaepicr#### 2016-07-12 14:40:20,010||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,011||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::!!!!!!!!!!!!!!!!!Loop DOUBTED!!!!!!!!!!!!!) loop count is 1|aaepicr#### 2016-07-12 14:40:20,011||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::script_element) |aaepicr#### 2016-07-12 14:40:20,011||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,011||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 157|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 194

2016-07-12 14:40:20,080||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.signal message to CXI.|aaepicr#### 2016-07-12 14:40:20,081||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,081||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,081||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 113|aaepicr#### 2016-07-12 14:40:20,244||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Received CallConnected message for a connection; No cpa results, setting classification to empty|aaepicr#### 2016-07-12 14:40:20,245||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.progressing message to CXI.|aaepicr#### 2016-07-12 14:40:20,246||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,246||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,246||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 163|aaepicr#### 2016-07-12 14:40:20,246||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::send_element) |aaepicr#### 2016-07-12 14:40:20,246||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending provisional_resp_timeout message to CXI.|aaepicr#### 2016-07-12 14:40:20,476||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Received CallConnected message for a connection; No cpa results, setting classification to empty|aaepicr#### 2016-07-12 14:40:20,477||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending connection.progressing message to CXI.|aaepicr#### 2016-07-12 14:40:20,478||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,478||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::!!!!!!!!!!!!!!!!!Loop DOUBTED!!!!!!!!!!!!!) loop count is 1|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 195

2016-07-12 14:40:20,478||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,478||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 147|aaepicr#### 2016-07-12 14:40:20,478||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 133|aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::cancel_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Attempting to cancel event with the id: <100672358>|aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending cancel.successful message to CXI.|aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::send_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending provisional_resp_timeout message to CXI.|aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 155|aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 181|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 196

2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepic r#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,479||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::fetch_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 148|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 197

2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 165|aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,481||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 137|aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 189|aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element)

February 2021 Avaya Business Rules Engine Integration Guide 198

|aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::send_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending request_icrcore message to CXI.|aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,482||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 186|aaepicr#### 2016-07-12 14:40:20,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::dialogterminate_element) |aaep icr####

February 2021 Avaya Business Rules Engine Integration Guide 199

2016-07-12 14:40:20,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending DialogTerminate message to SessionManager.|aaepicr#### 2016-07-12 14:40:20,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: DialogTerminate & size: 58|aaepicr#### 2016-07-12 14:40:20,484||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 2 milliseconds|aaepicr#### 2016-07-12 14:40:20,484||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,484||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 111|aaepicr#### 2016-07-12 14:40:20,485||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,486||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::script_element) |aaepicr#### 2016-07-12 14:40:20,486||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,486||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 161|aaepicr#### 2016-07-12 14:40:20,594||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending dialog.exit message to CXI.|aaepicr#### 2016-07-12 14:40:20,594||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,594||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,594||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,594||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 200

2016-07-12 14:40:20,595||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 102|aaepicr#### 2016-07-12 14:40:20,595||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,595||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 117|aaepicr#### 2016-07-12 14:40:20,595||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,595||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,595||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,595||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,596||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,596||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 141|aaepicr#### 2016-07-12 14:40:20,596||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::send_element) |aaepicr#### 2016-07-12 14:40:20,596||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending start_wta message to CXI.|aaepicr#### 2016-07-12 14:40:20,596||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,596||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 1 milliseconds|aaepicr#### 2016-07-12 14:40:20,596||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::DefaultEventProcessor) putting send.successful with sendid (100672365) to queue|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 201

2016-07-12 14:40:20,596||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,597||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 121|aaepicr#### 2016-07-12 14:40:20,597||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,597||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,597||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,597||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,597||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,597||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::dialogstart_element) |aaepicr#### 2016-07-12 14:40:20,598||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending DialogPrepare message to SessionManager.|aaepicr#### 2016-07-12 14:40:20,598||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: DialogPrepare & size: 313|aaepicr#### 2016-07-12 14:40:20,598||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 1 milliseconds|aaepicr#### 2016-07-12 14:40:20,598||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 202

2016-07-12 14:40:20,598||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 109|aaepicr#### 2016-07-12 14:40:20,616||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending DialogStart message to SessionManager.|aaepicr#### 2016-07-12 14:40:20,617||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: DialogStart & size: 56|aaepicr#### 2016-07-12 14:40:20,618||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending dialog.started message to CXI.|aaepicr#### 2016-07-12 14:40:20,618||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,619||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:20,619||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,619||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::fetch_element) |aaepicr#### 2016-07-12 14:40:20,619||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:20,619||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 116|aaepicr#### 2016-07-12 14:40:20,623||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:20,623||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::script_element) |aaepicr#### 2016-07-12 14:40:20,623||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 203

2016-07-12 14:40:20,623||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 155|aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 2 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::DefaultEventProcessor) putting send.successful with sendid (100672362) to queue|aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 140|aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 147|aaepicr#### 2016-07-12 14:40:22,483||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::fetch_element)

February 2021 Avaya Business Rules Engine Integration Guide 204

maxstale='0' , enctype='application/x-www-form- urlencoded'>|aaepicr#### 2016-07-12 14:40:22,484||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 1 milliseconds|aaepicr#### 2016-07-12 14:40:22,484||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:22,484||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 109|aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::script_element) |aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 326|aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 205

2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::send_element) |aaepicr#### 2016-07-12 14:40:22,541||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending create_nomedia_call message to CXI.|aaepicr#### 2016-07-12 14:40:22,542||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 0 milliseconds|aaepicr#### 2016-07-12 14:40:22,542||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::DefaultEventProcessor) putting send.successful with sendid (100672372) to queue|aaepicr#### 2016-07-12 14:40:22,542||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:22,542||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 140|aaepicr#### 2016-07-12 14:40:22,542||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::disconnect_element) |aaepicr#### 2016-07-12 14:40:22,543||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending CallDisconnect message to SessionManager.|aaepicr#### 2016-07-12 14:40:22,543||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: CallDisconnect & size: 299|aaepicr#### 2016-07-12 14:40:22,543||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,543||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,543||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,543||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: AppLog & size: 164|aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 206

2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::createcall_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending CallCreate message to SessionManager.|aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|Sending message of type: CallCreate & size: 1025|aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::fetch_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr####

February 2021 Avaya Business Rules Engine Integration Guide 207

2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::assign_element) |aaepicr#### 2016-07-12 14:40:22,544||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (EventProcessor) Time spent by event is 0 sec and 2 milliseconds|aaepicr#### 2016-07-12 14:40:22,545||FINE|CXI|24848|Session=aaepicr-2016194184018- 18|CXI Diagnostic: (Interpreter::log_element) |aaepicr#### ...

Pay attention especially to the line 347, where CCA invokes the ICR Core directly. Because of the configuration made on the reference SSA, already explained in a previous section, ICR Core identifies that the extension module has to be invoked. From the extension module, we get Avaya Business Rules Engine invoked once more, to handle the re-queue scenario, which is reflect in the Avaya Business Rules Engine logs already described.

SSA log

Last but not least, the OD applications also have a file where information about the call flow is registered. However, in order to get these messages recorded, the application must be configured in such a way that debugging is enabled. In this section, both the configuration and log analysis will be provided. Enabling Log Recording

Every OD application has a file called ddrt.properties, where debugging/reporting must be enabled in order to get messages written to the log file about to be analyzed. This file is found [od_application_home_dir]/data/log. at and the block below shows its content, with the debugging/reporting properties, at the bottom, already enabled. ddrt.properties # localddtrace

February 2021 Avaya Business Rules Engine Integration Guide 208

# Orchestration Designer builtin tracing in the trace.log [enabled|disabled]

# localapptrace # Application tracing in the trace.log [enabled|disabled]

# showxml # Enables display of the generated XML output in the trace.log. [enabled|disabled]

# showxmlroot=once # Enables display of the generated XML output for the AppRoot in the trace.log. [once|always|never] # The default is once if this property is not specified.

# xmlrootinline # Enables generation of the approot inline [enabled|disabled] # The default is enabled if this property is not specified. # This results in 1/2 as many page fetches.

# localreportlog # Enables the local report.log on platforms (Voice Portal) when the local log # is normally disabled. [enabled|disabled]

# frameworkreporting # Enables application framework reporting in the report.log. This is reporting that tracks the # path a caller takes through an application. [enabled|disabled]

# localsoaptrace # Enables the WSOP to print the soap request and soap response to the console # is normally disabled. [enabled|disabled]

February 2021 Avaya Business Rules Engine Integration Guide 209

# showcaughtexceptions # Enables display of stack trace on caught exceptions in the runtime # is normally disabled. [enabled|disabled] localddtrace=enabled localapptrace=enabled showxml=enabled showxmlroot=once localreportlog=enabled frameworkreporting=enabled localsoaptrace=enabled xmlrootinline=enabled showcaughtexceptions=enabled

Log Analysis

In this log file, the content is displayed in the format of a CCXML document, and the information is exactly the same as in the log files described in previous sections.The log file, called trace.log, can be found at. trace.log

12/07/2016 14:43:59:747 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : SCESession bound to HttpSession 59AB840660936AC65099F768A5DFDC67 12/07/2016 14:43:59:748 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Browser Version 2.1.4, terminationURL enabled : true ... 12/07/2016 14:43:59:872 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Using SCESession 59AB840660936AC65099F768A5DFDC67:/ICRSSA servlet : CallABRE 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :_sipcallid to simple: _sipcallid as [7abc92c485e41e6a4db0505683f3f] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :redirectinfo___presentationinfo to complex: redirectinfo:presentationinfo as []

February 2021 Avaya Business Rules Engine Integration Guide 210

12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :redirectinfo___reason to complex: redirectinfo:reason as [] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :redirectinfo___screeninginfo to complex: redirectinfo:screeninginfo as [] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :redirectinfo___uri to complex: redirectinfo:uri as [] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___aai to complex: session:aai as [] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___ani to complex: session:ani as [64500] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___calltag to complex: session:calltag as [aaepicr-135.20.215.56-1- 2016194184018] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___channel to complex: session:channel as [] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___dnis to complex: session:dnis as [64600] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___mediatype to complex: session:mediatype as [video] 12/07/2016 14:43:59:873 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___protocolname to complex: session:protocolname as [sip] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___protocolversion to complex: session:protocolversion as [2.0] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___sessionlabel to complex: session:sessionlabel as [10000003671468348818] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing

February 2021 Avaya Business Rules Engine Integration Guide 211

:session___sharedmode to complex: session:sharedmode as [serviceprovider] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___ucid to complex: session:ucid as [10000003671468348818] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___uui to complex: session:uui as [] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videobitrate to complex: session:videobitrate as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videocodec to complex: session:videocodec as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videoenabled to complex: session:videoenabled as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videofarfmtp to complex: session:videofarfmtp as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videoformat to complex: session:videoformat as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videofps to complex: session:videofps as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videoheight to complex: session:videoheight as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videonearfmtp to complex: session:videonearfmtp as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___videowidth to complex: session:videowidth as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___vpcalledextension to complex: session:vpcalledextension as [] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing

February 2021 Avaya Business Rules Engine Integration Guide 212

:session___vpcoveragereason to complex: session:vpcoveragereason as [] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___vpcoveragetype to complex: session:vpcoveragetype as [] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :session___vprdnis to complex: session:vprdnis as [] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :shareduui___id to complex: shareduui:id as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Storing :shareduui___value to complex: shareduui:value as [unknown] 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [skillToSend] to [skill:value] 12/07/2016 14:43:59:874 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - skillToSend 12/07/2016 14:43:59:874 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for skillToSend 12/07/2016 14:43:59:874 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA 12/07/2016 14:43:59:874 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [applicationName] to [callerContext:appName] 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [decisionFunction] to [callerContext:decisionFunction] 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - decisionFunction 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for decisionFunction

February 2021 Avaya Business Rules Engine Integration Guide 213

12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [segAttributes] to [callerContext:segAttributes] 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - segAttributes 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for segAttributes 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [segTableName] to [callerContext:segTableName] 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - segTableName 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for segTableName 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [customParams] to [callerContext:customParams] 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - customParams 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for customParams 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA

February 2021 Avaya Business Rules Engine Integration Guide 214

12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [session:dnis] to [callerContext:dnis] 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [session:ucid] to [callerContext:ucid] 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [session:ani] to [callerContext:ani] 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [applicationName] to [requeueCallerContext:appName] 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [decisionFunction] to [requeueCallerContext:decisionFunction] 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - decisionFunction 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for decisionFunction 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [segAttributes] to [requeueCallerContext:segAttributes] 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - segAttributes 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for segAttributes 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [segTableName] to [requeueCallerContext:segTableName]

February 2021 Avaya Business Rules Engine Integration Guide 215

12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - segTableName 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for segTableName 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [customParams] to [requeueCallerContext:customParams] 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin SimpleVariable:getSimpleVariable(): return admin simple variable - customParams 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Admin VariableField:getStringValue(): return string value for customParams 12/07/2016 14:43:59:875 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : get param for app: 0:CCA...SSA 12/07/2016 14:43:59:875 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [session:dnis] to [requeueCallerContext:dnis] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [session:ucid] to [requeueCallerContext:ucid] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [session:ani] to [requeueCallerContext:ani] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Executing IPluggableExecutable com.avaya.icr.pdc : Retrieving Destination Information using extended APIs 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Skill ID : 1 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Preferred ICRCore List is : [[ICRConfigEntry] id:0, ip:135.122.99.97, name:135.122.99.97, isPreferred:true, isFailover:] and Failover ICRCore List is : []

February 2021 Avaya Business Rules Engine Integration Guide 216

12/07/2016 14:43:59:876 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Parsing global variable, ICRCore identified is : [ICRCore] id:0, ip:135.122.99.97, protocol:null, name:null, state:1, mode:0, zone:null 12/07/2016 14:43:59:876 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Running Preferred ICR Core list is : [[ICRCore] id:0, ip:135.122.99.97, protocol:null, name:null, state:1, mode:0, zone:null] 12/07/2016 14:43:59:876 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Running Failover ICR Core list is : [] 12/07/2016 14:43:59:876 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Stopped Preferred ICR Core list is : [] 12/07/2016 14:43:59:876 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Stopped Failover ICR Core list is : [] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [ani] is [64500] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [appName] is [ICRSSA] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [customParams] is [Custom1=CustomValue;Custom2=CustomValue2] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [decisionFunction] is [ICR-ABRE-DF] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [dnis] is [64600] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [requeue] is [false] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [segAttributes] is [Package=PREMIUM;Tenure=14] 12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [segTableName] is [ICR-ABRE-ST]

February 2021 Avaya Business Rules Engine Integration Guide 217

12/07/2016 14:43:59:876 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : the value of field [ucid] is [10000003671468348818] 12/07/2016 14:43:59:876 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Randomly selected ICRCore is : [ICRCore] id:0, ip:135.122.99.97, protocol:null, name:null, state:1, mode:0, zone:null 12/07/2016 14:44:00:320 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : getDestinationEx -- Retrieved destination information [ DestinationDetail [identifier=null, [email protected], acd=null, acdType=Avaya-CM, [email protected], defaultACD=LABACD, result=AGENT_AVAILABLE, ewt=-1, refer=false, customData={"sip.domain":"edp.avaya.com","refer":"false","previousDest ination":"[email protected]"}, elapsedTime=0, ccxmlAppUrl=, ewtTop=- 1, ewtHigh=-1, ewtMedium=-1, ewtLow=-1, agentsStaffed=-1, agentsAvailable=-1, estimatedQpos=-1, cmskillnumber=-1, priority=-1, percAnsSL=] ] 12/07/2016 14:44:00:320 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Result retrieved is : DestinationDetail [identifier=null, [email protected], acd=null, acdType=Avaya-CM, [email protected], defaultACD=LABACD, result=AGENT_AVAILABLE, ewt=-1, refer=false, customData={"sip.domain":"edp.avaya.com","refer":"false","previousDest ination":"[email protected]"}, elapsedTime=0, ccxmlAppUrl=, ewtTop=- 1, ewtHigh=-1, ewtMedium=-1, ewtLow=-1, agentsStaffed=-1, agentsAvailable=-1, estimatedQpos=-1, cmskillnumber=-1, priority=-1, percAnsSL=] 12/07/2016 14:44:00:320 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Completed IPluggableExecutable com.avaya.icr.pdc 12/07/2016 14:44:00:320 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Assigning [DestinationInformation1:extra_info] to [requeueCallerContext:previousICRExecInfo] 12/07/2016 14:44:00:321 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Using SCESession 59AB840660936AC65099F768A5DFDC67:/ICRSSA servlet : Exit 12/07/2016 14:44:00:321 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : *** Reply for [/ICRSSA/Exit] *** 12/07/2016 14:44:00:321 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : 0: 1: 2:

February 2021 Avaya Business Rules Engine Integration Guide 218

name="author" content="Avaya Aura Orchestration Designer"/> 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:

13: 14: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
51: 52: 12/07/2016 14:44:00:326 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Removing session from AvayaSessionTermination Servlet 12/07/2016 14:44:00:326 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Termination URL reply : 12/07/2016 14:44:00:326 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : HTTP Session lost removing SCESession 59AB840660936AC65099F768A5DFDC67

February 2021 Avaya Business Rules Engine Integration Guide 219

12/07/2016 14:44:00:326 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : SCESession Removed 12/07/2016 14:44:00:326 DEBUG - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : Removing 1 session stack frames. 12/07/2016 14:44:00:326 INFO - 59AB840660936AC65099F768A5DFDC67:/ICRSSA : ** Popped Stack Frame [/ICRSSA]

February 2021 Avaya Business Rules Engine Integration Guide 220

Chapter 8: Out-Of-Box Strategy Scripts

There are several Strategy Scripts that are provided Out-Of-the-Box when the ABRE software is installed. Each script is described in detail below. Note: ResultLabel which is returned by most OOB scripts, can be one of the following values: • Transfer - Destination found • Error - No Destination found • JustExperience - No Destination (e.g. copying all the Script Variables to the Extended Response) • Closed - All Destinations are manually closed by Global Property (in ACD, Company, Location, or Agent Group) • Application - Application found

Experience Selection

The Strategy Script (SS) returns the Script Variables (SV) configured via Strategy Settings (SST) in the Extended Response. The user should customize the SS to add the required SV. Use Cases include: • Drive the IVR flow using Avaya Business Rules Engine; ABRE returns all the prompts, possible inputs, and next actions to the IVR • Query for an announcement, based on customer segment • Lookup a value or a set of them, using ABRE as a configuration repository Processing: • Adds all the Script Variables to the Extended Response • Returns the ResultLabel as part of the Extended Response • Returns with result code 100 Script Name: Experience_Selection Script Version: 3.4 Code: strategy-experience-only.groovy

February 2021 Avaya Business Rules Engine Integration Guide 221

Figure 56: Experience selection

Application Selection

The Strategy Script (SS) returns the Script Variables (SV) configured via Strategy Settings (SST) in the Extended Response, and also one Application. The user should customize the SS to add the required SV. Processing • Adds all the Script Variables to the Extended Response • Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address, if there is no Address assigned to the Segmentation Rule Destination) • Returns the ResultLabel as part of the Extended Response

Script Name: Application_Selection Script Version: 3.4 Code: strategy-application.groovy

February 2021 Avaya Business Rules Engine Integration Guide 222

Figure 57: Application selection

Percent Allocation - Based on Daily Traffic

The Strategy Script distributes traffic across the Agent Groups, using percent allocation, considering the decision requests since midnight. The Agent Groups are configured as Destinations in the Segmentation Rule. Before applying the distribution logic, the script does pre-processing to filter out Agent Groups that are in certain conditions. Script workflow is as follows: Pre-processing: • Adds all the Script Variables to the Extended Response • Discards the Agent Groups, where the ACD is manually closed (ACD Global Property configuration) • Discards the Agent Groups, where the Location is manually closed (Location Global Property configuration) • Discards the Agent Groups, where the Company is manually closed (Company Global Property configuration) • Discards the Agent Groups which are manually closed (Agent Group Global Property configuration) • Checks if all the Agent Groups were removed by manual closure and if yes, returns the error code -102 • Discards the Agent Groups, where the Timetable is in CLOSE interval • Checks if there is at least one remaining Agent Group, if not, returns the error code -103. The error code -103 can be used by the IVR, to know that all Agent Groups are closed, and play an appropriate message. Processing: Applies percent allocation logic, considering the entire day's traffic: • Considers how many calls were distributed to each Agent Group since midnight (00:00 AM)

February 2021 Avaya Business Rules Engine Integration Guide 223

• Balances the percent distribution across all the Agent Groups configured on the particular Segmentation Table Rule • If a configuration change is made during the day, re-balances the distribution of calls to each Agent Group based on the new percentages configured • Returns the selected Agent Group with the result code 100 • Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address of the Agent Group, if there is no Address assigned to the Segmentation Rule Destination) • Returns the ResultLabel as part of the Extended Response The user can add or remove Destination Aliases with no code changes and also add Script Variables that will be automatically added to the Extended Response.

Script Name: PercentAllocation_DailyTraffic (previously known as Percent) Script Version: 3.4 Code: strategy-percent-alloc-daily.groovy

Figure 58: Percent allocation – Based on Daily Traffic

February 2021 Avaya Business Rules Engine Integration Guide 224

Percent Allocation - Based on Current Traffic

The Strategy Script distributes traffic across the Agent Groups, using percent allocation, considering the current decision requests only. The Agent Groups are configured as Destinations in the Segmentation Rule. Before applying the distribution logic, the script does pre-processing to filter out Agent Groups that are in certain conditions. Script workflow is as follows: Pre-processing: • Adds all the Script Variables to the Extended Response • Discards the Agent Groups, where the ACD is manually closed (ACD Global Property configuration) • Discards the Agent Groups, where the Location is manually closed (Location Global Property configuration) • Discards the Agent Groups, where the Company is manually closed (Company Global Property configuration) • Discards the Agent Groups which are manually closed (Agent Group Global Property configuration) • Checks if all the Agent Groups were removed by manual closure and if yes, returns the error code -102 • Discards the Agent Groups, where the Timetable is in CLOSE interval • Checks if there is at least one remaining Agent Group, if not, returns the error code -103. The error code -103 can be used by the IVR, to know that all Agent Groups are closed, and play an appropriate message. Processing: Applies percent allocation logic, considering the current traffic: • Distributes calls across the destinations, by using random number generation targeting the percentages configured • If a configuration change is made during the day, re-balances the distribution of calls to each Agent Group based on the new percentages configured (previous decisions have no impact on the current one) • Returns the selected Agent Group with result code 100 • Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address of the Agent Group, if there is no Address assigned to the Segmentation Rule Destination) • Returns the ResultLabel as part of the Extended Response The user can add or remove Destination Aliases and also add Script Variables that will be automatically added to the Extended Response. Script Name: PercentAllocation_CurrentTraffic Script Version: 3.4

February 2021 Avaya Business Rules Engine Integration Guide 225

Code: strategy-percent-alloc-current.groovy

Figure 59: Percent Allocation - Based on current traffic

Best EWT - Configurable Default Route

The Strategy Script distributes traffic across the Agent Groups, using real-time metrics such as Expected Wait Time (EWT) and Agent Availability Ratio. The Agent Groups are configured as Destinations in the Segmentation Rule. Before applying the distribution logic, the script does pre-processing to filter out Agent Groups that are in certain conditions. Script workflow is as follows: Pre-processing: • Adds all the Script Variables to the Extended Response • Discards the Agent Groups, where the Timetable is in CLOSE interval

February 2021 Avaya Business Rules Engine Integration Guide 226

• Discards the Agent Groups, where the ACD is manually closed (ACD Global Property configuration) • Discards the Agent Groups, where the Location is manually closed (Location Global Property configuration) • Discards the Agent Groups, where the Company is manually closed (Company Global Property configuration) • Discards the Agent Groups which are manually closed (Agent Group Global Property configuration) • Checks if there is at least one remaining Agent Group, if not, returns the Default Agent Group (if it is open), otherwise returns error code Processing: • Checks if there are metrics for the Agent Groups, and if there is at least one Agent Group with one or more Staffed Agents. If not, returns the Default Agent Group (if it is open), otherwise returns error code -100 • Checks if there are Staffed Agents, and if the call center is in Agent Surplus or Call Surplus scenario: o Agent Surplus: returns the Agent Group based on the RAVA algorithm (this algorithm is detailed in Appendix A of this document) o Call Surplus: returns the Agent Group based on the shortest EWT • Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address of the Agent Group, if there is no Address assigned to the Segmentation Rule Destination) • Returns the ResultLabel as part of the Extended Response

Script Name: BestEWT_DefaultRoute Script Version: 3.4 Code: strategy-best-ewt-default-route.groovy

February 2021 Avaya Business Rules Engine Integration Guide 227

Figure 60: Best EWT – Configurable Default Route

Best EWT - Main Agent Group using EWT, Alternate Agent Group using Agent Availability

The Strategy Script distributes traffic across the Agent Groups, using real-time metrics such as Expected Wait Time (EWT) on the main Agent Groups and Agent Availability on the Alternate Agent Groups, The Agent Groups are configured as Destinations in the Segmentation Rule. Before applying the distribution logic, the script does pre-processing to filter out Agent Groups that are in certain conditions. Script workflow is as follows: Pre-processing: • Adds all the Script Variables to the Extended Response • Discards the Agent Groups, where the Timetable is in CLOSE interval • Discards the Agent Groups, where the ACD is manually closed (ACD Global Property configuration) • Discards the Agent Groups, where the Location is manually closed (Location Global Property configuration) • Discards the Agent Groups, where the Company is manually closed (Company Global Property configuration)

February 2021 Avaya Business Rules Engine Integration Guide 228

• Discards the Agent Groups which are manually closed (Agent Group Global Property configuration) • Checks if there is at least one remaining Agent Group, if not, returns the Default Agent Group (if it is open), otherwise returns error code Processing: • Checks if there are metrics for the Agent Groups, checks if there is at least one Agent Group with one or more Staffed Agents. If not, returns the Default Agent Group (if it is open), otherwise returns error code • Checks if there are Staffed Agents in the Main Agent Groups, and if at least one Main Agent Group has EWT below the threshold, and returns the Agent Group with the shortest EWT; otherwise, • Checks if there are Staffed Agents in the Alternate Agent Groups, and checks if at least one Alternate Agent Group has Available Agents above the threshold, and returns the Agent Group with the highest availability; otherwise • Re-checks the Main Agent Groups and returns the Agent Group with the lowest EWT • Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address of the Agent Group, if there is no Address assigned to the Segmentation Rule Destination) • Returns the ResultLabel as part of the Extended Response

Script Name: BestEWT_MainEWT_AlternateAvailableAgents Script Version: 3.4 Code: strategy-best-ewt-backup-ags.groovy

February 2021 Avaya Business Rules Engine Integration Guide 229

Figure 61: Best EWT - Main Agent Group using EWT, Alternate Agent Group using Agent Availability

Best EWT - Two Destination Layers

The Strategy Script distributes traffic, across two layers of Agent Groups, using real-time metrics such as Expected Wait Time (EWT). The Agent Groups are configured as Destinations in the Segmentation Rule. Before applying the distribution logic, the script does pre-processing to filter out Agent Groups that are in certain conditions. Script workflow is as follows: Pre-processing: • Adds all the Script Variables to the Extended Response • Discards the Agent Groups, where the Timetable is in CLOSE interval • Discards the Agent Groups, where the ACD is manually closed (ACD Global Property configuration) • Discards the Agent Groups, where the Location is manually closed (Location Global Property configuration) • Discards the Agent Groups, where the Company is manually closed (Company Global Property configuration) • Discards the Agent Groups which are manually closed (Agent Group Global Property configuration)

February 2021 Avaya Business Rules Engine Integration Guide 230

• Checks if there is at least one remaining Agent Group, if not, returns the Default Agent Group (if it is open), otherwise returns error code Processing: • Layer 1 Destination Alias o Checks if there are metrics for the Agent Groups, in Layer 1 Destination Alias, and if there is an Agent Group with one or more Staffed Agents; otherwise goes to Layer 2 o Checks if there is at least one Agent Group with EWT less than the threshold, otherwise goes to Layer 2 o Checks if the call center is in Agent Surplus or Call Surplus scenario: o Agent Surplus: returns the Agent Group based on the RAVA algorithm (this algorithm is detailed in Appendix A of this document) o Call Surplus: returns the Agent Group based on the shortest EWT • Layer 2 Destination Alias o Checks If there are metrics for the Agent Groups, in Layer 2 Destination Alias, and if there is an Agent Group with one or more Staffed Agents; otherwise, goes to the "EWT lower than the Threshold" section o Checks if there is at least one Agent Group with EWT smaller than the threshold, otherwise, goes to the "EWT lower than the Threshold" section o Checks if the call center is in Agent Surplus or Call Surplus scenario: o Agent Surplus: returns the Agent Group based on the RAVA algorithm (this algorithm is detailed in Appendix A of this document) o Call Surplus: returns the Agent Group based on the shortest EWT • EWT lower than the Threshold o Checks if there is at least one Agent Group across both Layers, with a valid EWT and Staffed Agents, returns the Agent Group with the shortest EWT; otherwise returns the Default Agent Group (if it is open), otherwise returns error code

• Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address of the Agent Group, if there is no Address assigned to the Segmentation Rule Destination) • Returns the ResultLabel as part of the Extended Response

Script Name: BestEWT_TwoLayers Script Version: 3.4 Code: strategy-best-ewt-two-layers.groovy

February 2021 Avaya Business Rules Engine Integration Guide 231

Figure 62: Best EWT – Two Destination Layers

Best EWT - Service

The Strategy Script distributes traffic, across Agent Groups in a Service, using real-time metrics such as Expected Wait Time (EWT) and Agent Availability . The Service is configured as a Destination in the Segmentation Rule. Before applying the distribution logic, the script does pre- processing to filter out Agent Groups that are in certain conditions. Script workflow is as follows: Pre-processing: • Adds all the Script Variables to the Extended Response • Discards the Agent Groups, where the Timetable is in CLOSE interval • Discards the Agent Groups, where the ACD is manually closed (ACD Global Property configuration) • Discards the Agent Groups, where the Location is manually closed (Location Global Property configuration) • Discards the Agent Groups, where the Company is manually closed (Company Global Property configuration)

February 2021 Avaya Business Rules Engine Integration Guide 232

• Discards the Agent Groups which are manually closed (Agent Group Global Property configuration) • Checks if there is at least one remaining Agent Group, if not, returns the Default Agent Group (if it is open), otherwise returns error code Processing: • Check if there are metrics for the Agent Groups, and if there is an Agent Group with one or more Staffed Agents; if not, returns the Default Agent Group (if it is open), otherwise returns error code • Checks if the call center is in Agent Surplus or Call Surplus scenario: o Agent Surplus: returns the Agent Group based on the RAVA algorithm (this algorithm is detailed in Appendix A of this document) o Call Surplus: returns the Agent Group based on the shortest EWT • Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address of the Agent Group, if there is no Address assigned to the Segmentation Rule Destination)

• Returns the ResultLabel as part of the Extended Response

Script Name: BestEWT_Service Script Version: 3.4 Code: strategy-best-service.groovy

Figure 63: Best EWT - Service

February 2021 Avaya Business Rules Engine Integration Guide 233

Best EWT - Callback Assist when EWT greater than a threshold

The Strategy Script distributes traffic, across two layers of Agent Groups, using real-time metrics such as Expected Wait Time (EWT) and Agent Availability. The Agent Groups are configured as Destinations in the Segmentation Rule. Before applying the distribution logic, the script does pre-processing to filter out Agent Groups that are in certain conditions. Script workflow is as follows: Pre-processing: • Adds all the Script Variables to the Extended Response • Discards the Agent Groups, where the Timetable is in CLOSE interval • Discards the Agent Groups, where the ACD is manually closed (ACD Global Property configuration) • Discards the Agent Groups, where the Location is manually closed (Location Global Property configuration) • Discards the Agent Groups, where the Company is manually closed (Company Global Property configuration) • Discards the Agent Groups which are manually closed (Agent Group Global Property configuration) • Checks if there is at least one remaining Agent Group, if not, returns the Default Agent Group (if it is open), otherwise returns error code Processing: • Main Destination Alias o Checks if there are metrics for the Agent Groups, in the Main Destination Alias, and if there is at least one Agent Group with one or more Staffed Agents; otherwise goes to "Alternate Destination Alias" o Checks if there is at least one Agent Group with EWT less than the threshold, otherwise goes to "Alternate Destination Alias" o Checks if the call center is in Agent Surplus or Call Surplus scenario: o Agent Surplus: returns the Agent Group based on the RAVA algorithm (this algorithm is detailed in Appendix A of this document) o Call Surplus: returns the Agent Group based on the shortest EWT • Alternate Destination Alias o Checks If there are metrics for the Agent Groups, in the Alternate Destination Alias, and if there at least one Agent Group with one or more Staffed Agents; otherwise, goes to the "Callback Assist Section" • Checks if there is at least one Agent Group with Available Agents greater than the threshold, otherwise, goes to the "Callback Assist Section" o Returns the Agent Group with the largest Agent Availability

February 2021 Avaya Business Rules Engine Integration Guide 234

• Callback Assist Section o Checks if the Script Variable EnableCBAOffer is set to true o If yes, checks the Main Agent Groups to identify if there is at least one Agent Group with EWT less than the threshold configured in the Script Variable CBAEWTThreshold. o If yes, returns the Main Agent Group with the shortest EWT o If no, returns the CBA Application as a response

o If no, returns the Main Agent Group with the shortest EWT

• Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address of the Agent Group, if there is no Address assigned to the Segmentation Rule Destination)

• Returns the ResultLabel as part of the Extended Response

Script Name: BestEWT_OfferCBAAfterThreshold Script Version: 3.4 Code: strategy-best-ewt-cba.groovy

February 2021 Avaya Business Rules Engine Integration Guide 235

Figure 64: Best EWT – Callback Assist when EWT greater than a threshold

Percent Allocation and Best EWT

The Strategy Script distributes traffic, combining the percent distribution (as described in the "Percent Allocation" scripts) and real-time metrics (as described in the "Best EWT" scripts). The script relies on the EWT metric under Call Surplus conditions, and Available Agents metric under Agent Surplus conditions. The Agent Groups are configured as Destinations in the Segmentation Rule. Main highlights of this Strategy: • The total traffic (100%) should be split as a combination of static and dynamic percentages: o Ex 1: pure static distribution: AgentGroup1=60%, AgentGroup2=40%, Dynamic%=0% o Ex 2: pure dynamic distribution: AgentGroup1=0%, AgentGroup2=0%, Dynamic%=100% (in this case Agent Group 1 & 2 would get traffic according to their metrics) o Ex 3: blended distribution: AgentGroup1=10%, AgentGroup2=20%, Dynamic%=70% (where 70% of the total traffic is distributed according to metrics)

February 2021 Avaya Business Rules Engine Integration Guide 236

• For the static allocation (ex: AgentGroup1=10% and AgentGroup2=20%), the traffic will be distributed to meet these targets • For the dynamic allocation, the following criteria is used: o Call Surplus situation is when an Agent Group is receiving more calls than the staffed agents can handle. o In this scenario all agents are busy, and calls start accumulating in the Agent Group queues. As a consequence, the EWT > 0. o During this condition, the EWT can steadily grow, until CC supervisors add more agents, overflow the calls to somewhere else, or the traffic decreases. o In the call surplus situation (traffic "peaks"), this strategy selects the Agent Group with the shortest EWT in order to provide the best possible caller experience (i.e. shortest wait time). o Agent Surplus situation is when traffic is low for the number of staffed agents, and thus some agents are idle. o An individual Agent Group would report this condition as EWT=0, meaning the next call arriving will be immediately connected to an available agent. o When a single Agent Group is in Agent Surplus (EWT=0), it's clearly going to be the best routing selection. However, when multiple Agent Groups are in agent surplus (traffic "valleys"), the routing strategy needs to provide a "fair" distribution (balance across the Agent Groups with available agents, i.e. EWT=0). o In order to balance traffic across Agent Groups with EWT=0, the Agent Group with more Available Agents will be selected for routing. • Metric Values: o If the metrics source is properly set up, an Agent Group can only have Available Agents >0 when EWT=0 o On the other side, if EWT>0, the expected value should be Available Agents=0 o However, since CMS report columns could be subject to race conditions, the script writer should not count on these logical conditions. The recommendation is to let EWT drive the logic, and ignore the Available Agents value when EWT>0. The script considers some "Rainy Day" scenarios and "protects" from invalid selections, returning error codes as necessary; scenarios such as: o A particular Agent Group may not have the selected metric available (or it can be expired). In that case, such Agent Group is discarded from the selection process. o However, if none of the Agent Groups can get metrics, the script stops and returns an error Script Name: PercentAllocation_BestEWT (previously known as Dynamic) Script Version: 3.4

February 2021 Avaya Business Rules Engine Integration Guide 237

Code: dynamic-balance_v1.groovy

Figure 65: Percent Allocation and Best EWT Percent Allocation and Best EWT with Two Destination Layers

The Strategy Script distributes traffic, combining the percent distribution (as described in the "Percent Allocation" scripts) and real-time metrics (as described in the "Best EWT" scripts), using two layers of Agent Groups. The Agent Groups are configured as Destinations in the Segmentation Rule. • Preferred destinations (under the "main" Destination Alias) take priority, unless they're too busy • Alternate destinations (under the "alt" Destination Alias) are only considered if Preferred destinations are too busy, and if the alternate destinations have certain availability. Main highlights of this Strategy:

February 2021 Avaya Business Rules Engine Integration Guide 238

• In addition to the main Agent Groups, this script considers alternate Agent Groups • The alternate Agent Groups are considered, only if all the main Agent Groups have EWT longer than the EWT Threshold configured in a Script Variable • An alternate Agent Group is considered, only if its Available Agents is greater than the Availability Threshold configured in a Script Variable • The alternate Agent Groups are evaluated in a predefined order, because these groups typically have heterogeneous skill sets and they are not "equally good" alternates to the main Agent Groups Script Name: PercentAllocation_BestEWT_TwoLayers (previously known as Preferred) Script Version: 3.5 Code: preferred-selection_v1.groovy

Figure 66: Percent Allocation and Best EWT with Two Destination Layers

February 2021 Avaya Business Rules Engine Integration Guide 239

Best INQUEUE based on Location

The Strategy Script returns the Agent Group which is at a Location with INQUEUE metric below a threshold. The Agent Groups are configured as Destinations in the Segmentation Rule. Script workflow is as follows: Processing: • Adds all the Script Variables to the Extended Response • Gets the first Agent Group assigned to the Segmentation Rule and calculates the sum of INQUEUE calls for the Location of this Agent Group • Returns the Agent Group if the INQUEUE sum is below the specified threshold; otherwise returns an error • Returns the Destination Address assigned in the Segmentation Rule for the selected destination (or the first Address, if there is no Address assigned to the Segmentation Rule Destination) • Returns the ResultLabel as part of the Extended Response

Script Name: BestINQUEUE_BasedOnLocation Script Version: 3.5 Code: strategy-ags-by-location.groovy

Figure 67: Best INQUEUE based on Locatio

February 2021 Avaya Business Rules Engine Integration Guide 240

Appendix A - RAVA algorithm

The main purpose of the highest Relative Availability (RAVA) algorithm is to find the Destination with the highest AVAILABLE/STAFFED ratio. The algorithm considers metrics expiration and situations when metrics are not available.

February 2021 Avaya Business Rules Engine Integration Guide 241

Chapter 9: RDR Reference

About RDRs

A Routing Decision Record contains the detail of each request/response received/answered by Avaya Business Rules Engine. These records can be saved in various formats and targets, depending on customer needs. Possible options are: • Internal Database - RDRs are saved in the Avaya Business Rules Engine internal database located in the Management nodes (demos, very low volume) • External Database - RDRs are saved in an external database provided by the customer (typical setup)

RDRs Location Avaya Business Rules Engine Internal Database (Internal DB)

Avaya Business Rules Engine has an internal database (PostgreSQL) on the nodes that run Management Services and the RDRs are saved on this database. There is an internal process that purges the old data. This RDR option is recommended for lab systems or brief troubleshooting/quick review of traffic details only, it is not recommended for RDR storage. An external database should be provided for RDR storage.

Customer Provided External Database (External DB)

Saving the RDRs in an external database, the user can store the data as long as it is needed (and supported by the provided database). To know more about the supported database technologies and how to configure the connection to external databases, please review the section below Configuring RDRs to External Database. This is the most recommended option for storing RDRs.

February 2021 Avaya Business Rules Engine Integration Guide 242

RDR Space Provisioning Database Space Estimation

Space requirements are proportional to the amount of data stored for each record and the call traffic. A rough guideline is provided below for various traffic levels, but should be confirmed for each implementation: • 25,000 BHCC Requests - 600MB/Day • 250,000 BHCC Requests - 5.2GB/Day • 500,000 BHCC Requests - 10.4GB/Day • 150,000 RDRs - 1 GB

Data Purge

Depending on the destination of the RDRs, the data purge is different: • File System: No data purge • Internal Database: Avaya Business Rules Engine retains up to 100,000 RDR records. After reaching this limit, the internal table is truncated • External Database: The purge should be configured by the customer. There are no Avaya Business Rules Engine restrictions.

RDR DB Persistence Error Handler Configuration

Avaya Business Rules Engine might run into errors while trying to store RDR data into the database. In such cases, after 3 attempts, an error handling mechanism is triggered in order to prevent infinite retries. The error handler will raise an alarm, log an error and export the RDR to the file system. The non-persisted RDRs are written to ' <${AVAYA_HOME}/abre/data/application/decisions_rejected.json '. There is a scheduled process i.e. CRON job (configurable using the Cluster Management Tool) that runs and re-injects these decision records into the database.

RDR Content

The following list describes the main fields, grouped by purpose: • RDR identification fields :

February 2021 Avaya Business Rules Engine Integration Guide 243

o id : Primary Key and unique identifier of each record in the RDR DB; it includes the unique Decision object identifier from the Avaya Business Rules Engine Data Grid. o client_interaction_id : unique identifier from the application invoking Avaya Business Rules Engine. For example, an IVR platform (such as AAEP) can generate a UCID for each voice call. In some cases, this value may also be called UCID but be generated by the SBC or ASM. o dr_timestamp : specific time when Avaya Business Rules Engine received the request. • Input data in the Decision Request. o Some of these fields contain data specific to each request: such as segmentation_attributes or the business identifier of the caller o from_contact_id is a parameter in the Decision Request which identifies the caller (e.g.: customer Id in a CRM system or customer account number). RDR field can be populated in the Decision Function by calling e.g. decisionBuilder.setFromContactId("Contact_ID") o Other fields contain data coming from the application invoking Avaya Business Rules Engine (e.g.: to_address also known as DNIS in a telephony environment, client_from i.e. ANI, channel , client application invoking Avaya Business Rules Engine info such as from_client_ip , from_client_app ) • Decision processing details : o dr_server provides the IP Address of the Avaya Business Rules Engine node that processed the request o Some fields refer to Avaya Business Rules Engine configuration elements that affect the decision process, like the Decision Function being executed i.e. dr_script , or segmentation_table, segmentation_label, strategy_settings_name, and strategy_script_name o debug_string is a long string containing information described in a section below o Response time in milliseconds: response_time

• Output data in the Decision Response :

o result_code described in a section below o Some fields relate to the selected Destination and associated data: selected_dest_name , selected_dest_id , selected_dest_address , selected_dest_alias o selected_dest_alias is the name of the Destination Alias for the selected Destination. RDR field can be populated in the Decision Function.

February 2021 Avaya Business Rules Engine Integration Guide 244

o Some fields are only populated when the selected destination is an Agent Group: company_name , location_name • User defined data : o The fields biz_data1 to 5 are free for users to populate any value from the decision Scripts. They can be used to augment the reporting information already available. Other fields not mentioned in this list are only relevant to the Avaya Business Rules Engine system, but do not provide useful information to users or external systems. For this reason they can be ignored by any process working with the RDR DB. For example: version_id, monitoring_metrics_processed, and update_timestamp are not used anywhere.

Diagnostic Information Available in an RDR

The RESULT CODE is the most important data in a Avaya Business Rules Engine response. It explains what happened in the decision logic. Selected Destination & Selected Dest Address are the key fields when a Destination is selected as a decision Response: • Selected Destination can be an Application or an Agent Group. When it is an: o Application, the Address can be anything configured by the user (e.g. a Voice dialog module name, or a URL for a completely different application) o Agent Group (e.g. for the IVR App to transfer to), the Skill/Queue Name and its Address are provided. • Selected Destination fields (Name & Address) can also be "null" (empty) in the case where a decision is only focused on caller experience variables (audio messages, self- service optional treatment, etc). This scenario is typically found when Self Service Apps are using the Avaya Business Rules Engine's decision engine for experience configuration flexibility, in addition to destination selection (a.k.a. routing). The extendedResponse adds more details to the selected Destination, for example, which metric was used for this selection, and what value the metric had. Example: 32 seconds EWT for the selected XYZc Destination extendedResponse: Selected=XYZc|EWT|32 Finally the DEBUG STRING should explain HOW and WHY the strategy selected that specific Destination. The debugString is a collection of consecutive "tags", and there are two different types of tags: • Support tags: they have a 5 letter format (example: "AAbb:X"). This low level information can be ignored as it is intended for Avaya Support only. Each one of these represents an invocation to one of the available primitive functions in the Avaya Business Rules Engine decision engine. • Business tags: they should be human-readable messages, starting with #. These are printed by the Strategy Script, and are generated

February 2021 Avaya Business Rules Engine Integration Guide 245

with decisionBuilder.appendStep(). The goal for these tags is to indicate each part of the decision logic flow or "business criteria" being executed. Example: SGds:S;CFtt:S;#chkClosed;#chkRAVA.layer1;CFld:S;CFci:S;#XYZa=RAVA.0.Di scarded; MTam:N;MTam:N;#XYZb=RAVA.Unavailable;#chkRAVA.layer2;CFld:S;CFci:S; #XYZc=RAVA.0.Discarded;#chkEWT;MTam:N;#XYZb=EWT.Unavailable; #XYZa=EWT.34.Discarded;DSbd:S

The relevant fields here, start with # (hashtag), so everything else can be ignored. Comments for the above example: Note: Anything after the #, which does not start with “chk*” is a Destination Name (Agent Group configured in Avaya Business Rules Engine Web Admin) #chkClosed; // Checking Timetable for hours of operation #chkRAVA.layer1; // Checking Relative Availability (AVAILABLE/STAFFED) for Destinations marked as “layer1” #XYZa=RAVA.0.Discarded; // Discarding XYZa destination, RAVA value 0 means no available agents #XYZb=RAVA.Unavailable; // Discarding XYZb destination, some of the metrics are not loaded in Avaya Business Rules Engine (either AVAILABLE and/or STAFFED) #chkRAVA.layer2; // Checking Rel. Availability for Destinations marked as “layer2” #XYZc=RAVA.0.Discarded; // Discarding XYZc destination, no agents available #chkEWT; // Checking EWT #XYZb=EWT.Unavailable; // EWT metric is not loaded on Avaya Business Rules Engine for XYZb so it is ignored #XYZa.34.Discarded; // EWT value for XYZa is higher than the selected destination so it is discarded.

In the end, XYZc destination was selected because its EWT=32 seconds and was the lowest. This is just an EXAMPLE, each script can have its own flow and tags, but this provides an idea of the “thought process” on how to structure such information.

February 2021 Avaya Business Rules Engine Integration Guide 246

ROUTING_DECISION Columns

Field Name Type Siz Information Content e Source

CHANNEL String 255 WS REQUE Requestor's channel (i.e. ST - VOICE, SMS, etc.) CUSTOMER PROVIDED

COUNT_DECISION Boolean true WS REQUE Indicates if the request will (String) / ST - affect the internal counters fals CUSTOMER (charts) e PROVIDED

FROM_CONTACT_AD String 255 WS REQUE Customer endpoint DRESS ST - address. (ex. IP Address for CUSTOMER Chat or Email) PROVIDED

CLIENT_FROM String 255 WS REQUE Customer endpoint identifier. ST - (ex. ANI for Voice, Customer CUSTOMER Email, etc.) PROVIDED

FROM_CONTACT_ID String 255 WS REQUE Customer Identifier e.g. ST - customer Id in a CRM system CUSTOMER or customer account number. PROVIDED It is a parameter in the Decision Request. RDR field can be populated in the Decision Function by calling e.g. decisionBuilder.setFromC ontactId("Contact_ID")

DR_SCRIPT String 102 WS REQUE Decision Function name used 4 ST - for the request CUSTOMER PROVIDED

FROM_CLIENT_IP String 255 WS REQUE Requestor's Application ST - Name (i.e. IVR script name) CUSTOMER PROVIDED

FROM_CLIENT_APP String 255 WS REQUE Requestor's IP Address ST -

February 2021 Avaya Business Rules Engine Integration Guide 247

Field Name Type Siz Information Content e Source CUSTOMER PROVIDED

CLIENT_INTERACTIO String 255 WS REQUE Universal Contact Identifier N_ID ST - CUSTOMER PROVIDED

SEGMENTATION_ATT String 800 WS REQUE Contact Attributes RIBUTES 0* ST - CUSTOMER PROVIDED

TO_ADDRESS String 255 WS REQUE Customer's entry point (i.e. ST - DNIS) CUSTOMER PROVIDED

SELECTED_DEST_AD String 102 WS REQUE Destination route (i.e. SIP DRESS 4 ST - number) CUSTOMER PROVIDED

BIZ_DATA1 String 255 DECISION F Available to be filled with UNCTION custom information. PROVIDED INFORMATIO N

BIZ_DATA2 String 255 DECISION F Available to be filled with UNCTION custom information. PROVIDED INFORMATIO N

BIZ_DATA3 String 500 DECISION F Available to be filled with 0 UNCTION custom information. PROVIDED INFORMATIO N

BIZ_DATA4 String 255 DECISION F Available to be filled with UNCTION custom information. PROVIDED INFORMATIO N

February 2021 Avaya Business Rules Engine Integration Guide 248

Field Name Type Siz Information Content e Source

BIZ_DATA5 String 255 DECISION F Available to be filled with UNCTION custom information. PROVIDED INFORMATIO N

RESULT_CODE Int WS OUTPU Numeric value to show T - DR3 success/failure. 1 identifies PROVIDED success, other values are customized in DF to represent different processing results

SEGMENTATION_LAB String 102 WS OUTPU Segmentation Table selected EL 4 T - DR3 row identifier (Label column) PROVIDED

COMPANY_NAME String 102 WS OUTPU Selected Company 4 T - DR3 PROVIDED

LOCATION_NAME String 102 WS OUTPU Selected Location 4 T - DR3 PROVIDED

SELECTED_DEST_ALI String 102 INTERNAL Selected Agent Group AS 4 PROCESSIN Destination Alias name. RDR G field can be populated INFORMATIO in the Decision N Function.

SELECTED_DEST_ID String 255 INTERNAL Selected Agent Group Internal PROCESSIN ID G INFORMATIO N

SELECTED_DEST_NA String 102 INTERNAL Selected Agent Group Name ME 4 PROCESSIN G INFORMATIO N

ID String 255 INTERNAL Dynamic Routing transaction PROCESSIN internal identifier G

February 2021 Avaya Business Rules Engine Integration Guide 249

Field Name Type Siz Information Content e Source INFORMATIO N

DEBUG_STRING String 409 INTERNAL Executed steps to get the 6 PROCESSIN decision. G INFORMATIO N

SEGMENTATION_TAB String 102 INTERNAL Last Segmentation Table LE 4 PROCESSIN name used in the decision G INFORMATIO N

DR_TIMESTAMP Timestam INTERNAL Request's Data and Time p PROCESSIN G INFORMATIO N

DR_SERVER String 255 INTERNAL Server used to process the PROCESSIN request G INFORMATIO N

STRATEGY_SCRIPT_ String 102 INTERNAL Strategy Script name used in NAME 4 PROCESSIN the decision G INFORMATIO N

STRATEGY_SETTING String 102 INTERNAL Strategy Settings name used S_NAME 4 PROCESSIN in the decision G INFORMATIO N

RESPONSE_TIME String 255 INTERNAL Time to answer the request (in PROCESSIN msecs) G INFORMATIO N

February 2021 Avaya Business Rules Engine Integration Guide 250

Field Name Type Siz Information Content e Source

MONITORING_METRI Int INTERNAL Flag to signal the monitoring CS_PROCESSED PROCESSIN metrics were processed. NOT G USED. INFORMATIO N

VERSION_ID Int INTERNAL Version identification. NOT PROCESSIN USED. G INFORMATIO N

UPDATE_TIMESTAMP Timestam INTERNAL Update time. NOT USED. p PROCESSIN G INFORMATIO N

CUSTOM_PARAMETE String 204 WS REQUE Custom parameters for the RS 8 ST - request CUSTOMER PROVIDED

TENANT_ID String 255 WS OUTPU Tenant Internal ID T - DR3 PROVIDED

TENANT_FULL_NAME String 204 WS REQUE Tenant Full Name 9 ST - CUSTOMER PROVIDED *8000 is the max that MS SQL supports

DESTINATION_EXT_RESPONSE Columns

Field Name Type Size Information Source Content

DECISION_ID String 255 INTERNAL Avaya PROCESSING Business INFORMATION Rules Engine transaction internal identifier

February 2021 Avaya Business Rules Engine Integration Guide 251

Field Name Type Size Information Source Content

EXTENDED_RESPONSE String 1024 WS OUTPUT - Extended PROVIDED BY AVAYA response BUSINESS RULES ENGINE

EXTENDED_RESPONSE_KEY String 255 WS OUTPUT - Extended PROVIDED BY AVAYA response key BUSINESS RULES ENGINE

External Access to the Internal PostgreSQL RDR DB

The PostgreSQL database that is included with Avaya Business Rules Engine is closed to external access. It is updated automatically by Avaya Business Rules Engine when a backup management node starts, so the standby node can connect to the database. To access the RDRs from an external tool, you need to configure PostgreSQL to accept connections from other servers. Procedure Open the ${AVAYA_HOME}/abre/data/pgsql/pg_hba.conf Edit the file and add the following lines to the bottom of the file: host dynamicrouting_rdr_db all 192.168.0.1/24 md5

Note on PostgreSQL Configuration: In the example above, all servers in the sub-network 192.168.0.X will be allowed to reach this database. The number '24' in 192.168.0.1/24 indicates that the static (fixed) part of the addresses is the 3 first octects (so the last one forms a range of machines to be considered and allowed). If only a specific IP address is allowed to reach the database, change from 24 to 32 and indicate the IP address to be mapped. Then, no ranges would be considered and only the specific address you provided will be allowed to communicate with PostgreSQL. When finding any communication problem with the database, you may also change the permission mode from md5 (the one recommended above) to 'trust'. Save the file. Restart PostgreSQL by running the command: service dr-postgres stop and then run the command service dr-postgres start Remember to use Port 5555 when accessing the DB.

February 2021 Avaya Business Rules Engine Integration Guide 252

Exploring RDR DB with PostgreSQL Administration Tool

Using the pgAdmin3 client, you can connect to the RDR DB and execute arbitrary SQL queries to retrieve data for every Decision made by Avaya Business Rules Engine. The "Add Connection to a server" button (1st toolbar button) allows to connect to the RDR DB, using the following parameters: • Name: any arbitrary name you want to use for this connection, ex: ABRE_RDR-DB • Host: the IP address of your RDR Database Server • Port: (5555 default) • Username: (default: postgres) • Password: (default: 123456) • Maintenance DB: dynamicrouting_rdr_db

Then use the SQL button to bring up an editor window, and execute a query like this: select DR_TIMESTAMP, CLIENT_INTERACTION_ID, RESULT_CODE, SEGMENTATION_LABEL, SELECTED_DEST_NAME, SELECTED_DEST_ADDRESS from ROUTING_DECISION;

The resulting output should contain your most recent test requests, like in the screen capture below:

Figure 68: Output When running this query with pgAdmin3, the tool auto-limits the resulting record set to the first 100 records to avoid loading too much data.

February 2021 Avaya Business Rules Engine Integration Guide 253

WARNING: It is NOT recommended to run this query in a Production setup (without any "where" filter to narrow down the result set). See suggested queries in later section.

Sample RDR Queries

The following queries can help monitor Avaya Business Rules Engine operation, and diagnose issues at run-time. Retrieve all RDRs After a Specific Date and Time

The 4 columns/fields being printed are the most frequently used, but you could choose to print other fields, such as: debug_string, to_address, company_name, location_name, etc.

SELECT to_char(dr_timestamp, 'MM-DD HH24:MI:SS.MS' ) AS Timestamp , result_code, segmentation_label, selected_dest_name, selected_dest_address FROM routing_decision WHERE dr_timestamp >= '2015-08-29 02:36:00' ;

Retrieve all RDRs Using Current Date

This query is identical to the previous one, except the timestamp filter is using a built-in PostgreSQL function to generate current date and avoid the need to adjust the specific date every time you run.

SELECT to_char(dr_timestamp, 'MM-DD HH24:MI:SS.MS' ) AS Timestamp , result_code, segmentation_label, selected_dest_name, selected_dest_address FROM routing_decision WHERE dr_timestamp >= CURRENT_DATE ;

WARNING: The previous queries can return a large number of RDRs (many thousands), so be careful with date filtering.

Retrieve Number of Decisions to Each Destination

This query counts how many decisions were routed to each Destination:

February 2021 Avaya Business Rules Engine Integration Guide 254

SELECT selected_dest_name, COUNT (id) FROM routing_decision WHERE dr_timestamp >= '2015-08-01 02:00:00' AND dr_timestamp < '2015- 08-01 03:00:00' GROUP BY selected_dest_name;

By replacing, “selected_dest_name” field with other column names, other interesting aggregations can be obtained. For example: result_code, company_name or segmentation_label are different counting criteria which will likely be useful. Configuring Script and Execution

The Avaya Business Rules Engine installer package includes the configure-external-rdr- db.sh script, under the /Tools directory, which provides an easy way to configure the RDR DB properties . The script runs the required Cluster Manager Tool commands on behalf of the user. The script can be run in one of two modes: • Attended mode: asks questions during the execution before applying the changes • Unattended mode: runs using a properties file that contains all required parameters After receiving all parameters (from either user input or properties file), the script executes commands remotely and copies the JDBC driver, on all nodes. These remote commands are executed via SSH, using the user/password. Even in unattended mode, the user/password should be provided manually when requested. By default, the script uses the current user to access all nodes (e.g. if you are running the script as root, a root password is requested to access the nodes). A different user can be provided, as parameter, if needed. Before applying the configuration, the script asks for the password for each node, and installs a key on each one, to avoid asking for passwords later. The script needs to know which Deployment Model should be used. Options are: Single Node - Single Data Center - (Total - 1 Server) Triple Node - Single Data Center - (Total - 3 Servers) Single Node - Dual Data Center - (Total - 2 Servers) Triple Node - Dual Data Center - (Total - 6 Servers) Select the Deployment Model based on customer needs. Depending on the Deployment Model selected, the script will require other information such as: • Node IPs or Hostnames - IPs/Hostnames of the nodes used for Avaya Business Rules Engine Single Data Center Topologies

For single data center topologies the script will prompt for the database type, options are: PostgreSQL MySQL

February 2021 Avaya Business Rules Engine Integration Guide 255

Oracle Microsoft SQL Server The script then needs to know: • The external RDR database address (IP or Hostname) • The database port • The database name • The database user • The database password • If the database url must be secured. • The JDBC library path (e.g: /root/mssql-jdbc-7.0.0.jre8.jar) to be copied to all nodes Dual Data Center Topologies

For dual data center topologies we may use a single database to both data centers. The script will prompt if the RDRs should be sent to a single external database. Dual Data Center Single External Database

For dual data center topologies with a single external database the script will prompt for the database type, options are: PostgreSQL MySQL Oracle Microsoft SQL Server

The script then needs to know: • The external RDR database address (IP or Hostname) • The database port • The database name • The database user • The database password • If the database url must be secured. • The JDBC library path (e.g: /root/mssql-jdbc-7.0.0.jre8.jar) to be copied to all nodes

Dual Data Center Separated Database For Each Data Center

For dual data center topologies with a separated external database the script will prompt for the database type for data center 1 and data center 2, options are:

February 2021 Avaya Business Rules Engine Integration Guide 256

PostgreSQL MySQL Oracle Microsoft SQL Server

The script then needs to know for each data center: • The external RDR database address (IP or Hostname) • The database port • The database name • The database user • The database password • If the database url must be secured. • The JDBC library path (e.g: /root/mssql-jdbc-7.0.0.jre8.jar) to be copied to all nodes tmp/configure-external-rdr-db.log is a log file generated by the script containing:

• Selected Deployment Type • Parameters for all nodes • SSH connection status and errors • All commands executed by the script

Note: The script only runs Avaya Business Rules Engine Cluster Manager commands; it does not change Linux configuration. Before you begin: • Read the Avaya Business Rules Engine Planning Guide and prepare the node(s) with all the prerequisites mentioned in it; • Read the Avaya Business Rules Engine Installation Guide and install the Avaya Business Rules Engine software on all nodes; • Keep on hand, all the User IDs/Passwords that are able to login to the nodes. Procedure: Note: The script needs to be run only once, on one node, to configure all nodes and both Data Centers (in the case of dual DC). To run the script, first mount the Avaya Business Rules Engine installation ISO and then execute: /Tools/configure-external-rdr-db.sh

February 2021 Avaya Business Rules Engine Integration Guide 257

o Parameters: o -u (optional) - set a different user to run the Avaya Business Rules Engine Cluster Manager Tool commands (via SSH) (if not provided, current user is used) o -n (optional) - run the script in unattended mode, using the properties in the named file o -c (optional) - identify a certificate to connect to the nodes via SSH The configuration script can be run without any parameters (any access keys needed will be generated dynamically). However, there is some special handling of the parameters needed, in some cases, which is described below. Before running the configuration script, Linux should be configured to accept ssh with sroot user:

1. As sroot: 1. cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bck 2. vi /etc/ssh/sshd_config 1. Change the lines: 1. PermitRootLogin yes 1. from no to yes 2. DenyGroups root 1. Comment the line adding a # (#DenyGroups root) 3. systemctl restart sshd 2. Run the script, adding the user at the end: /Tools/configure-external- rdr-db.sh -u sroot 3. Revert the sshd configuration change: 1. cp /etc/ssh/sshd_config.bck /etc/ssh/sshd_config 2. systemctl restart sshd

Unattended Mode (requires setting of the Unattended_file Parameter) To run in unattended mode, the script should receive a file with the configuration parameters, e.g. DEPLOYMENT_TYPE=4 SINGLE_EXTERNAL_DB=y DB_TYPE=4 DB_ADDRESS=10.133.31.99 DB_PORT=1433 DATABASE_NAME=rdr ENABLE_SECURITY=y DB_USER=SA DB_PWD=A@C0537@617

February 2021 Avaya Business Rules Engine Integration Guide 258

JDBC_DRIVER=/root/mssql-jdbc-7.0.0.jre8.jar DC1_CORES=10.133.31.36,10.133.31.37,10.133.31.38 DC2_CORES=10.133.91.193,10.133.91.194,10.133.91.19

A sample of this file (containing instructions) is included in the Avaya Business Rules Engine installation package. To execute the script in unattended mode enter /Tools/configure-external- rdr-db.sh -n /tmp/config.properties Note: • The sample unattended properties file, in the installer ISO, is read-only. To use it, copy the file to a read-write directory first, edit it to match your needs, and then point the script to it. • If a password is required, the script requests it, even in unattended mode. To not require this input during installation, run in attended mode first, to add the certificates; subsequent executions will require no user interaction. Using a Certificate (requires setting of the Certificate Parameter) An already existing certificate can be used by the configuration script to connect to Avaya Business Rules Engine nodes. It can be used in environments like AWS. The "-c" parameter identifies the certificate. Configuring RDRs to External Database

Avaya Business Rules Engine can use external databases to store RDR records. To configure Avaya Business Rules Engine run configure-external-rdr-db.sh script. If the Avaya Business Rules Engine deployment model has two Data Centers, before starting the configuration, it is important to define the Database topology. Avaya Business Rules Engine can be configured to send data to: • One single customer provided database (recommended) o In this case, the database should be configured in HA (high availability) mode o Each Data Center will write decision records processed by its local servers • Two different customer provided databases (same brand/version) o In this case, there is no syncrhonization between the databases and Avaya Business Rules Engine will write all decision records to both databases. IMPORTANT • The sections below, show the table schema that should be created, in the customer provided RDR database. Before configuring Avaya Business Rules Engine, ensure the tables are created in the external RDR database. • The external RDR DB collation to be used must be case insensitive e.g. Latin1_General_CI_AI

February 2021 Avaya Business Rules Engine Integration Guide 259

• RDR config parameters should be set on all the Avaya Business Rules Engine nodes. o After changing the files or executing the CMT commands on BRE, the Avaya Business Rules Engine services should be restarted. • For external RDR DBs, users must implement their own mechanism to purge RDR records. It is up to the user to determine what is the appropriate mechanism to purge RDR records on a regular basis, and schedule such purges so that the RDR database does not grow indefinitely. • For details on securing the communication to the external RDR DB, refer to the Avaya Business Rules Engine Security Guide. • RDR (routing decision record) DB - contains a log of the decision request BRE received (including the called phone number - ANI) and the decision BRE made. A sample database script remove_phone_in_rdr.sh is provided to obfuscate the ANI in RDR records matching a specified phone number. The customer's database administrator should use this script to update the RDR records, should someone request to have their personal information removed. The script will blank the ANI (located in the from field) in the RDR record. o To obfuscate a particular ANI in the RDR database, simply specify it as a parameter during script execution e.g. ./remove_phone_in_rdr.sh 1234567890. You can specify "any" as a parameter to obfuscate all phone numbers currently present in the RDR DB e.g. ./remove_phone_in_rdr.sh any

IMPORTANT: If the Avaya Business Rules Engine deployment model has two Data Centers and the RDRs should be sent to a single external database. The configure-external-rdr-db.sh script already changes the server.kafka.consumer.servers paramater in node. properties, please make sure that the port 9093 was changed to 9092, after the script execution you should have: server.kafka.consumer.servers=:9092,:9092,:9092 The example above, shows a three node per data center (3N-2DC) example. The configuration file can have one or three IPs, please check if all the ports were changed to 9092..

Table Creation Commands

When fresh installing ABRE, use the Table Creation commands below: Creating Tables in a PostgreSQL Database CREATE TABLE "public"."routing_decision" ( id varchar(255) PRIMARY KEY NOT NULL, biz_data1 varchar(255), biz_data2 varchar(255),

February 2021 Avaya Business Rules Engine Integration Guide 260

biz_data3 varchar(5000), biz_data4 varchar(255), biz_data5 varchar(255), channel varchar(255), company_name varchar(1024), count_decision bool, debug_string text, dr_script varchar(1024), dr_server varchar(255), client_from varchar(255), from_client_app varchar(255), from_client_ip varchar(255), from_contact_address varchar(255), from_contact_id varchar(255), client_interaction_id varchar(255), location_name varchar(1024), monitoring_metrics_processed bool, response_time int, result_code int, segmentation_attributes varchar(8000), segmentation_label varchar(1024), segmentation_table varchar(1024), selected_dest_address varchar(1024), selected_dest_id varchar(255), selected_dest_name varchar(1024), selected_dest_alias varchar(1024), strategy_script_name varchar(1024), strategy_settings_name varchar(1024), dr_timestamp timestamp, to_address varchar(255), version_id int, updatetimestamp timestamp, custom_parameters text,

February 2021 Avaya Business Rules Engine Integration Guide 261

tenant_id varchar(255), tenant_full_name varchar(2049) ); CREATE UNIQUE INDEX routing_decision_pkey ON "public"."routing_decision"(id);

CREATE TABLE "public"."destination_ext_response" ( decision_id varchar(255) NOT NULL, extended_response varchar(1024), extended_response_key varchar(255) NOT NULL );

Table Upgrade Commands

When upgrading ABRE, use the Table Upgrade commands below: Upgrading Tables in a PostgreSQL Database ALTER TABLE ROUTING_DECISION ALTER COLUMN biz_data3 TYPE varchar(5000); ALTER TABLE ROUTING_DECISION ALTER COLUMN company_name TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ALTER COLUMN dr_script TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ALTER COLUMN location_name TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ALTER COLUMN segmentation_attributes TYPE varchar(8000); ALTER TABLE ROUTING_DECISION ALTER COLUMN segmentation_label TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ALTER COLUMN segmentation_table TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ALTER COLUMN selected_dest_address TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ALTER COLUMN selected_dest_name TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ALTER COLUMN selected_dest_alias TYPE varchar(1024);

February 2021 Avaya Business Rules Engine Integration Guide 262

ALTER TABLE ROUTING_DECISION ALTER COLUMN strategy_script_name TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ALTER COLUMN strategy_settings_name TYPE varchar(1024); ALTER TABLE ROUTING_DECISION ADD tenant_id varchar(255); ALTER TABLE ROUTING_DECISION ADD tenant_full_name varchar(2049); ALTER TABLE DESTINATION_EXT_RESPONSE ALTER COLUMN extended_response TYPE varchar(1024);

Configuration for External MySQL RDR DB node.properties Configuration

Example of CMT node properties that could be configured are: server.rdr.db.user=root server.rdr.db.pwd=Avaya123! server.rdr.db.connection.url=jdbc:mysql://10.133.92.132:3306/rdr?useTi mezone=true&serverTimezone=UTC&useLegacyDatetimeCode=false server.rdr.db.hibernate.dialect=org.hibernate.dialect.MySQLDialect server.rdr.db.driver.class = com.mysql.jdbc.Driver server.rdr.db.connection.testquery=select 1

IMPORTANT: If the Avaya Business Rules Engine deployment model has two Data Centers and the RDRs should be sent to a single external database, one more parameter should be changed: From: server.kafka.consumer.servers=:9093,:9093,:9093 To: server.kafka.consumer.servers=:9092,:9092,:9092 The example above, shows a three node per data center (3N-2DC) example. The configuration file can have one or three IPs, please change all the ports to 9092 instead of 9093.

Tables Creation Commands

When fresh installing ABRE, use the Table Creation commands below: Creating Tables in a MySQL Database CREATE TABLE `routing_decision` ( `id` varchar(255) NOT NULL DEFAULT '', `biz_data1` varchar(255) DEFAULT NULL, `biz_data2` varchar(255) DEFAULT NULL,

February 2021 Avaya Business Rules Engine Integration Guide 263

`biz_data3` text DEFAULT NULL, `biz_data4` varchar(255) DEFAULT NULL, `biz_data5` varchar(255) DEFAULT NULL, `channel` varchar(255) DEFAULT NULL, `company_name` varchar(1024) DEFAULT NULL, `debug_string` text, `dr_script` varchar(1024) DEFAULT NULL, `dr_server` varchar(255) DEFAULT NULL, `client_from` varchar(255) DEFAULT NULL, `from_client_app` varchar(255) DEFAULT NULL, `from_client_ip` varchar(255) DEFAULT NULL, `from_contact_address` varchar(255) DEFAULT NULL, `from_contact_id` varchar(255) DEFAULT NULL, `client_interaction_id` varchar(255) DEFAULT NULL, `location_name` varchar(1024) DEFAULT NULL, `response_time` bigint(20) DEFAULT NULL, `segmentation_attributes` text DEFAULT NULL, `segmentation_label` varchar(1024) DEFAULT NULL, `segmentation_table` varchar(1024) DEFAULT NULL, `selected_dest_address` varchar(1024) DEFAULT NULL, `selected_dest_id` varchar(255) DEFAULT NULL, `selected_dest_name` varchar(1024) DEFAULT NULL, `selected_dest_alias` varchar(1024) DEFAULT NULL, `strategy_script_name` varchar(1024) DEFAULT NULL, `strategy_settings_name` varchar(1024) DEFAULT NULL, `dr_timestamp` timestamp NULL DEFAULT NULL, `to_address` varchar(255) DEFAULT NULL, `count_decision` tinyint(1) DEFAULT NULL, `monitoring_metrics_processed` tinyint(1) DEFAULT NULL, `result_code` int(11) DEFAULT NULL, `version_id` int(11) DEFAULT NULL, `update_timestamp` timestamp NULL DEFAULT NULL, `custom_parameters` text,

February 2021 Avaya Business Rules Engine Integration Guide 264

`tenant_id` varchar(255) DEFAULT NULL, `tenant_full_name` varchar(2049) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `destination_ext_response` ( `decision_id` varchar(255) NOT NULL DEFAULT '', `extended_response` varchar(1024) DEFAULT NULL, `extended_response_key` varchar(255) NOT NULL DEFAULT '' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Tables Upgrade Commands

When upgrading ABRE, use the Table Upgrade commands below: Upgrading Tables in a MySQL Database ALTER TABLE `routing_decision` MODIFY biz_data3 text; ALTER TABLE `routing_decision` MODIFY company_name varchar(1024); ALTER TABLE `routing_decision` MODIFY dr_script varchar(1024); ALTER TABLE `routing_decision` MODIFY location_name varchar(1024); ALTER TABLE `routing_decision` MODIFY segmentation_attributes text; ALTER TABLE `routing_decision` MODIFY segmentation_label varchar(1024); ALTER TABLE `routing_decision` MODIFY segmentation_table varchar(1024); ALTER TABLE `routing_decision` MODIFY selected_dest_address varchar(1024); ALTER TABLE `routing_decision` MODIFY selected_dest_name varchar(1024); ALTER TABLE `routing_decision` MODIFY selected_dest_alias varchar(1024); ALTER TABLE `routing_decision` MODIFY strategy_script_name varchar(1024); ALTER TABLE `routing_decision` MODIFY strategy_settings_name varchar(1024); ALTER TABLE `routing_decision` ADD tenant_id varchar(255);

February 2021 Avaya Business Rules Engine Integration Guide 265

ALTER TABLE `routing_decision` ADD tenant_full_name varchar(2049); ALTER TABLE `destination_ext_response` MODIFY extended_response varchar(1024);

Configuration for External Oracle RDR DB node.properties Configuration server.rdr.db.user=SYSTEM server.rdr.db.pwd=123456 server.rdr.db.connection.url=jdbc:oracle:thin:@10.135.10.31:1521:xe server.rdr.db.hibernate.dialect=org.hibernate.dialect.OracleDialect server.rdr.db.driver.class=oracle.jdbc.OracleDriver server.rdr.db.connection.testquery=select 1 from dual

IMPORTANT: If the Avaya Business Rules Engine deployment model has two Data Centers and the RDRs should be sent to a single external database, one more parameter should be changed: From: server.kafka.consumer.servers=:9093,:9093,:9093 To: server.kafka.consumer.servers=:9092,:9092,:9092 The example above, shows a three node per data center (3N-2DC) example. The configuration file can have one or three IPs, please change all the ports to 9092 instead of 9093.

Tables Creation Commands

When fresh installing ABRE, use the Table Creation commands below: Creating Tables in an Oracle Database CREATE TABLE "SYSTEM"."ROUTING_DECISION" (

ID VARCHAR2(255 BYTE) NOT NULL,

BIZ_DATA1 VARCHAR2(255 BYTE),

BIZ_DATA2 VARCHAR2(255 BYTE),

BIZ_DATA3 CLOB,

February 2021 Avaya Business Rules Engine Integration Guide 266

BIZ_DATA4 VARCHAR2(255 BYTE),

BIZ_DATA5 VARCHAR2(255 BYTE),

CHANNEL VARCHAR2(255 BYTE),

COMPANY_NAME VARCHAR2(1024 BYTE),

DEBUG_STRING CLOB,

DR_SCRIPT VARCHAR2(1024 BYTE),

DR_SERVER VARCHAR2(255 BYTE),

CLIENT_FROM VARCHAR2(255 BYTE),

FROM_CLIENT_APP VARCHAR2(255 BYTE),

FROM_CLIENT_IP VARCHAR2(255 BYTE),

FROM_CONTACT_ADDRESS VARCHAR2(255 BYTE),

FROM_CONTACT_ID VARCHAR2(255 BYTE),

CLIENT_INTERACTION_ID VARCHAR2(255 BYTE),

LOCATION_NAME VARCHAR2(1024 BYTE),

RESPONSE_TIME LONG,

SEGMENTATION_ATTRIBUTES CLOB,

February 2021 Avaya Business Rules Engine Integration Guide 267

SEGMENTATION_LABEL VARCHAR2(1024 BYTE),

SEGMENTATION_TABLE VARCHAR2(1024 BYTE),

SELECTED_DEST_ADDRESS VARCHAR2(1024 BYTE),

SELECTED_DEST_ID VARCHAR2(255 BYTE),

SELECTED_DEST_NAME VARCHAR2(1024 BYTE),

SELECTED_DEST_ALIAS VARCHAR2(1024 BYTE),

STRATEGY_SCRIPT_NAME VARCHAR2(1024 BYTE),

STRATEGY_SETTINGS_NAME VARCHAR2(1024 BYTE),

DR_TIMESTAMP TIMESTAMP(6),

TO_ADDRESS VARCHAR2(255 BYTE),

COUNT_DECISION NUMBER,

MONITORING_METRICS_PROCESSED NUMBER,

RESULT_CODE INTEGER,

VERSION_ID INTEGER,

UPDATE_TIMESTAMP TIMESTAMP(6),

CUSTOM_PARAMETERS VARCHAR2(2048 BYTE),

TENANT_ID VARCHAR2(255 BYTE),

February 2021 Avaya Business Rules Engine Integration Guide 268

TENANT_FULL_NAME VARCHAR2(2049 BYTE) ) ; CREATE UNIQUE INDEX RDR_PK ON "SYSTEM"."ROUTING_DECISION"(ID) ;

CREATE TABLE "SYSTEM"."DESTINATION_EXT_RESPONSE" ( DECISION_ID VARCHAR2(255 BYTE) NOT NULL, EXTENDED_RESPONSE VARCHAR2(1024 BYTE), EXTENDED_RESPONSE_KEY VARCHAR2(255 BYTE) NOT NULL ) ;

Tables Upgrade Commands

When upgrading ABRE, use the Table Upgrade commands below: Upgrading Tables in an Oracle Database ALTER TABLE "SYSTEM"."ROUTING_DECISION" MODIFY ( COMPANY_NAME VARCHAR2(1024), DR_SCRIPT VARCHAR2(1024), LOCATION_NAME VARCHAR2(1024), SEGMENTATION_LABEL VARCHAR2(1024), SEGMENTATION_TABLE VARCHAR2(1024), SELECTED_DEST_ADDRESS VARCHAR2(1024), SELECTED_DEST_NAME VARCHAR2(1024), SELECTED_DEST_ALIAS VARCHAR2(1024), STRATEGY_SCRIPT_NAME VARCHAR2(1024), STRATEGY_SETTINGS_NAME VARCHAR2(1024) );

February 2021 Avaya Business Rules Engine Integration Guide 269

ALTER TABLE "SYSTEM"."ROUTING_DECISION" ADD (BIZ_DATA3_NEW clob); UPDATE "SYSTEM"."ROUTING_DECISION" SET BIZ_DATA3_NEW = BIZ_DATA3; ALTER TABLE "SYSTEM"."ROUTING_DECISION" DROP COLUMN BIZ_DATA3; ALTER TABLE "SYSTEM"."ROUTING_DECISION" RENAME COLUMN BIZ_DATA3_NEW to BIZ_DATA3;

ALTER TABLE "SYSTEM"."ROUTING_DECISION" ADD TENANT_ID VARCHAR2(255); ALTER TABLE "SYSTEM"."ROUTING_DECISION" ADD TENANT_FULL_NAME VARCHAR2(2049);

ALTER TABLE "SYSTEM"."DESTINATION_EXT_RESPONSE" MODIFY ( EXTENDED_RESPONSE VARCHAR(1024) );

Configuration for External Microsoft SQL Server RDR DB node.properties Configuration server.rdr.db.user=sa server.rdr.db.pwd=Avaya123! server.rdr.db.connection.url=jdbc:sqlserver://10.133.92.142:1433;Datab aseName=rdr; server.rdr.db.hibernate.dialect=org.hibernate.dialect.SQLServerDialect server.rdr.db.driver.class=com.microsoft.sqlserver.jdbc.SQLServerDrive r server.rdr.db.connection.testquery=select 1

IMPORTANT: If the Avaya Business Rules Engine deployment model has two Data Centers and the RDRs should be sent to a single external database, one more parameter should be changed: From: server.kafka.consumer.servers=:9093,:9093,:9093 To: server.kafka.consumer.servers=:9092,:9092,:9092 The example above, shows a three node per data center (3N-2DC) example. The configuration file can have one or three IPs, please change all the ports to 9092 instead of 9093.

February 2021 Avaya Business Rules Engine Integration Guide 270

Tables Creation Commands

When fresh installing ABRE, use the Table Creation commands below: Creating Tables in a MS SQL Server Database CREATE TABLE "dbo"."routing_decision" ( id varchar(255) PRIMARY KEY NOT NULL, biz_data1 varchar(255), biz_data2 varchar(255), biz_data3 varchar(5000), biz_data4 varchar(255), biz_data5 varchar(255), channel varchar(255), company_name varchar(1024), debug_string text, dr_script varchar(1024), dr_server varchar(255), client_from varchar(255), from_client_app varchar(255), from_client_ip varchar(255), from_contact_address varchar(255), from_contact_id varchar(255), client_interaction_id varchar(255), location_name varchar(1024), response_time bigint, segmentation_attributes varchar(8000), segmentation_label varchar(1024), segmentation_table varchar(1024), selected_dest_address varchar(1024), selected_dest_id varchar(255), selected_dest_name varchar(1024), selected_dest_alias varchar(1024), strategy_script_name varchar(1024),

February 2021 Avaya Business Rules Engine Integration Guide 271

strategy_settings_name varchar(1024), dr_timestamp datetime, to_address varchar(255), count_decision bit, monitoring_metrics_processed bit, result_code int, version_id int, update_timestamp datetime, custom_parameters varchar(2048), tenant_id varchar(255), tenant_full_name varchar(2049) ) ; CREATE UNIQUE INDEX PK_routing_decision ON "dbo"."routing_decision"(id) ;

CREATE TABLE "dbo"."destination_ext_response" ( decision_id nvarchar(255) NOT NULL, extended_response varchar(1024), extended_response_key varchar(255) NOT NULL ) ;

Tables Upgrade Commands

When upgrading ABRE, use the Table Upgrade commands below: Upgrading Tables in a MS SQL Server Database ALTER TABLE dbo.routing_decision ALTER COLUMN biz_data3 VARCHAR(5000);

ALTER TABLE dbo.routing_decision ALTER COLUMN company_name VARCHAR(1024);

February 2021 Avaya Business Rules Engine Integration Guide 272

ALTER TABLE dbo.routing_decision ALTER COLUMN dr_script VARCHAR(1024);

ALTER TABLE dbo.routing_decision ALTER COLUMN location_name VARCHAR(1024);

ALTER TABLE dbo.routing_decision ALTER COLUMN segmentation_attributes VARCHAR(8000);

ALTER TABLE dbo.routing_decision ALTER COLUMN segmentation_label VARCHAR(1024);

ALTER TABLE dbo.routing_decision ALTER COLUMN segmentation_table VARCHAR(1024);

ALTER TABLE dbo.routing_decision ALTER COLUMN selected_dest_address VARCHAR(1024);

ALTER TABLE dbo.routing_decision ALTER COLUMN selected_dest_name VARCHAR(1024);

ALTER TABLE dbo.routing_decision ALTER COLUMN selected_dest_alias VARCHAR(1024);

ALTER TABLE dbo.routing_decision ALTER COLUMN strategy_script_name VARCHAR(1024);

ALTER TABLE dbo.routing_decision ALTER COLUMN strategy_settings_name VARCHAR(1024);

ALTER TABLE dbo.routing_decision ADD tenant_id VARCHAR(255);

February 2021 Avaya Business Rules Engine Integration Guide 273

ALTER TABLE dbo.routing_decision ADD tenant_full_name VARCHAR(2049);

ALTER TABLE dbo.destination_ext_response ALTER COLUMN extended_response VARCHAR(1024);

RDR DB Troubleshooting RDR DB Connection Troubleshooting

The RDR DB connection troubleshooting can be done using the Cluster Management Tool by running the command test-rdr-connection, as follows: sudo su - avayadr -c "cluster-mgr.sh --command test-rdr-connection" The test-rdr-connection command will login in the RDR DB and list the privileges for the database user. Common Issues

User or Password Incorrect

[root@dr3single-release ~]# sudo su - avayadr -c "cluster-mgr.sh -- command test-rdr-connection" 2018-05-17/08:23:47.958 - Avaya Business Rules Engine - Cluster Manager 2018-05-17/08:23:48.067 - managing cluster DCA 2018-05-17/08:23:48.068 - Testing RDR DB Connection With The Following Properties 2018-05-17/08:23:48.068 - Driver Class: org.postgresql.Driver 2018-05-17/08:23:48.068 - URL: jdbc:postgresql://127.0.0.1:5555/dynamicrouting_rdr_db 2018-05-17/08:23:48.068 - Username: dynamicroutingX 2018-05-17/08:23:48.068 - Password: 123456 2018-05-17/08:23:48.068 ------2018-05-17/08:23:48.106 - FATAL: password authentication failed for user "dynamicroutingX"

February 2021 Avaya Business Rules Engine Integration Guide 274

2018-05-17/08:23:48.106 - Please Check The Following Properties in /opt/Avaya/abre/bin/../config/node.properties: 2018-05-17/08:23:48.106 - - rdr.db.user and rdr.db.pwd --> For authentication issues 2018-05-17/08:23:48.106 - - rdr.db.connection.url --> If you get any message saying that the database does not exist OR Connection Refused for the IP/HOSTANME:PORT. 2018-05-17/08:23:48.106 ------Incorrect DB Name

[root@dr3single-release ~]# sudo su - avayadr -c "cluster-mgr.sh -- command test-rdr-connection" 2018-05-17/08:24:58.780 - Avaya Business Rules Engine - Cluster Manager 2018-05-17/08:24:58.891 - managing cluster DCA 2018-05-17/08:24:58.892 - Testing RDR DB Connection With The Following Properties 2018-05-17/08:24:58.892 - Driver Class: org.postgresql.Driver 2018-05-17/08:24:58.892 - URL: jdbc:postgresql://127.0.0.1:5555/dynamicrouting_rdr_dbX 2018-05-17/08:24:58.892 - Username: dynamicrouting 2018-05-17/08:24:58.892 - Password: 123456 2018-05-17/08:24:58.892 ------2018-05-17/08:24:58.944 - FATAL: database "dynamicrouting_rdr_dbX" does not exist 2018-05-17/08:24:58.945 - Please Check The Following Properties in /opt/Avaya/abre/bin/../config/node.properties: 2018-05-17/08:24:58.945 - - rdr.db.user and rdr.db.pwd --> For authentication issues 2018-05-17/08:24:58.945 - - rdr.db.connection.url --> If you get any message saying that the database does not exist OR Connection Refused for the IP/HOSTANME:PORT. 2018-05-17/08:24:58.945 ------

February 2021 Avaya Business Rules Engine Integration Guide 275

Hostname or Port Incorrect

[root@dr3single-release ~]# sudo su - avayadr -c "cluster-mgr.sh -- command test-rdr-connection" 2018-05-17/08:22:56.455 - Avaya Business Rules Engine - Cluster Manager 2018-05-17/08:22:56.573 - managing cluster DCA 2018-05-17/08:22:56.575 - Testing RDR DB Connection With The Following Properties 2018-05-17/08:22:56.575 - Driver Class: org.postgresql.Driver 2018-05-17/08:22:56.575 - URL: jdbc:postgresql://127.0.0.1:5556/dynamicrouting_rdr_db 2018-05-17/08:22:56.575 - Username: dynamicrouting 2018-05-17/08:22:56.575 - Password: 123456 2018-05-17/08:22:56.575 ------2018-05-17/08:22:56.606 - Connection to 127.0.0.1:5556 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. 2018-05-17/08:22:56.606 - Please Check The Following Properties in /opt/Avaya/abre/bin/../config/node.properties: 2018-05-17/08:22:56.606 - - rdr.db.user and rdr.db.pwd --> For authentication issues 2018-05-17/08:22:56.606 - - rdr.db.connection.url --> If you get any message saying that the database does not exist OR Connection Refused for the IP/HOSTANME:PORT. 2018-05-17/08:22:56.606 ------Wrong Driver Class or JDBC file not placed inside ${AVAYA_HOME}/abre/lib/shared/jdbc

[root@dr3single-release ~]# sudo su - avayadr -c "cluster-mgr.sh -- command test-rdr-connection" 2018-05-17/08:30:01.515 - Avaya Business Rules Engine - Cluster Manager 2018-05-17/08:30:01.629 - managing cluster DCA 2018-05-17/08:30:01.630 - Testing RDR DB Connection With The Following Properties

February 2021 Avaya Business Rules Engine Integration Guide 276

2018-05-17/08:30:01.630 - Driver Class: org.postgresql.DriverXXXX 2018-05-17/08:30:01.630 - URL: jdbc:postgresql://127.0.0.1:5555/dynamicrouting_rdr_db 2018-05-17/08:30:01.630 - Username: dynamicrouting 2018-05-17/08:30:01.630 - Password: 123456 2018-05-17/08:30:01.630 ------2018-05-17/08:30:01.630 - Driver class 'org.postgresql.DriverXXXX' has not been found. Please make sure that the jdbc driver (jar file) is in /opt/Avaya/abre/bin/../lib/shared/jdbc folder and the property 'rdr.db.driver.class' is correct in /opt/Avaya/abre/bin/../config/node.properties. 2018-05-17/08:30:01.630 ------

Successful Connection

[root@dr3single-release ~]# sudo su - avayadr -c "cluster-mgr.sh -- command test-rdr-connection" 2018-05-17/08:34:16.862 - Avaya Business Rules Engine - Cluster Manager 2018-05-17/08:34:16.972 - managing cluster DCA 2018-05-17/08:34:16.974 - Testing RDR DB Connection With The Following Properties 2018-05-17/08:34:16.974 - Driver Class: org.postgresql.Driver 2018-05-17/08:34:16.974 - URL: jdbc:postgresql://127.0.0.1:5555/dynamicrouting_rdr_db 2018-05-17/08:34:16.974 - Username: dynamicrouting 2018-05-17/08:34:16.974 - Password: 123456 2018-05-17/08:34:16.974 ------2018-05-17/08:34:17.057 - TABLE databasechangelog 2018-05-17/08:34:17.057 ------2018-05-17/08:34:17.059 - SCHEMA: public

February 2021 Avaya Business Rules Engine Integration Guide 277

2018-05-17/08:34:17.060 - PRIVILEGES: DELETE| INSERT| REFERENCES| SELECT| TRIGGER| UPDATE 2018-05-17/08:34:17.060 - GRANTOR: dynamicrouting 2018-05-17/08:34:17.060 - GRANTEE: dynamicrouting 2018-05-17/08:34:17.060 - ISGRANTABLE: YES 2018-05-17/08:34:17.060 ------2018-05-17/08:34:17.060 - TABLE databasechangeloglock 2018-05-17/08:34:17.060 ------2018-05-17/08:34:17.061 - SCHEMA: public 2018-05-17/08:34:17.061 - PRIVILEGES: DELETE| INSERT| REFERENCES| SELECT| TRIGGER| UPDATE 2018-05-17/08:34:17.061 - GRANTOR: dynamicrouting 2018-05-17/08:34:17.061 - GRANTEE: dynamicrouting 2018-05-17/08:34:17.061 - ISGRANTABLE: YES 2018-05-17/08:34:17.061 ------2018-05-17/08:34:17.061 - TABLE destination_ext_response 2018-05-17/08:34:17.061 ------2018-05-17/08:34:17.063 - SCHEMA: public 2018-05-17/08:34:17.063 - PRIVILEGES: DELETE| INSERT| REFERENCES| SELECT| TRIGGER| UPDATE 2018-05-17/08:34:17.063 - GRANTOR: dynamicrouting 2018-05-17/08:34:17.063 - GRANTEE: dynamicrouting 2018-05-17/08:34:17.063 - ISGRANTABLE: YES 2018-05-17/08:34:17.063 ------2018-05-17/08:34:17.063 - TABLE routing_decision 2018-05-17/08:34:17.063 ------

February 2021 Avaya Business Rules Engine Integration Guide 278

2018-05-17/08:34:17.064 - SCHEMA: public 2018-05-17/08:34:17.064 - PRIVILEGES: DELETE| INSERT| REFERENCES| SELECT| TRIGGER| UPDATE 2018-05-17/08:34:17.064 - GRANTOR: dynamicrouting 2018-05-17/08:34:17.064 - GRANTEE: dynamicrouting 2018-05-17/08:34:17.064 - ISGRANTABLE: YES 2018-05-17/08:34:17.064 ------

RDR DB Logs

To review RDR logs, see details in the Avaya Business Rules Engine Maintenance Guide.

February 2021 Avaya Business Rules Engine Integration Guide 279