Module Engine

Error in java application log "trusted certificate entries are not password-protected"

The error message "trusted certificate entries are not password-protected" typically indicates an issue with the SSL/TLS configuration in a Java application. It suggests that one or more certificate entries in the truststore being used by the application are expected to have passwords, but they are not actually password-protected.

To address this issue, you can consider the following steps:

  1. Review the truststore: Identify the truststore file being used by the Java application. It is usually a file with a ".jks" or ".cacerts" extension.
  2. Verify certificate entries: Check the certificate entries within the truststore. You can use the keytool command-line tool that comes with the Java Development Kit (JDK) to examine the truststore entries. Run the following command:
    shell
    keytool -list -keystore <truststore-file>

    Replace <truststore-file> with the actual path and filename of the truststore.

    Examine the listed certificates and ensure that any entries that require a password are indeed password-protected.

  3. Update the truststore: If you find any certificate entries that are not password-protected but should be, you may need to update the truststore. Remove the problematic entries from the truststore using the keytool command with the -delete option, and then add them back with the appropriate password using the -importcert option.
  4. Restart the application: After updating the truststore, restart the Java application and verify if the error message is resolved.

Chat with Us_ Unable to live chat transfer

Scenario: A customer has logged on to the VIVR page and has opted for the Chat with Us menu. Once the menu was selected, customer has inserted the NRIC and OTP number successfully and waiting to route to live agent. After a few seconds of being in queue, customer receives “Thank you for your patience. Our service representatives are currently engaged” display message.

On TMAC UI, there is an available agent with the correct skill assigned.

Cross-check possibilities

  • Set sendteam_wallboard = 1 in template.config>TMAC Server
  • Ensure the agent’s chat channel count is 5 [Useronboarding> OCM]

Logs:

Chatbot.log shows the variable1 = -1

The sys.wallboard.stf. prints the Skill number that is configured in the Session_Master.json_approved and chat_rules.json

Findings:

Ensure that the vdn and skills configured in chat_intentmaster.json, chat_rules.json and Session_Master.json_approved correctly, cross check with Avaya what is set on their end.

Chat_intentmaster – should configure the vdn numbers for mainINVEbankSIT and mainINVEcardSIT

Chat_rules – should configure the skill numbers for check card agent availability and check bank agent availability

Session_Master.json_approved – should configure the skill numbers that will be printed in the chatbot logs.

IW Chat Module Flow - Routing to Exception after menu dtmf

Issue:

In the module flow of chat bot flow when you are on the menu with option and you have opted the menu options instead of it is going further the flow it is going directly to the exception branch.

Cause:

In the Module Flow of the menu design , the DTMF option included with spaces

for example: AgentBusyMenu has two option 1.Proceed to same agent 2.Connect to another agent.

so the above has the spaces with option which will in turn encoded as 1.Proceed%20to%20same%w0agent 2.Connect%20to%20another%20agent. causing the Node Id not not found exception on Module Engine Log.

INFO 2022-04-06 14:49:08,941 [http-nio-8080-exec-5] - [dev220406144853_5102] Getting node details for NodeNumber:
ERROR 2022-04-06 14:49:08,941 [http-nio-8080-exec-5] - [dev220406144853_5102] Exception at getNode: java.lang.RuntimeException: [dev220406144853_5102] Node ID - not found in Memory

 

Resolution:

Avoid the space in the menu DTMF options and edit -->save the flow.

example: 1.Proceed-to-same-agent 2.Connect-to-another-agent.

or it can be alternative option on menu announcement to avoid space

 

Configuration with name "test" already exists

Issue description:

Getting a below error while saving a host configuration when there is no other host with the same name.

HostConfiguration

Troubleshooting steps:

  • Check the configuration path of Module Designer in web.config

ModuleDesigner

  • Check the ModuleJsonPaths, SimulationURL, HostConfigurationApiURL and JsonFilesURL in <ModuleDesigner-installPath>/Data/MasterData/ApplicationConfiguration.json

ModuleDesigner

Solution:

Make sure all the URLs are valid and path configured are correct.

How to get dynamic value of AgentID or Skill in IW intent master VDN settings?

Requirement: 

