introduction · web viewbased on the contact type tmac will display the customer data in ui and...

34
Contents 1 Introduction................................................... 2 1.1 Interfaces.................................................. 2 1.2 The interface connectivity details are explained in detail below:........................................................... 4 1.3 Event Sequence Diagram......................................5 1.3.1 Preview Contact..........................................5 1.3.2 Predictive contacts......................................6 1.3.3 BlendToInbound and BlendToOutbound.......................7 1.4 Architecture Diagram:.......................................8 1.4.1 CTI Server HA............................................8 1.4.2 POM HA...................................................9 1.5 Application Programming Interface Details...................9 1.5.1 SecurityLogin:...........................................9 1.5.2 SecurityLogout:..........................................9 1.5.3 AgentLogin..............................................10 1.5.4 AgentLogout.............................................11 1.5.5 MonitorDevice...........................................12 1.5.6 UnMonitorDevice.........................................12 1.5.7 SetAgentStateToAux......................................12 1.5.8 Hold....................................................14 1.5.9 HoldReconnect...........................................14 1.5.10 DisconnectCall/DisconnectStation........................15 1.5.11 SendGenericCTICommand:..................................16 1.6 Call Events................................................ 16 1.6.1 POM_OutboundCallEvent...................................16 1.6.2 OnCallWrapUpDataEvent...................................18 1.7 Technical Details………………………………………………………………………………………………………………19 1.7.1 High Availability………………………………………………………………………………………………………19 1.7.2 OCM……………………………………………………………………………………………………………………….20 1.7.3 Utilities…………………………………………………………………………………………………………………..20

Upload: others

Post on 10-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

Contents1 Introduction...................................................................................................................................2

1.1 Interfaces...............................................................................................................................2

1.2 The interface connectivity details are explained in detail below:..........................................4

1.3 Event Sequence Diagram.......................................................................................................5

1.3.1 Preview Contact.............................................................................................................5

1.3.2 Predictive contacts.........................................................................................................6

1.3.3 BlendToInbound and BlendToOutbound.......................................................................7

1.4 Architecture Diagram:............................................................................................................8

1.4.1 CTI Server HA.................................................................................................................8

1.4.2 POM HA.........................................................................................................................9

1.5 Application Programming Interface Details...........................................................................9

1.5.1 SecurityLogin:................................................................................................................9

1.5.2 SecurityLogout:..............................................................................................................9

1.5.3 AgentLogin...................................................................................................................10

1.5.4 AgentLogout................................................................................................................11

1.5.5 MonitorDevice.............................................................................................................12

1.5.6 UnMonitorDevice.........................................................................................................12

1.5.7 SetAgentStateToAux....................................................................................................12

1.5.8 Hold.............................................................................................................................14

1.5.9 HoldReconnect.............................................................................................................14

1.5.10 DisconnectCall/DisconnectStation...............................................................................15

1.5.11 SendGenericCTICommand:..........................................................................................16

1.6 Call Events............................................................................................................................16

1.6.1 POM_OutboundCallEvent............................................................................................16

1.6.2 OnCallWrapUpDataEvent.............................................................................................18

1.7 Technical Details………………………………………………………………………………………………………………19 1.7.1 High Availability………………………………………………………………………………………………………19

1.7.2 OCM……………………………………………………………………………………………………………………….20 1.7.3 Utilities…………………………………………………………………………………………………………………..20

1.7.4 TMAC……………………………………………………………………………………………………………………..27

Page 2: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1 INTRODUCTION

This document presents the technical specifications of integration with Avaya Autodialer i.e. Proactive Outreach Manager (POM). TMAC (Tetherfi MultiMedia Agent Client) integrates with Avaya POM Server to support the dialer features (Preview/Predictive/Callback).

1.1 InterfacesInterfaces involved for this integration:

1) Avaya POM2) Avaya CM3) Avaya AES4) Avaya AAEP EPM5) SBC6) TMAC Server7) CTI Sever8) TMAC Proxy9) TMAC Client UI10) OCM

1. Telesales Agent launches TMAC Agent web client and enter LAN ID and extension in login page. TMAC Server receives login request

2. TMAC Server will login to CC Elite through AES.3. Once ACD agent logged-in successfully, then agent will be in Not-Ready (Aux) mode.4. TMAC will perform agent login to POM server (whether Primary EPM or Auxiliary EPM) based on

agent location preference in the user profile and active-standby mechanism for each organization.

Page 3: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

5. Once POM login success, screen displays login successful as OutboundAgent and status is in Not-Ready (Default) mode.

6. Agent will change status manually in TMAC from Not-Ready to Ready (Available) mode7. TMAC Server passes Ready request to POM, then POM nail-ups the agent through Agent Selection

Strategy and Blending rules to match the best agent to support the campaign. 8. Then POM assigns Preview/Predictive/Callback contacts based on the campaigns assigned to agent.9. Based on the contact type TMAC will display the customer data in UI and provides call controlling

buttons on UI for agent to assist customer..10. Once agent done with call/contact, then agent state moves to Wrapup mode and TMAC will display

wrap up details for agent to choose and wrap the call.11. Once wrap up done, then agent will start receiving subsequent contacts from POM.

High level interface diagram for inbound

1. Telesales Agent launches TMAC Agent web client and enter LAN ID and extension in login page.2. TMAC Server receives login request. TMAC Server will login to CC Elite through AES.3. Once ACD agent logged-in successfully, then agent will be in Not-Ready (Aux) mode.4. TMAC will perform agent login to POM server (whether Primary EPM or Auxiliary EPM) based on

agent location preference in the user profile and active-standby mechanism for each organization. 5. Screen displays login successful and status is in Not-Ready (Default) mode.6. Once he/she ready, the agent will change status manually in TMAC from Not-Ready to Ready