In Video call scenarios, based on the designed routing strategies there would a requirement to use a dynamic value of agentID or skills in IW Agent Node. Hence intent master setting needs to have dynamic value assignment to field VDN.

Configuration:

In the IW Intent Master use the following syntax to parse the session variable value as a VDN value.

$SESSION.AgentID OR $SESSION.CDN. The variable name depends on the declaration in session master by the flow developer.

 

How to pass query string value containing spaces in Module Engine host node?

Issue Description:

In the GET request configuration of Module Designer host configuration setting, passing the query string having the spaces (Ex:  http://localhost/enpoint?querystring=Hi I'm here) may fail to parse at tetherfiwebservicesapi. Application may throw Java URI parsing error.

 

Resolution: 

Encrypting the value with the help of online tool https://meyerweb.com/eric/tools/dencoder/ and passing the string value with encrypted string will help to resolve the issue. Ex: Encrypted value of

Hi I'm here ~  Hi%20I%27m%20here hence the URL will be,

http://localhost/enpoint?querystring=Hi%20I%27m%20here

How to load ModuleEngine Modules in chatbot flow or TPPVA ?

Issue Description:

Chatbot IW Flow disconnection at Module node.

Procedure:

  1. Add created module name in template.config file of TPPVA
  2. Add module name in ModuleEngineUrls.json file of TPPVA
  3. Restart TPPVA

How to add CORS filters for tomcat apps ?

What is CORS ?

Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any other origins (domain, scheme, or port) than its own from which a browser should permit loading of resources. CORS also relies on a mechanism by which browsers make a “preflight” request to the server hosting the cross-origin resource, in order to check that the server will permit the actual request. In that preflight, the browser sends headers that indicate the HTTP method and headers that will be used in the actual request.

When browser throws CORS error?

CORS is a security mechanism built into modern web browsers. It basically blocks all the HTTP requests from your front end to any API that is not in the same “Origin” (domain, protocol, and port—which is the case most of the time).

 

Resolution :

Inspect the error in the web browser console for which the CORS error has been highlighted. Identify the Access-Control-Request-Headers in the browser network console, add CORS filters in web.xml of the respective tomcat app (Ex: C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\tetherfi-generic-webservice-interface\WEB-INF\web.xml).

Make sure the following tags

  1. "cors.allowed.headers" has all the HTTP access control request and custom headers (ex: Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,X-RequestVerificationToken).
  2. "cors.allowed.origins" has request origin (ex: https://bank.domain.com:8443).
  3. cors.exposed.headers has exposed headers (ex: Access-Control-Allow-Origin).

Below is the sample web.xml for reference,

<display-name>Tetherfi Generic Web Service Interface Application</display-name>
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>https://nabilbank.tetherfilabs.com:55003</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,X-RequestVerificationToken</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

 

 

Note that, CORS may still exist if any headers are missing in "cors.allowed.headers" list.

 

Module Enigine API Call CORS error

What is CORS ?

Cross-Origin Resource Sharing (CORS) is an HTTP-header based mechanism that allows a server to indicate any other origins (domain, scheme, or port) than its own from which a browser should permit loading of resources. CORS also relies on a mechanism by which browsers make a “preflight” request to the server hosting the cross-origin resource, in order to check that the server will permit the actual request. In that preflight, the browser sends headers that indicate the HTTP method and headers that will be used in the actual request.

When browser throws CORS error ?

CORS is a security mechanism built into modern web-browsers . It basically blocks all the http requests from your front end to any API that is not in the same “Origin” (domain, protocol, and port—which is the case most of the time).

 

Resolution :

Adding CORS filters in web.xml of Module Engine tomcat app

 

---------------------XML------------------------------

<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>

<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>https://172.16.2.76
</init-param>

<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>

<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET, HEAD, POST, PUT, DELETE, OPTIONS</param-value>
</init-param>

<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,X-Bonita-API-Token,Access-Control-Allow-Origin</param-value>
</init-param>

</filter>

<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

------------------------XML-------------------------------

 

Note : you will need to replace the ALLOWED_ORIGIN_LIST by your own allowed origin list.

 

Ref:

https://tomcat.apache.org/tomcat-8.5-doc/config/filter.html#CORS_Filter

https://documentation.bonitasoft.com/bonita/2021.1/enable-cors-in-tomcat-bundle