(Available) mode7. TMAC Server passes Ready request to POM, then POM nail-ups the agent through Agent Selection

Strategy and Blending rules to match the best agent to support the campaign. 8. Then POM assigns Preview/Predictive/Callback contacts based on the campaigns assigned to agent.9. Based on the contact type TMAC will display the customer data in UI and provides call controlling

buttons on UI for agent to assist customer..10. If ACD call is in queue, then POM will send notification to TMAC Server “Agent blend to inbound”.

Based on this notification TMAC Server will switch agent state from outbound to inbound and make available for ACD call to attend.

11. Once ACD call is done, then if there are no ACD calls in queue then POM will send notification to TMACServer “Agent blend to outbound”. Based on this notification TMACServer will switch agent state from inbound to outbound and make available to POM calls to attend.

Page 4: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1.2 The interface connectivity details are explained in detail below:(A)

S/N

Description Source Destination Network Protocol

A1 TMAC Client to Proxy TMAC Client Proxy https

A2 TMAC Proxy to TMAC Server

TMAC Proxy TMAC Server http

A3 TMAC Server to CTIServer

TMAC Server CTI Server Http

A4 TMAC Server to CTI Server

CTI Server TMAC Server TCP

A5 CTI Server to AES Server CTI Server AES Server TCP

A6 CTI Server to POMServer CTIServer POM Server TCP

A7 TMAC Server to Database

TMACServer DB TCP

Page 5: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1.3 Event Sequence Diagram

1.3.1 Preview Contact

Page 6: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1.3.2 Predictive contacts

Page 7: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1.3.3 BlendToInbound and BlendToOutbound

Page 8: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1.4 Architecture Diagram:

1.4.1 CTI Server HA

Page 9: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1.4.2 POM HAWe have not yet implemented due to environmental issues.

1.5 Application Programming Interface Details

1.5.1 SecurityLogin:Boolean init (PAMSocketInfo[] pamAddresses, Boolean verifyCertificate) ---- This method must be run to initialize the library before using the library. Agent application desktop needs to set the flag verifyCertificate to enable/disable certificate verification. If it is set to true, then the certificate must be installed in agent desktop application windows machine. It is recommended to make this flag configurable on agent desktop application side..Parameters:

pamAddress List of IP address and corresponding port of POM agent managers.verifyCertificate Flag to enable/disable certificate verification.

ReturnValues:True – successFalse - failed

Note: The init method return false in the first attempt if the connection between POM API SDK and POM server is not established and after that it always returns true whether the connection to POM server is established or not. So if the SDK init fails it is required to restart the agent desktop application.

POMServer IPAddress and Port should be configurable in CTIServer config file.

Positive Response to TMAC is: {"eventName":"SecurityLoginDone","extension":"44012","eventData":{"ErrorInfo":"","ResponseStatus":"0","Extension":"44012","InvokeID":"5","ErrorCode":"0"}}

Negative Response to TMAC is: {"eventName":"SecurityLoginDone","extension":"44012","eventData":{"ErrorInfo":"<ErrorMessage>","ResponseStatus":"<ErrorCode>","Extension":"44012","InvokeID":"5","ErrorCode":"<errorCode>"}}

1.5.2 SecurityLogout:deinit();The desktop developer must run this when the agent desktop application is shutting down to clean-up POM Desktop library’s resources used.

Note: While doing deinit operation, there are some exceptions thrown in the log as the threads are interrupted at that time. However, there is no functionality impact because of these exceptions. If you want to logoff and login an agent again in the same instance of agent desktop application, then do not initiate deinit() function after logoff. deinit() function should be used when you are closing the agent desktop application to release the resources.

Positive Response to TMAC is: {"eventName":"SecurityLogoutDone","extension":"44012","eventData":{"ErrorInfo":"","ResponseStatus":"0","Extension":"44012","InvokeID":"5","ErrorCode":"0"}}

Page 10: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

Negative Response to TMAC is: {"eventName":"SecurityLogoutDone","extension":"44012","eventData":{"ErrorInfo":"<ErrorMessage>","ResponseStatus":"<ErrorCode>","Extension":"44012","InvokeID":"5","ErrorCode":"<errorCode>"}}

1.5.3 AgentLoginTMAC command : int AgentLogin(string extension, string agentID, string agentPassword, int invokeID)

First we need to get POMAgentHandler for this agent before we call agent login method. This below method will be used to get POMAgent handler for this agent.

i) POMAgent getPOMAgent(String id, POMAgentHandlerInterface handler)Description: The desktop developer must run this to get an agent object. The desktop developer uses this agent object to send commands for this agent. POM in turn can invoke the handler for asynchronous responses and notifications using callback thread. Desktop should free this callback thread as soon as possible so that this thread can process the responses of other commands. Ensure that it uses a valid POMAgent object before making any command request. Note: This method should be called before every login request (AGTLogon) to create a new POMAgent object.Parameters:

id : - Agent IDhandler :- Callback handler object

Then We have to call AGTLogon method for agent login. Post successful call og AGTLogOn, application needs to wait for AGTLogonRESP event from POM before returning back to TMAC.

ii) int AGTLogon (String agentExt, String pwd, boolean isForce, String locale, String timeZone, String zoneName)

Description: - The agent sends this command from the agent desktop application when the agent wants to login to POM. This logon API is used for CCElite agent desktop application. POM can then use this agent for a campaign when the agent becomes ready.Parameters:

agentExt : station number pwd: agent Password

isForce: - It should be true, when we wanted to do force login, but in our case it will be always false.Locale: Locale of agent (which we get from Avaya POM team)timeZone: - time zone of agent (which we get from Avaya POM team)zoneName: - this is name of the zone (which we get from avaya POM team).

Note: - Locale, timeZone, zoneName parameters should be configurable in CTI Server.RESPONE: AGTLogonRESP(int result)Return Value :

0 – means our login request to POM success, but we need to wait for AGTLogonRESPNot 0 – means our login request to POM failed with generic common error. Hence we need to show the same error response in UI.

Asynchronous callback response for AGTLogon. We get response code in below format, but we need to change that to negative and send back to TMACServer.

ErrorCode

Error Message Error Description

-2 This agent is not registered with the system

POM system does not recognize the logged in agent. You can force login again.

-6 Unable to verify password You can see this message only in POM integration with CC Elite. POM cannot get the password from AES. Check the password of the agent and check the AES Web service.

-7 Agent is already logged in POM displays the message if the agent has already logged in. You can force login again.

-9 Agent skills not found Check the agent ID. The agent ID must match the agent ID specified in Contact Center. If the error message persists, check

Page 11: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

the AES web services.-10 Unable to change the state of

the agentPOM cannot change the agent state. Login again to the POM system.

-11 Internal error. Unable to login agent

The agent cannot login to the POM system. Login again to the POM system.

-12 Login failure. Zone not found The agent cannot login because of zone error. Check the zone for which the agent logs in. The zone must match one of the zones specified in POM.

-13 Login failure. Invalid locale The agent cannot login because of locale error. Check the locale of the agent. The locale must not be Null. If Null, specify a locale for the agent. Note: POM checks only Null value for locale values, and does not restrict any other string value

-15 Login failure. Invalid Timezone The agent cannot login because of time zone error. Check the time zone of the agent. The time zone must not be Null. If Null, specify time zone of the agent. Note:POM checks only Null value for time zone values, and does not restrict any other string value

-16 Login failure. Invalid Agent Name

You can see this message only if you have POM integration with AACC. The agent name cannot be Null. You must specify a value for agent name.

-17 Login failure. Authentication of agent failed.

You see this message only if you have POM integration with CC Elite. Check the agent password. The agent password must match the agent password specified in the Contact Center.

NOTE: - If AGTLogonResp event contains any of these error codes, then we have to pass the same error message to UI saying that Agentlogin failed with error message.

After successful agent login, we need to maintain NailedStatus default as “NotNailedUp”. Once agent state changes to ready after immediate login, then we have to let POM that agent is ready for nail up. Based on the confirmation from POM, NailedStatus will change accordingly.

Positive Response to TMAC is: {"eventName":"SetAgentStateDone","extension":"44012","eventData":{"ErrorInfo":"","ResponseStatus":"0","Extension":"44012","InvokeID":"5","ErrorCode":"0"}}

Negative Response to TMAC is: {"eventName":"SetAgentStateDone","extension":"44012","eventData":{"ErrorInfo":"<ErrorMessage>","ResponseStatus":"<ErrorCode>","Extension":"44012","InvokeID":"5","ErrorCode":"<errorCode>"}}

1.5.4 AgentLogoutTmac command : int AgentLogout(string sessionID, string agentID, int invokeID, string queue = "", int reasonCode = 0)

POM Command: AGTLogoff()Description: The agent sends this command from the agent desktop application when it wants to logout from POM. An agent can send this command ONLY when the command is in “NotReady” state.

RESPONE: AGTLogoffRESP(int result)Return Value:

0 – indicates success. But application needs to wait for AGTLogoffRESP541 - Unable to logoff. Please move to not ready state

<0 – indicates our logout request to POM failed with generic common error. Hence we need to show the same error response in UI.

Positive Response to TMAC is: {"eventName":"SetAgentStateDone","extension":"44012","eventData":{"ErrorInfo":"","ResponseStatus":"0","Extension":"44012","InvokeID":"5","ErrorCode":"0"}}

Page 12: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

Negative Response to TMAC is: {"eventName":"SetAgentStateDone","extension":"44012","eventData":{"ErrorInfo":"<ErrorMessage>","ResponseStatus":"<ErrorCode>","Extension":"44012","InvokeID":"5","ErrorCode":"<errorCode>"}}

1.5.5 MonitorDeviceTmac command: int MonitorDevice(string sessionID, string extension, int invokeID)

Since there is no need to monitor a device here in POM integration, application returns 0 which indicates this call is success.

Positive Response to TMAC is: {"eventName":"MonitorDeviceDone","extension":"44012","eventData":{"ErrorInfo":"","ResponseStatus":"0","Extension":"44012","InvokeID":"5","ErrorCode":"0"}}

Negative Response to TMAC is: {"eventName":"MonitorDeviceDone","extension":"44012","eventData":{"ErrorInfo":"<ErrorMessage>","ResponseStatus":"<ErrorCode>","Extension":"44012","InvokeID":"5","ErrorCode":"<errorCode>"}}

1.5.6 UnMonitorDeviceTmac command: int UnMonitorDevice(string sessionID, int monitorHandle, int invokeID)

Since there is no need to un-monitor a device here in POM integration, application returns 0 which indicates this call is success.

Positive Response to TMAC is: {"eventName":"UnMonitorDeviceDone","extension":"44012","eventData":{"ErrorInfo":"","ResponseStatus":"0","Extension":"44012","InvokeID":"5","ErrorCode":"0"}}

Negative Response to TMAC is: {"eventName":"UnMonitorDeviceDone","extension":"44012","eventData":{"ErrorInfo":"<ErrorMessage>","ResponseStatus":"<ErrorCode>","Extension":"44012","InvokeID":"5","ErrorCode":"<errorCode>"}}

1.5.7 SetAgentStateToAuxTmac command: int SetAgentStateToAux(string sessionID, string agentID, int agentState, int invokeID, string queue, int reasonCode)SetAgentStateToPendingTmac command: int SetAgentStateToPending(string sessionID, string agentID, int agentState, int invokeID, string queue, int reasonCode)SetAgentStateToAutoIn/ SetAgentStateToManualInTmac command: int SetAgentStateToAutoIn(string sessionID, string agentID, int agentState, int invokeID, string queue)

POM Command: int AGTStateChange(POMAgentState agentState, String reasonCode, String reasonName, Boolean hasWalkedAway)Params:

agentState: An agent can specify the state to which the agent wants to transition to from the current state. The current agent states are:

• Ready: The agent is ready to pick calls.

• NotReady: The agent wants to take a break

Page 13: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

• PendingNotReady: The agent is in the middle of the call and has issued a request to go to NotReady state, but POM cannot send the agent to NotReady.

reasonCode: reasonCode is AUX or reason code the agent selects from the agent desktop application while going to NotReady state.reasonName: reasonName is the AUX or reason code the agent selects from the agent desktop application while going to NotReady state.hasWalkedAway: Walked away flag is set to true if it considers the agent as walkaway agent. If an agent does not perform any actions for two consecutive calls, then the agent desktop application considers that the agent has walked away and changes the call state to NotReady, so that it does not send the next call to this agent. Except for a nontimed preview campaign an agent does not necessarily have to click buttons on the agent desktop application to handle a call, considering that the customer disconnects the calls and implements the autowrapup.

Description:The agent sends this command when it wants to go Ready or NotReady. An agent goes to Ready state when it wants to accept calls from POM. Unless the agent is ready POM will not handover a call to the agent. If the agent is in NotReady state, POM will not pass on the outbound call to the agent. An agent can go to NotReady state from a Ready state only after the current call is done OR to put it in other words, the agent can go to NotReady state only if it is in Idle state. If the agent is in the middle of a call OR in wrap up state, the agent can issue a NotReady request. POM accepts this request and puts the agent in PendingNotReady state. Once the agent is done with disposing the existing call, POM will immediately put the agent in NotReady state and will not give it a new call until it goes back to Ready State. An important point to note is that if this agent has pending consults + pending callbacks, POM will not move the agent from PendingNotReady to NotReady until the pending consults + pending callbacks are completed. (Venky)

ErrorCodes:ErrorCode

Error Message Error Description

63 Agent already in same aux code When the agent tries to change the agent state to NotReady with the same reason, POM returns this error. The agent must select other reason code to mention different reason for NotReady

64 Unable to change the current state

POM does not allow the agent to change the state to NotReady or Ready from the current state.

Response Event:AGTStateChangeRESP(POMAgentState pomAgentState, int result)pomAgentState Agent state of type POMAgentState result 0 indicates success.

Note: - For every error code, since we are getting positive number from POM, we need to append “-“ to error code (like example 63 = -63), and send back to TMAC along with error description.

Below actions should be done when agent is changing to “Ready” mode, Immediate after login and in application if the NailedStatus status is “NotNailedUp”.

If agent state changing to READY mode immediate after login, then application need to inform POM that agent is available for nailed call, by calling below POM methods.

POM command : AGTAvailableForNailup()Description: Agent desktop application sends this command only when the agent gets Ready for the first time after logging in.

RESPONSE: AGTAvailableForNailupRESP(int result)Result: 0 – indicates Success.

NOTE: - POM nails the agent if a campaign is running which matches the skillset of agent. POM can nail the agent only after POM receives the above command. POM sends a sequence of notifications with flags indicating the next nailing action. If POM wants to nail an agent it first sends AGTNailupChange with flag PendingNailup. On processing this flag the agent desktop application must send AGTReadyForNailup

Application must listen for AGTNailupChange event for Nail status after calling AGTAvailableForNailup method. In AGTNailupChange(POMNailupStatus nailupStatus). If the nailupStatus is “PendingNailUp”, then application has to call “AGTReadyForNailup” method to get nailed call.

Page 14: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

POM Command: int AGTReadyForNailup()Description: The application sends this command when it has processed the AGTNailupChange-PendingNailup notification. The notification gives an agent enough time to prepare for the nailup. The notification also acts as an indication to the agent desktop application (with a softphone) making the next call as a nailing call which must be auto-answered and the call is not a generic inbound call.RESPONSE: AGTReadyForNailupRESP(int result).

If the return value 0, then agent will receive Nailed-up call and customer will be connected immediately if the job has contacts.

Positive Response to TMAC is: {"eventName":"SetAgentStateTo******Done","extension":"44012","eventData":{"ErrorInfo":"","ResponseStatus":"0","Extension":"44012","InvokeID":"5","ErrorCode":"0"}}

Negative Response to TMAC is: {"eventName":"SetAgentStateTo****Done","extension":"44012","eventData":{"ErrorInfo":"<ErrorMessage>","ResponseStatus":"<ErrorCode>","Extension":"44012","InvokeID":"5","ErrorCode":"<errorCode>"}}

1.5.8 HoldTmac command: int Hold(string sessionID, string connectionHandle, int invokeID)

connectionHandle param value should be the POM SessionID which has been passed during OnPOMOutboundCallNotifyEvent

POMCommand: int AGTHoldCall (String sessionID)Parameters:

sessionID : Unique ID of the session for the entire contact processing duration. (ex. This session id we receive AGTCallNotifyEvent).Description: this command to put call on hold.RESPONSE: This is an event

AGTHoldCallRESP(String sessionID, int result)

sessionID : Unique ID of the call for the entire contact processing duration. Result : 0 indicates success.

Non zero means failure. And send the error message corresponding to error code to TMAC Server.

If result code is 0, then we need to send positive confirmation for hold request/command to TMACServer. Which is HoldCallDone event Example:{"eventName":"HoldCallDone","extension":"40709","eventData":{"ResponseStatus":"0","Extension":"40709","InvokeID":"361"}If result code is other than 0 (nonzero), then we need to send negative confirmation for hold request/command to TMAC Server saying that request is failed with proper error message. {"eventName":"CSTAUnviversalFailureEvent","extension":"40709","eventData":{"ResponseStatus":"-1",”ErrorCode”:-”<errorCode>”,”ErrorInfo”:”-<errorCode>”,"Extension":"40709","InvokeID":"361"}

Page 15: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1.5.9 HoldReconnectTmac command: int HoldReconnect(string sessionID, string connectionHandle, int invokeID)

connectionHandle param value should be the POM SessionID which has been passed during OnPOMOutboundCallNotifyEvent

POMCommand: int AGTUnHoldCall (String sessionID)Parameters: sessionID: Unique ID of the call for the entire contact processing duration.RESPONSE: This is an event

AGTUnHoldCallRESP(String sessionID, int result)

sessionID : Unique ID of the call for the entire contact processing duration. Result : 0 indicates success.

Non zero means failure. And send the error message corresponding to error code to TMAC Server.

If result code is 0, then we need to send positive confirmation for holdReconnect request/command to TMACServer. Example: {"eventName":" HoldReconnectDone","extension":"40709","eventData":{"ResponseStatus":"0","Extension":"40709","InvokeID":"361"}

If result code is other than 0 (nonzero), then we need to send negative confirmation for HoldReconnect request/command to TMAC Server saying that request is failed with proper error message. {"eventName":"CSTAUnviversalFailureEvent","extension":"40709","eventData":{"ResponseStatus":"-1",”ErrorCode”:-”<errorCode>”,”ErrorInfo”:”-<errorCode>”,"Extension":"40709","InvokeID":"361"}

1.5.10 DisconnectCall/DisconnectStationTmac command: int DisconnectCall(string sessionID, string connectionHandle, int invokeID, string UserUserInfo = "")Tmac command: int DisconnectStation(string sessionID, string connectionHandle, int invokeID, string userUserInfo= "")

connectionHandle param value should be the POM SessionID which has been passed during OnPOMOutboundCallNotifyEvent

POMCommand: int AGTReleaseLine(String sessionID)Parameters: sessionID: Unique ID of the call for the entire contact processing duration.RESPONSE: This is an event

AGTReleaseLineRESP(String sessionID, int result)

sessionID : Unique ID of the call for the entire contact processing duration. Result : 0 indicates success.

Non zero means failure. And send the error message corresponding to error code to TMAC Server.

If result code is 0, then we need to send positive confirmation for DisconnectCall/DisconnectStation request/command to TMACServer. {"eventName":" DisconnectCall Done","extension":"40709","eventData":{"ResponseStatus":"0","Extension":"40709","InvokeID":"361"}

If result code is other than 0 (nonzero), then we need to send negative confirmation for DisconnectCall/DisconnectStation request/command to TMAC Server saying that request is failed with proper error message.

ErrorCode Error Message Error Description121 Unable to unhold Unable to unhold call due to telephony errors.122 Unable to unhold as call is disconnected This error comes when agent tries to unhold the call

which is disconnected.123 Unable to unhold as agent is not on call This error comes when agent is not on call.

Page 16: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

{"eventName":"CSTAUnviversalFailureEvent","extension":"40709","eventData":{"ResponseStatus":"-1",”ErrorCode”:-”<errorCode>”,”ErrorInfo”:”-<errorCode>”,"Extension":"40709","InvokeID":"361"}

1.5.11 SendGenericCTICommand:Param1: CommandNameParam2: jsonData

1.5.11.1 DialPOMPreviewCall: This command should be used to call when agent want to dial out

preview contact.jsonData: connectionHandle – callID of contact/CallnumberToDial – Customer number to dial out. This information will be shared in OnOutboundCallUUIData event.custName – name of the customer to dial out. This information will be available in OnOutboundCallUUIData event.

1.5.11.2 CancelPOMPreviewCall:This command should be used to call when agent wants to cancel preview contact.JsonData:connectionHandle: CallID of call/Contact.

1.5.11.3 WrapUpCallContact: This command should be used to call when agent wants to wrap up the contact.

JsonData:connectionHandle: callID of call/contact.compCode: call completion code. This information will be available in OnCallWrapUpDataEvent event.compValue: call completion string. This information will be available in OnCallWrapUpDataEvent event.

1.5.11.4 GetConsultDestinationAgentsList: this command will be used to call to get the list of agents/external parties available for consultation either in transfer/conference.

JsonData:connectionHandle: callID of call/contact.consultType : “Agent/External”

1.6 Call Events

1.6.1 POM_OutboundCallEventAGTCallNotify(POMContact contact, string sessionID)

Description: POM sends notification for Predictive and Progressive campaigns when POM connects the outbound call to the customer with the agent. POM sends this notification to the selected agent, so that the

Page 17: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

agent gets to know the customer that got dialed. The agent desktop application must then run AGTGetCustomerDetails command to get more details about the customer.

Parameters : contact : POMContact object containing the customer and job related information about the contact which is (preview campaign)/got (Predictive + Progressive campaign) dialed.sessionID: Unique ID of the call for the entire contact processing duration.

Above list of information application receives in this event and same we need to convert to JSON format and send back to TMAC Server as below event:

{"eventName":" OnOutboundCallInitiated” ","extension":"44012","eventData":{”ConnectionHandle”:”<callID>” “MonitorHandle”:”<monHandle>”,”CallID”:”<callID>”, “Device”:”<extension>”,"UCID":"<SessionID>","campaignType":"<type of campaign>","JSONData":"<jsonData"}}

Example event:OnOutboundCallInitiated------------------------Start---------------------OnOutboundCallInitiated:ConnectionHandle:12057!141195!0OnOutboundCallInitiated:MonitorHandle:858047392OnOutboundCallInitiated:CallID:141195OnOutboundCallInitiated:Device:12057OnOutboundCallInitiated:UCID:141195OnOutboundCallInitiated:JsonData:{"CallbackNotes":"","CampaignName":"UOB1","CanCancel":true,"CanCancelSpecified":false,"CanEnterFreeFormNumber":true,"CanEnterFreeFormNumberSpecified":false,"ContactCapabilities":null,"ContactNumbers":[{"IsDefault":true,"Name":"Phone 1","Number":"12053","Timezone":"2018/06/14 20:01","State":"","Wireless":""}],"ContactType":0,"ContactTypeSpecified":false,"ScriptURL":"","ScriptFailoverURL":"","SkillsetName":"OUTCALL","DefaultNumber":"12053","Timed":false,"TimedSpecified":false,"Timeout":0,"TimeoutSpecified":false,"CanDial":true,"CanDialSpecified":false,"CanReschedule":true,"CanRescheduleSpecified":false,"ExpiryTime":"30","ContactID":15616,"SkillsetID":"15"}OnOutboundCallInitiated:CampaignType:Preview

Application needs to call below POM command to get customer information

POMCommand: int AGTGetCustomerDetails (String sessionID)

Page 18: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

Description: Agent can run this command if it wants complete details of a contact. Details include Title/ FirstName/LastName/Address/Phone/email fields and custom fields. Usually this command must run after receiving a new call notification, that is, AGTCallNotify.

RESPONSE: it will be an eventAGTGetCustomerDetailsRESP(POMCustomerDetails customerDetails, String sessionID, int result)Return value Params:

customerDetails : POMCustomerDetails object containing customer datasessionID : Unique ID of the call for the entire contact processing duration.

Result: 0 indicates success. If nonzero is failure

This is the structure info where we get information. Application has to take all the values and convert to JSON and pass back to TMAC Server like below event. This event will be triggered as “OnGenericCTIEventWithData” with param event name as “OnUUIDataEvent”.

{"eventName":" OnOutboundCallUUIData ","extension":"44012","eventData":{“Device”:”<extension>”,”ConnectionHandle”:”<callID>”,"UCID":"<SessionID>","campaignType":"<type of campaign>","JSONData":"<jsonData"}}

Example event:OnOutboundCallUUIData:{"Title":{"key":"Title Predefined","value":"","attributeType":1},"ID":{"key":"ID","value":"16","attributeType":0},"Firstname":{"key":"First Name","value":"Avaya","attributeType":1},"Lastname":{"key":"Last Name","value":"","attributeType":1},"PhoneFields":[{"phoneNumber":{"key":"Phone 1","value":"12053","attributeType":1},"countryCode":{"key":"Phone 1 Country Code","value":"65","attributeType":1},"timezone":{"key":"Time Zone","value":"Singapore","attributeType":1},"state":{"key":"Phone 1 State","value":"","attributeType":1},"wireless":{"key":"Phone 1 Wireless","value":"","attributeType":1}}],"EmailFields":[{"key":"E-Mail","value":"","attributeType":1}],"AddressList":[{"Line1":{"key":"Address Line 1 Predefined","value":"","attributeType":1},"Line2":{"key":"Address Line 2 Predefined","value":"","attributeType":1},"Line3":{"key":"Address Line 3 Predefined","value":"","attributeType":1},"Line4":{"key":"Address Line 4 Predefined","value":"","attributeType":1},"Line5":{"key":"Address Line 5 Predefined","value":"","attributeType":1},"Country":{"key":"Country Predefined","value":"","attributeType":1},"ZipCode":{"key":"Zipcode Predefined","value":"","attributeType":1}}],"CustomFields":[{"key":"","value":"","attributeType":0}]}

1.6.2 OnCallWrapUpDataEventThis event will be triggered with wrap up data information. After call end, application requests wrap up data from POM and will respond back to TMAC for user to take wrap up the call. This event will be

Page 19: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

triggered as “OnGenericCTIEventWithData” with first param as event name such as “OnCallWrapUpDataEvent” followed by jsonData as second parameter.

OnCallWrapUpDataEvent:[{"codeID":"69","codeVa

Page 20: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

1.7 Technical Detailso What’s the webserver & app services used & its technical details (Versions, patch details,

hostname) A Web server is a program that uses HTTP (Hypertext Transfer Protocol) to serve the

files that form Web pages to users, in response to their requests, which are forwarded by their computers' HTTPclients.

o What and all services running and purpose of the same? TMAC Server – This is the main service running which handles all the TMAC related

operations. All the events are commuted through this service and does the DB operations. If this service is stopped TMAC will not work.

SMS API – This is wrapper around Avaya’s SMS API, basically used to get the skills. OCM Report Scheduler - This service is used for migrating data from tables,

formatting the data and saving formatted data to OCM tables. So that while loading

UI or exporting from OCM, data will be fetched from OCM tables directly without

any formatting required later.

OCM Export Scheduler - These reports can be scheduled for exporting on daily,

weekly, monthly basis to excel or csv file from OCM Export Scheduler service

POM CTI Server – Service to integrate with POM server to handle outbound contacts AES CTI Server – This service is required for handling the events and to

communicate with Avaya’s application, Avaya Enablement Services. External Data Server – This service is TPOM Callback Dashboard – This service will get the scheduled callback from POM

server to show in the UI (dashboard) TSessionManager – This service manages the session of each agent logged in to

OCM for the configurable time, before the timeout the UI asks for the extension of session on click of that the session will be extended again.

1.7.1 High Availabilityo POM HA Architecture

Not implementedo HA Working principle

Not implementedo What will happen to agent in case of failover happens?

When the AES failover happens, the agent should use hard phone to continue the call until AES is back. If POM is down, agent might not be able to change the status or get the call.

1.7.2 OCMo Stored Procedures

Hope to be shared by Shaarikao Explanation on each report (1 line)

Collections OCM Account Not in Listing Report – This report will have the accounts which are

not dialed by the POM. Data will be inserted by the pre-processing script OCM Agent Owned Recalls Report – This report contains the data of call back which

is assigned to himself

Page 21: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

OCM Call Attempt Report – This report will have the data of all the calls which are attempted by the POM

OCM DNC List Report – This will have the data of DNC along with from where it has been done, Manual or Dialer Kill List

OCM Inbound Abandoned Report – This will have the data of abandoned call by the customer

OCM List Accounts Not Attempted Report – This report will have the data which are not attempted by POM to dial

OCM NSP List Report – This report will display record detail that agent dispose NSP as completion code

OCM NTC Report – This report will display record detail that agent dispose 'CM_NTC' as completion code

OCM Outbound Nuisance Report – This report will have data (predictive) where call has been dialed by POM but when it connects to agent, agent goes to AUX. Such call will be treated as Nuisance for the customer and can find here.

OCM Predictive Agent Time Summary Report – This will have the agent summary data for the predictive calls mapping agent to team

OCM Predictive Job Performance Summary Report – This will have the job summary data for the predictive calls mapping job name to team

OCM Preview Agent Time Summary Report – – This will have the agent summary data for the preview calls mapping agent to team

OCM Preview Job Summary Report – This will have the job summary data for the preview calls mapping job name to team

OCM Secured Unsecured Performance Report -

1.7.3 UtilitiesInterface Methods:

GetAllContactLists

Signature: public List<ContactList> GetAllContactLists (bool onlyManualContacts = false)

Pom api URL’s used:string apiPath = baseurl + "/contactlists?searchBy=organizationName&searchOperator=like&searchValue=" + organizationName;

base URL and organizationName are taken from config file.

Logic: Makes a POM API call. On success deserializes pom data to ContactList class object type. Filter is applied if onlyManualContacts is set to true, value is taken from config file key =

ContactListFilter Returns List of ContactList items to caller.

Model class:

public class ContactList { [JsonProperty("contactListName")] public string ContactListName { get; set; } [JsonProperty("contactListId")] public int ContactListId { get; set; } [JsonProperty("lastUpdateOn")]

Page 22: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

public string LastUpdatedOn { get; set; } [JsonProperty("totalContacts")] public int TotalContacts { get; set; } [JsonProperty("availableContacts")] public int AvailableContacts { get; set; } [JsonProperty("totalExcludedContacts")] public int TotalExcludedContacts { get; set; } [JsonProperty("organizationName")] public string OrganizationName { get; set; } [JsonProperty("zoneName")] public string ZoneName { get; set; } }

PurgeContact

Signature:public string PurgeContact (string contactName, int contactListId, string attribute, string filter, string userName, params string[] value)

Pom api URL used:

string apiPath = isRawList? $"{url}/contactlists/{contact_list_id}/contacts/list?pageSize={pageSize}&pageNumber={pageNumber}" : $"{url}/contactlists/{contact_list_id}/contacts/list?searchBy={searchAttribute}&searchOperator={optr}&searchValue={searchValue}&sortBy=userContactId&sortDirection=DESC&pageSize={pageSize}&pageNumber={pageNumber}"; // to get contact batch items

string apiPath += string.Format("/contactlists/{0}/{1}/{2}/{3}", contactListId, "contacts", userContactId, "delete"); // for purging.

Logic:

Before purge, API call to get contact batch items is called keeping parameter value isRawList to true. This yields ContactBatchList.

Get List of OutboundPurgeData before purge data by taking only “CAMP_ID” attributes from above ContactBatchList items.

If input string attribute contains is “expiry” then input value passed in params is validated for Date Format.

API call to get contact batch items is called again keeping isRawList to false. Read from config for purge type i.e. direct purge or normal purge.

o if input parameter attribute value matches the config key “DirectPurge” value, then perform purge operation and return data to caller.

o While performing direct purge below things are taken care, If input filter value is “not equal to”, then all usercontacts from above

ContactBatchList items are purged except input attribute value which is userContactId.

If attribute value doesn’t match direct purge value mentioned in config key, then purging is done for each userContactId present in above ContactBatchList items.

Page 23: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

If purge fails and if error message is “Cannot delete contact as the attempt is in progress”, then by default a max of 5 tries is made.

After purging, API call to get Contact Batch Items (step 1 and step 2) are performed again to get counts after purging.

Database interaction, a insert script is executed for table OutboundPurgeData considering before purge items and after purge items.

Final result will be then binded to model PurgeResult class and sent to caller.

Models used:

public class ContactBatchList { [JsonProperty("contactBatch")] public List<ContactBatch> ContactBatch { get; set; } [JsonProperty("totalPage")] public int TotalPage { get; set; } }

public class OutboundPurgeData { public string Mode { get; set; } public string ContactList { get; set; } public string CampaignID { get; set; } public int BeforePurging { get; set; } public int AfterPurging { get; set; } public int BuisnessParameter { get; set; } public DateTime CreatedDateTime { get; set; } }

public class PurgeFailureResponse: PurgeResponse

{

[JsonProperty("displayMessage")]

public string DisplayMessage { get; set; }

[JsonProperty("errorMessage")]

public string ErrorMessage { get; set; }

[JsonProperty("errorCode")]

public string ErrorCode { get; set; }

}

public class PurgeResponse

{

[JsonProperty("isDeleted")]

public virtual bool IsDeleted { get; set; }

[JsonProperty("failedUserContactIds")]

public List<string> FailedUserContactIds { get; set; }

Page 24: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

}

public class PurgeResult

{

[JsonProperty("isDeleted")]

public bool IsDeleted { get; set; }

[JsonProperty("failedUserContactId")]

public string FailedUserContactId { get; set; }

[JsonProperty("errorMessage")]

public string ErrorMessage { get; set; }

}

DNC

Signature:

[1]

public DNCResponse DNC(string contactListName, int contactListId, string filePath, string userName)

[2]

public DNCResponse DNC(string filePath)

Pom api URL used:

string apiPath = baseurl;

apiPath += string.Format("/contactlists/{0}/{1}/{2}/", contactListId, "contacts", "markuncallable"); [1]

string apiPath = url;

apiPath += string.Format("/dnclists"); [2]

string apiPath = url;

apiPath += string.Format("/dnclists/{0}/{1}", dncListId, "addresses");

Logic:

There are two overloaded methods for DNC as shown in signature. For the first overloaded method [1], logic flows as,

o Based on input values, application will first generate payload required for POST api call.

o Payload is nothing but list of usercontactId’s generated from a given/uploaded csv file.

o POM API call for markuncallable is made.o Upon success or failure DNCResponse data is sent to caller.

On success, Result field value of DNCResponse will be true and and FailedContactIdList property value will be null.

Page 25: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

On failure, Result field value of DNCResponse will be false and FailedContactIdList property will contain failed usercontactId’s along with valid ErrorInfo data.

For the second overloaded method [2], logic flow as,o Gets dnclists o If no DNCList data obtained returns null to caller.o Foreach dnclist items, Check and compare for Config key Organization Name value

with DNCListName value in dnclist item. If match found then generate payload from uploaded/given csv file. Make a POST API call to pom to add addresses to DNC List.

o Upon success or failure DNCResponse data is sent to caller. On success, Result field value of DNCResponse will be true and and

FailedContactIdList property value will be null. On failure, Result field value of DNCResponse will be false and

FailedContactIdList property will contain failed usercontactId’s along with valid ErrorInfo data.

Model:

public class DNCResponse : PomResponse

{

[JsonProperty("result")]

public bool Result { get; set; }

[JsonProperty("failedContactIdList")]

public string[] FailedContactIdList { get; set; }

}

public class PomResponse

{

public virtual bool IsSuccess { get; set; }

public virtual ErrorInfo ErrorInfo { get; set; }

}

public class ErrorInfo

{

[JsonProperty("displayMessage")]

public string DisplayMessage { get; set; }

[JsonProperty("errorMessage")]

public string ErrorMessage { get; set; }

[JsonProperty("errorCode")]

public string ErrorCode { get; set; }

}

Page 26: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

public class DNCList

{

[JsonProperty("DNCListId")]

public int DNCListId { get; set; }

[JsonProperty("DNCListName")]

public string DNCListName { get; set; }

[JsonProperty("lastUpdated")]

public DateTime LastUpdated { get; set; }

[JsonProperty("totalAddresses")]

public int TotalAddresses { get; set; }

[JsonProperty("listType")]

public string ListType { get; set; }

}

Manual Upload:

Signature:

public PomManualUploadResponse ManualCheckerUpload(string contactListId, string contactListName, string filePath, string type, string dbId)

POM API urls:

string apiPath = url;

apiPath += string.Format("/datasources/schedule/runonce");

Logic:

Get single data source name of type = ‘append’ from json payload file having file name paylod.json.

If no datasourcename found, return caller with proper error response. Verify SFTP for uploaded file using third party tool pscp.exe. On success,

o create a payload ‘Schedule’ class object having StartTime as DateTime.Now.AddMinutes(5) , datasource name is same as obtained as in first step and timezone as configured in config file.

o Make a datasource schedule runonce api call to POM.o On success api call, update database table Outbound_ManualUploadUtility with

new Uploadtime and upload id.o Return caller with proper success or error message.

Models used:

public class PomManualUploadResponse : PomResponse

{

public override bool IsSuccess { get; set; }

public override ErrorInfo ErrorInfo { get; set; }

}

public class PomResponse

Page 27: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

{

public virtual bool IsSuccess { get; set; }

public virtual ErrorInfo ErrorInfo { get; set; }

}

Run Campaign:

Signature:

public PomCampaignResponse StartCampaignJob(string campaignName)

POM API url used:

string apiPath = url;

apiPath += string.Format("/campaigns/{0}/{1}/{2}", campaignId, "job", "start");

Logic:

Get campaign id for given campaign name. Make a POM api call, to start job. On success or failure, send PomCampaignResponse to caller.

o IsSuccess property value is equal to isQueued of api object.

Models used:

public class PomCampaignResponse : PomResponse

{

public override bool IsSuccess { get; set; }

public override ErrorInfo ErrorInfo { get; set; }

}

public class PomResponse

{

public virtual bool IsSuccess { get; set; }

public virtual ErrorInfo ErrorInfo { get; set; }

}

1.7.4 TMACo Campaign – Organization - Team - Contact list Mapping

Based on team name in TMAC, organization name in rest APIs and DB querieso Wrap-up Codes handling

Special completion codes, update attributes using rest APIso Sales Screens functionality and auto populate details/Contact list fields mapping

This is being used in Telesales, when agent disconnects the call the agent can select the sales screen from the dropdown and can open the same. Agent will fill up the details and submit which writes the record to the table which is used to show in the respective reports

When the call has arrived, the data will be inserted to the DB, based on that session ID we will get the required data and auto populate the required fields

Page 28: Introduction · Web viewBased on the contact type TMAC will display the customer data in UI and provides call controlling buttons on UI for agent to assist customer.. If ACD call

o Dashboard API usage and DB Usage Dashboard using same APIs. For some we are using DB call back management