Table Of Contents
Message Sequence Charts
Shared Line Support
AddressInService/AddressOutofService Events
Incoming Call to Shared Address
Outgoing Call from Shared Address
Shared Address Calling Itself
Transfer and Direct Transfer
DirectTransfer/Arbitrary Transfer Scenario
Direct Transfer/Arbitrary Transfer—Page 2
Consult Transfer
Conference and Join
Join/Arbitrary Conference
Consult Conference
Join Across Lines with Enhancements
Barge and Privacy
Barge
CBarge
Privacy
CallSelect and UnSelect
Dynamic CTIPort Registration Per Call
Media Termination at Route Point
Redirect Set OriginalCalledID
Single Step Transfer
Modifying Calling Number
AutoAccept for CTIPort and RoutePoint
Forced Authorization and Customer Matter Codes
Super Provider Message Flow
SuperProvider and Change Notification Enhancements Use Cases
QSIG Path Replacement
Device State Server
Partition Support
Using getPartition() API
Using getAddress (String number, String partition)
Park DN
Partition Change
JTAPI Partition Support
Hairpin Support
QoS Support
JTAPI QoS
TLS Security
SRTP Key Material
Device and Line Restriction
SIP Support
SIP REPLACE
SIP REFER
IN-Dialog REFER Scenario
OutOfDialog Refer
SIP 3XX Redirection
Unicode Support
Backward Compatibility Enhancements
Half Duplex Media
Recording and Monitoring
Intercom
Do Not Disturb
DND-R
Secure Conferencing
JTAPI Cisco Unified IP 7931G Phone Interaction
Locale Infrastructure Development Scenarios
Calling Party Normalization
Click to Conference
Call Pickup
selectRoute() with Calling Search Space and Feature Priority
Extension Mobility Login Username
Calling Party IP Address
CiscoJtapiProperties
Message Sequence Charts
This appendix contains the message sequence charts, which illustrate the message flows for the following scenarios:
•
Shared Line Support
–
AddressInService/AddressOutofService Events
–
Incoming Call to Shared Address
–
Outgoing Call from Shared Address
–
Shared Address Calling Itself
•
Transfer and Direct Transfer
–
DirectTransfer/Arbitrary Transfer Scenario
–
Consult Transfer
•
Conference and Join
–
Join/Arbitrary Conference
–
Consult Conference
–
Join Across Lines with Enhancements
•
Barge and Privacy
–
Barge
–
CBarge
–
Privacy
•
CallSelect and UnSelect
•
Dynamic CTIPort Registration Per Call
•
Media Termination at Route Point
•
Redirect Set OriginalCalledID
•
Single Step Transfer
•
Modifying Calling Number
•
AutoAccept for CTIPort and RoutePoint
•
Forced Authorization and Customer Matter Codes
•
Super Provider Message Flow
•
SuperProvider and Change Notification Enhancements Use Cases
•
QSIG Path Replacement
•
Device State Server
•
Partition Support
•
Hairpin Support
•
QoS Support
•
TLS Security
•
SRTP Key Material
•
Device and Line Restriction
•
SIP Support
•
SIP REPLACE
•
Unicode Support
•
Backward Compatibility Enhancements
•
Half Duplex Media
•
Recording and Monitoring
•
Intercom
•
Do Not Disturb
•
DND-R
•
Secure Conferencing
•
JTAPI Cisco Unified IP 7931G Phone Interaction
•
Locale Infrastructure Development Scenarios
•
Calling Party Normalization
•
Click to Conference
•
Call Pickup
•
selectRoute() with Calling Search Space and Feature Priority
•
Extension Mobility Login Username
•
Calling Party IP Address
Shared Line Support
The following diagrams illustrate the message flows for Shared Line support.
AddressInService/AddressOutofService Events
Incoming Call to Shared Address
Outgoing Call from Shared Address
Shared Address Calling Itself
Transfer and Direct Transfer
The following diagrams illustrate the message flows for Transfer and Direct Transfer.
DirectTransfer/Arbitrary Transfer Scenario
Direct Transfer/Arbitrary Transfer—Page 2
Consult Transfer
The message flow for Consult Transfer acts the same as the flow for Arbitrary Transfer.
Conference and Join
The following diagrams illustrate the message flows for Conference and Join.
Join/Arbitrary Conference
Join/Arbitrary Conference—Page 2
Consult Conference
The message flow for Consult Conference acts the same as the flow for Arbitrary Conference.
Join Across Lines with Enhancements
The message flows for Join Across Lines with Enhancements are described in following tables. A, C, D, E and F are addresses on different terminals. B1 and B2 are addresses on the same terminal, TermB.
Action
|
Events
|
Application conferences the two calls on B1and B2 by invoking GC1.conference(GC2) to chain two conference call.
|
Events to CallObserver of A,C and B1:
TermConnActiveEv TermB GC1
CallCtlTermConnTalkingEv TermB GC1 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
ConnCreatedEv Conference-2 GC1
ConnConnectedEv Conference-2 GC1
CallCtlConnEstablishedEv Conference-2 GC1 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
CiscoConferenceChainAddedEv GC1
Ev.getAddedConnection will return connection for Conference-2
Ev.getConferenceChain().getChainedConferenceConnections() will return connections of Conference-2
Ev.getConferenceChain().getChainedConferenceCalls() will return GC1
|
Event for CallObserver at B2, D & E:
ConnDisconnectedEv B2 GC2 Cause=NORMAL
CallCtlConnDisconnectedEv B2 GC2 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
TermConnDroppedEv TermB GC2 Cause=NORMAL
CallCtlTermConnDroppedEv TermB GC2 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
ConnCreatedEv Conference-1 GC2
ConnConnectedEv Conference-1 GC2
CallCtlConnEstablishedEv Conference-1 GC2 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
CiscoConferenceChainAddedEv - GC2
Ev.getAddedConnection will return connection of Conference-1
Ev.getConferenceChain().getChainedConferenceConnections() will return connections of Conference-1 & Conference-2
Ev.getConferenceChain().getChainedConferenceCalls() will return GC1 & GC2
|
Application invokes GC2.conference (GC1) to chain two conference calls.
|
Event for CallObserver at B2, D & E:
TermConnActiveEv TermB GC2
CallCtlTermConnTalkingEv TermB GC2 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
ConnCreatedEv Conference-1 GC2
ConnConnectedEv Conference-1 GC2
CallCtlConnEstablishedEv Conference-1 GC2 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
CiscoConferenceChainAddedEv - GC2
Ev.getAddedConnection will return connection for Conference-1
Ev.getConferenceChain().getChainedConferenceConnections() will return connections of Conference-1
Ev.getConferenceChain().getChainedConferenceCalls() will return GC2
|
Events for CallObservers at A, B1 & C:
ConnDisconnectedEv B1 GC1 Cause=NORMAL
CallCtlConnDisconnectedEv B1 GC1 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
TermConnDroppedEv TermB GC1 Cause=NORMAL
CallCtlTermConnDroppedEv TermB GC1 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
ConnCreatedEv Conference-2 GC1
ConnConnectedEv Conference-2 GC1
CallCtlConnEstablishedEv Conference-2 GC1 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
CiscoConferenceChainAddedEv - GC1
Ev.getAddedConnection will return connection for Conference-2
Ev.getConferenceChain().getChainedConferenceConnections() will return connections of Conference-2
Ev.getConferenceChain().getChainedConferenceCalls() will return GC1
|
A, B1, C are in conference-1 (GC1), B1,D, E are in conference-2 (GC2), B2, F, G are in conference-3 (GC-3)
Application completes conference at C by initiating GC1.conference(GC2, GC3) setting B1 as controller.
|
Event for CallObserver at A, B1 & C:
TermConnActiveEv TermB GC1
CallCtlTermConnTalkingEv TermB GC1 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
ConnCreatedEv Conference-2 GC1
ConnConnectedEv Conference-2 GC1
CallCtlConnEstablishedEv Conference-2 GC1 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
CiscoConferenceChainAddedEv - GC1
Ev.getAddedConnection will return connection for Conference-2
Ev.getConferenceChain().getChainedConferenceConnections() will return connections of Conference-2
Ev.getConferenceChain().getChainedConferenceCalls() will return GC1
TermConnDroppedEv TermB GC2
CallCtlTermConnDroppedEv TermB GC2
ConnCreatedEv Conference-3 GC1
ConnConnectedEv Conference-3 GC1
CallCtlConnEstablishedEv Conference-3 GC1 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
CiscoConferenceChainAddedEv - GC1
Ev.getAddedConnection will return connection for Conference-3
Ev.getConferenceChain().getChainedConferenceConnections() will return connections of Conference-2 & Conference-3
Ev.getConferenceChain().getChainedConferenceCalls() will return GC2 & GC3
|
| |
Event for CallObserver at B1,D & E:
ConnDisconnectedEv B1 GC2 Cause=NORMAL
CallCtlConnDisconnectedEv B1 GC2 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
TermConnDroppedEv TermB GC2 Cause=NORMAL
CallCtlTermConnDroppedEv TermB GC2 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
ConnCreatedEv Conference-1 GC2
ConnConnectedEv Conference-1 GC2
CallCtlConnEstablishedEv Conference-1 GC2 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
CiscoConferenceChainAddedEv - GC2
Ev.getAddedConnection will return connection for Conference-1
Ev.getConferenceChain().getChainedConferenceConnections() will return connections of Conference-1-GC2
Ev.getConferenceChain().getChainedConferenceCalls() will return GC2
|
| |
Event for CallObserver at B2, F & G:
|
ConnDisconnectedEv B2 GC3 Cause=NORMAL
|
CallCtlConnDisconnectedEv B2 GC3 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
|
TermConnDroppedEv TermB GC3 Cause=NORMAL
|
CallCtlTermConnDroppedEv TermB GC3 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
|
ConnCreatedEv Conference-1 GC3
|
ConnConnectedEv Conference-1 GC3
|
CallCtlConnEstablishedEv Conference-1 GC3 Cause=NORMAL, callCtlCause=CAUSE_CONFERENCE
|
CiscoConferenceChainAddedEv - GC3
|
Ev.getAddedConnection will return connection for Conference-1
|
Ev.getConferenceChain().getChainedConferenceConnections() will returnconnections of Conference-1
|
Ev.getConferenceChain().getChainedConferenceCalls() will return GC3
|
Action
|
Events
|
Application sets the requestor as B2 and calls GC2.conference(GC1) getControllerAddress() returns B2. getOriginalControllerAddress() returns B1.
|
A
CiscoConferenceStartEv
CallCtlTermConnTalkingEv TermB GC1
ConnCreatedEv D GC1
ConnConnectedEv D GC1
CallCtlTermConnDroppedEv TermB GC2
CiscoConferenceEndEv
B1
CallCtlTermConnHeldEv TermB GC1
CiscoConferenceStartEv
CallCtlTermConnTalkingEv TermB GC1
ConnCreatedEv D
ConnConnectedEv
CiscoConferenceEndEv
B2
ConnDisconnectedEv B GC2
CallCtlTermConnHeldEv TermB GC2
D
CallActiveEv GC2
ConnAlertingEv D GC2
ConnConnectedEv D GC2
CiscoConferenceStartEv
TermConnDroppedEv TermB GC2
CallActiveEv GC1
CiscoCallChangedEv
TermConnTalkingEv TermB GC1
TermConnDroppedEv TermD GC2
CallObservationEndedEv GC2
CiscoConferenceEndEv
|
If application uses B1 as request controller in the above setup getControllerAddress() returns B1. getOriginalControllerAddress() returns B1.
|
Events are same as above
|
Barge and Privacy
The following diagrams illustrate the message flows for Barge and Privacy.
Barge
CBarge
Privacy
CallSelect and UnSelect
The following diagram illustrates the message flows for CallSelect and UnSelect.
Dynamic CTIPort Registration Per Call
The following diagram illustrates the message flows for Dynamic CTIPort Registration per call.
Media Termination at Route Point
The following diagrams illustrate the message flows for Media Termination at Route Point.
Redirect Set OriginalCalledID
The following scenario illustrates the message flows for Redirect Set OriginalCalledID.
Scenario One
•
A, B, and C appear in an applications controlled list.
•
D is does not appear in the control list.
•
A calls B.
•
B redirects call to D with C as preferredOriginalCalledParty.
Application will see following events for parties A and B:
Meta Event Cause
|
Call
|
Event
|
Fields
|
META_CALL_ADDING_PARTY
|
Call 1
|
ConnCreatedEv for D ConnConnectedEv for D CallCtlConnEstablishedEv for D
|
CallingParty=A CalledParty = B LastRedirectedParty=C CurrentCalledParty=D
|
META_CALL_REMOVE_PARTY
|
Call 1
|
ConnDisconnectedEv for B CallCtlConnDisconnectedEv for B TermConnDroppedEv for B CallCtlTermConnDroppedEv for B CallObservationEndedEv for B
|
CallingParty=A CalledParty = B LastRedirectedParty=C CurrentCalledParty=D
|
Note
The specified event group may not be in the same order and might change depending on where parties are present in the cluster, on the load, and other conditions.
Scenario Two
•
A, B, and C do not appear in the Control list, and
•
D is in the application control list.
•
A calls B.
•
B redirects the call to D with C as preferredOriginalCalledParty.
The application will see following events for party D:
Meta Event Cause
|
Call
|
Event
|
Fields
|
META_CALL_STARTING
|
Call1
|
CallActiveEv ConnCreatedEv for D ConnInProgressEv for D CallCtlConnOfferedEv for D ConnCreatedEv for A CallCtlConnInitiatedEv for A
|
CallingParty=A CalledParty = D LastRedirectedParty=C CurrentCalledParty=D
|
META_CALL_PROGRESS
|
Call1
|
ConnAlertingEv for D CallCtlConnAlertingEv for D TermConnCreatedEv for D CallCtlTermConnRingingEv for D ConnConnectedEv for A CallCtlConnEstablishedEv for A
|
CallingParty=A CalledParty = D LastRedirectedParty=C CurrentCalledParty=D
|
META_CALL_PROGRESS
|
Call
|
ConnConnectedEv for D CallCtlConnEstablishedEv for D TermConnActiveEv for D CallCtlTermConnTalkingEv for D
|
CallingParty=A CalledParty = D LastRedirectedParty=C CurrentCalledParty=D
|
.
Single Step Transfer
Addresses A, B, and C appear in the control list, and the call between A and B is then gets transferred to C with B as the transfer controller. Applications will see the following events:
Action
|
Address A (5001)
Terminal CTIP1
|
Address B (5002)
Terminal CTIP2
|
Address C (5003)
Terminal CTIP3
|
Call.transfer(string)
|
ConnCreatedEv 5003 Cause: CAUSE_NORMAL
ConnInProgressEv 5003 Cause: CAUSE_NORMAL
CallCtlConnOfferedEv 5003 Cause: CAUSE_NORMAL
CallControlCause: CAUSE_TRANSFER
ConnAlertingEv 5003 Cause: CAUSE_NORMAL
CallCtlConnAlertingEv 5003 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
|
NEW META EVENT__ META_CALL_REMOVING_PARTY
TermConnDroppedEv CTIP2 Cause: CAUSE_NORMAL
CallCtlTermConnDroppedEv CTIP2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
ConnDisconnectedEv 5002 Cause: CAUSE_NORMAL
CallCtlConnDisconnectedEv 5002 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
|
CallActiveEv Cause: CAUSE_NEW_CALL
ConnCreatedEv 5003 Cause: CAUSE_NORMAL
ConnInProgressEv 5003 Cause: CAUSE_NORMAL
CallCtlConnOfferedEv 5003 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
ConnCreatedEv 5001Cause: CAUSE_NORMAL
ConnConnectedEv 5001 Cause: CAUSE_NORMAL
CallCtlConnEstablishedEv 5001Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
|
Call.transfer(string)
(continued)
|
CiscoRTPInputStartedEv Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv Cause: CAUSE_NORMAL
ConnConnectedEv 5003 CAUSE_NORMAL
CallCtlConnEstablishedEv 5003 Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
|
NEW META EVENT_________META_UNKNOWN
CallObservationEndedEv Cause: CAUSE_NORMAL
|
ConnAlertingEv 5003 Cause: CAUSE_NORMALCallCtlConnAlertingEv 5003 Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
TermConnCreatedEv CTIP3
TermConnRingingEv CTIP3Cause: CAUSE_NORMAL
CallCtlTermConnRingingEvImpl CTIP3 Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
CiscoRTPInputStartedEv Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv Cause: CAUSE_NORMAL
ConnConnectedEv 2004 Cause: CAUSE_NORMAL
CallCtlConnEstablishedEv 5003Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
|
Call.transfer(string)
(continued)
|
|
|
TermConnActiveEv CTIP3 Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv CTIP3 Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
CiscoRTPInputStoppedEv Cause: CAUSE_NORMAL
CiscoRTPOutputStoppedEv Cause: CAUSE_NORMAL
ConnDisconnectedEv 5001 Cause: CAUSE_NORMAL
CallCtlConnDisconnectedEv 5001 Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
TermConnDroppedEv CTIP3 Cause: CAUSE_NORMAL
CallCtlTermConnDroppedEv CTIP3 Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
ConnDisconnectedEv 5003 Cause: CAUSE_NORMAL
CallCtlConnDisconnectedEv 5003 Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
META_UNKNOWN
CallInvalidEv [#32] Cause: CAUSE_NORMAL
|
Modifying Calling Number
The following scenario illustrates the message flows for Modifying Calling Number.
Scenario One
The application controls the device Route Point (RP) and registers RP .
A and B are PNO and appear within the Cisco Unified Communications Manager cluster.
A calls RP.
Call arrives at RP
Action
|
Event
|
Fields
|
Call Arrives at RP
|
RouteEvent
|
State = ROUTE getCurrentRouteAddress () = RP getCallingAddress () = A getCallingTerminal () = SEPA (Terminal associated with A)
|
Application invokes
selectRoute( routeselected[], callingsearchspace, modifiyingcallingnumber[] ) where routeSelected[] = C callingSearchSpace = CiscoRouteSession.DEFAULT_SEARCH_SPACE
|
RouteUsedEvent
|
State = ROUTE_USED getCallingAddress () = A getCallingTerminal () = SEPA (Terminal associated with A) getRouteUsed () = C
|
Application invokes
endRoute (ERROR_NONE)
|
RouteEndEvent
|
State = ROUTE_END getRouteAddress () = RP
|
Scenario Two
The application is controls A and B.
A calls RP, which selects Route call to B with modified calling number as M.
Action
|
Event
|
Fields
|
A calls RP, which is not in controlled list.
|
NEW META EVENT_________META_CALL_ STARTING CallActiveEv Cause: CAUSE_NEW_CALL ConnCreatedEv A Cause: CAUSE_NORMAL ConnConnectedEv A Cause: CAUSE_NORMAL CallCtlConnInitiatedEv Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL TermConnCreatedEv SEPA Cause: Other: 0 TermConnActiveEv SEPA Cause: CAUSE_NORMAL CallCtlTermConnTalkingEv SEPA Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
NEW META EVENT_________META_CALL_ PROGRESS CallCtlConnDialingEv A
NEW META EVENT_________META_CALL_ PROGRESS CallCtlConnEstablishedEv A ConnCreatedEv RP ConnInProgressEv RP CallCtlConnOfferedEv RP
|
getCallingAddress() = A getCalledAddress() = getLastRedirectedAddress ()= getCurrentCallingAddress ()= A getCurrentCalledAddress()= getModifiedCallingAddress()=A getModifiedCalledAddress() =
getCallingAddress() = A getCalledAddress() = getLastRedirectedAddress ()= getCurrentCallingAddress ()= A getCurrentCalledAddress()= getModifiedCallingAddress()=A getModifiedCalledAddress() =
getCallingAddress() = A getCalledAddress() = B getLastRedirectedAddress ()= getCurrentCallingAddress ()= A getCurrentCalledAddress()= B getModifiedCallingAddress()=A getModifiedCalledAddress() =B
|
Another application controls the RP selectRoute to B with modifying calling number as M.
|
NEW META EVENT_________META_CALL_ ADDITIONAL_PARTY ConnCreatedEv B ConnInProgressEv B CallCtlConnOfferedEv B ConnDisconnectedEv RP CallCtlConnDisconnectedEv RP
NEW META EVENT_________META_CALL_ PROGRESS ConnAlertingEv B CallCtlConnAlertingEv B TermConnCreatedEv B TermConnRingingEv B CallCtlTermConnRingingEv B
|
getCallingAddress() = A getCalledAddress() = B getLastRedirectedAddress ()= RP getCurrentCallingAddress ()= A getCurrentCalledAddress()= B getModifiedCallingAddress()=M getModifiedCalledAddress() =B
getCallingAddress() = A getCalledAddress() = B getLastRedirectedAddress ()= RP
getCurrentCallingAddress ()= A getCurrentCalledAddress()= B getModifiedCallingAddress()=M getModifiedCalledAddress() =B
|
B answers the call.
|
ConnConnectedEv B CallCtlConnEstablishedEv B TermConnActiveEv B CallCtlTermConnTalkingEv B
|
getCallingAddress() = A getCalledAddress() = B getLastRedirectedAddress ()= RP getCurrentCallingAddress ()= A getCurrentCalledAddress()= B getModifiedCallingAddress()=M getModifiedCalledAddress() =B
|
AutoAccept for CTIPort and RoutePoint
Forced Authorization and Customer Matter Codes
Scenario One
The application controls A and B; B requires a forced authorization code (FAC) to extend the call.
Action
|
Event
|
A calls B by using call.Connect(), or A places a consult call to B by using Call.Consult().
|
NEW META EVENT_________META_CALL_STARTING CallActiveEv Cause: CAUSE_NEW_CALL ConnCreatedEv A Cause: CAUSE_NORMAL ConnConnectedEv A Cause: CAUSE_NORMAL CallCtlConnInitiatedEv Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL TermConnCreatedEv SEPA Cause: Other: 0 TermConnActiveEv SEPA Cause: CAUSE_NORMAL CallCtlTermConnTalkingEv SEPA Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
NEW META EVENT_________META_CALL_PROGRESS CallCtlConnDialingEv A
NEW META EVENT_________META_CALL_PROGRESS CiscoToneChangedEv ToneType = CiscoTone.ZIPZIP cause = CiscoCallEv.CAUSE_FAC_CMC getWhichCodRequired = CiscoToneChangedEv. FAC_REQUIRED
|
Application enters additional digits by using CiscoConnection.addToAddress.
|
NEW META EVENT_________META_CALL_ADDITIONAL_PARTY ConnCreatedEv B ConnInProgressEv B CallCtlConnOfferedEv B
NEW META EVENT_________META_CALL_PROGRESS ConnAlertingEv B CallCtlConnAlertingEv B TermConnCreatedEv B TermConnRingingEv B CallCtlTermConnRingingEv B ConnConnectedEv B CallCtlConnEstablishedEv B
|
B answers the call.
|
TermConnActiveEv B
|
Scenario Two
The application controls A and B; B requires both an FAC and a CMC (client matter code) to extend the call.
Action
|
Event
|
A calls B by using call.Connect(), or A places a consult call to B by using Call.Consult().
|
NEW META EVENT_________META_CALL_STARTING CallActiveEv Cause: CAUSE_NEW_CALL ConnCreatedEv A Cause: CAUSE_NORMAL ConnConnectedEv A Cause: CAUSE_NORMAL CallCtlConnInitiatedEv Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL TermConnCreatedEv SEPA Cause: Other: 0 TermConnActiveEv SEPA Cause: CAUSE_NORMAL CallCtlTermConnTalkingEv SEPA Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
NEW META EVENT_________META_CALL_PROGRESS CallCtlConnDialingEv A
NEW META EVENT_________META_CALL_PROGRESS CiscoToneChangedEv ToneType = CiscoTone.ZIPZIP cause = CiscoCallEv.CAUSE_FAC_CMC getWhichCodRequired = CiscoToneChangedEv. FAC_CMC_REQUIRED
|
Application enters FAC code digits with # termination by using CiscoConnection.addToAddress within the T302 timer.
|
NEW META EVENT_________META_CALL_PROGRESS CiscoToneChangedEv ToneType = CiscoTone.ZIPZIP cause = CiscoCallEv.CAUSE_FAC_CMC getWhichCodRequired = CiscoToneChangedEv. CMC_REQUIRED
|
Application enters CMC code digits with # terminated by using CiscoConnection.addToAddress within T302 timer.
|
NEW META EVENT_________META_CALL_ADDITIONAL_PARTY ConnCreatedEv B ConnInProgressEv B CallCtlConnOfferedEv B
NEW META EVENT_________META_CALL_PROGRESS ConnAlertingEv B CallCtlConnAlertingEv B TermConnCreatedEv B TermConnRingingEv B CallCtlTermConnRingingEv B
|
B answers the call.
|
ConnConnectedEv B CallCtlConnEstablishedEv B TermConnActiveEv B CallCtlTermConnTalkingEv B
|
Scenario Three
The application controls A and B;
B requires a CMC, and the application enters an invalid code.
Action
|
Event
|
A calls B by using call.Connect(), or A places a consult call to B by using Call.Consult().
|
NEW META EVENT_________META_CALL_STARTING CallActiveEv Cause: CAUSE_NEW_CALL ConnCreatedEv A Cause: CAUSE_NORMAL ConnConnectedEv A Cause: CAUSE_NORMAL CallCtlConnInitiatedEv Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL TermConnCreatedEv SEPA Cause: Other: 0 TermConnActiveEv SEPA Cause: CAUSE_NORMAL CallCtlTermConnTalkingEv SEPA Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
NEW META EVENT_________META_CALL_PROGRESS CallCtlConnDialingEv A
NEW META EVENT_________META_CALL_PROGRESS CiscoToneChangedEv ToneType = CiscoTone.ZIPZIP cause = CiscoCallEv.CAUSE_FAC_CMC getWhichCodRequired = CiscoToneChangedEv. CMC_REQUIRED
|
The application enters the incorrect CMC digits (# terminated) by using CiscoConnection.addToAddress within the T302 timer limit.
The application receives reorder tone.
|
NEW META EVENT_________META_CALL_PROGRESS ConnFailedEv A CallCtlConnFailedEv A getCiscoCause () = CiscoCallEv.FAC_CMC
NEW META EVENT_________META_CALL_ENDING TermConnDroppedEv CallCtlTermConnDropped ConnDisconnectedEv CallCtlConnDisconnectedEv CallInvalidEv CallObservationEndedEv
|
Scenario Four
The application controls both A and B; A calls B; B redirects the call to C, which needs both an FAC and a CMC.
Action
|
Event
|
A calls B by using call.Connect(), or A places a consult call to B by using Call.Consult().
|
NEW META EVENT_________META_CALL_STARTING CallActiveEv Cause: CAUSE_NEW_CALL ConnCreatedEv A Cause: CAUSE_NORMAL ConnConnectedEv A Cause: CAUSE_NORMAL CallCtlConnInitiatedEv Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL TermConnCreatedEv SEPA Cause: Other: 0 TermConnActiveEv SEPA Cause: CAUSE_NORMAL CallCtlTermConnTalkingEv SEPA Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
NEW META EVENT_________META_CALL_PROGRESS CallCtlConnDialingEv A
NEW METAEVENT_________META_CALL_ADDITIONAL_PARTY ConnCreatedEv B ConnInProgressEv B CallCtlConnOfferedEv B
NEW META EVENT_________META_CALL_PROGRESS ConnAlertingEv B CallCtlConnAlertingEv B TermConnCreatedEv SEPB TermConnRingingEv SEPB CallCtlTermConnRingingEv SEPB ConnConnectedEv B CallCtlConnEstablishedEv B TermConnActiveEv SEPB CallCtlTermConnTalkingEv SEPB
|
B issues a redirect request to C and passes an FAC and a CMC code.
|
NEW META EVENT_________META_CALL_REMOVING_PARTY TermConnDroppedEv SEPB CallCtlTermConnDroppedEv SEPB Cause: CAUSE_NORMAL CallControlCause: CAUSE_REDIRECTED CiscoCause: CAUSE_NORMALUNSPECIFIED ConnDisconnectedEv B Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED CallCtlConnDisconnectedEv B Cause: CAUSE_NORMAL CallControlCause: CAUSE_REDIRECTED CiscoCause: CAUSE_NORMALUNSPECIFIED
NEW META EVENT_________META_CALL_PROGRESS
ConnCreatedEv C Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED
NEW META EVENT_________META_CALL_PROGRESS ConnInProgressEv C Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED CallCtlConnOfferedEv C Cause: CAUSE_NORMAL CallControlCause: CAUSE_REDIRECTED CiscoCause: CAUSE_NORMALUNSPECIFIED
NEW META EVENT_________META_CALL_PROGRESS ConnAlertingEv A Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED CallCtlConnAlertingEv C Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED
NEW META EVENT_________META_CALL_PROGRESS ConnConnectedEv C Cause: CAUSE_NORMAL CiscoCause: CAUSE_NOERROR CallCtlConnEstablishedEv C Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL CiscoCause: CAUSE_NOERROR
|
Scenario Five
Application controls the device Route Point (RP) and registers the RP.
A and B are PNO and within the Cisco Unified Communications Manager cluster.
Action
|
Event
|
Fields
|
Call arrives at RP
|
RouteEvent
|
State = ROUTE getCurrentRouteAddress () = RP getCallingAddress () = A getCallingTerminal () = SEPA (Terminal associated with A)
|
Application invokes
selectRoute(routeselected[], callingsearchspace, modifiyingcallingnumber[], preferredOriginalCdNumber[], preferredOriginalCdOption[], facCode[], cmcCode[]) where routeSelected[] = B callingSearchSpace = CiscoRouteSession.DEFAULT_SEARCH_SPACE modifyingCgNumber = null, preferredOriginalCdNumber = null, preferredOriginalCdOption = CiscoRouteSession.DONOT_RESET_ORIGINALCALLED, facCode[] = "facCode for B" cmcCode[] = "cmcCode for B"
|
RouteUsedEvent
|
State = ROUTE_USED getCallingAddress () = A getCallingTerminal () = SEPA (Terminal associated with A) getRouteUsed () = B
|
Application invokes
endRoute (ERROR_NONE)
|
RouteEndEvent
|
State = ROUTE_END getRouteAddress () = RP
|
Super Provider Message Flow
The application tries to create Terminal for CTIPort1 that has Addresses 2000 and 2001. The following events get sent to the application.
No.
|
Action
|
Event
|
1
|
Application invokes CiscoProvider.CreateTerminal(CTIPort1) where CiscoProviderCapabilities. canObserveAnyTerminal() returns TRUE.
|
JTAPI would return CiscoTerminal object and the following events get sent:
CiscoTermCreatedEv CTIPort1<--------------- CiscoAddrCreated 2000<------------------------ CiscoAddrCreated 2001<-------------------------
|
2
|
If the application already has a terminal where the 2001 address already exists, that is, 2001 is a SharedLine Address.
Now, the application invokes CiscoProvider.CreateTerminal(CTIPort1)
|
JTAPI would return CiscoTerminal object and the following events get sent
CiscoTermCreatedEv CTIPort1<---------------- CiscoAddrCreated 2000<------------------------ CiscoAddrAddedToTerminalEv 2001<--------
|
3
|
Application invokes
CiscoProvider. CreateTerminal(CTIPortX) where CTIPortX does not exist in Cisco Unified Communications Manager cluster.
|
JTAPI would throw an exception: InvalidArgumentException
|
4
|
Application invokes
CiscoProvider. CreateTerminal(CTIPort1) where CiscoProviderCapabilities.canObserve AnyTerminal() returns FALSE.
|
JTAPI would throw an exception: PrivilegeViolationException
|
SuperProvider and Change Notification Enhancements Use Cases
New events have been added to JTAPI, which will be sent to applications in order to handle new failover scenario and change notification. This enhances JTAPI to handle failover scenarios and the time required to shift between Superprovider and normal user modes.
Scenario One
Superprovider user opens provider and opens a few devices in Superprovider mode which are not in control list. From admin pages, Superprovider privilege is removed.
Application receives CiscoProviderCapabilityChangedEvent event. JTAPI sends CiscoTermRemovedEv all the devices which are opened / acquired and are not in the control list. JTAPI will send provider OOS to application, CiscoTermRemovedEv to devices not in control list and will reopen connection to CTI. When connect succeeds, JTAPI will send provider in service event to the application. Else, it will close the provider.
Scenario Two
Normal user opens provider and opens a few devices in control list. From admin pages, Superprovider privilege is added to the user.
Application receives CiscoProviderCapabilityChangedEvent event. User will now be able to acquire/open devices not in its control list.
Scenario Three
Normal user opens provider and opens a few park DNs. From admin pages, park DN monitor privilege is removed for the user.
Application receives CiscoProviderCapabilityChangedEvent event. JTAPI will cleanup all park DN addresses.
Scenario Four
Normal user opens provider. From admin pages, park DN monitor privilege is added for the user.
Application receives CiscoProviderCapabilityChangedEvent event. Application registers the park DN monitoring feature and is able to monitor park DN.
Scenario Five
Normal user opens provider. From admin pages, "modify calling party" privilege is removed for the user.
Application receives CiscoProviderCapabilityChangedEvent event. Application is not able to change the calling party number during redirect. JTAPI will throw error if application tries to do this.
Scenario Six
Normal user opens provider. From admin pages, "modify calling party" privilege is added for the user.
Application receives CiscoProviderCapabilityChangedEvent event. Application is able to change the calling party number in a call during redirect.
Scenario Seven
Superprovider user opens provider and acquires a device not in control list. From admin pages, the device is deleted.
Application receives CiscoTermRemovedEv event. Device is closed from JTAPI perspective.
QSIG Path Replacement
The following table shows the JTAPI events that are delivered to applications when calls between PBXs that are connected by Q.Signaling (QSIG) trunks are transferred and forwarded. This table also shows the events that are delivered to applications when the real-time path (RTP) is optimized by the QSIG Path Replacement feature.
Calls going out on a QSIG trunk may not have a connection for the far end if any translation pattern is changing the pattern. In other words, when the application sees two calls in the trombone case, B may not serve as the common connection on the calls.
No.
|
Action
|
Event
|
1
|
A registered with CM1, B is registered with CM2, and C registered with CM3.
A calls B (GC1); B transfers the call to C. The application is monitors C. The PR feature replaces the path after the call gets connected to C.
The same action applies to scenarios that involve call forward at B. (The called party transfers the call.)
|
These events get delivered to applications:
CallCtrlConnectionEstablishedEv A
CallCtrlConnectionDisConnectEv B
OpenLogicalChannelEvent if C is a CTI device (Dynamically registered CTIPorts and RP)
|
2
|
A registered with CM1, B registered with CM2, and C registered with CM3. B calls C; C answers; B transfers the call to A. A answers. The application is monitors only C. (The calling party transfers the call.)
|
In this case, both A are C represent called parties when transfer completes. After the call is answered, PR replaces the path. In this case, A and C represent IP phones; the display will be updated as a part of PR feature operation, that makes either A or C as calling.
JTAPI events: GC1: CallCtlConnEstablishedEv A GC1: CallCtlConnDisconnectedEv B
|
3
|
3. Trombone case: A registered to CM1, B registered to CM2, and C registered to CM1. A calls B (GC1); B answers and transfers the call to C (GC2). Path replacement connects A and C bypassing CM2. The application observes both A and C. (The called party transfers the call.)
|
For GC1 Call Observer:
GC1: CallCtlConnEstablishedEv C
GC1: CallCtlConnDisconnected B
Before the PR feature replaces the path, the application sees two calls: GC1 with connections to A and C (external) and GC2 with connections to C and A (external).
When the PR feature replaces the path, either GC1 changes GC2, or GC2 changes to GC1.
Assuming A's GCID changes from GC1 to GC2:
GC1: CiscoCallChangedEv (oldGCID=GC1,newGCID=GC2)
GC1: CallCtlConnDisconnected for A
GC1: CallCtlConnDisconnected for C
GC1: CallInValid
GC2: TermConnTalkingEvent for TerminalA cause= CAUSE_QSIG_PR
|
4
|
Trombone case: A registered to CM1, B registered to CM2, and C registered to CM1. B calls A and transfers the call to C. Path replacement connects A and C, bypassing CM2. Application observes both A and C. (The calling party transfers the call.)
|
Before the PR feature replaces the path, the application will see two calls: GC1 with connections to A and B (external) and GC2 with connections to C and B (external). In this case, the application will not see any transfer start events.
When PR feature replaces the path, it updates the display of A and C and path gets replaced, resulting in a GCID change. Assuming A's GCID is changed and made the calling party, the following JTAPI events occur:
GC1: CiscoCallChangedEv (GC1 to GC2)
GC1: CallCtlConnDisconnected for A
GC1: CallCtlConnDisconnected for C
GC1: CallInValid
GC2: ConnCreatedEv A
GC2: ConnConnectedEv A
GC2: TermConnTalkingEvent for TerminalA cause= CAUSE_QSIG_PR
|
5
|
A registered to CM1, B registered to CM2, and C registered to CM1. A calls B; B transfers the call to C. C answers and before path replacement completes, C invokes a feature (park, redirect, and so on).
|
Path replacement gets abandoned.
|
6
|
In some conditions, call processing ignores feature requests (redirect, park, transfer, and so on). This happens when a setup request is sent out, and the local CM is waiting for connect from the other end.
|
JTAPI:
Exception will be thrown from JTAPI for feature requests.
|
7
|
In some cases, the application could receive dead air when CM goes down when the PR feature is trying to switch the RTP path. This could happen to a previously connected call.
|
No events
JTAPI Apps: Hang up the call
|
Device State Server
Partition Support
Since the address hashing mechanism in JTAPI has changed, this feature is expected to have performance degradation in address lookup time and during load tests.
Using getPartition() API
The example given below illustrates how getPartition(), will be used by JTAPI and applications, to differentiate between addresses having same DN but belonging to different partitions.
Example A-1 Using getPartition() API
In this case, there are three addresses which belong to three different partitions: A(2001, P1), B(2001, P2) and C(2001, P3), where 2001 indicates DN and P1, P2, and P3 denote different partitions.
When JTAPI calls provider.getAddress("2001"), the provider object will return an array of three address objects containing A, B and C, since all of them have the same DN.
The application and JTAPI will distinguish between the three addresses by using the getPartition() method of the address object.
Using getAddress (String number, String partition)
Consider the example shown below to see how JTAPI will use the getAddress (String number, String partition) API to retrieve the address object corresponding to a particular DN and partition when there are multiple addresses with same DN and different partitions.
Example A-2 Using getAddress (String number, String partition)
In this case, there are three addresses which belong to three different partitions. Let us denote them by A(2001, P1), B(2001, P2) and C(2001, P3), where 2001, indicates DN and P1,P2,P3 denote different partitions.
When JTAPI calls provider.getAddress("2001", "P1"), the provider object will return the address object which has the same DN i.e. 2001 and the same partition info, that is P1-as provided in the API. In this case, the address object A will be returned to the application.
Scenario of Simple Call
Consider the following scenario where A calls B. A has DN 1000 and calls B which also has DN 1000. A belongs to partition P1 and B belongs to partition P2. The following diagram illustrates the various events and the results of API calls pertaining to this scenario, which are relevant to partition support feature.
Example A-3 Simple Call Scenario
Park DN
Park DNs are also treated as addresses in JTAPI. Hence, the same treatment given to normal DN is also given to park DN. The following message flow illustrates how an application will use park DN partition information in a call where park DNs are involved.
Example A-4 Park DN Scenario
When the application is monitoring park DN, it is possible to have the park DN to be the same as a regular DN (while both belong to different partitions).
In this case, C is a park DN having same DN value as A and B while belonging to a different partition.
A receives a call and parks the call at C. B unparks the call. While the call is parked, and unparked, CiscoProvCallParkEv is generated. The API
getParkingPartyPartition(), getParkedPartyPartition() and getParkPartyPartition() return the associated address objects as shown in the figure.
Partition Change
Partition attribute is similar to the DN attribute of an address. Hence, whenever the partition attribute changes, the address object has to be destroyed and recreated. When the partition information of an address is changed, JTAPI will be restarted during which the current address objects will be deleted and new address objects will be created, reflecting the changed partition information.
Example A-5 Change in Partition
When the partition information of an address is changed, the address object will be destroyed and a new address object will be created.
The new address object will have the new partition information.
In the example given, Address A's partition string was changed to P4. Hence, the current address object of A will be deleted and a new address object will be created.
A query on the old address object using A.getPartition() will retrieve "P1", while the same query on the new object will return "P4".
When the address partition changes, applications should query the address objects to update their partition information.
JTAPI Partition Support
The common assumption for all of the following use cases is that CTI provides partition information for all the lines which the JTAPI opens in the response message and JTAPI stores the partition information for every address it maintains.
S.No.
|
Pre-Condition
|
Scenario
|
Expected Behavior
|
Result
|
1
|
A and B are two addresses in the same cluster with same DN and different partitions (P1, P2) and in same cluster. A calls B. CSS of A has B's partition in it first.
|
Calls between addresses with same DN in different device but different partitions should go through.
|
Two address objects are created, one for A and one for B. All the appropriate call related events are delivered to both the addresses.
|
Call is established between A and B
|
2
|
A and B are two addresses with same DN in same device but different partitions (P1, P2) and in same cluster. A calls B. CSS of A has B's partition in it first.
|
Calls between addresses with same DN in same device but different partitions should go through.
|
Two address objects are created, one for A and one for B. All the appropriate call related events are delivered to both the addresses.
|
Call is established between A and B.
|
3
|
A, B, and C are three different addresses with different DN. (P1, P2, P3). A park DN is configured with same DN as C and different partition (P4).
|
A calls B. B parks the call. C unparks the call from a park DN which is same as C's DN.
|
JTAPI should allow C to unpark the call from park DN.
|
C is successfully able to unpark the call from park DN.
|
4
|
A, B, and C are three different addresses having the same DN and different partitions (P1, P2, P3). A park DN is configured with same DN but belonging to a different partition (P4)
|
A calls B, B parks call at park DN. C unparks the call.
|
JTAPI should allow C to unpark the call from park DN.
|
A is able to call B. B should be able to park the call at the park DN.
C should be able to pick up the call.
|
5
|
A, B, and C are three different addresses with same DN and different partitions (P1, P2, and P3)
|
JTAPI calls getPartitionAddress(DN of A).
|
Three address objects are returned each corresponding to A, B and C.
|
JTAPI maintains the address objects based on partition info and DN.
|
6
|
A and B are addresses with same DN but belong to different partitions (P1, P2).
|
Application calls getPartition() on the address objects of A and B.
|
|
Partition strings of the addresses are returned correctly.
|
7
|
A and B are two different addresses (different DNs) belonging to different partitions. A and B are in the control list of the same user. Provider open is completed and the lines are opened.
|
JTAPI supports old API to open lines when DN is different. There will be no change in behavior.
|
Lines A and B will be opened, but since they have different DN, user need not specify the partition info. DN alone is sufficient to open the lines, but users can also give partition info and both modes of opening lines will be supported by JTAPI.
|
Address objects for A and B are created successfully.
|
8
|
A is an address in the control list of user and is opened by the user. From the CM admin page the partition information of A is changed. The device is restarted after this.
|
Partition information of a DN is changed. JTAPI should reflect new partition information.
|
JTAPI will delete the current address object and create a new address object for A when it comes in service again. By querying the partition info of this address object, user should get changed partition info.
|
New partition information is reflected in the new address object.
|
Hairpin Support
S.No.
|
Pre-Condition
|
Use Case
|
Expected Behavior
|
Result
|
1
|
IP Phones A and C are in same cluster, IP phone B is in another cluster. JTAPI observes A and C. Gateway does not pass new party information to each other. There will be no transfer start and end events as transfer controller is not a controlled device.
|
A calls B via gateway. B transfers call to C via gateway. B completes the transfer and goes out of scenario. Now IP Phones A and C are connected
|
At A: It is connected to B. A's type is CiscoAddress.Internal B's type is CiscoAddress.External At C: It is connected to B. C's type is CiscoAddress.Internal B's type is CiscoAddress.External
|
A and C are connected.
|
2
|
IP Phones A and C are in same cluster, IP phone B is in another cluster. JTAPI observes A and C. Gateway is able to pass new party information to each other.
|
A calls B via gateway. B transfers call to C via gateway. B completes the transfer and goes out of scenario. Now IP Phones A and C are connected.
|
At A: It is connected to C. A's type is CiscoAddress.Internal C's type is CiscoAddress.External At C: It is connected to A. C's type is CiscoAddress.Internal A's type is CiscoAddress.External
|
A and C are connected.
|
3
|
IP Phones A and B are in same cluster, IP phone C is in another cluster. JTAPI observes A and B.
|
A calls B. B does a conference call to C via gateway. B completes the conference and all A,B and C are in conference.
|
At A and B, ConferenceCallStateChanged event has participantInfo with following types: A: CiscoAddress.Internal B: CiscoAddress.Internal C: CiscoAddress.External
|
A, B and C are in conference call.
|
4
|
IP Phones A and B are in same cluster, IP phone C is in another cluster. JTAPI observes A,B and C.
|
A calls B. B does a conference call to C via gateway. B completes the conference and all A,B and C are in conference.
|
At A and B, ConferenceCallStateChanged event has participantInfo with following types: A: CiscoAddress.Internal B: CiscoAddress.Internal C: CiscoAddress.External
|
A, B and C are in conference call.
|
5
|
IP Phones A, B, C are in same cluster, IP phone D is in another cluster. JTAPI observes A, B and C. Gateway is able to pass new party information to each other.
|
A calls B. B does a conference call to D via gateway. D transfers the call to C. B completes the conference and all A,B and C are in conference.
|
At A and B, ConferenceCallStateChanged event has participantInfo with following types: A: CiscoAddress.Internal B: CiscoAddress.Internal C: CiscoAddress.External
|
A, B and C are in conference call.
|
6
|
IP Phones A, B, C are in same cluster, IP phone D is in another cluster. JTAPI observes A, B and C. Gateway does not pass new party information to each other.
|
A calls B. B does a conference call to D via gateway. D transfers the call to C. B completes the conference and all A,B and C are in conference.
|
At A and B, ConferenceCallStateChanged event has participantInfo with following types: A: CiscoAddress.Internal B: CiscoAddress.Internal D: CiscoAddress.External
|
A, B and C are in conference call.
|
7
|
IP Phones A and C are in same cluster, IP phone B is in another cluster. JTAPI observes A and C.
|
A calls B via gateway. B redirects call to C. Now IP Phones A and C are connected.
|
At A: It is connected to C. A's type is CiscoAddress.Internal C's type is CiscoAddress.External At C: It is connected to A. C's type is CiscoAddress.Internal A's type is CiscoAddress.External
|
A and C are connected.
|
QoS Support
Figure A-1 Call Flow Diagram for QoS Support
JTAPI QoS
For QoS to work in Windows, complete the following steps:
Step 1
Start Registry Editor (Regedt32.exe).
Step 2
Go to the following key:
HKEY_LOCAL_ MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\
Note
The registry key is one path.
Step 3
On the Edit menu, click Add Value.
Step 4
Type DisableUserTOSSetting.
Step 5
Click REG_DWORD in the Data Type box.
Step 6
Click OK.
Step 7
Enter 0 in the prompt box.
Step 8
Quit the Registry Editor.
Step 9
Restart the computer.
For more information on this see http://support.microsoft.com/default.aspx?scid=kb;en-us;248611
Table A-1 Use Cases for JTAPI QoS
Scenario
|
JTAPI Behavior
|
Application uses the JTAPI getPrecedenceValue() API to query for the new DSCP value, in CiscoRTPOutputStartedEvent.
|
JTAPI returns the DSCP value received from CTI in StartTransmissionEvent to the application.
|
Application uses the JTAPI getAppDSCPValue() API to query for the new DSCP value, when it gets ProviderInServiceEvent.
|
JTAPI returns the DSCP value received from CTI in ProviderOpenCompletedEvent to the application.
|
TLS Security
Message flow for updating certificate and establishing TLS certificate is illustrated in Figure A-2 and Figure A-3.
Figure A-2 CTI/API Security Approach
Figure A-3 CTI/API Security Approach (continued)
SRTP Key Material
If this feature is enabled, it is expected to degrade the performance of Cisco Unified JTAPI. Performance degradation is because of encrypted signaling between CTI and JTAPI and also because of encrypted media between end points.
Scenario One
Action
|
Event
|
App adds CallObserver on an Address 1 and initiates a call to address2 and involves in secure media conversation.
If user is authorized, then CiscoRTPInputKeyEv and CiscoRTPOutputKeyEv contain key material.
|
CiscoRTPInputKeyEv CiscoRTPInputStartedEv CiscoRTPOutputKeyEv CiscoRTPOutputStartedEv
|
Scenario Two
Action
|
Event
|
Application adds TerminalObserver by enabling snapshotEnabled filter. Device is already in a secure call and queries invokes CiscoTerminal.createSnapshot ()
|
CiscoTermSnapshotEv using which applications can query getCiscoMediaCallSecurity () to find out if a call is secured or not.
|
Scenario Three
Action
|
Response
|
Application does not have a TLS link and tries to register with secure media. CiscoMediaTerminal.register (ipAddr, portNum, mediaCaps, algorithm)
|
PrivilegeViolationException is thrown to the application
|
Application has a secure media and registers CiscoMediaTerminal.register (ipAddr, portNum, mediaCaps, algorithm)
|
Request is successful
|
Device and Line Restriction
S.No
|
Scenario
|
Events
|
1
|
Application has Devices T1, T2, T3 whose lines are A1, A2, A3 in the control list. T1 and A3 is added into the restricted list. Application opens the provider
Application queries for is Restricted on T1,T2, T3
Application queries for is Restricted on Address A1, A2, A3
Application tries to addObserver and addCallObserver on T1,T2,T3, A1,A2,A3
|
CiscoTerminal.isRestricted() returns true for T1 and false for T2 and T3
CiscoAddress.isRestricted() returns true for A1, A3, false for A2.
CiscoAddress.getRestrictedAddrTerminals() on A1, A3 returns T1, T3 respectively, returns null for A2.
addObserver and addCallObserver fails for T1, A1, A3. For T3 observer is added, but no events are received on A3. For A2, application will be able to add observers successfully and events will be received
|
2
|
Application has Devices T1, T2, T3 whose lines are A1, A2, A3 in the control list.
Application opens the provider and adds observer on all terminals and addresses.
T1 and A2 are added to the restricted list.
T1 and L2 are removed from restricted list
|
CiscoTermRestrictedEv for T1 CiscoAddrRestrictedEv for L1 CiscoAddrRestrictedEv for A2 sent to providerObserver.
CiscoTermOutOfServiceEv for T1 CiscoAddrOutOfServiceEv for L1 CiscoAddrOutOfServiceEv for A2
CiscoTermActivatedEv for T1 and CiscoAddrActivatedEv for A1 CiscoAddrActivatedEv for A2 sent to providerObserver. CiscoTermInServiceEv for T1and CiscoAddrInServiceEv for A1 CiscoAddrInServiceEv for A2 sent to terminal and address observers.
|
3
|
Application has Devices T1, T2, T3 whose lines are A1, A1, A2 in the control list. A1 is the shared line on T1 and T2
Application opens provider and adds observer on all terminals/addresses
T1 is added into the restricted list.
T1 is removed from the restricted list
|
Application will see CiscoTermRestrictedEv for T1 and CiscoAddrRestrictedOnTerminalEv which contains getAddress is L1 and getTerminal as T1. Application will also see CiscoTermOutOfServiceEv for T1 and CiscoAddrOutOfService for A1/T1
CiscoTermActivatedEv for T1 CiscoAddrActivatedEv for L1 CiscoTermInServiceEv for T1 CiscoAddrInServiceEv for A1/T1
|
4
|
Application has Devices T1, T2, T3 whose lines are A1, A1, A1 in the control list. A1 is the shared line on T1, T2 and T3
Application opens the provider and adds observer on all terminals and addresses
A1 on T1 is added to the restricted list
A1 on T2 is added to the restricted list
A1 on T3 is added to the restricted list
A1 on T1 is removed from the restricted list
A1 on T2 is removed from the restricted list
A1 on T3 is removed from the restricted list
|
CiscoAddrRestrictedOnTerminalEv for A1/T1 CiscoAddrOutOfServiceEv for A1/T1
CiscoAddrRestrictedOnTerminalEv for A1/T2 CiscoAddrOutOfServiceEv for A1/T2
CiscoAddrRestrictedEv for A1 CiscoAddrOutOfServiceEv for A1/T3
CiscoAddrActivatedOnTerminalEv for A1/T1 CiscoAddrInServiceEv for A1/T1
CiscoAddrActivatedOnTerminalEv for A1/T2 CiscoAddrInServiceEv for A1/T2
CiscoAddrActivatedEv for A1 CiscoAddrInServiceEv for A1/T3
|
5
|
Application has Devices T1, T2, T3 whose lines are A1, A2, A3 in the control list.
Application opens the provider and adds observer on all terminals and addresses. A1 is involved in a call with party X.
A1 is added into the restricted list.
|
CiscoAddrRestrictedEv for A1 CiscoAddrOutOfServiceEv for A1
ConnDisconnectedEv CallCtlConnDisconnectedEv TermConnDroppedEv CallCtlConnDroppedEv CallInvalidEv
|
SIP Support
S.No
|
Scenario
|
Events
|
1
|
External SIP phone (external@someserver.com) calls A, A is monitored by application.
Assuming external sip phone uses uri and not DN.
|
Event delivered to call observer on A
CallActiveEv ConnCreatedEv A ConnCreatedEv unknown
getCurrentCallingPartyInfo().geUrlInfo().getUser() returns external.
getCurrentCallingPartyInfo().geUrlInfo().getHost() returns someserver.com
getCurrentCallingPartyInfo().geUrlInfo().getUrlType() returns SIP_URL_TYPE
|
2
|
7970 runs SIP protocol with 2 max calls set. 3rd call comes in with GCID=GCID3
|
GCID3 CallActiveEv GCID3 ConnCreatedEv A GCID3 ConnFailedEv A GCID3 callInvalidEv
|
3
|
7960 running SIP is included in the control list. Applications add callobserver on the terminal
|
Exception is thrown to addobserver exception. TerminalRestrictedEv will be delivered if the status changed.
|
SIP REPLACE
For the JTAPI events in the scenario described below, we have not shown Terminal events. It will be sent for all the observed Terminals as usual. Also events are shown with the assumption that only A, B, or C is observed; events would vary if combination of A, B, or C is observed.
SN
|
Scenario
|
Events at A
|
Events at B
|
Events at C
|
1.
|
REPLACE with INVITE a confirmed Dialog:
A (Dialog1) is in Call with B(Dialog2)(GC1). C sends INVITE with REPLACE Dialog2(GC2). After replace is completed, A(Dialog1) and C(Dialog3) are in the Call
|
GCID and CPIC with reason REPLACES, Cgpn=C, Cdpn=A, Ocdpn=A, Lrp=B
JTAPI Events:
CiscoCallChangedEv-(GC1-GC2) ConnDisconnectedEv -B-GC1 CallCtlConnDisconnected Ev-B-GC1 ConnDisconnectedEv -A-GC1 CallCtlConnDisconnected Ev-A-GC1 CallInvalid-GC1
CallActive-CG2 ConnCreatedEv -C-GC2 ConnConnectedEv -C-GC2 CallCtlConnEstablishedEv-C-CG2
ConnCreatedEv -A -GC2 ConnConnectedEv -A-GC2 CallCtlConnEstablishedEv-A-CG2
Cause =CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=C, Called=A, CurrentCalling=C, CurrentCalled=A, LastRedirecting=B
|
CSCE IDLE with reason REPLACES
JTAPI Events:
ConnDisconnectedEv -A -GC1 CallCtlConnDisconnected Ev-A-GC1
ConnDisconnectedEv -B-GC1 CallCtlConnDisconnected Ev-B-GC1
CallInvalidEv-GC1
CAUSE_NORMAL
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
|
NewCall/CSCE-Dialing/ CSCE-Connected with Cgpn=C, Cdpn=A, Ocdpn=B, Lrp=B
JTAPI Events:
CallActiveEv -GC2 ConnCreatedEv -C -GC2 ConnConnectedEv-C--GC2 CallCtlConnEstablishedEv -C-GC2
ConnCreatedEv -A-GC2 ConnConnectedEv A--GC2 CallCtlConnEstablishedEv -A--GC2
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=C, Called=A, CurrentCalling=C, CurrentCalled=A, LastRedirecting=B
|
2.
|
REPLACE with INVITE an early Dialog:
A (Dailog1) is in Call with B(Dialog2)(GC1), B is ringing. C sends INVITE with REPLACE Dialog2(GC2). After replace completed, A(Dialog1) and C(Dialog3) in the Call
|
GCID and CPIC with reason REPLACES, Cgpn=C, Cdpn=A, Ocdpn=A, Lrp=B
JTAPI Events CiscoCallChangedEv-(GC1-GC2) ConnDisconnectedEv -B-GC1 CallCtlConnDisconnected Ev-B-GC1 ConnDisconnectedEv -A-GC1 CallCtlConnDisconnected Ev-A-GC1 CallInvalid-GC1
CallActive-CG2 ConnCreatedEv -C-GC2 ConnConnectedEv -C-GC2 CallCtlConnEstablishedEv-C-CG2
ConnCreatedEv -A -GC2 ConnConnectedEv -A-GC2 CallCtlConnEstablishedEv-A-CG2
Cause =CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=C, Called=A, CurrentCalling=C, CurrentCalled=A, LastRedirecting=B
|
CSCE-Idle with reason REPLACES
JTAPI Events:
ConnDisconnectedEv -A -GC1 CallCtlConnDisconnected Ev-A-GC1
ConnDisconnectedEv -B-GC1 CallCtlConnDisconnected Ev-B-GC1
CallInvalidEv-GC1
CAUSE_NORMAL
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
|
NewCall/CSCE-Dialing/CSCE-Connected, with Cgpn=C, Ccdpn=A, Ocdpn=A, Lrp=B
JTAPI Events:
CallActiveEv -GC2 ConnCreatedEv -C -GC2 ConnConnectedEv-C--GC2 CallCtlConnEstablishedEv-C-GC2
ConnCreatedEv -A-GC2 ConnConnectedEv A--GC2 CallCtlConnEstablishedEv-A--GC2
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=C, Called=A, CurrentCalling=C, CurrentCalled=A, LastRedirecting=B
|
3.
|
REPLACE with INVITE an early Dialog:
A (Dialog1) is in Call with B(Dialog2) (GC1), B is ringing. C sends invite with replace Dialog-X (GC2)
|
|
|
NewCall/CSCE_Dialing/ reason REPLACES CSCE-Disconnected with reason REPLACES
JTAPI Events:
CallActiveEv -GC2 ConnCreatedEv -C-GC2 ConnConnectedEv -C-GC2 CallCtlConnEstablishedEv-C--GC2
ConnFailedEv -C--GC2 ConnConnectedEv -C--GC2 CallCtlConnEstablishedEv-A--GC2
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=C, Called=, CurrentCalling=C, CurrentCalled=, LastRedirecting=
|
4.
|
REFER request with REPLACE Dialog:
When REPLACE Dialog is in a Cisco Unified Communications Manager Cluster.
A is in call with B(REFEREE) Dialog1, and Dialog2
A is in Call with C(REFER TO TARGET) Dialog3 and Dialog4
SIP-UA A send REFER B on Dialog1 to C with REPLACES Dialog3
|
TransferStartEv
CSCE-Idle at Dialog1 with reason TRANSFER and at Dialog3 with reason TRANSFER
TransferEndEv
JTAPI Event:
Regular TransferEvent
|
TransterStartEv
CPIC with reason TRANSFER and Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
TransferEndEv
JTAPI Event:
Regular TransferEvents
|
TransferStartEv
GCID with reason TRANSFER and Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
TransferEndEv
JTAPI Event:
Regular TransferEvents
|
5.
|
REFER request with REPLACE Dialog:
When REPLACE Dialog is outside Cisco Unified Communications Manager Cluster
SIP-UA A is in call with B, Dialog1 and Dialog2(GC1)
SIP-UA A is in call with SIP-UA C Dialog3
SIP-UA A sends REFER B on Dialog1 to SIP-UA C with REPLACES Dialog3
|
No Events
|
CPIC with reason REFER and Cgpn=B, Cdpn=C, Lrp=A OCdpn=B
JTAPI Events:
ConnDisconnectedEv -A-GC1 CallCtlConnDisconnectedEv-A-GC1
ConnCreatedEv - C -GC1 ConnConnectedEv -C-GC1 CallCtlConnEstablishedEv -C-GC1
Cause = CAUSE_NORMAL CiscoFeatureReason=REASON_REFER
JTAPI CallInfo:
Calling=A, Called=B, CurrentCalling=B, CurrentCalled=C, LastRedirecting=A
|
No Events
|
6.
|
REFER request with REPLACE Dialog:
When A is outside a Cisco Unified Communications Manager Cluster
SIP-UA A is in call with B, Dialog1 and Dialog2
SIP-UA A is in call with C Dialog3 and Dialog4
SIP-UA A sends REFER B on Dialog1 to C with REPLACES Dialog3
|
No Events
|
CPIC with reason REPLACES and Cgpn=B, Cdpn=C, Lrp=A, OCdpn=C
JTAPI Events:
ConnDisconnectedEv -A-GC1 CallCtlConnDisconnected Ev-A-GC1
ConnCreatedEv - C- GC1 ConnConnectedEv -C -GC1 CallCtlConnEstablishedEv -C-GC1
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=A, Called=B, CurrentCalling=B, CurrentCalled=C, LastRedirecting=A
|
GCID with reason REPLACES and Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
JTAPI Events:
CiscoCallChangedEv(GC2-GC1) ConnDisconnectedEv -A-GC2 CallCtlConnDisconnected Ev-A-GC2
ConnDisconnectedEv -C-GC2 CallCtlConnDisconnected Ev-C-GC2 CallInvalid-GC2
CallActive-CG1 ConnCreatedEv -B -GC1 ConnConnectedEv -B-GC1 CallCtlConnEstablishedEv-B-CG1
ConnCreatedEv -C-GC1 ConnConnectedEv -C-GC1 CallCtlConnEstablishedEv-C-CG1
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=A, Called=B, CurrentCalling=B, CurrentCalled=C, LastRedirecting=A
|
7.
|
REFER request with REPLACE Dialog:
When REPLACE Dialog is in a Cisco Unified Communications Manager Cluster.
A is in call with B(REFEREE) Dailog1, and Dialog2 (GC1)
D is in Call with C(REFER TO TARGET) Dialog3 and Dialog4 (GC2)
A sends REFER B on Dialog1 to C with REPLACES Dialog3
B and C in final call.
|
CSCE-Idle at Dialog1 with reason REFER and at Dialog3 with reason REPLACES
JTAPI Events:
ConnDisconnectedEv -A -GC1 CallCtlConnDisconnected Ev-A-GC1
ConnDisconnectedEv -B-GC1 CallCtlConnDisconnected Ev-B-GC1 CallInvalidEv-GC1
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REFER
Event at D:
ConnDisconnectedEv -D -GC2 CallCtlConnDisconnectedEv-D-GC2
ConnDisconnectedEv -C-GC2 CallCtlConnDisconnectedEv-C-GC2 CallInvalidEv-GC2
Cause = CAUSE_NORMAL CiscoFeatureReason=REASON_REPLACES
|
CPIC with reason REPLACES and Cgpn=B, Cdpn=C, Lrp=D OCdpn=C
JTAPI Events:
ConnDisconnectedEv -A-GC1 CallCtlConnDisconnected Ev-A-GC1
ConnCreatedEv -C-GC1 ConnConnectedEv -C -GC1 CallCtlConnEstablishedEv-C-GC1
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=A, Called=B, CurrentCalling=B, CurrentCalled=C, LastRedirecting=D
|
GCID with reason REPLACES and Cgpn=B, Cdpn=C, Lrp=D, OCdpn=C
JTAPI Events:
CiscoCallChangedEv(GC2-GC1) ConnDisconnectedEv -D CallCtlConnDisconnected Ev-D
ConnDisconnectedEv -C CallCtlConnDisconnected Ev-C CallInvalid-GC2
CallActive-CG1 ConnCreatedEv -C-GC1 ConnConnectedEv -C-GC1 CallCtlConnEstablishedEv-C-CG1
ConnCreatedEv -B -GC1 ConnConnectedEv -B-GC1 CallCtlConnEstablishedEv-B-CG2
Cause = CAUSE_NORMAL CiscoFeatureReason= REASON_REPLACES
JTAPI CallInfo:
Calling=C, Called=C, CurrentCalling=B, CurrentCalled=C, LastRedirecting=D
|
SIP REFER
The following section describes the scenarios that might be encountered during a SIP REFER. There are two categories of REFER scenarios: IN-Dialog and OutOfDialog.
IN-Dialog REFER Scenario
There are 11 scenarios (A through K) described in the sections that follow for IN-Dialog REFERs.
Scenario One
A (SIP UA in cluster/in control) is in a call with B.
A (referrer) REFERs B (Referee) to C (Refer to target), C is Ringing.
JTAPI moves A's Connect/CallControlConnection/TerminalConnection/
CallControlTerminalConnection into the "UNKNOWN" state.
CAUSE_CODE provided will be CAUSE_NORMAL, new API provides REASON_REFER.
For C a new Connect/CallControlConnection/TerminalConnection/CallControlTerminalConnection would be created.
CallInfo at B and C would be as follows:
At B: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
At C: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
JTAPI Application observing B will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
JTAPI Application observing C will see:
getCallingParty() = B
getCalledParty() = C
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
Scenario Two
A(SIP UA in cluster/in control) is in a call with B.
A(referrer) REFERs B(Referee) to C(Refer to target), C Answers the Call.
JTAPI will Disconnect/Drop A's Connect/CallControlConnection/TerminalConnection/
CallControlTerminalConnection. CAUSE_CODE provided will be CAUSE_NORMAL and the new API would provide REASON_REFER.
For C Connect/CallControlConnection/TerminalConnection/CallControlTerminalConnection will move to the Connected/Established/Active/Talking state.
CallInfo at B and C will be as follows
At B: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
At C: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
JTAPI Application observing B will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
JTAPI Application observing C will see:
getCallingParty() = B
getCalledParty() = C
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
Scenario Three
A(SIP UA inside cluster) is in a call with B.
A(referrer) REFERs B(Referee) to C(Refer to target), C is ringing but C did not answer the call and has no forward configured. Refer fails, the original call between A and B is restored.
JTAPI will Disconnect/Drop the Connection/CallControlConnection/TerminalConnection/
CallControlTerminalConnection for C. CAUSE_CODE provided will be CAUSE_NORMAL and the new API will provide REASON_REFER and move A's Connection/CallControlConnection/
TerminalConnection/CallControlTerminalConnection from the "Unknown" state to the Connected/
Established/Active/Talking state.
CallInfo at A and B will be as follows
At A: Cgpn=A, Cdpn=B, Lrp= OCdpn=B
At B: Cgpn=A, Cdpn=B, Lrp= OCdpn=B
JTAPI Application observing A will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=A
getCurrentCalledParty()=B
getLastRedirecting()= NULL
JTAPI Application observing B will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=A
getCurrentCalledParty()=B
getLastRedirecting()=NULL
Scenario Four
A(SIP UA outside cluster) is in call with B.
A(referrer) REFERs B(Referee) to C(Refer to target), C is ringing.
JTAPI will create Connection/CallControlConnection/TerminalConnection/
CallControlTerminalConnection for C and will drop A's Connection/CallControlConnection on getting CPIC at B, CAUSE_CODE provided will be CAUSE_NORMAL and the new API will provide REASON_REFER.
CallInfo at B and C will be as follows:
At B: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
At C: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
JTAPI Application observing B will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
JTAPI Application observing C will see:
getCallingParty() = B
getCalledParty() = C
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
Scenario Five
A(SIP UA outside cluster) is in a call with B.
A(referrer) refers B(Referee) to C(Refer to target), C is ringing but C did not answer the call and has no forward configured. Refer fails, the original Call between A and B is restored.
JTAPI will create Connection/CallControlConnection for A again and drops Connection/
CallControlConnection/TerminalConnection/CallControlTerminalConnection for C.
CAUSE_CODE provided will be CAUSE_NORMAL and new API will provide REASON_REFER.
CallInfo at A and B will be as follows
At A: Cgpn=A, Cdpn=B, Lrp= OCdpn=B
At B: Cgpn=A, Cdpn=B, Lrp= OCdpn=B
JTAPI Application observing A will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=A
getCurrentCalledParty()=B
getLastRedirecting()=NULL
JTAPI Application observing C will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=A
getCurrentCalledParty()=B
getLastRedirecting()=NULL
Scenario Six
A(SIP UA in cluster/in control) is in a call with B.
A(referrer) REFERs B(Referee) to C(Refer to target), C answers the call.
JTAPI moves Connection/CallControlConnection/TerminalConnection/CallControlTerminalConnection for C to the Connected/Established/Active/Talking state. CAUSE_CODE provided is CAUSE_NORMAL and the new API will provide REASON_REFER.
CallInfo at B and C will be as follows
At B: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
At C: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
JTAPI Application observing B will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
JTAPI Application observing C will see:
getCallingParty() = B
getCalledParty() = C
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
Scenario Seven
A(SIP UA in cluster/in control) is in a call with B.
A(referrer) REFERs B(Referee) to C(Refer to target), C forwardAll to D, D is ringing.
JTAPI creates Connection/CallControlConnection/TerminalConnection/CallControlTerminalConnection for D. CAUSE_CODE provided will be CAUSE_REDIRECT and the reason received from CTI would be ForwardAll.
CallInfo at B and D will be as follows
At B: Cgpn=B, Cdpn=D, Lrp=C OCdpn=C
At D: Cgpn=B, Cdpn=D, Lrp=C OCdpn=C
JTAPI Application observing B will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=B
getCurrentCalledParty()=D
getLastRedirecting()=C
JTAPI Application observing D will see:
getCallingParty() = B
getCalledParty() = D
getCurrentCallingParty()=B
getCurrentCalledParty()=D
getLastRedirecting()=C
Scenario Eight
A (SIP UA in cluster/in control) is in a call with B.
A(referrer) REFERs B(Referee) to C(Refer to target), C Redirect to D, D is ringing.
JTAPI creates Connection/CallControlConnection/TerminalConnection/CallControlTerminalConnection for D. CAUSE_CODE provided will be CAUSE_REDIRECT and the reason received from CTI in NewCallEvent at D will be Redirect.
Callinfo when Call is offered at C:
At B: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
At C: Cgpn=B, Cdpn=C, Lrp=A OCdpn=C
CallInfo in final Call:
At B: Cgpn=B, Cdpn=D, Lrp=C OCdpn=C
At D: Cgpn=B, Cdpn=D, Lrp=C OCdpn=C
JTAPI Application observing B will see in final Call:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=B
getCurrentCalledParty()=D
getLastRedirecting()=C
JTAPI Application observing D will see:
getCallingParty() = B
getCalledParty() = D
getCurrentCallingParty()=B
getCurrentCalledParty()=D
getLastRedirecting()=C
Scenario Nine
A(SIP UA in cluster/in control) is in a call with B.
B consult transfer to D, A(Referrer) REFERs B(Referee) to C(Refer to target), C is ringing,
B completes the transfer. Attempt to transfer will fail while C is ringing.
Scenario Ten
A(SIP UA in cluster/in control) is in a call with B.
B consult transfer to D, A(Referrer) REFERs B(Referee) to C(Refer to target), C answers the call.
Refer will be successful. B completes the transfer, transfer will be successful, C and D will be in call.
JTAPI Disconnect/Drops A's Connect/CallControlConnection/TerminalConnection/
CallControlTerminalConnection. CAUSE_CODE provided will be CAUSE_NORMAL and the new API will provide REASON_REFER.
For C, Connect/CallControlConnection/TerminalConnection/CallControlTerminalConnection will move to Connected/Established/Active/Talking state.
CallInfo at D and C would be as follows
At D: Cgpn= C, Cdpn=D, Lrp=B OCdpn=D
At C: Cgpn=C, Cdpn=D, Lrp=B OCdpn=D
JTAPI Application observing D will see:
getCallingParty() = B
getCalledParty() = D
getCurrentCallingParty()=C
getCurrentCalledParty()=D
getLastRedirecting()=B
JTAPI Application observing C will see:
getCallingParty() = B
getCalledParty() = C
getCurrentCallingParty()=C
getCurrentCalledParty()=D
getLastRedirecting()=B
Scenario Eleven
B is in a call with D, B consults to A(SIP UA in cluster/in control).
A(Referrer) REFERs B(Referee) to C(Refer to target), C is ringing, B completes the transfer.
REFER would fail. Call at A will be dropped, transfer is successful, D is getting RingBack, C is ringing.
JTAPI Disconnect/Drops A's Connect/CallControlConnection/TerminalConnection/
CallControlTerminalConnection. CAUSE_CODE provided will be CAUSE_NORMAL and the new API would provide REASON_REFER, Application will not know if REFER failed.
For C, Connect/CallControlConnection/TerminalConnection/CallControlTerminalConnection will move to Alerting/Alerting/Ringing/Ringing state.
CallInfo at D and C would be as follows:
At D: Cgpn= D, Cdpn=C, Lrp=B OCdpn=C
At C: Cgpn=D, Cdpn=C, Lrp=B OCdpn=C
JTAPI Application observing D will see:
getCallingParty() = B
getCalledParty() = D
getCurrentCallingParty()=D
getCurrentCalledParty()=C
getLastRedirecting()=B
JTAPI Application observing C will see:
getCallingParty() = B
getCalledParty() = C
getCurrentCallingParty()=D
getCurrentCalledParty()=C
getLastRedirecting()=B
OutOfDialog Refer
SIP-UA A REFERs B(Referee) to C (Refer To Target)
B gets newcall with Cgpn=A, Cdpn=B, Lrp=, OCdpn=B.
JTAPI Application will get CallActive, Connection, CallCtlConnection, TerminalConnecton and CallCtlTerminalConnection created for B with CAUSE_NORMAL, and the new API will return REASON_REFER.
B's Connection/CallCtlConnection, TerminalConnection/CallCtlTerminalConnection will go into the Connected/Established/Active/Talking state. JTAPI creates Connection and CallCtlConnection for A in "UNKNOWN" state based on FarEndPointType_ServerCall provided by CTI/CP.
B answers the call and is connected to A (at this point no RTPEvent will be sent).
B get CallPartyInfoChangedEv with Cgpn=B, Cdpn=C, Lrp=A, OCdpn=C, Reason=REFER.
C get NewCall offering with Cgpn=B, Cdpn=C, Lrp=A, OCdpn=C, Reason=REFER.
JTAPI Application will get Connection, CallControlConnection, TerminalConnecton and CallCtlTerminalConnection created for B with CAUSE_NORMAL, and the new API will return REASON_REFER.
C Accepts/Answers the call, B is connected to C (now Application receives RTP events).
C's Connection/CallCtlConnection, TerminalConnection/CallCtlTerminalConnection will go into the Connected/Established/Active/Talking state.
JTAPI Application observing B will see:
getCallingParty() = A
getCalledParty() = B
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
JTAPI Application observing C will see:
getCallingParty() = B
getCalledParty() = C
getCurrentCallingParty()=B
getCurrentCalledParty()=C
getLastRedirecting()=A
SIP 3XX Redirection
3XX Redirection - 302 Moved Temporarily
JTAPI application monitors 1000@ccm.cisco.com
Cisco Unified Communications Manager user1000 initiates a call to 333555@aaa.com
CTI reports NewCallNotify and CtiCallStateNotify (Dialtone/Dialing) based on INVITE.
JTAPI reports CallActiveEv and Connection and CallCtlConnection events for 1000
JTAPI reports CallCtlConnEstablishedEv
SIP proxy reports a 302 for 333555@aaa.com. Based on the 302, the Cisco Unified Communications Manager initiates a call to the first contact in the Target list based on the q value to 333777@bbb.com.
CallPartyInfoChange event is reported to application based on the SIPAlertInd from a Cisco Unified Communications Manager, if the called party information is changed.
JTAPI reports connection created events for 333777@bbb.com
CTI reports CtiCallStateNotify (Ringback) and CtiCallStateNotify (Connected).
JTAPI reports ConnAlertingEv and ConnEstablishedEv for far end.
3XX Redirection - Contact Busy
JTAPI CTI application monitors 1000@ccm.cisco.com
Cisco Unified Communications Manager user1000 initiates a call to 333555@aaa.com
CTI reports NewCallNotify and CtiCallStateNotify (Dialtone/Dialing) based on INVITE.
JTAPI reports CallActiveEv and Connection and CallCtlConnection events for 1000
CTI reports CtiCallStateNotify (Proceeding)
JTAPI reports CallCtlConnEstablishedEv
SIP proxy reports a 302 for 333555@aaa.com. Based on the 302 the Cisco Unified Communications Manager initiates a call to the first contact in the Target list based on the q value to 333777@bbb.com.
A 486 user busy response is reported by 333777@bbb.com. Based on this response the Cisco Unified Communications Manager initiates a call to 555888@cisco.com.
CallPartyInfoChange event is reported to application based on the SIPAlertInd from the Cisco Unified Communications Manager if the called party information is changed.
JTAPI reports connection created event for 555888@cisco.com.
CTI also reports CtiCallStateNotify (Ringback) and CtiCallStateNotify (Connected).
JTAPI reports CallCtlConnAlertingEv and CallCtlConnEstablishedEv for the new party
3XX Redirection - Contact Does Not Answer
JTAPI application monitors 1000@ccm.cisco.com
Cisco Unified Communications Manager user1000 initiates a call to 333555@aaa.com
CTI reports NewCallNotify and CtiCallStateNotify (Dialtone/Dialing) based on INVITE.
JTAPI reports CallActiveEv and connection and terminalConnection events for 1000
CTI reports CtiCallStateNotify (Proceeding)
JTAPI reports CallCtlConnEstablishedEv for 1000
SIP proxy reports a 302 for 333555@aaa.com. Based on the 302 the Cisco Unified Communications Manager initiates a call to the first contact in the Target list based on the q value to 333777@bbb.com. The Cisco Unified Communications Manager starts the RNAR timer.
CallPartyInfoChange event is reported to application based on the SIPAlertInd from the Cisco Unified Communications Manager if the called party information is changed.
JTAPI reports connection created events for 333777
RNAR timer expires and based on this expiration the Cisco Unified Communications Manager initiates a call to 555888@cisco.com.
CallPartyInfoChange event is reported to application based on the SIPAlertInd/CcNotifyReq from the Cisco Unified Communications Manager if the called party information is changed.
JTAPI removes connection for 333777 and creates connection for 555888
CTI also reports CtiCallStateNotify (Connected).
JTAPI reports CallCtlConnEstablishedEv for 555888
3XX Redirection - Contact Within Cisco Unified Communications Manager Cluster Configured with Call Forward
JTAPI application monitors 1000@ccm.cisco.com
Cisco Unified Communications Manager user1000 initiates a call to 333555@aaa.com
CTI reports NewCallNotify and CtiCallStateNotify (Dialtone/Dialing) based on INVITE.
JTAPI reports CallActiveEv and connection and terminalConnection events for 1000
CTI reports CtiCallStateNotify (Proceeding)
JTAPI reports CallCtlConnEstablishedEv for 1000
SIP proxy reports a 302 for 333555@aaa.com. Based on the 302 the Cisco Unified Communications Manager initiates a call to the first contact in the Target list based on the q value to 2000@ccm.cisco.com.
A 486 user busy response is reported by 2000@ccm.cisco.com. 2000 has Call Forward busy configured so the Cisco Unified Communications Manager initiates a call to 3000@ccm.cisco.com. The Cisco Unified Communications Manager also starts the RNAR timer.
CallPartyInfoChange event is reported to application based on the SIPAlertInd from the Cisco Unified Communications Manager if the called party information is changed.
JTAPI reports connection created event for 3000
3000 does not answer and RNAR timer expires and based on this expiration the Cisco Unified Communications Manager initiates a call to 555888@cisco.com.
CallPartyInfoChange event is reported to application based on the SIPAlertInd/CcNotifyReq from the Cisco Unified Communications Manager if the called party information is changed.
JTAPI destroys connection for 3000 and creates connection for 555888
CTI also reports CtiCallStateNotify (Connected).
JTAPI reports CallCtlConnEstablishedEv for 555888
3XX Redirection - Non-Available Target Member
JTAPI application monitors 1000@ccm.cisco.com
Cisco Unified Communications Manager user1000 initiates a call to 333555@aaa.com
CTI reports NewCallNotify and CtiCallStateNotify (Dialtone/Dialing) based on INVITE.
JTAPI reports CallActiveEv and connection and terminalConnection events for 1000
CTI reports CtiCallStateNotify (Proceeding)
JTAPI reports CallCtlConnEstablishedEv for 1000
SIP proxy reports a 302 for 333555@aaa.com. 302 contains target list of 1212@ccm.cisco.com and 2000@ccm.cisco.com. 1212@ccm.cisco.com is an invalid DN. The Cisco Unified Communications Manager tries to contact 1212@ccm.cisco.com first, but gets an invalid DN and so attempts to place the call to 2000@ccm.cisco.com.
CallPartyInfoChange event is reported to application based on the SIPAlertInd from the Cisco Unified Communications Manager if the called party information is changed.
JTAPI reports connection created event for 2000
CTI also reports CtiCallStateNotify (Ringback/Connected).
JTAPI reports CallCtlConnAlertingEv and CallCtlConnEstablishedEv for 2000.
Unicode Support
Unicode Display Name Scenario
Scenario
|
Events Delivered to JTAPI Applications
|
A line is configured on IP phone A with no ASCII name and a Unicode name in Japanese. IP phone B is configured with ASCII name and no Unicode name. A calls B. Only B is observed.
|
Call info should contain:
getCurrentCalledPartyDisplayName=asciiNameB getCurrentCalledPartyUnicodeDisplayName=null getCurrentCallingPartyDisplayName=null getCurrentCallingPartyUnicodeDisplayName= japaneseNameA
|
A, B and C are in conference.
|
DisplayName does not apply. Applications should consider "conference" as the called party.
|
Shared lines - A and B are shared lines with different locales. A calls C. C is unobserved.
|
Calling party Unicode display name can change between A and B.
|
GetLocale and UniCodeCapabilities of Terminal
Scenario
|
Events delivered to JTAPI applications
|
A line is configured on IP phone A with no ASCII name and Unicode name in Japanese.
Application adds TerminalObserver on the Device.
Application queries the following using CiscoTerminal.
|
CiscoTerminalInServiceEv contains getLocale = JAPANESE getSupportedEncoding= UCS2UNICODE_ENCODING
CiscoTerminal.getLocale = JAPANESE CiscoTerminal. getSupportedEncoding= UCS2UNICODE_ENCODING
|
Backward Compatibility Enhancements
This feature is not expected to change the performance or scalability of Cisco Unified Communications Manager JTAPI. There is no change in the number of events between JTAPI and CTI. For features involving GCID changes this feature introduces one extra event which should not cause any performance issues.
In all cases events listed below are delivered to call observers when only one party is in control list. TERMA indicates terminal of A.
Scenario One
A calls B, B transfers the call to C. GC1 is the call between A and B, GC2 is the consult call between B and C. Similar events are delivered for Conference and other features.
Action
|
Events
|
B completes the transfer. Events to call observer on C
|
GC2 CiscoTransferStartEv Cause: CAUSE_NORMAL Reason=REASON_TRANSFER
CallActiveEv GC1 Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
ConnCreatedEv C Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
ConnCreatedEv B Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
CiscoCallChangedEv SurvingCall=GC1, original call=GC2 CiscoCause: NORMAL Reason: REASON_TRANSFER
|
Events delivered to CallObserver of B (transfer controller)
|
ConnConnectedEv C Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
CallCtlConnEstablishedEv C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
TermConnCreatedEv TERM C Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
TermConnActiveEv TERM C Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
CallCtlTermConnTalkingEv TERM C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
ConnConnectedEv B Cause: CAUSE_NORMAL CiscoCause: CAUSE_NORMALUNSPECIFIED Reason=REASON_TRANSFER
GC2: ConnDisconnectedEv B REASON=REASON_TRANSFER Cause: CAUSE_NORMAL
GC2: ConnDisconnectedEv C REASON=REASON_TRANSFER Cause: CAUSE_NORMAL
GC2: TermConnDropped TERMB REASON=REASON_TRANSFER Cause: CAUSE_NORMAL
GC2: CalInvalid REASON=REASON_TRANSFER Cause: CAUSE_NORMAL
GC1: CallCtlTermConnHeldEv TERMB REASON=REASON_TRANSFER Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC2: ConsultCallActive REASON=NORMAL Cause: CAUSE_NEW_CALL
GC2: ConnCreatedEv B REASON=NORMAL Cause: CAUSE_NORMAL
GC2: ConnConnectedEv B REASON=NORMAL Cause: CAUSE_NORMAL
GC1: ConnDisconnectedEv B REASON=REASON_TRANSFER Cause: CAUSE_UNKNOWN
|
Events delivered to CallObserver of B (transfer controller) (continued)
|
GC1: CallCtlConnDisconnectedEv B REASON=REASON_TRANSFER Cause: CAUSE_UNKNOWN CallControlCause: CAUSE_TRANSFER
GC1: TermConnDroppedEv TERMB REASON=REASON_TRANSFER Cause: CAUSE_UNKNOWN
GC1: CallCtlTermConnDroppedEv TERMB REAASON=REASON_TRANSFER CallControlCause: CAUSE_TRANSFER
GC1: ConnDisconnectedEv A REASON=REASON_TRANSFER
GC1: CallCtlConnDisconnectedEv A REASON=REASON_TRANSFER CallControlCause: CAUSE_TRANSFER
GC1: CallInvalidEv REASON=REASON_TRANSFER
GC2: ConnDisconnectedEv C REASON=REASON_TRANSFER
GC2: CallCtlConnDisconnectedEv C REASON=REASON_TRANSFER CallControlCause: CAUSE_TRANSFER
GC2: TermConnDroppedEv TERMB REASON=REASON_TRANSFER
GC2: CallCtlTermConnDroppedEv TERMB REASON=REASON_TRANSFER CallControlCause: CAUSE_TRANSFER
GC2: ConnDisconnectedEv B REASON=REASON_TRANSFER
GC2: CallCtlConnDisconnectedEv B REASON=REASON_TRANSFER CallControlCause: CAUSE_TRANSFER
GC2: CallInvalidEv REASON=REASON_TRANSFER
GC2: CallObservationEndedEv REASON=NORMAL Cause: CAUSE_NORMAL
GC1 CiscoTransferEndEv REASON=REASON_TRANSFER Cause: CAUSE_NORMAL
GC2 CallObservationEndedEv REASON=NORMAL Cause: CAUSE_NORMAL
|
Scenario Two
A calls B, call=GC1. B parks the call at 99999. C unparks the call using call GC2.
Action
|
Events
|
Events delivered to call observer on A when call is parked.
When call is unparked using GC2
|
GC1: ConnDisconnectedEv B REASON=REASON_PARK Cause: CAUSE_NORMAL
GC1: CallCtlConnDisconnectedEv B REASON=REASON_PARK Cause: CAUSE_NORMAL CallControlCause: CAUSE_PARK
GC1: ConnCreatedEv 9999 REASON=REASON_PARK Cause: CAUSE_NORMAL
GC1: ConnInProgressEv 9999 REASON=REASON_PARK Cause: CAUSE_NORMAL
GC1: CallCtlConnQueuedEv 9999 REASON=REASON_PARK Cause: CAUSE_NORMAL CallControlCause: CAUSE_PARK
GC2: CiscoCallChangedEv Surviving= GC2 origcall= GC1 address= A REASON=REASON_UNPARK
CallActiveEv REASON=REASON_UNPARK Cause: CAUSE_NEW_CALL
GC2: ConnCreatedEv A REASON=REASON_UNPARK Cause: CAUSE_NORMAL
GC2: ConnConnectedEv A REASON=REASON_UNPARK Cause: CAUSE_NORMAL
GC2: CallCtlConnEstablishedEv A REASON=REASON_UNPARK Cause: CAUSE_NORMAL CallControlCause: CAUSE_PARK
GC2: TermConnCreatedEv TERMA REASON=REASON_UNPARK
GC2: TermConnActiveEv TERMA REASON=REASON_UNPARK Cause: CAUSE_NORMAL
GC2: CallCtlTermConnTalkingEv TERMA REASON=REASON_UNPARK Cause: CAUSE_NORMAL CallControlCause: CAUSE_PARK
|
| |
GC1: ConnDisconnectedEv 9999 REASON=REASON_UNPARK Cause: CAUSE_NORMAL
GC1: CallCtlConnDisconnectedEv 9995 REASON=REASON_UNPARK Cause: CAUSE_NORMAL CallControlCause: CAUSE_PARK
GC1: TermConnDroppedEv TERMA REASON=REASON_UNPARK Cause: CAUSE_NORMAL
GC1: CallCtlTermConnDroppedEv TERMA REASON=REASON_UNPARK Cause: CAUSE_NORMAL CallControlCause: CAUSE_PARK
GC1: ConnDisconnectedEv A REASON=REASON_UNPARK Cause: CAUSE_NORMAL
GC1: CallCtlConnDisconnectedEv A REASON=REASON_UNPARK Cause: CAUSE_NORMAL CallControlCause: CAUSE_PARK
GC1: CallInvalidEv REASON=REASON_UNPARK Cause: CAUSE_NORMAL
GC1: CallObservationEndedEv REASON=NORMAL Cause: CAUSE_NORMAL
GC2: ConnCreatedEv C REASON=REASON_UNPARK Cause: CAUSE_NORMAL
GC2: ConnConnectedEv C REASON=UNPARK Cause: CAUSE_NORMAL
GC2: CallCtlConnEstablishedEv C REASON=UNPARK Cause: CAUSE_NORMAL CallControlCause: CAUSE_PARK
|
Scenario Three
A calls B, B has forward no answer to C. B does not answer and call is offered to C.
Action
|
Events
|
Events delivered to call observer on A.
|
GC1: CallActiveEv REASON=NORMAL Cause: CAUSE_NEW_CALL
GC1: ConnCreatedEv A REASON=NORMAL Cause: CAUSE_NORMAL
GC1: ConnConnectedEv A REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlConnInitiatedEv A REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: TermConnCreatedEv TERMA REASON=NORMAL
GC1: TermConnActiveEv TERMA REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlTermConnTalkingEv TERMA REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: CallCtlConnDialingEv A REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: CallCtlConnEstablishedEv A REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: ConnCreatedEv B REASON=NORMAL Cause: CAUSE_NORMAL
GC1: ConnInProgressEv B REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlConnOfferedEv B REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
|
Events delivered to call observer on A. (continued)
|
GC1: ConnAlertingEv B REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlConnAlertingEv B REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: ConnCreatedEv C REASON=REASON_FORWARDNOANSWER Cause: CAUSE_NORMAL
GC1: ConnInProgressEv C REASON= REASON_FORWARDNOANSWER Cause: CAUSE_NORMAL
GC1: CallCtlConnOfferedEv C REASON= REASON_FORWARDNOANSWER Cause: CAUSE_NORMAL CallControlCause: CAUSE_REDIRECTED
GC1: ConnAlertingEv C REASON= REASON_FORWARDNOANSWER Cause: CAUSE_NORMAL
GC1: CallCtlConnAlertingEv C REASON= REASON_FORWARDNOANSWER Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: ConnDisconnectedEv B REASON= REASON_FORWARDNOANSWER Cause: CAUSE_NORMAL
GC1: CallCtlConnDisconnectedEv B REASON= REASON_FORWARDNOANSWER Cause: CAUSE_NORMAL CallControlCause: CAUSE_REDIRECTED
GC1: ConnConnectedEv C REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlConnEstablishedEv C REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
|
Scenario Four
A call B, B redirects the call to C.
Action
|
Events
|
Events delivered to call observer on B.
|
GC1: CallActiveEv REASON=NORMAL Cause: CAUSE_NEW_CALL
GC1: ConnCreatedEv B REASON=NORMAL Cause: CAUSE_NORMAL
GC1: ConnInProgressEv REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlConnOfferedEv B REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: ConnCreatedEv A REASON=NORMAL Cause: CAUSE_NORMAL
GC1: ConnConnectedEv A REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlConnEstablishedEv A REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: ConnAlertingEv B REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlConnAlertingEv B REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
GC1: TermConnCreatedEv TERMB REASON=NORMAL Cause: Other: 0
GC1: TermConnRingingEv TERMB REASON=NORMAL Cause: CAUSE_NORMAL
GC1: CallCtlTermConnRingingEvImpl TERMB REASON=NORMAL Cause: CAUSE_NORMAL CallControlCause: CAUSE_NORMAL
|
Events delivered to call observer on B. (continued)
|
GC1: ConnDisconnectedEv A REASON=REDIRECT Cause: CAUSE_NORMAL
GC1: CallCtlConnDisconnectedEv A REASON=REDIRECT Cause: CAUSE_NORMAL CallControlCause: CAUSE_REDIRECTED
GC1: TermConnDroppedEv TERMB REASON=REDIRECT Cause: CAUSE_NORMAL
GC1: CallCtlTermConnDroppedEv TERMB REASON=REDIRECT Cause: CAUSE_NORMAL CallControlCause: CAUSE_REDIRECTED
GC1: ConnDisconnectedEv B REASON=REDIRECT Cause: CAUSE_NORMAL
GC1: CallCtlConnDisconnectedEv B REASON=REDIRECT Cause: CAUSE_NORMAL CallControlCause: CAUSE_REDIRECTED
GC1: CallInvalidEv REASON=REDIRECT Cause: CAUSE_NORMAL
|
Half Duplex Media
RTP Event at A and B.
Action
|
RTP Events
|
Check Interface
|
A calls B , B answers the call.
|
A - CiscoRTPInputStartedEv CiscoRTPOutputStartedEv
B - CiscoRTPInputStartedEv CiscoRTPOutputStartedEv
|
Ev.isHalfDuplex() returns false Ev.isHalfDuplex() returns false
Ev.isHalfDuplex() returns false Ev.isHalfDuplex() returns false
|
B puts Call on hold
|
A - CiscoRTPInputStoppedEv CiscoRTPOutputStoppedEv
B - CiscoRTPInputStoppredEv CiscoRTPOutputStoppedEv
A-CiscoRTPInputStartedEv
|
Ev.isHalfDuplex() returns false Ev.isHalfDuplex() returns false
Ev.isHalfDuplex() returns false Ev.isHalfDuplex() returns false
Ev.isHalfDuplex() returns True
|
B Retrieves the Call
|
A- CiscoRTPInputStoppredEv
A - CiscoRTPInputStartedEv CiscoRTPOutputStartedEv
B - CiscoRTPInputStartedEv CiscoRTPOutputStartedEv
|
Ev.isHalfDuplex() returns True
Ev.isHalfDuplex() returns false Ev.isHalfDuplex() returns false
Ev.isHalfDuplex() returns false Ev.isHalfDuplex() returns false
|
Recording and Monitoring
A and TA are address and terminal of monitor target or recording initiator
B and TB are address and terminal of monitor initiator.
Scenario One
Application user is configured with recording capability only.
Action
|
Events
|
Call Info
|
ciscoProvider.getCapabilities().canRecord()
|
JTAPI returns TRUE
|
NA:
|
ciscoProvider.getCapabilities().canMonitor()
|
JTAPI returns FALSE
|
NA:
|
Scenario Two
Administrator enables monitoring capability for the user.
Action
|
Events
|
Call Info
|
| |
CiscoProviderCapabilityChangedEv
hasMonitorCapabilityChanged() on this event returns true
hasRecordingCapabilityChanged() returns true
|
NA
|
ciscoProvider.getCapabilities().canMonitor()
|
JTAPI returns true
|
NA
|
Scenario Three
Recording setting. A has auto recording setup.
Action
|
Events
|
Call Info
|
ciscoAddressA.getRecordingConfig()
|
CiscoAddress.AUTO_RECORDING is returned
|
NA:
|
Recording status on address is changed to application controlled recording.
CiscoAddressRecordingConfigChangedEv.getRecordingConfig()
ciscoAddressA.getRecordingConfig()
|
CiscoAddressRecordingConfigChangedEv
CiscoAddress.APPLICATION_CONTROLLED
CiscoAddress.APPLICATION_CONTROLLED
|
NA
|
Scenario Four
AutoRecording. A has auto recording setup. Caller X calls A. A answers the call. A has call observer. TA has observer.
Action
|
Events
|
Call Info
|
A hangs up
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv TA Cause: CAUSE_NORMAL CallControlCause:
CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoRTPInputStartedEv
CiscoTermConnRecordingTargetInfoEv
CiscoTermConnRecordingEndEv Cause: CAUSE_NORMAL
CallCtlTermConnDroppedEv TA Cause: CAUSE_NORMAL CallControlCause:
CAUSE_NORMAL
CallInvalidEv
|
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Five
AutoRecording. A has auto recording setup. Caller X calls A. A answers the call. Application calls startRecording().
Action
|
Events
|
Call Info
|
Call.startRecording()
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CallControlCause: CAUSE_NORMAL
JTAPI throws exception
CiscoRTPOutputStartedEv
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoRTPInputStartedEv
CiscoTermConnRecordingTargetInfoEv
|
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Six
AutoRecording. A has auto recording setup. Caller X calls A. A answers the call. Application calls startRecording ().
Action
|
Events
|
Call Info
|
Call.startRecording()
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CallControlCause: CAUSE_NORMAL
JTAPI throws exception
CiscoRTPOutputStartedEv
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoRTPInputStartedEv
CiscoTermConnRecordingTargetInfoEv
|
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Seven
StartRecording(). A has application controlled setup. Caller X calls A. Application calls startRecording(). A answers the call. Application calls startRecording().
Action
|
Events
|
Call Info
|
Call.startRecording()
A answers the call
Call.startRecording()
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
...
CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
JTAPI throws InValidStateException
CiscoRTPOutputStartedEv
CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPInputStartedEv
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoTermConnRecordingTargetInfoEv
|
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Eight
stopRecording(). A has application controlled recording setup. Caller X calls A. A answers the call. Application calls stopRecording().
Action
|
Events
|
Call Info
|
A answers the call
Call.startRecording()
Call.stopRecording()
A hangs up
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
...
CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoTermConnRecordingTargetInfoEv
CiscoTermConnRecordingEndEv Cause: CAUSE_NORMAL
CallCtlTermConnDroppedEv TA Cause: CAUSE_NORMAL
CallControlCause: CAUSE_NORMAL
CallInvalidEv
|
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Nine
Hold. A has auto recording configured. Caller X calls A. a answers the call and holds the call. A resumes the call. RTP events are delivered to terminal observer and are independent of call events.
Action
|
Events
|
Call Info
|
A answers the call
A puts the call on
HOLD
A resumes the call
A drops the call
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
...
CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoTermConnRecordingTargetInfoEv
CiscoRTPOutputStoppedEv
CallCrlTermConnHeldEv Cause: CAUSE_NORMAL
CiscoRTPInputStoppedEv
CiscoTermConnRecordingEndEv Cause: CAUSE_NORMAL
...
...
CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
CiscoTermConnRecordingTargetInfoEv
CiscoTermConnRecordingEndEv Cause: CAUSE_NORMAL
CallCtlTermConnDroppedEv TA Cause: CAUSE_NORMAL
CallControlCause: CAUSE_NORMAL
CiscoRTPOutputStoppedEv
CallInvalidEv
CiscoRTPInputStoppedEv
|
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Ten
Conference controller and recording initiator. A has auto recording configured. Caller X calls A. A answers the call. A initiates consult call to Y. Y answers and A completes conference.
Action
|
Events
|
Call Info
|
A answers call GC1
A consults Y with GC2
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
...
CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoRTPOutputStoppedEv
CiscoTermConnRecordingTargetInfoEv
GC1:CallCrlTermConnHeldEv Cause: CAUSE_NORMAL
CiscoRTPInputStoppedEv
GC1:CiscoTermConnRecordingEndEv Cause: CAUSE_NORMAL
...
...
CallActiveEv for callID=GC2 Cause: CAUSE_NEW_CALL
GC2:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC2:ConnConnectedEv for A Cause: CAUSE_NORMAL
...
...
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
A completes conference
|
GC2:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
GC2: ConnConnected Y
CiscoRTPOutputStartedEv
GC2:CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoRTPInputStartedEv
CiscoTermConnRecordingTargetInfoEv
CiscoConferenceStartEv(GC2 -> GC1)
GC2: CiscoTermConnRecordingEndEv TA
GC2:CallCtlTermConnDroppedEv TA Cause: CAUSE_NORMAL
GC2:CiscoRTPOutputStoppedEv
...
GC2:CallInvalidEv
GC2:CiscoRTPInputStoppedEv
GC1: CallCtlTermConnTalkingEv TA
GC1: ConnCreatedEv X
GC1: ConnCreatedEv Y
...
GC1: CiscoTermConnRecordingStartEv TA
CiscoConferenceEndEv
CiscoTermConnRecordingTargetInfoEv
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
(recording start could be seen after conference end event)
|
|
Scenario Eleven
Conference target and recording initiator. A has auto recording configured. Caller X calls Y GC1. Y consults with A, A answers the call (GC2) and Y completes the conference.
Action
|
Events
|
Call Info
|
A answers call GC2
Y completes conference
|
CallActiveEv for callID=GC2 Cause: CAUSE_NEW_CALL
GC2:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC2:ConnConnectedEv for A Cause: CAUSE_NORMAL
GC2: ConnConnectedEv Y
...
GC2:CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
GC2:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
GC2:CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoTermConnRecordingTargetInfoEv
GC1: CallActiveEv
GC1: ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1: ConnCreatedEv for Y Cause: CAUSE_NORMAL
CiscoConferenceStartEv(GC2->GC1)
CiscoCallChangedEv
....
CiscoRTPOutputStoppedEv
CiscoRTPInputStoppedEv
GC2: CallCrlTermConnDroppedEv TA
GC2: CallInvalidEv
...
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
GC1: CallCrlTermConnTalkingEv TA
GC1: ConnConnectedEv Y
GC1: ConnConnectedEv X
GC1: CiscoConferenceEndEv
...
(recording start could be seen before conference end event)
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Twelve
Transfer controller and recording initiator. A has recording configured. Caller X calls A. A answers the call. A initiates consult call to Y. Y answers and A completes transfer.
Action
|
Events
|
Call Info
|
A answers call GC1
A consults Y with GC2
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
...
CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoTermConnRecordingTargetInfoEv
CiscoRTPOutputStoppedEv
GC1:CallCrlTermConnHeldEv Cause: CAUSE_NORMAL
CiscoRTPInputStoppedEv
GC1:CiscoTermConnRecordingEndEv Cause: CAUSE_NORMAL
...
...
CallActiveEv for callID=GC2 Cause: CAUSE_NEW_CALL
GC2:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC2:ConnConnectedEv for A Cause: CAUSE_NORMAL
...
...
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
GC2:
Calling: A
Called: Y
LRP: null
Current calling: A
Current called: Y
|
A completes transfer
|
GC2:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
GC2: ConnConnected Y
CiscoRTPOutputStartedEv
GC2:CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoRTPInputStartedEv
CiscoTermConnRecordingTargetInfoEv
CiscoTransferStartEv(GC2 -> GC1)
GC2:CiscoTermConnRecordingEndEv
GC2:CallCtlTermConnDroppedEv TA
GC2:CiscoRTPOutputStoppedEv
...
GC2:CallInvalidEv
GC2:CiscoRTPInputStoppedEv
GC1: CallCtlTermConnDroppedEv TA
...
GC1: CallInvalidEv
CiscoTransferEndEv
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
(recording end may not be seen after A completes transfer)
|
GC1:
Calling: X
Called: Y
LRP: A
Current calling: X
Current called: Y
|
Scenario Thirteen
Transfer target and recording initiator. A has auto recording configured. Caller X calls Y GC1. Y consults with A, A answers the call (GC2) and Y completes the transfer.
Action
|
Events
|
Call Info
|
A answers call GC2
Y completes transfer
|
CallActiveEv for callID=GC2 Cause: CAUSE_NEW_CALL
GC2:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC2:ConnConnectedEv for A Cause: CAUSE_NORMAL
GC2: ConnConnectedEv Y
...
GC2:CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
GC2:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
GC2:CiscoTermConnRecordingStartEv Cause: CAUSE_NORMAL
CiscoTermConnRecordingTargetInfoEv
GC1: CallActiveEv
GC1: ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1: ConnCreatedEv for Y Cause: CAUSE_NORMAL
CiscoTransferStartEv(GC2->GC1)
CiscoCallChangedEv
....
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Caller or A drops the call
|
CiscoRTPOutputStoppedEv
CiscoRTPInputStoppedEv
GC1: CallCrlTermConnTalkingEv TA
GC1: CallCtlConnDisconnectedEv Y
GC1: ConnConnectedEv X
GC2: CallCrlTermConnDroppedEv TA
GC2: CallInvalidEv
...
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
...
GC1:CiscoTermConnRecordingEndEv
...
GC1: CallInvalidEv
|
|
Scenario Fourteen
Start and Stop monitor: A is monitor target, B is monitor initiator. X calls A, A answers the call GC1 (ci1). B calls start monitor using GC2. Application has call observer on both A and B. Application has monitoring capability enabled.
Action
|
Events
|
Call Info
|
A answers GC1
B calls start monitor using
GC2 giving CI1,
A and TermA from GC1
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1:ConnConnectedEv for A Cause: CAUSE_NORMAL
GC1: ConnConnectedEv X
...
GC1:CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
GC1:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
GC2:CallActive Cause: CAUSE_NORMAL
GC2: GC1:ConnConnectedEv for B Cause: CAUSE_NORMAL
GC2: CallCtlTermConnTalkingEv TB
GC2: ConnCreatedEv A
(No terminal connection for A or GC2)
GC2: ConnConnectedEv A
GC2:CiscoTermConnMonitorTargetInfoEv Cause:
CAUSE_NORMAL address:A, terminal name: TA, rtphandle=CI1
GC1: CiscoTermConnMonitorStartEv TA
GC1: CiscoTermConnMonitorInitiatorInfoEv TA Cause:
CAUSE_NORMAL address:B, device name: TB
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
GC2:
Calling: B
Called: A
LRP: null
Current calling: B
Current called: A
|
A puts the call on hold
A resumes the call
B calls drop on GC2 to stop monitoring
|
GC2: CiscoRTPOutputStoppedEv
GC1: CiscoRTPOutputStoppedEv
GC1: CallCtlTermConnHeldEv TA
GC2:CiscoRTPInputStoppedEv
GC1: CiscoRTPInputStoppedEv
GC1: CiscoRTPOutputStartedEv
GC2: CiscoRTPOutputStartedEv
GC1: CallCtlTermConnTalking TA
GC2:CiscoRTPInputStartedEv
GC1: CiscoRTPInputStartedEv
GC2: CallCtlTermConnDroppedEv TB
GC2: ConnDisconnEv A
GC1: CiscoTermConnMonitorEndEv TA
GC2: ConnDisconnEv B
GC2: CallInvalidEv
|
|
Scenario Fifteen
Monitor initiator transfers the call to Y. A is monitor target, B is monitor initiator. X calls A, A answers the call GC1 (ci1). B calls start monitor using GC2. Application has call observer on both A and B. application has monitoring capability enabled. B transfers the call to Y.
Action
|
Events
|
Call Info
|
A answers GC1
B calls start monitor using
GC2 and ci2 giving CI1, A and
TermA from GC1
Or using the teminalconnection of A.
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1:ConnConnectedEv for A Cause: CAUSE_NORMAL
GC1: ConnConnectedEv X
...
GC1:CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
GC1:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
GC2:CallActive Cause: CAUSE_NORMAL
GC2: ConnConnectedEv for B Cause: CAUSE_NORMAL
GC2: CallCtlTermConnTalkingEv TB
GC2: ConnCreatedEv A
(No terminal connection for A or GC2)
GC2: ConnConnectedEv A
GC2:CiscoTermConnMonitorTargetInfoEv Cause:
CAUSE_NORMAL Monitor_TARGET address:A, device name: TA,
rtphandle=CI1
GC1: CiscoTermConnMonitorStartEv TA
GC1: CiscoTermConnMonitorInitiatorInfoEv TA Cause:
CAUSE_NORMAL address:B, device name: TB rtphandle=ci2
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
B consults Y using GC3 and completes transfer.
Call observer on Y would see
|
GC3: CallActiveEv
GC3: ConnConnectedEv B
GC3: CallCtlTermConnTalkingEv TB
GC3: ConnConnectedEv Y
CiscoTransferStartEv(GC3->GC2)
GC3: ConnDisconnectedEv Y
GC1: CiscoTermConnMonitorInitiatorInfoEv TA Cause:
CAUSE_NORMAL address:Y, device name: TY
GC3: ConnDisconnectedEv B
GC3: CallCtlTermConnDroppedEv TB
GC3: CallInvalidEv
GC2: CallCtlTermConnDroppedEv TB
....
GC2: CallInvalidEv
CiscoTransferEndEv
GC3: CallActive
GC3: CallCtlTermConnRingingEv TY
GC3: CallCtlTermConnTalkingEv TY
CiscoTransferStartEv
CiscoCallChangedEv GC3->GC2
GC2: ConnConnectedEv Y
GC2: ConnConnectedEv B
GC2: CiscoTermConnMonitorTargetInfoEv TY Cause:
CAUSE_NORMAL address:A, device name: TA
GC3: ConnDisconnectedEv Y
GC3: CallCtlTermConnDroppedEv TY
GC3: CallInvalidEV
GC2: ConnConnectedEv X
GC2: ConnDisconnectedEv A
CiscoTransferEndEv
(CiscoTermConnMonitorInitiatorInfoEv on GC1 is independent of transfer events on GC3 and GC2 and can be delivered at any time before or after end event.)
|
GC1:
Calling: X
Called: A
LRP: A
Current calling: X
Current called: Y
|
Scenario Sixteen
Monitoring a barged call: A and A' are shared lines. Caller calls A, A answers the call. A' barge into the call. B calls start monitor.
Action
|
Events
|
Call Info
|
A answers GC1
A' barges the call
B calls start monitor using
GC2 giving CI1,
A and TermA from GC1
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1:ConnConnectedEv for A Cause: CAUSE_NORMAL
GC1: ConnConnectedEv X
...
GC1:CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
GC1:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
CiscoRTPInputStartedEv
GC1: CallCtlTermConnBridgedEv TermA'
GC1: GC1:CallCrlTermConnTalkingEv TA'
Exception is thrown to startMonitor request.
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Seventeen
Monitor and recording: A is monitor target and has auto recording configured. B is monitor initiator. X calls A, A answers the call GC1 (ci1). B calls start monitor using GC2. Application has call observer on both A and B. Application has monitoring capability enabled.
Action
|
Events
|
Call Info
|
A answers GC1
B calls start monitor using
GC2 giving CI1,
A and TermA from GC1
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1:ConnConnectedEv for A Cause: CAUSE_NORMAL
GC1: ConnConnectedEv X
...
GC1:CallCrlTermConnRingingEv TA Cause: CAUSE_NORMAL
GC1:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
CiscoRTPOutputStartedEv
GC1: CiscoTermConnRecordingStartEv TA
GC1: CiscoTermConnRecordingTargetInfoEv TA
CiscoRTPInputStartedEv
GC2:CallActive Cause: CAUSE_NORMAL
GC2: GC1:ConnConnectedEv for B Cause: CAUSE_NORMAL
GC2: CallCtlTermConnTalkingEv TB
GC2: ConnCreatedEv A
(No terminal connection for A on GC2)
GC2: ConnConnectedEv A
GC2:CiscoTermConnMonitorTargetInfoEv Cause:
CAUSE_NORMAL address:A, device name: TA, rtphandle=CI1
GC1: CiscoTermConnMonitorStartEv TA
GC1: CiscoTermConnMonitorTargetInfoEv TA Cause:
CAUSE_NORMAL address:B, device name: TB
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Eighteen
Observing remote in use shared line in Monitoring: A and A' are shared lines. Caller calls A, A answers the call. B calls start monitor. Application has call observer on A' only. B initiates monitor request for connected call on A. No start events are delivered to call observer of A'.
Action
|
Events
|
Call Info
|
A answers GC1 and B initiates monitor
A puts the call on HOLD
A' answers the call
B drops the call
and initiates start
monitor using
GC3 giving the
terminal connection of A'
in monitor request.
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A' Cause: CAUSE_NORMAL
GC1:ConnConnectedEv for A' Cause: CAUSE_NORMAL
GC1: ConnConnectedEv X
...
GC1:CallCrlTermConnRingingEv TA' Cause: CAUSE_NORMAL
GC1: CallCtlTermConnBridgedEv TermA'
Cause: CAUSE_NORMAL
GC1: CallCrlTermConnHeldEv TA'
GC1:CallCrlTermConnTalkingEv TA'
GC1: CiscoTermConnMonitorStartEv TA'
GC1: CiscoTermConnMonitorInitiatorInfoEv TA' Cause:
CAUSE_NORMAL address:B, device name: TB
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Nineteen
Snap Shot events for Monitor and recording: A is monitor target and has auto recording configured. B is monitor initiator. X calls A, A answers the call GC1 (ci1), B calls start monitor using GC2. Another application adds call observer on A after monitoring and recording sessions are established.
Action
|
Events
|
Call Info
|
| |
CallActiveEv for callID=GC1 Cause: CAUSE_SNAPSHOT
GC1:ConnCreatedEv for A Cause: CAUSE_SNAPSHOT
GC1:ConnConnectedEv for A Cause: CAUSE_SNAPSHOT
GC1: ConnConnectedEv X
...
GC1:CallCrlTermConnTalkingEv TA Cause: CAUSE_SNAPSHOT
GC1: CiscoTermConnRecordingStartEv TA Cause: CAUSE_SNAPSHOT
GC1: CiscoTermConnRecordingTargetInfoEv TA Cause:
CAUSE_SNAPSHOT
GC1: CiscoTermConnMonitorStartEv TA Cause: CAUSE_SNAPSHOT
GC1: CiscoTermConnMonitorInitiatorInfoEv TA Cause:
CAUSE_SNAPSHOT address:B, device name: TB
|
GC1:
Calling: X
Called: A
LRP: null
Current calling: X
Current called: A
|
Scenario Twenty
Chained conference and recording: A has auto recording configured. A, B and C are in conference in GC1. A consults D using GC3. D sets up conference (with E and F) using Gc4 and adds A's consult call to conference. A completes conference, resulting in a conference chain.
Action
|
Events
|
Call Info
|
B calls A, A answers the call on GC1
A consults C using GC2
|
CallActiveEv for callID=GC1
GC1:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1:ConnConnectedEv for A Cause: CAUSE_NORMAL
GC1: ConnConnectedEv X
...
GC1:CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
GC1: CiscoTermConnRecordingStartEv TA Cause: CAUSE_NORMAL
GC1: CiscoTermConnRecordingTargetInfoEv TA Cause: CAUSE_NORMAL
GC1: CiscoTermConnMonitorStartEv TA Cause: CAUSE_NORMAL
GC1: CiscoTermConnMonitorInitiatorInfoEv TA Cause: CAUSE_NORMAL address:B, device name: TB
GC1: TermConnHeldEv TA
GC2: CallActiveEv
GC1: CiscoTermConnRecordingEndEv TA Cause: CAUSE_NORMAL
...
GC2: CallCrlTermConnTalkingEv TA Cause: CAUSE_NORMAL
GC2: CiscoTermConnRecordingStartEv TA Cause: CAUSE_NORMAL
....
|
NA
|
A completes conference
A consults to D using GC3
D answers
D consults with E and F and completes conference
A completes conference
|
GC2: CiscoTermConnRecordingEndEv TA Cause: CAUSE_NORMAL
......
GC2: CallInvalidEv
GC1: CiscoTermConnRecordingStartEv TA Cause: CAUSE_NORMAL
GC1: TermConnTalkingEv TA
GC3: CallActiveEv
GC1: CallCrlTermConnHeldEv TA
GC1: CiscoTermConnRecordingEndEv TA Cause: CAUSE_NORMAL
GC3: CallCrlTermConnTalkingEv TA
GC3: CiscoTermConnRecordingStartEv TA Cause: CAUSE_NORMAL
GC3: CiscoTermConnRecordingEndEv TA
GC1: CallCrlTermConnTalkingEv TA
...
GC3: CallInvalidEv
GC1: CiscoTermConnRecordingStartEv
|
|
Intercom
Configuration: terminal T1 has intercom line A with TargetDN B, label Bob, Unicode label UBob. Terminal T2 has intercom line B. Application provider has both T1 and T2 in control list.
C, Carol, UCarol is in the same intercom group as A, and B.
D, David, UDavid is not in the same intercom group as A, B and C.
Action
|
Result
|
Call Info
|
Application opens provider, after provider comes in service, application issues provider.getIntercomAddresses()
|
JTAPI returns A and B as array of CiscoIntercomAddress.
|
N.A
|
Application issues CiscoIntercomAddress.getIntercomTargetDN(),
CiscoIntercomAddress.getIntercomTargetLabel() and CiscoIntercomAddress.getIntercomUnicodeTarget Label() request at A.
|
JTAPI will return B as target DN and Bob and UBob as target label.
|
N.A
|
Application issues CiscoIntercomAddress.getDafaultIntercomTargetDN(),
CiscoIntercomAddress.getDefaultIntercomTargetLabel() and CiscoIntercomAddress.getDefaultIntercomUnicodeTargetLabel() request at A.
|
JTAPI will return B as target DN and Bob and UBob as target label.
|
N.A
|
Application issues CiscoIntercomAddres.setIntercomTarget(C, Carol, UCarol) on intercom address A.
After successful response, Application issues CiscoIntercomAddress.getIntercomTargetDN(), CiscoIntercomAddress.getIntercomTargetLabel() and CiscoIntercomAddress.getIntercomUnicodeTargetLabel() request at A.
|
AddressObserver at A: CiscoAddrIntercomInfoChangedEv Cause: CAUSE_NORMAL
JTAPI will return C as target DN and Carol and UCarol as target label.
|
N.A
|
Application1 is observing CiscoIntercomAddress A and has AddressObserverAdded to it. Application2 sets intercom target, label to C, Carol, UCarol.
|
App1 : AddressObserver at A: CiscoAddrIntercomInfoChangedEv Cause: CAUSE_NORMAL
|
N.A
|
After above step Application1 issues CiscoIntercomAddres.setIntercomTarget(B, Bob, UBob) on intercom address A.
|
Exception will be thrown to application as another application instance has already set the target to C, Carol, UCarol.
|
N.A
|
Intercom target DN and label for intercom address A is set to default, now application issues CiscoIntercomAddres.setIntercomTarget(D, David, UDavid) on intercom address A.
|
Exception will be thrown as D, David, UDavid is not in the same intercom group.
|
N.A
|
Application has set intercom target DN and label to C, Carol, UCarol for intercom address A. Now CTI Manager goes out of service, JTAPI failover to another CTIManager node. After intercom address A come back in service, JTAPI will restore intercom target DN and label to C, Carol, UCarol respectively.
Application issues CiscoIntercomAddress.getIntercomTargetDN(), CiscoIntercomAddress.getIntercomTargetLabel() and CiscoIntercomAddress.getIntercomUnicodeTargetLabel() request at A.
|
AddressObserver at A: CiscoAddrIntercomInfoChangedEv Cause: CAUSE_NORMAL
JTAPI will return C as target DN and Carol and UCarol as target label.
|
N.A
|
Application has set intercom target DN and label to C, Carol for intercom address A. Now CTI Manager goes out of service, JTAPI failsover to another CTIManager node. After intercom address A come back in service, JTAPI tries to restore intercom target DN, label and UnicodeLabel to C, Carol, UCarol respectively, however due to race condition some other application has already set the target DN, JTAPI get failure response from CTI.
|
AddressObserver at A: CiscoAddrIntercomInfoRestorationFailedEv Cause: CAUSE_NORMAL
|
N.A
|
Application is connected to a CTIManager node, Cisco Unified Communications Manager node goes down, intercom device failsover to another Cisco Unified Communications Manager node, after intercom address comes back in service. CTIManager should restore intercom target Dn and label.
Application issues CiscoIntercomAddress.getIntercomTargetDN(), CiscoIntercomAddress.getIntercomLabel() and CiscoIntercomAddress.getIntercomUnicodeTargetLabel() request at A.
|
AddressObserver at A:
CiscoAddrIntercomInfoChangedEv Cause: CAUSE_NORMAL
JTAPI will return C as target DN and Carol and UCarol as target label.
|
N.A
|
Application is connected to a CTIManager node, Cisco Unified Communications Manager node goes down, intercom device failsover to another Cisco Unified Communications Manager node, after intercom address comes back in service. CTIManager tries to restore intercom target Dn and label, however due to race condition some other application has already set the target Dn and Label, hence CTI is not able to restore the intercom target DN and label.
|
AddressObserver at A: CiscoAddrIntercomInfoRestorationFailedEv Cause: CAUSE_NORMAL
|
N.A
|
Application is observing intercom addresses A and B. A has target set to B. User initiates intercom call.
Intercom call is successful.
|
CallObserver at A and B: CallActiveEv GC1 Cause: CAUSE_NORMALConnCreatedEv A, Cause: CAUSE_NORMALConnConnectedEv A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv A Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMALTermConnCreatedEv A- T1 Cause: CAUSE_NORMAL TermConnActiveEv A- T1 Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv A - T1 Cause: CAUSE_NORMAL
CallCtlCause=CAUSE_NORMAL
CallCtlConnDialingEv A Cause: CAUSE_NORMAL
CallCtlCause=CAUSE_NORMAL
CallCtlConnEstablishedEv A Cause: CAUSE_NORMAL
CallCtlCause=CAUSE_NORMAL
ConnCreatedEv B, Cause: CAUSE_NORMAL ConnConnectedEv B Cause: CAUSE_NORMAL CallCtlConnOfferedEv B Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
CallCtlConnEstablishedEv B Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
|
Cg=A
Cd=B
CurrentCg=A
CurredCd=B
LRP = null
|
| |
TermConnCreatedEv B- T2 Cause: CAUSE_NORMAL TermConnPassiveEv B - T2 Cause: CAUSE_NORMAL
CallCtlTermConnBridgeEv B - T2 Cause: CAUSE_NORMAL CallCtl Cause=CAUSE_NORMAL
CiscoToneChangedEv - T1 -GC1
CiscoToneChangedEv - T2 -GC1
CiscoRTPOutputStartedEv - T1
CiscoRTPInputStartedEv - T2
|
|
User at B presses talkback softkey to get connected to intercom initiator.
|
CallObserver at A and B: TermConnActiveEv B - T2 Cause: CAUSE_NORMAL CallCtlTermConnTalkingEv B - T2 Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
CiscoRTPOutputStartedEv - T2CiscoRTPInputStartedEv - T1
|
Cg=A
Cd=B
CurrentCg=A
CurredCd=B
LRP = null
|
Intercom address A has target defined as B. Application initiates an intercom call by calling interface Address.ConnectIntercom() with dialeddigit as empty.
Intercom call is successful.
|
CallObserver at A and B :
CallActiveEv GC1 Cause: CAUSE_NORMAL ConnCreatedEv A Cause: CAUSE_NORMAL ConnConnectedEv A Cause: CAUSE_NORMAL CallCtlConnInitiatedEv A Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
TermConnCreatedEv T1 Cause: CAUSE_NORMAL TermConnActiveEv T1 Cause: CAUSE_NORMAL CallCtlTermConnTalkingEv T1 Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
CallCtlConnDialingEv A Cause: CAUSE_NORMAL CallCtlConnEstablishedEv A Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
ConnCreatedEv B Cause: CAUSE_NORMAL C ConnConnectedEv B Cause: CAUSE_NORMAL CallCtlConnOfferedEv B Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
CallCtlConnEstablishedEv B Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
TermConnCreatedEv B- T2 Cause: CAUSE_NORMAL TermConnPassiveEv B - T2 Cause: CAUSE_NORMAL CallCtlTermConnBridgeEv B - T2 Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
|
Cg=A
Cd=B
CurrentCg=A
CurredCd=B
LRP = null
|
| |
CiscoToneChangedEv - T1 -GC1
CiscoToneChangedEv - T2 -GC1
CiscoRTPOutputStartedEv - T1
CiscoRTPInputStartedEv - T2
|
|
Application initiate TerminalConnection.join() request on TerminalConnection of B to talkback.
Request is successful.
|
CallObserver at A and B :
TermConnActiveEv B - T2 Cause: CAUSE_NORMAL CallCtlTermConnTalkingEv B - T2 Cause: CAUSE_NORMAL CallCtlCause=CAUSE_NORMAL
CiscoRTPOutputStartedEv - T2 CiscoRTPInputStartedEv - T1
|
Cg=A
Cd=B
CurrentCg=A
CurredCd=B
LRP = null
|
Application tried to put the intercom call on hold at A by issuing TerminalConnection.hold()
|
PlatformException will be thrown, intercom call stay connected.
|
N.A
|
Application tried to accept intercom call at intercom target by issuing connection.accept() at connection of B.
|
PlatformException will be thrown, intercom call stay connected.
|
N.A
|
Application tried to reject intercom call at intercom target by issuing connection.reject() at connection of B.
|
Intercom call will be disconnected.
|
N.A
|
Application tried to redirect intercom call by issuing connection.redirect() at connection of A or B.
|
PlatformException will be thrown, intercom call stay connected.
|
N.A
|
Application tried to park call by issuing connection.park() at Connection of A or B.
|
PlatformException will be thrown, intercom call stay connected.
|
N.A
|
Terminal T1 has intercom address A which has intercom target set to B.
Terminal T2 has intercom address B and another address C. C is in call with D, GC1.
A initiates intercom call to B, intercom call is auto-answered at B
|
No event to GC1 call, it will stay in Connected State.
|
N.A
|
Application tries to set forward on intercom address A by issuing CiscoIntercomAddress. setForwarding ()
|
PlatformException will be thrown.
|
N.A
|
Application tries to setRingerStatus on intercom address A by issuing CiscoIntercomAddress. setRingerStatus()
|
PlatformException will be thrown.
|
N.A
|
Application tries to setMessageWaiting on intercom address A by issuing CiscoIntercomAddress.setMessageWaiting()
|
PlatformException will be thrown.
|
N.A
|
Application tries to setAutoAcceptEnabled on intercom address A at CTIPort by issuing CiscoIntercomAddress. setAutoAcceptStatus ()
|
PlatformException will be thrown.
|
N.A
|
Application tries to getAutoAcceptEnabled on intercom address A at CTIPort by issuing CiscoIntercomAddress. getAutoAcceptStatus ()
|
PlatformException will be thrown.
|
N.A
|
DeviceState Whisper Scenario
Configuration: Terminal T1 has intercom address B, Terminal T2 has intercom address A. Application has set CiscoTermEvFilter to enable CiscoTermDeviceStateWhisperEv as well as all other DeviceState filters on T1 and T2. Application had added Terminal observer on both T1 and T2.
Action
|
Events
|
Call Info
|
Intercom address A has target defined as B. Application initiates an intercom call by calling interface Address.ConnectIntercom() with dialeddigit as empty.
|
Event received at TerminalObserver of T1
CiscoTermDeviceStateActiveEv T1 Cause: CAUSE_NORMAL
Event received at TerminalObserver of T2
CiscoTermDeviceStateWhisperEv T1 Cause: CAUSE_NORMAL
|
N.A
|
Application issue join() request on TerminalConnection of T2 (intercomTarget) to talkback to T1(intecomInitiator)
|
Event received at TerminalObserver of T1
None.
Event received at TerminalObserver of T2
CiscoTermDeviceStateActiveEv T1 Cause: CAUSE_NORMAL
|
N.A
|
Terminal T2 already have intercom target call, Application enables CiscoTermFilter for CiscoTermDeviceStateWhisperEv.
|
Event received at TerminalObserver of T2
CiscoTermDeviceStateWhisperEv T1 Cause: CAUSE_SNAPSHOT
|
N.A
|
Do Not Disturb
Configuration: Application is observing terminal A and terminal B.
Scenario One
Application adds Terminal observer to terminal A using Terminal.addObserver(). Filter is enabled via setDNDChangedEvFilter. DND is enabled on the terminal. Application invokes getDNDStatus() from CiscoTerminal.
Action
|
Events
|
Call Info
|
Application adds terminal observer to terminal A. Filter is enabled via setDNDChangedEvFilter() in CiscoTermEvFilter. DND is enabled on the terminal through phone or admin page.
Application invokes getDNDStatus() from CiscoTerminal.
|
NEW META EVENT_________ META_CALL_STARTING
CiscoTermDNDStatusChangedEv A Cause: CAUSE_NORMAL for DND Status: true
DND status = true is returned to the application
|
N.A
|
Scenario Two
Application enables filter to receive events. Application adds Terminal observer to terminal A using Terminal.addObserver(). DND is enabled on the terminal. Application invokes getDNDStatus() from CiscoTerminal.
Action
|
Events
|
Call Info
|
Application enables filter to receive events. Application adds terminal observer to terminal
A. DND is enabled on the device through phone or admin pages.
Application invokes getDNDStatus() from CiscoTerminal.
|
NEW META
EVENT_________META_CALL_STARTING
CiscoTermDNDStatusChangedEv A Cause: CAUSE_NORMAL for DND Status: true
DND status = true is returned to the application
|
N.A
|
Scenario Three
Application adds Terminal observer to terminal A using Terminal.addObserver(). Filter is disabled via setDNDChangedEvFilter() in CiscoTermEvFilter. Application invokes getDNDStatus() from CiscoTerminal.
Action
|
Events
|
Call Info
|
Application adds Terminal observer to terminal A using Terminal.addObserver(). Filter is disabled via setDNDChangedEvFilter() in CiscoTermEvFilter.
Application invokes getDNDStatus() from CiscoTerminal.
|
CiscoTermDNDStatusChangedEv is not delivered to application.
|
N.A
|
Scenario Four
Application does not add Terminal observer to terminal. Application invokes getDNDStatus() from CiscoTerminal.
Action
|
Events
|
Call Info
|
Application does not add Terminal observer to terminal. Application invokes getDNDStatus() from CiscoTerminal.
|
InvalidStateException is thrown
|
N.A
|
Scenario Five
Application does not enable the filter to receive events. Application adds Terminal observer to terminal A. DND status is set to true through the phone or admin pages. Application now enables the filter to receive events. Application invokes getDNDStatus() from CiscoTerminal.
Action
|
Events
|
Call Info
|
Application does not enable the filter to receive events.Application adds Terminal observer to terminal A. DND status is set to true through the phone or admin pages.
Application now enables the filter to receive events
Application invokes getDNDStatus() from
CiscoTerminal.
|
CiscoTermDNDStatusChangedEv is not delivered to application.
NEW META EVENT_________META_CALL_STARTING
CiscoTermDNDStatusChangedEv A Cause: CAUSE_NORMAL for DND Status: true
DND status = true is returned to application
|
N.A
|
Scenario Six
Application sets DND status to false by invoking the setDNDStatus() interface on CiscoTerminal.
Action
|
Events
|
Call Info
|
Application invokes setDNDStatus() from CiscoTerminal.
|
NEW META EVENT_________META_CALL_STARTINGCiscoTermDNDStatusChangedEv A Cause: CAUSE_NORMAL for DND Status: false
|
N.A
|
Scenario Seven
Application 1 and Application 2 are observing terminal a, and both the applications have enabled the filter to receive events. Application 1 sets DND status to false on Terminal A. Application 2 is observing Terminal A.
Action
|
Events
|
Call Info
|
Application invokes setDNDStatus() from CiscoTerminal.
|
NEW META EVENT_________META_CALL_STARTINGCiscoTermDNDStatusChangedEv A Cause: CAUSE_NORMAL for DND Status: false
|
N.A
|
Scenario Eight
DND Type is RingerOff and CFNA is not set. Terminal B calls Terminal A. Call is presented to A and call is not answered.
Action
|
Events
|
Call Info
|
Application invokes redirect() API with feature priority set to 3 from CiscoCall.
|
Call is presented to the device, irrespective of the DND settings on the device. CER call overrides DND setting.
|
N.A
|
Application invokes selectRoute() API with feature priority set to 3 from CiscoRouteSession.
|
Call is presented to the device, irrespective of the DND settings on the device. CER call overrides DND setting.
|
N.A
|
Action
|
Events
|
Call Info
|
DND Type is RingerOff and CFNA is not set. Terminal B calls Terminal A .Call is presented to A and call is not answered.
|
ConnFailedEv Cause: CAUSE_NO ANSWER
|
N.A
|
Scenario Nine
Scenario Ten
DND Type is CallReject and CFB is not set. Terminal B calls Terminal A. Call is not presented to A.
Action
|
Events
|
Call Info
|
DND Type is CallReject and CFB is not set. Terminal B calls Terminal A. Call is not presented to A
|
ConnFailedEv Cause: CAUSE_USER BUSY
|
N.A
|
Scenario Eleven
DND is enabled on the terminal A. Terminal A comes IN_SERVICE. Application invokes getDNDStatus() on CiscoTerm in ServiceEv.
Action
|
Events
|
Call Info
|
DND is enabled on the terminal A. Terminal A comes IN_SERVICE.
|
CiscoTermInServiceEv Cause: CAUSE_NORMAL
DND Status =true
|
N.A
|
Scenario Twelve
DND is enabled on terminal A. Terminal A comes IN_SERVICE. Application invokes setDNDStatus(). DB failure happens after the setDNDStatus() request is sent.
Action
|
Events
|
Call Info
|
DND is enabled on the terminal A. Terminal A comes IN_SERVICE. Application invokes setDNDStatus(). DB failure follows and value is not updated in DB.
|
PlatformException is thrown "Could not meet post conditions of setDNDStatus()"
No CiscoTermDNDStatusChangedEv is received.
|
N.A
|
Scenario Thirteen
DND is enabled on the terminalA. Terminal A comes IN_SERVICE,DND status is currently true in phone/admin. Application tries to set the same value i.e. invokes setDNDStatus(true).
Action
|
Events
|
Call Info
|
DND is enabled on the terminal A. Terminal A comes IN_SERVICE.DND status is currently true in phone/admin.Application tries to set the same value i.e. invokes setDNDStatus(true).
|
InvalidStateException is caught: DND status with value true is already set
No CiscoTermDNDStatusChangedEv is received.
|
N.A
|
DND-R
Scenario One
Application adds Terminal observer to terminal A using Terminal.addObserver (). DND-R is enabled on the terminal B via the Admin page or the Common profile page.
Action
|
Events
|
Call Info
|
Application adds terminal observers to terminal A and B. DND-R is enabled on the terminal B through phone or admin page.
A issues Call.connect to B with the feature Priority = 1 (Normal)
|
NEW META EVENT_________ META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
ConnFailedEv B Cause:.
Cause: CAUSE_USERBUSY.
|
N.A
|
Scenario Two
Application adds Terminal observer to terminal A using Terminal.addObserver (). DND-R is enabled on the Terminal B via the Admin page or the Common profile page.
Action
|
Events
|
Call Info
|
Application adds terminal observers to terminal A and B. DND-R is enabled on the terminal B through phone or admin page.
A issues Call.connect to B with the feature Priority = 3 (Emergency)
|
NEW META EVENT_________META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for B cause: CAUSE_NORMAL
ConnInProgressEv for B Cause: CAUSE_NORMAL
CallCtlConnOfferedEv for B Cause: CAUSE_NORMAL
ConnAlertingEv for B Cause: CAUSE_NORMAL
CallCtlConnAlertingEv for B Cause: CAUSE_NORMAL
TermConnCreatedEv for B Cause: CAUSE_NORMAL
TermConnRingingEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv Cause: CAUSE_NORMAL
|
Calling: A
Called: B
|
Scenario Three
DND-Call reject with CFB not set.
Action
|
Events
|
Call Info
|
Application adds terminal observers to terminal A and B. DND-R is enabled on the terminal B through phone or admin page with no CFB Setting.
Terminal A issues Call.connect to Terminal B.
|
NEW META EVENT_________ META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
ConnFailedEv B Cause: CAUSE_USERBUSY.
|
NA
|
Scenario Four
DND - Call reject with CFB set to C.
Action
|
Events
|
Call Info
|
Application is Observing Terminal A, B & C.
DND-R is Enabled in Terminal B with CFB set to Terminal C.
Terminal A issues Call.connect to Terminal B.
Call is not Presented on Terminal B and is Forwarded to Terminal C.
|
NEW META EVENT_________META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for C cause: REDIRECTED CALL
ConnInProgressEv for C Cause: REDIRECTED CALL
CallCtlConnOfferedEv for C Cause: REDIRECTED CALL
ConnAlertingEv for C Cause REDIRECTED CALL
CallCtlConnAlertingEv for C Cause: REDIRECTED CALL
TermConnCreatedEv for C Cause: REDIRECTED CALL
TermConnRingingEv for C Cause: REDIRECTED CALL
CallCtlTermConnTalkingEv Cause: CAUSE_REDIRECTED
|
Calling: A
Called: C
LastRedirectedParty: B
|
Secure Conferencing
Action
|
Events
|
Call Info
|
Scenario:1
Configuration: A (secure) and B (secure).
A calls B. B answers.
Application issues
getCallSecurtyStatus().
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A' Cause: CAUSE_NORMAL
GC1:ConnCreatedEv for B' Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallSecurityStatusChangedEv for callID=GC1
Returns the call security status of the call.
|
Calling: A
Called: B
CallSecurityStatus = 3
(ENCRYPTED) will get updated in the call info.
CallSecurityStatus = 3
(ENCRYPTED).
|
Configuration: A (secure), B (secure) and C (non-secure).
Application sets ini parameter = true by issuing enableSecurtyStatusChangedEv ()
A calls B. B answers.
B call C. C answers.
B completes conference.
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A' Cause: CAUSE_NORMAL
GC1:ConnCreatedEv for B' Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallSecurityStatusChangedEv for callID=GC1.
|
Participants: A, B, C
CallSecurityStatus = 1 (NOTAUTHENTICATED). Note: Though CallSecurityStatus=NotAuthenticated, A and B will continue to have secure media between themselves and the conference bridge, i.e. they will continue to receive SRTP key info because they are encrypted parties.
|
Scenario:3
Configuration: A (secure), B (secure) and C (secure).
Application sets ini parameter = true by issuing enableSecurtyStatusChangedEv ()
A calls B. B answers.
B call C. C answers.
B completes conference.
Application issues getCallSecurtyStatus().
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A' Cause: CAUSE_NORMAL
GC1:ConnCreatedEv for B' Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallSecurityStatusChangedEv for callID=GC1.
Returns the call security status of the call (Secure).
|
Participants: A, B, C
CallSecurityStatus = 3
(ENCRYPTED) will get updated in the call info.
|
Scenario:4
Application does not add call observers on A, B, C.
Configuration: A (secure), B (secure) and C (non-secure).
A calls B. B answers.
B call C. C answers.
B completes conference.
Application later adds call observers on A, B, C.
Application issues getCallSecurtyStatus().
|
CallSecurityStatusChangedEv for callID=GC1 with Cause=CAUSE_SNAPSHOT
Returns the call security status of the call.
|
Participants: A, B, C
CallSecurityStatus = 1
(NOTAUTHENTICATED)
will get updated in the call info.
|
Scenario:5
Configuration: A (secure), B (secure).
Application sets ini parameter = true by issuing
enableSecurtyStatusChangedEv()
A calls B. B answers.
B puts call on hold.
B resumes call.
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1:ConnCreatedEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallSecurityStatusChangedEv for callID=GC1
CallSecurityStatusChangedEv for callID=GC1
CallSecurityStatusChangedEv for callID=GC1
|
CallSecurityStatus = 3
(ENCRYPTED) will get updated in the call info.
CallSecurityStatus = 0
(UNKNOWN) will get updated in the call info.
CallSecurityStatus =
(ENCRYPTED) will get updated in the call info.
|
Scenario:6
Configuration: A (secure), B (secure) and C (non-secure).
Application sets ini parameter = true by issuing
enableSecurtyStatusChangedEv()
A calls B. B answers.
B consults C. C answers.
B completes transfer.
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A' Cause: CAUSE_NORMAL
GC1:ConnCreatedEv for B' Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallSecurityStatusChangedEv for callID=GC1
CallActiveEv for callID=GC2 Cause: CAUSE_NEW_CALL
GC2:ConnCreatedEv for B' Cause: CAUSE_NORMAL
GC2:ConnCreatedEv for C' Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallSecurityStatusChangedEv for callID=GC2
CallCtlSecurityStatusChangedEv for callID=GC1
|
CallSecurityStatus = 3
(ENCRYPTED) will get updated in the call info for GC1.
CallSecurityStatus = 1
(NOTAUTHENTICATED) will get updated in the call info for GC2.
CallSecurityStatus = 1
(NOTAUTHENTICATED) will get updated in the call info for GC1.
|
Scenario:7
Configuration: A (secure), B (secure), C (secure), D (secure), and E (Authenticated).
Application sets ini parameter = true by issuing enableSecurtyStatusChangedEv()
A, B and C are part of a conference Call 1.
C, D and E are a part of another conference Call 2.
C chains the 2 conferences.
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A' Cause: CAUSE_NORMAL
GC1:ConnCreatedEv for B' Cause: CAUSE_NORMAL
GC1:ConnCreatedEv for C' Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallActiveEv for callID=GC1 Cause:
CAUSE_NEW_CALL
GC2:ConnCreatedEv for C' Cause: CAUSE_NORMAL
GC2:ConnCreatedEv for D' Cause: CAUSE_NORMAL
GC2:ConnCreatedEv for E' Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallCtlSecurityStatusChangedEv for callID=GC1
|
CallSecurityStatus = 3
(ENCRYPTED) will get updated in the call info for GC1.
CallSecurityStatus = 2
(AUTHENTICATED) will get updated in the call info for GC2.
CallSecurityStatus = 1
(NOTAUTHENTICATED) will get updated in the call info for GC1 and GC2.
|
Scenario:8
Configuration: A (secure), B (secure), B (authenticated)
Application sets ini parameter = true by issuing enableSecurtyStatusChangedEv()
|
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
GC1:ConnCreatedEv for A' Cause: CAUSE_NORMAL
GC1:ConnCreatedEv for B' Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv
CallSecurityStatusChangedEv for callID=GC1.
|
CallSecurityStatus = 2
(AUTHENTICATED) will get updated in the call info for GC1.
Note: Applications who have added call observers on B' will also get the event, i.e. the new event will be delivered to RIU Parties as well.
|
JTAPI Cisco Unified IP 7931G Phone Interaction
A and C are JTAPI application controllable Addresses. B1 and B2 are Address on Cisco Unified IP 7931G Terminal. Cisco Unified IP 7931G Terminal is configured to do Transfer across Addresses. B1 and B2 has shared Line B1' and B2' respectively configured on JTAPI controllable Terminal.
Action
|
Events
|
Call Info
|
Scenario:1
Application is observing A:
A calls B1, B1 answers - GC1
User presses transfer key on Cisco Unified IP 7931G phone and dials C, call initiated from B2 to C: B2 calls C, C answers - GC2
User presses transfer key to complete transfer.
|
JTAPI Event received to CallObserver at A
GC-1 CiscoTransferStartedEv (ControllerAddress=B1,
ControllerTerminalConnection=Null, FinalCall=GC1,
TransferredCall= null)
GC-1 ConnDisconnectedEv for B1 Cause: CAUSE_UNKNOWN
GC-1 CallCtlConnDisconnectedEv for B1 Cause: CAUSE_UNKNOWN CallControlCause: CAUSE_TRANSFER
GC-1 ConnCreatedEv for C Cause: CAUSE_NORMAL
GC-1 ConnConnectedEv for C Cause: CAUSE_NORMAL
GC-1 CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC-1 CiscoTransferEndEv
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled=B1
LRP=B1
|
Scenario:2
Application is observing A, B1':
A calls B1, B1 answers - GC1
User presses transfer key on Cisco Unified IP 7931G phone and dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses transfer key to complete transfer
|
JTAPI Event received to CallObservers at A and B1'
GC-1 CiscoTransferStartedEv (ControllerAddress=B1,
ControllerTerminalConnection= TC at TB1', FinalCall=GC1,
TransferredCall= null)
GC1- TermConnDroppedEv for TB1' Cause: CAUSE_NORMAL
GC1- CallCtlTermConnDroppedEv for TB1' Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC-1 ConnDisconnectedEv for B1 Cause: CAUSE_UNKNOWN
GC-1 CallCtlConnDisconnectedEv for B1 Cause: CAUSE_UNKNOWN CallControlCause: CAUSE_TRANSFER
GC-1 ConnCreatedEv for C Cause: CAUSE_NORMAL
GC-1 ConnConnectedEv for C Cause: CAUSE_NORMAL
GC-1 CallCtlConnEstablishedEv for C Cause:
CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC-1 CiscoTransferEndEv
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled=B1
LRP=B1
|
Scenario:3
Application is observing A, B1', B2':
A calls B1, B1 answers - GC1
User presses transfer key on Cisco Unified IP 7931G phone and dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses transfer key to complete transfer
|
JTAPI Event received to CallObserver at A and B1'
GC-1 CiscoTransferStartedEv (ControllerAddress=B1,
ControllerTerminalConnection= TC at TB1', FinalCall=GC1, TransferredCall= GC2)
GC1- TermConnDroppedEv for TB1' Cause: CAUSE_NORMAL
GC1- CallCtlTermConnDroppedEv for TB1' Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC-1 ConnDisconnectedEv for B1 Cause: CAUSE_UNKNOWN
GC-1 CallCtlConnDisconnectedEv for B1 Cause: CAUSE_UNKNOWN CallControlCause: CAUSE_TRANSFER
GC-1 ConnCreatedEv for C Cause: CAUSE_NORMAL GC-1 ConnConnectedEv for C Cause: CAUSE_NORMAL
GC-1 CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled=B1
LRP=B1
|
| |
GC2- TermConnDroppedEv for TB2' Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for TB2' Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- ConnDisconnectedEv for C Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for C Cause: CAUSE_NORMAL
CallControlCause: CAUSE_TRANSFER
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC-1 CiscoTransferEndEv
CallControlCause: CAUSE_TRANSFER
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC-1 CiscoTransferEndEv
|
|
Scenario:4
Application is observing A, B1', B2' and C:
A calls B1, B1 answers - GC1
User presses transfer key on Cisco Unified IP 7931G phone and dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses transfer key to complete transfer
|
JTAPI Event received to CallObserver at A, B1', B2' and C
GC-1 CiscoTransferStartedEv (ControllerAddress=B1,
ControllerTerminalConnection=TC at TB1', FinalCall=GC1,
TransferredCall= GC2)
GC1- TermConnDroppedEv for TB1' Cause: CAUSE_NORMAL
GC1- CallCtlTermConnDroppedEv for TB1' Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC-1 ConnDisconnectedEv for B1 Cause: CAUSE_UNKNOWN
GC-1 CallCtlConnDisconnectedEv for B1 Cause: CAUSE_UNKNOWN CallControlCause: CAUSE_TRANSFER
GC-1 ConnCreatedEv for C Cause: CAUSE_NORMAL
GC-1 ConnConnectedEv for C Cause: CAUSE_NORMAL
GC-1 CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC1- TermConnCreatedEv CT Cause: Other: 31
GC1- TermConnActiveEv CT Cause: CAUSE_NORMAL
GC1- CallCtlTermConnTalkingEv CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled=B1
LRP=B1
|
| |
GC2- CiscoCallChangedEv for C Cause: CAUSE_NORMAL
GC2- TermConnDroppedEv for TB2' Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for TB2' Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- TermConnDroppedEv for CT Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- ConnDisconnectedEv for C Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for
C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC-1 CiscoTransferEndEv
|
|
Scenario:5
Application is observing C:
A calls B1, B1 answers - GC1
User presses transfer key on Cisco Unified IP 7931G phone and
dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses transfer key to complete transfer
|
JTAPI Event received to CallObserver at C
GC1- CallActiveEv for callID=101 Cause: CAUSE_NEW_CALL
GC1- ConnCreatedEv for C Cause: CAUSE_NORMAL
GC1- ConnCreatedEv for B2 Cause: CAUSE_NORMAL
GC-1CiscoTransferStartEv (ControllerAddress=B1,
ControllerTerminalConnection=Null, FinalCall=GC1,
TransferredCall= GC2) Cause: CAUSE_NORMAL
GC1- ConnConnectedEv for C Cause: CAUSE_NORMAL
GC1- CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC1- TermConnCreatedEv CT Cause: Other: 31
GC1- TermConnActiveEv CT Cause: CAUSE_NORMAL
GC1- CallCtlTermConnTalkingEv CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
|
Calling=B2
Called=C
CurrCalling=A
CurrCalled=C
LRP=B1
|
| |
GC2- CiscoCallChangedEv for C Cause: CAUSE_NORMAL
GC2- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- TermConnDroppedEv for CT Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
CallControlCause: CAUSE_TRANSFER
GC2- ConnDisconnectedEv for C Cause: CAUSE_NORMAL
GC2-
CallCtlConnDisconnectedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC1- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC1- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC1- 1 CiscoTransferEndEv Cause: CAUSE_NORMAL
|
|
| |
GC1- ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1- ConnConnectedEv for A Cause: CAUSE_NORMAL
GC1- CallCtlConnEstablishedEv for A Cause: CAUSE_NORMAL
GC1- ConnConnectedEv for B2 Cause: CAUSE_NORMAL
GC1- CallCtlConnEstablishedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
CallControlCause: CAUSE_TRANSFER
|
|
Scenario:6
Application is observing both A and C:
A calls B1, B1 answers - GC1
User presses transfer key on Cisco Unified IP 7931G phone and
dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses transfer key to complete transfer
|
JTAPI events at observer of A & C:
GC-1CiscoTransferStartEv (ControllerAddress=B1,
ControllerTerminalConnection=Null, FinalCall=GC1,
TransferredCall= GC2) Cause: CAUSE_NORMAL
GC2- CiscoCallChangedEv for C Cause: CAUSE_NORMAL
GC2- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- TermConnDroppedEv for CT Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- ConnDisconnectedEv for C Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC1- 1 CiscoTransferEndEv Cause: CAUSE_NORMAL
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled=C
LRP=B1
|
| |
GC1- ConnCreatedEv for C Cause: CAUSE_NORMAL
GC1- ConnConnectedEv for C Cause: CAUSE_NORMAL
GC1- CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER
GC1- TermConnCreatedEv CT Cause: Other: 31
GC1- TermConnActiveEv CT Cause: CAUSE_NORMAL
GC1- CallCtlTermConnTalkingEv CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRANSFER NEW META
GC-1 ConnDisconnectedEv for B1 -GC1 Cause: CAUSE_UNKNOWN
GC-1 CallCtlConnDisconnectedEv for B1 - GC1 Cause: CAUSE_UNKNOWN CallControlCause: CAUSE_TRANSFER
|
|
Scenario:7
Application is observing A:
A calls B1, B1 answers - GC1
User presses conference key on Cisco Unified IP 7931G phone and
dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses conference key to complete conference
|
JTAPI Event received to CallObserver at A
GC-1 CiscoConferenceStartedEv (ControllerAddress=B1,
ControllerTerminalConnection=Null, FinalCall=GC1, ConsultCall= null)
GC-1 ConnCreatedEv for C Cause: CAUSE_NORMAL
GC-1 ConnConnectedEv for C Cause: CAUSE_NORMAL
GC-1 CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC-1 CiscoConferenceEndEv
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled= Conference
LRP=B1
|
Scenario:8
Application is observing A, B1':
A calls B1, B1 answers - GC1
User presses conference key on Cisco Unified IP 7931G phone and
dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses conference key to complete conference
|
JTAPI Event received to CallObserver at A
GC-1 CiscoConferenceStartedEv (ControllerAddress=B1,
ControllerTerminalConnection=TC at TB1', FinalCall=GC1,
ConsultCall= null)
GC-1 ConnCreatedEv for C Cause: CAUSE_NORMAL
GC-1 ConnConnectedEv for C Cause: CAUSE_NORMAL
GC-1 CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1 TermConnPassiveEv TB1'
GC1 CallCtlTermConnBridgedEv TB1'
GC-1 CiscoConferenceEndEv
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled= Conference
LRP=B1
|
Scenario:9
Application is observing
A, B1', B2':
A calls B1, B1 answers - GC1
User presses conference key on Cisco Unified IP 7931G phone and dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses conference key to complete conference
|
JTAPI Event received to CallObserver at A, B1' and B2'
GC-1 CiscoConferenceStartedEv (ControllerAddress=B1,
ControllerTerminalConnection= TC at TB1', FinalCall=GC1, ConsultCall= GC2)
GC-1 ConnCreatedEv for C Cause: CAUSE_NORMAL
GC-1 ConnConnectedEv for C Cause: CAUSE_NORMAL
GC-1 CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1 TermConnPassiveEv - TB1'
GC1 CallCtlTermConnBridgedEv - TB1'
GC2- TermConnDroppedEv for TB2' Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for TB2' Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled= Conference
LRP=B1
|
| |
GC2- ConnDisconnectedEv for C Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC-1 CiscoConferenceEndEv
|
|
Scenario:10
Application is observing A, B1', B2', and C:
A calls B1, B1 answers - GC1
User presses conference key on Cisco Unified IP 7931G phone and dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses conference key to complete conference
|
JTAPI Event received to CallObserver at A, B1', B2' and C
GC-1 CiscoConferenceStartedEv (ControllerAddress=B1,
ControllerTerminalConnection= TC at TB1', FinalCall=GC1,
ConsultCall= GC2)
GC-1 ConnCreatedEv for C Cause: CAUSE_NORMAL
GC-1 ConnConnectedEv for C Cause: CAUSE_NORMAL
GC-1 CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1 TermConnPassiveEv - TB1'
GC1 CallCtlTermConnBridgedEv - TB1'
GC2- CiscoCallChangedEv for C Cause: CAUSE_NORMAL
GC2- TermConnDroppedEv for TB2' Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for TB2' Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled= Conference
LRP=B1
|
| |
GC2- TermConnDroppedEv for TC Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for TC Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- ConnDisconnectedEv for C Cause: CAUSE_NORMAL
GC2-
CallCtlConnDisconnectedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC-1 CiscoConferenceEndEv
|
|
Scenario:11
Application is observing C:
A calls B1, B1 answers - GC1
User presses conference key on Cisco Unified IP 7931G phone and dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses conference key to complete conference.
|
JTAPI Event received to CallObserver at C
GC1- CallActiveEv for callID=101 Cause: CAUSE_NEW_CALL
GC1- ConnCreatedEv for C Cause: CAUSE_NORMAL
GC1- ConnCreatedEv for B2 Cause: CAUSE_NORMAL
GC-1CiscoConferenceStartEv (ControllerAddress=B1,
ControllerTerminalConnection=Null, FinalCall=GC1,
ConsultCall= GC2) Cause: CAUSE_NORMAL
GC1- ConnConnectedEv for C Cause: CAUSE_NORMAL
GC1- CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1- TermConnCreatedEv CT Cause: Other: 31
GC1- TermConnActiveEv CT Cause: CAUSE_NORMAL
GC1- CallCtlTermConnTalkingEv CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1- ConnConnectedEv for B2 Cause: CAUSE_NORMAL
GC1- CallCtlConnEstablishedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
|
Calling=B2
Called=C
CurrCalling=A
CurrCalled= Conference
LRP=B1
|
| |
GC2- CiscoCallChangedEv for C Cause: CAUSE_NORMAL
GC2- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- TermConnDroppedEv for CT Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- ConnDisconnectedEv for C Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC1- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC1- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1- ConnCreatedEv for A Cause: CAUSE_NORMAL
GC1- ConnConnectedEv for A Cause: CAUSE_NORMAL
|
|
| |
GC1- CallCtlConnEstablishedEv for A Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1- ConnCreatedEv for B1 Cause: CAUSE_NORMAL
GC1- ConnConnectedEv for B1 Cause: CAUSE_NORMAL
GC1- CallCtlConnEstablishedEv for B1 Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1- 1 CiscoConferenceEndEv Cause: CAUSE_NORMAL
|
|
Scenario:12
Application is observing both A and C:
A calls B1, B1 answers - GC1
User presses conference key on Cisco Unified IP 7931G phone and dials C, call initiated from B2 to C:
B2 calls C, C answers - GC2
User presses conference key to complete conference.
|
JTAPI events at observer of A & C:
GC-1CiscoConferenceStartEv (ControllerAddress=B1,
ControllerTerminalConnection=Null, FinalCall=GC1,
ConsultCall= GC2) Cause: CAUSE_NORMAL
GC2- CiscoCallChangedEv for C Cause: CAUSE_NORMAL
GC2- ConnDisconnectedEv for B2 Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for B2 Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- TermConnDroppedEv for CT Cause: CAUSE_NORMAL
GC2- CallCtlTermConnDroppedEv for CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_TRAN
CAUSE_CONFERENCE SFER
GC2- ConnDisconnectedEv for C Cause: CAUSE_NORMAL
GC2- CallCtlConnDisconnectedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC2- CallInvalidEv Cause: CAUSE_NORMAL
GC1- ConnCreatedEv for C Cause: CAUSE_NORMAL
GC1- ConnConnectedEv for C Cause: CAUSE_NORMAL
GC1- CallCtlConnEstablishedEv for C Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
|
Calling=A
Called=B1
CurrCalling=A
CurrCalled= Conference
LRP=B1
|
| |
GC1- TermConnCreatedEv CT Cause: Other: 31
GC1- TermConnActiveEv CT Cause: CAUSE_NORMAL
GC1- CallCtlTermConnTalkingEv CT Cause: CAUSE_NORMAL CallControlCause: CAUSE_CONFERENCE
GC1- 1 CiscoConferenceEndEv Cause: CAUSE_NORMAL
|
|
Locale Infrastructure Development Scenarios
Scenario 1— JTAPI client machine has connectivity to CallManager TFTP Server
•
During install, JTAPI client would prompt user to enter TFTP IP address.
•
TFTP-IP Address is stored in JTAPI.ini parameter.
•
JTAPI Preferences application is run first time, it will take user to language tab to language selection.
•
User can select language for running JTAPI Preference application.
•
JTAPI Preference application is run second time, it will present UI in the language that user selected before.
Scenario 2— JTAPI client machine doesn't have connectivity to CallManager TFTP Server
•
During install JTAPI Client would prompt user to Enter TFTP-IP Address
•
TFTP-IP Address is stored in JTAPI.ini parameter.
•
JTAPI Preferences application is run first time, it will take user to language tab to language selection but user will have only English language to select.
•
JTAPI Preference application is run second time, it will present UI in the English languages.
•
TFTP connectivity is restored. Now JTAPI Preferences UI is run, it will take user to language selection
Scenario 3—JTAPI client machine has connectivity to CallManager TFTP Server
•
During install JTAPI Client would prompt user to Enter TFTP-IP Address
•
TFTP-IP Address is stored in JTAPI.ini parameter.
•
JTAPI Preferences application is run first time, it will take user to language tab to language selection.
•
User can select language for running JTAPI Preference application.
•
JTAPI Preference application is run second time, it will present UI in the language that user selected before.
•
Now new locale files are available with added support for a new languages.
•
User runs JTAPI Preferences application, JTAPI Preferences application would notify user about available.
•
Application restart JTAPI Preferences application, user will be support for new language.
Calling Party Normalization
Scenario 1—Incoming call from a PSTN Number (Local) to JTAPI Observed terminal.
Action
|
Events
|
Call Info
|
A call is offered from a PSTN Number [55555555] A & the Number type is [Subscriber] through the gateway to a JTAPI Observed Terminal [2222] B.
|
NEW META EVENT_________ META_CALL_STARTINGCallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for B cause: CAUSE_NORMAL
ConnInProgressEv for B Cause: CAUSE_NORMAL
CallCtlConnOfferedEv for B Cause: CAUSE_NORMAL
ConnAlertingEv for B Cause CAUSE_NORMAL
CallCtlConnAlertingEv for B Cause: CAUSE_NORMAL
TermConnCreatedEv for B Cause: CAUSE_NORMAL
TermConnRingingEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv Cause: CAUSE_NORMAL
|
Calling: A (55555555)
Called: B (2222)
getModifiedCallingAddress (): A (55555555)
getModifiedCalledAddress (): B (2222.)
getCurrentCalledAddress(): B (2222)
getCurrentCalledPartyInfo(): B (2222)
getGlobalizedCallingParty: A +140855555555
getCurrentCallingPartyInfoNumberType().getNumberType() would return: Subscriber
|
Scenario Two—Incoming call from a National PSTN Number to JTAPI Observed terminal.
Action
|
Events
|
Call Info
|
A call is offered from a Dallas PSTN Number [55555555] A & the Number type is [National] through a gateway to a JTAPI Observed Terminal [2222] B.
|
NEW META EVENT_________ META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for B cause: CAUSE_NORMAL
ConnInProgressEv for B Cause: CAUSE_NORMAL
CallCtlConnOfferedEv for B Cause: CAUSE_NORMAL
ConnAlertingEv for B Cause: CAUSE_NORMAL
CallCtlConnAlertingEv for B Cause: CAUSE_NORMAL
TermConnCreatedEv for B Cause: CAUSE_NORMAL
TermConnRingingEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv Cause: CAUSE_NORMAL
|
Calling: A (97255555555)
Called: B (2222)
getModifiedCallingAddress (): 97255555555
getModifiedCalledAddress (): 2222
getCurrentCalledAddress(): 2222
getCurrentCalledPartyInfo(): 2222
getGlobalizedCallingParty (): +197255555555
getCurrentCallingPartyInfoNumberType().getNumberType() would return: National
|
Scenario Three—Incoming call from Inter-National PSTN Number to JTAPI Observed terminal.
Action
|
Events
|
Call Info
|
A Call is offered from India PSTN Number [918028520261] & the Number type is [Inter-national] through a San Jose Gateway to a JTAPI observed Terminal [2222]
|
NEW META EVENT_________ META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for B cause: CAUSE_NORMAL
ConnInProgressEv for B Cause: CAUSE_NORMAL
CallCtlConnOfferedEv for B Cause: CAUSE_NORMAL
ConnAlertingEv for B Cause: CAUSE_NORMAL
CallCtlConnAlertingEv for B Cause: CAUSE_NORMAL
TermConnCreatedEv for B Cause: CAUSE_NORMAL
TermConnRingingEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv Cause: CAUSE_NORMAL
|
Calling: A (918028520261)
Called: B (2222)
getModifiedCallingAddress (): 918028520261
getModifiedCalledAddress (): 2222
getCurrentCalledAddress(): 2222
getCurrentCalledPartyInfo(): 2222
getGlobalizedCallingParty (): +918028520261
getCurrentCallingPartyInfoNumberType().getNumberType() would return: Inter-National
|
Scenario Four—Outgoing call from a JTAPI Observed Terminal to a PSTN number [SUBSCRIBER]
Action
|
Events
|
Call Info
|
A call is initiated from a JTAPI Observed Terminal 2222 through a San Jose gateway to a PSTN number [44444444] and the Number type is [SUBSCRIBER]
|
NEW META EVENT_________META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for B cause: CAUSE_NORMAL
ConnInProgressEv for B Cause: CAUSE_NORMAL
CallCtlConnOfferedEv for B Cause: CAUSE_NORMAL
ConnAlertingEv for B Cause: CAUSE_NORMAL
CallCtlConnAlertingEv for B Cause: CAUSE_NORMAL
TermConnCreatedEv for B Cause: CAUSE_NORMAL
TermConnRingingEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv Cause: CAUSE_NORMAL
|
Calling: A (2222)
Called: B (44444444)
getModifiedCallingAddress (): 2222
getModifiedCalledAddress (): 44444444
getCurrentCalledAddress(): 44444444
getCurrentCalledPartyInfo(): 44444444
getGlobalizedCallingParty (): 2222
getCurrentCallingPartyInfoNumberType ().getNumberType () would return: Unknown.
|
Scenario Five—Outgoing call from a JTAPI Observed Terminal to a National PSTN number.
Action
|
Events
|
Call Info
|
A call is initiated from a JTAPI Observed Terminal 2222 through a San Jose gateway to a Dallas PSTN number [97244444444] & the Number type is [NATIONAL]
|
NEW META EVENT_________ META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for B cause: CAUSE_NORMAL
ConnInProgressEv for B Cause: CAUSE_NORMAL
CallCtlConnOfferedEv for B Cause: CAUSE_NORMAL
ConnAlertingEv for B Cause: CAUSE_NORMAL
CallCtlConnAlertingEv for B Cause: CAUSE_NORMAL
TermConnCreatedEv for B Cause: CAUSE_NORMAL
TermConnRingingEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv Cause: CAUSE_NORMAL
|
Calling: A (2222)
Called: B (97244444444)
getModifiedCallingAddress (): 2222
getModifiedCalledAddress (): 97244444444
getCurrentCalledAddress(): 97244444444
getCurrentCalledPartyInfo(): 97244444444
getGlobalizedCallingParty (): 2222 getCurrentCallingPartyInfoNumberType().getNumberType() would return: Unknown.
|
Scenario Six—Outgoing call from a JTAPI Observed Terminal to Inter-National PSTN number.
Action
|
Events
|
Call Info
|
A call is initiated from a JTAPI Observed Terminal 2222 through a San Jose gateway to India PSTN number [918028520261] & the Number type is [INTERNATIONAL]
|
NEW META EVENT_________ META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for B cause: CAUSE_NORMAL
ConnInProgressEv for B Cause: CAUSE_NORMAL
CallCtlConnOfferedEv for B Cause: CAUSE_NORMAL
ConnAlertingEv for B Cause: CAUSE_NORMAL
CallCtlConnAlertingEv for B Cause: CAUSE_NORMAL
TermConnCreatedEv for B Cause: CAUSE_NORMAL
TermConnRingingEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv Cause: CAUSE_NORMAL
|
Calling: A (2222)
Called: B (918028520261)
getModifiedCallingAddress (): 2222
getModifiedCalledAddress (): 918028520261
getCurrentCalledAddress():918028520261
getCurrentCalledPartyInfo(): 918028520261
getGlobalizedCallingParty (): 2222
getCurrentCallingPartyInfoNumberType().getNumberType() would return: Unknown.
|
Scenario Seven—Incoming call from a PSTN Redirected to another PSTN by a JTAPI Observed Terminal.
Action
|
Events
|
Call Info
|
A call is offered from PSTN [55555555] through a San Jose Gateway to a JTAPI observed terminal [2222] which redirects the call to another San Jose PSTN [44444444].
In CallState [Idle] the fwdDestinationAddress (Redirect Address) should be a minus (-).
|
NEW META EVENT_________ META_CALL_STARTING
CallActiveEv for callID=GC1 Cause: CAUSE_NEW_CALL
ConnCreatedEv for A Cause: CAUSE_NORMAL
ConnConnectedEv for A Cause: CAUSE_NORMAL
CallCtlConnInitiatedEv for A Cause: CAUSE_NORMAL
TermConnCreatedEv for A Cause: CAUSE_NORMAL
TernConnActiveEv for A Cause: CAUSE_NORMAL
CallCtlConnDialingEv for A Cause: CAUSE_NORMAL
CallCtlConnEstabilishedEv for A Cause: CAUSE_NORMAL
ConnCreatedEv for B cause: CAUSE_NORMAL
ConnInProgressEv for B Cause: CAUSE_NORMAL
CallCtlConnOfferedEv for B Cause: CAUSE_NORMAL
ConnAlertingEv for B Cause: CAUSE_NORMAL
CallCtlConnAlertingEv for B Cause: CAUSE_NORMAL
TermConnCreatedEv for B Cause: CAUSE_NORMAL
TermConnRingingEv for B Cause: CAUSE_NORMAL
CallCtlTermConnTalkingEv Cause: CAUSE_NORMAL
CallRedirectReq Redirect Address = C CallRedirectRes
ConnCreatedEv at C Cause: CAUSE_REDIRECTED
ConnInProgress Calling party: A, Called Party: C, LRP: B
CallRedirectRes CallStateChangedEv (IDLE) Reason: REDIRECT
|
Calling: A (55555555)
Called: B (2222)
getModifiedCallingAddress (): 55555555
getModifiedCalledAddress (): 2222
getCurrentCalledAddress(): 2222
getCurrentCalledPartyInfo(): 2222
getGlobalizedCallingParty (): +140855555555
getCurrentCallingPartyInfoNumberType().getNumberType() would return: SUBSCRIBER
destinationAddress: 44444444.
getCurrentCallingPartyInfoNumberType().getNumberType() would return: Unknowns
|
Scenario Eight—Incoming call from a PSTN Number (Local) to JTAPI Observed terminal who transfer to another JTAPI observed terminal.
Action
|
Events
|
Call Info
|
A call is offered from a PSTN Number [55555555] A & the Number type is [Subscriber] through a San Jose gateway to a JTAPI observed Terminal [1111] X which transfers the call to another JTAPI Observed Terminal [2222] B
|
After Transfer:
GC1:
CiscoTransferStartEv
ConnCreatedEv for B
ConnConnectedEv for B
CallCtlConnEstablishedEv for B
TermConnDroppedEv for X
ConnDisconnectedEv for X
CallCtlConnDisconnectedEv for X
CiscoTransferStartEv
GC2:
CiscoTransferStartEv
TermConnDroppedEv for X
ConnDisconnectedEv for X
CallCtlConnDisconnectedEv for X
CiscoTransferStartEv
|
After Transfer:
Calling: A (55555555)
Called: B (2222)
getModifiedCallingAddress (): A (+140855555555)
getModifiedCalledAddress (): B (2222.)
getCurrentCalledAddress(): B (2222)
getCurrentCalledPartyInfo(): B (2222)
getGlobalizedCallingParty: A +140855555555
getCurrentCallingPartyInfoNumberType().getNumberType() would return: Subscriber
|
Click to Conference
A, B, C and D are addresses and TermA, TermB, TermC and TermD are corresponding terminals.
Action
|
Events
|
Call Info
|
A and B are in a call GC1 created using click-to-call. User adds C to the conference call. GC2 is the initial call at C. Application is observing only C
|
GC2: CallActiveEv Cause: CAUSE_NEW_CALL CiscoFeatureReason: REASON_CONFERENCE
|
callingAddress=unknown calledAddress=C
CurrentCalling=unknown
CurrentCalled=C
|
| |
GC2: ConnCreatedEv C CiscoFeatureReason=REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: ConnInProgressEv C CiscoFeatureReason=REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: CallCtlConnOfferedEv C CiscoFeatureReason=REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: ConnAlertingEv C CiscoFeatureReason=REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: CallCtlConnAlertingEv C CiscoFeatureReason=REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: TermConnCreatedEv TermC
|
|
| |
GC2: TermConnRingingEv TermC CiscoFeatureReason=REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: CallCtlTermConnRingingEv TermC CiscoFeatureReason=REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
CiscoCallChangedEv GC2->GC1 CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: CallActiveEv Cause: CAUSE_NEW_CALL CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnCreatedEv C CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnAlertingEv C GC1 CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnAlertingEv C GC1 CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: TermConnCreatedEv TermC
|
|
| |
GC1: TermConnRingingEv TermC CiscoCallChangedEv GC2->GC1 CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: TermConnDroppedEv TermC CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: CallCtlTermConnDroppedEv TermC CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: ConnDisconnectedEv C CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: CallCtlConnDisconnectedEv C CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC2: CallInvalidEv CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnCreatedEv B CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnConnectedEv B CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnEstablishedEv B CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnCreatedEv A CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnConnectedEv A CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnEstablishedEv A CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnConnectedEv C CiscoFeatureReason =REASON_NORMALCause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnEstablishedEv C CiscoFeatureReason =REASON_NORMALCause: CAUSE_NORMAL
|
|
| |
GC1: TermConnTalkingEv TermC CiscoFeatureReason =REASON_NORMALCause: CAUSE_NORMAL
|
|
A calls B using click-to-call - GC1. A adds C to the call using click-2-conf. Application has call observer on A
|
GC1: CallActiveEv Cause: CAUSE_NEW_CALL CiscoFeatureReason: REASON_REFER
|
Calling address: A
Called address: B
Current calling: A
Current called: B
Last redirecting party=null
After C is conferenced, callinfo is not applicable.
|
| |
GC1: ConnCreatedEv A CiscoFeatureReason= REASON_REFER Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnInProgressEv A CiscoFeatureReason= REASON_REFER Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnOfferedEv A CiscoFeatureReason= REASON_REFER Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnAlertingEv A CiscoFeatureReason=REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnAlertingEv A CiscoFeatureReason=REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: TermConnCreatedEv TermA
|
|
| |
GC1: TermConnRingingEv TermA CiscoFeatureReason=REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlTermConnRingingEv TermA CiscoFeatureReason=REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: GC1: ConnConnectedEv A CiscoFeatureReason =REASON_NORMAL cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnEstablishedEv A CiscoFeatureReason =REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
TermConnActiveEv TermA CiscoFeatureReason =REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: TermConnTalkingEv TermA CiscoFeatureReason =REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnCreatedEv B CiscoFeatureReason= REASON_REFER Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnInProgressEv B CiscoFeatureReason= REASON_REFER Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnOfferedEv B CiscoFeatureReason= REASON_REFER Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnAlertingEv B CiscoFeatureReason= REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnAlertingEv B CiscoFeatureReason= REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: GC1: ConnConnectedEv B CiscoFeatureReason = REASON_NORMAL: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnEstablishedEv B CiscoFeatureReason = REASON_NORMAL Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnCreatedEv C CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnAlertingEv C CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnAlertingEv TermC CiscoFeatureReason = REASON_CLICK_TO_CONFERENCE Cause: CAUSE_NORMAL
|
|
A consults with D-GC3. A completes conference. The events received by application remains the same (as that of consult conference).
|
GC1: TermConnHeldEv TermA
|
For consult call GC3: Calling address: A
Called address: D
Callinfo not applicable after conference is completed.
|
| |
GC3: ConsultCallActiveEv
|
|
| |
GC3: ConnCreatedEv A
|
|
| |
GC3: ConnCreatedEv D
|
|
| |
GC3: CallCtlConnAlerting D
|
|
| |
GC3: ConnConnectedEv D
|
|
| |
GC3: CallCtlConnEstablishedEv B
|
|
| |
CiscoConferenceStartEv GC3->GC1
|
|
| |
GC3: CallCtlConnDisconnectedEv A
|
|
| |
GC3: CallCtlConnDisconnectedEv D
|
|
| |
GC1: ConnCreatedEv D
|
|
| |
GC1: CallCtlConnEstablishedEv D
|
|
| |
GC1: TermConnTalkingEv TermA
|
|
| |
GC3: CallInvalidEv
|
|
| |
CiscoConferenceEndEvent
|
|
User drops D using click-2-conf feature
User drops C using click-2-conference interface
|
GC1: ConnDisconnectedEv D CiscoFeatureReason = REASON_CONFERENCE Cause: CAUSE_NORMAL
|
Calling address: A
Called address: B
|
| |
GC1: CallCtlConnDisconnectedEv D CiscoFeatureReason = REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: ConnDisconnectedEv C CiscoFeatureReason = REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
| |
GC1: CallCtlConnDisconnectedEv C CiscoFeatureReason = REASON_CONFERENCE Cause: CAUSE_NORMAL
|
|
Drop all parties a conference.
A calls B using click-2-call. User adds C to the conference using click-2-conference.
All parties are dropped using click to conference.
Application has call observers on A, B and C.
|
GC1: CallActiveEv Cause: CAUSE_NEW_CALL CiscoFeatureReason: REASON_REFER
GC1: ConnCreatedEv A Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_REFER
|
Calling address: A
Called address: B
GC2: Calling address=unknown
Called address: C
|
| |
GC1: ConnInProgressEv A Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_REFER
|
|
| |
GC1: CallCtlConnOfferedEv A Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_REFER
|
|
| |
GC1: ConnAlertingEv A Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_REFER
|
|
| |
GC1: CallCtlConnAlertingEv A Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_REFER
|
|
| |
GC1: TermConnCreatedEv TermA
|
|
| |
GC1: TermConnRingingEv TermA Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlTermConnRingingEv TermA
|
|
| |
GC1: ConnConnectedEv A Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlConnEstablishedEv A Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: TermConnActiveEv TermA Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlTermConnTalkingEv TermA Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: ConnCreatedEv B Cause: CAUSE_NORMAL CiscoFeatureReason:REASON_REFER
|
|
| |
GC1: ConnInProgressEv B Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_REFER
|
|
| |
GC1: CallCtlConnOfferedEv B Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_REFER
|
|
| |
GC1: ConnAlertingEv B Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlConnAlertingEv B Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: TermConnCreatedEv TermB Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: TermConnRingingEv TermB Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlTermConnRingingEv TermB Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: ConnConnectedEv B Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlConnEstablishedEv TermB Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: TermConnActiveEv TermB Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlTermConnTalkingEv TermB Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC2: CallActiveEv Cause: CAUSE_NEW_CALL CiscoFeatureReason: REASON_CONFERENCE
|
|
| |
GC2: ConnCreatedEv Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CONFERENCE
|
|
| |
GC2: ConnInProgressEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CONFERENCE
|
|
| |
GC2: CallCtlConnOfferedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CONFERENCE
|
|
| |
GC2: ConnAlertingEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC2: CallCtlConnAlertingEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC2: TermConnCreatedEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC2: TermConnRingingEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC2: CallCtlTermConnRingingEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC2: CiscoCallChangedEv GC2->GC1 Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnCreatedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnInProgressEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: CallCtlConnOfferedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnAlertingEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: CallCtlConnAlertingEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: TermConnCreatedEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: TermConnRingingEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: CallCtlTermConnRingingEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC2: TermConnDroppedEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC2: CallCtlTermConnDroppedEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC2: ConnDisconnectedEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC2: CallCtlConnDisconnectedEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC2: CallInvalidEv Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnConnectedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: CallCtlConnEstablishedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: TermConnActiveEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: CallCtlTermConnTalkingEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
All parties are dropped using click-2-conference
GC1: TermConnDroppedEv TermA Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlTermConnDroppedEv TermA Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: ConnDisconnectedEv A Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlConnDisconnectedEv A Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: TermConnDroppedEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlTermConnDroppedEv TermC Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: ConnDisconnectedEv C Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlConnDisconnectedEv C Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: TermConnDroppedEv TermB Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlTermConnDroppedEv TermB Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: ConnDisconnectedEv B Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlConnDisconnectedEv C Cause: CAUSE_NORMAL CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallInvalidEv
|
|
A calls B using click-to-call - GC1. A adds C to the call using click-2-conf. User drops party C. Application has call observer on C only.
|
GC1: TermConnDroppedEv TermC CiscoFeatureReason= REASON_CONFERENCE
|
NA
|
| |
GC1: CallCtlTermConnDroppedEv TermC CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: ConnDisconnectedEv C CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlConnDisconnectedEv C CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: ConnDisconnectedEv A CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlConnDisconnectedEv A CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: ConnDisconnectedEv B CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallCtlConnDisconnectedEv B CiscoFeatureReason= REASON_CONFERENCE
|
|
| |
GC1: CallInvalidEv
|
|
A calls B using GC1. Address C is configured on TermC1 and TermC2. Application has call observer on C
|
GC2: CallActiveEv CallActiveEv Cause: CAUSE_NEW_CALL CiscoFeatureReason: REASON_ CONFERENCE
|
Calling=unknown
Called=C
Last redirecting=null
|
User uses click-to-conference to C.
|
GC2: ConnCreatedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ CONFERENCE
|
|
| |
GC2: ConnInProgressEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ CONFERENCE
|
|
| |
GC2: CallCtlConnOfferedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ CONFERENCE
|
|
| |
GC2: ConnAlertingEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ NORMAL
|
|
| |
GC2: CallCtlConnAlertingEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ NORMAL
|
|
| |
GC2: TermConnCreatedEv TermC1 Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ NORMAL
|
|
| |
GC2: TermConnRingingEv TermC1 Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ NORMAL
|
|
| |
GC2: TermConnCreatedEv TermC2 Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ NORMAL
|
|
| |
GC2: TermConnRingingEv TermC2 Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ NORMAL
|
|
| |
GC1: CallActiveEv Cause: CAUSE_NEW_CALL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnCreatedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
CiscoCallChangedEv GC2->GC1 TermConn TermC1 CiscoFeatureReason: REASON_CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnAlertingEv C Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: CallCtlConnAlertingEv C Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: TermConnCreatedEv TermC1 Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: TermConnRingingEv TermC1 Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
CiscoCallChangedEv GC2->GC1 TermConn TermC2 Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: TermConnCreatedEv TermC2 Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: TermConnRingingEv TermC2 Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC2: CallCtlConnDisconnectedEv C Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC2: TermConnDroppedEv TermC1 Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC2: TermConnDroppedEv TermC2 Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC2: CallInvalidEv
|
|
| |
GC1: ConnCreatedEv B Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnConnectedEv B Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: CallCtlConnEstablishedEv B Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnCreatedEv A Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnConnectedEv A Cause:CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: CallCtlConnEstablishedEv A Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_ CLICK_TO_CONFERENCE
|
|
| |
GC1: ConnConnectedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
C answers at TermC1
|
| |
GC1: CallCtlConnEstablishedEv C Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlTermConnTalkingEv TermC1 Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: TermConnPassEv TermC2 Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
| |
GC1: CallCtlTermConnInUseEv TermC2 Cause: CAUSE_NORMAL CiscoFeatureReason: REASON_NORMAL
|
|
Call Pickup
The basic scenarios are as follows:
•
B and C are devices in a call pick up group. A is a device not in it.
•
A calls B.
•
C goes off-hook, and presses it's "Pickup" softkey.
•
C is now on the call with A.
Each device was observed as follows:
•
Observing A, B, and C
•
Observing A and B
•
Observing A and C
•
Observing B and C
•
Observing only A
•
Observing only B
•
Observing only C
Only observing C, was the primary concern for this fix, as it was what the customer was doing in their scenario. The feature request was for when only observing C, being able to get information about the original called party (A) on Pickup. All test cases passed and the correct info was shown for all of them.
These test cases were run with auto-pickup both enabled and disabled, and the functionality of the two differed greatly. Most of the test cases are enumerated below.
The "basic call" from A to B is the same in all cases, and is only shown in the first case below.
Scenario One
Observing all devices and auto-pickup enabled.
Action
|
Events
|
Call Info (GCID Info)
|
A goes offhook and dials B (Basic Call) B is ringing C goes offhook and presses "Pickup" softkey Old Conn for C is dropped B is dropped / cleaned up C connection on Call 1 is established
|
GC1-CallActiveEvent-NONE
|
Calling: A, CCalled: NONE
Calling: A, Called: NONE
|
| |
GC1-ConnCreatedEvent-A
|
CAUSE_NEW_CALL
|
| |
GC1-ConnConnectedEvent-A
|
REASON_NORMAL
|
| |
GC1-CallCtlConnInitiatedEv-A
|
LRP: NONE
|
| |
GC1-TermConnCreatedEvent
|
CCalling: A, CCalled: B
|
| |
GC1-TermConnActiveEvent
|
Calling: A, Called: B
|
| |
GC1-CallCtlTermConnTalkingEv
|
CCalling: C, CCalled: NONE
|
| |
GC1-CallCtlConnDialingEv-A
|
CAUSE_NEW_CALL
|
| |
GC1-CallCtlConnEstablishedEv-A
|
REASON_NORMAL
|
| |
GC1-ConnCreatedEvent-B
|
LRP: NONE
|
| |
GC1-ConnInprogressEvent-B
|
REASON_CALLPICKUP
|
| |
GC1-CallCtlConnOfferedEv-B
|
CCalling: A, CCalled: C
|
| |
GC1-ConnAlertingEvent-B
|
LRP: NONE
|
| |
GC1-CallCtlConnAlertingEv
|
REASON_CALLPICKUP
|
| |
GC1-TermConnCreatedEvent
|
CCalling: C, CCalled: NONE
|
| |
GC1-TermConnRingingEvent
|
LRP: NONE
|
| |
GC1-CallCtlTermConnRingingEv
|
REASON_NORMAL
|
| |
GC2-CallActiveEvent-NONE
|
REASON_CALLPICKUP
|
| |
GC2-ConnCreatedEvent-C
|
CCalling: A, CCalled: C
|
| |
GC2-ConnConnectedEvent-C
|
REASON_NORMAL
|
| |
GC2-CallCtlConnInitiatedEv-C
|
|
| |
GC2-TermConnCreatedEvent
|
|
| |
GC2-TermConnActiveEvent
|
|
| |
GC2-CallCtlTermConnTalkingEv
|
|
| |
GC2-CiscoCallChangedEv
|
|
| |
GC1-ConnCreatedEvent-C
|
|
| |
GC1-ConnConnectedEvent-C
|
|
| |
GC1-CallCtlConnInitiatedEv-C
|
|
| |
GC1-TermConnCreatedEvent
|
|
| |
GC1-TermConnActiveEvent
|
|
| |
GC1-CallCtlTermConnTalkingEv
|
|
| |
GC2-TermConnDroppedEv
|
|
| |
GC2-CallCtlTermConnDroppedEv
|
|
| |
GC2-ConnDisconnectedEvent-C
|
|
| |
GC2-CallCtlConnDisconnectedEv-C
|
|
| |
GC2-CallInvalidEvent
|
|
| |
GC2-CallObservationEndedEv
|
|
| |
GC1-TermConnDroppedEv
|
|
| |
GC1-CallCtlTermConnDroppedEv
|
|
| |
GC1-ConnDisconnectedEvent-B
|
|
| |
GC1-CallCtlConnDisconnectedEv-B
|
|
| |
GC1-CallCtlConnEstablishedEv-C
|
|

Note
Both B and C in the following scenarios have exactly the same behavior and events. Only the behavior of device C (the one picking up the call) changes.
Scenario Two
Observing all devices with auto-pickup disabled.
Action
|
Events
|
Call ID Info
|
C goes offhook and presses Pickup softkey
Call 2 gets dropped / invalidated
C gets a connection on Call 1
B is dropped from Call 1
C is ringing
C is on call with A
|
GC2-CallActiveEvent
GC2-ConnCreatedEvent-C
GC2-ConnConnectedEvent-C
GC2-CallCtlConnInitiatedEv-C
GC2-TermConnCreatedEvent
GC2-TermConnActiveEvent
GC2-CallCtlTermConnTalkingEv
GC2-TermConnDroppedEv GC2-CallCtlTermConnDroppedEv GC2-ConnDisconnectedEvent-C GC2-CallCtlConnDisconnectedEv-C GC2-CallInvalidEvent GC2-CallObservationEndedEv
GC1-ConnCreatedEvent-C GC1-ConnInprogressEvent-C GC1-CallCtlConnOfferedEv-C
GC1-TermConnDroppedEv GC1-CallCtlTermConnDroppedEv GC1-ConnDisconnectedEvent-B GC1-CallCtlConnDisconnectedEv-B
GC1-ConnAlertingEvent-C GC1-CallCtlConnAlertingEv-C GC1-TermConnCreatedEvent GC1-TermConnRingingEvent GC1-CallCtlTermConnRingingEv
GC1-ConnConnectedEvent-C GC1-CallCtlConnEstablishedEv-C GC1-TermConnActiveEvent GC1-CallCtlTermConnTalkingEv
|
CCalling C, CCalled: NONE
LRP: NONE
REASON_NORMAL
REASON_CALLPICKUP
CCalling A, CCalled: C
Calling: A, Called: C, LRP: B
REASON_CALLPICKUP
Calling A, CCalled: C
Calling: A, Called: C, LRP: B
REASON_CALLPICKUP
REASON_NORMAL
REASON_NORMAL
|
The flow of events differs greatly when the auto-pickup option is enabled or disabled. When Auto Call Pickup is disabled and a user presses the Pickup softkey (C), the phone rings. The user has to answer the phone as if it is a normal call. When the phone is ringing, the original call that was created when they went offhook is destroyed, they are connected to the existing call, and the old party (B) is removed from the call. There is no CiscoCallChangedEv generated when "Auto Call Pickup" is disabled, because the call does not change, it is destroyed before C joins the new call.
A Group Pickup scenario follows, during which the Group Pickup softkey is used in place of the Pickup softkey. This required actually dialing the number for the pickup group. Group Pickup also is subject to the Auto Call Pickup service parameter. The general flow and call events are identical to the normal Call Pickup scenarios, except with added events for the required dialing of the pickup number. These additional events bold in the table to clearly show the changes that Group Pickup makes.
Scenario Three
Observing all devices with group pickup and auto-pickup enabled.
Action
|
Call Event
|
Call ID Info
|
C goes offhook and presses "Group Pickup" softkey
C is dialing the PU Number
C is added to the original call Pickup added to original call
Pickup # is removed Call 2
C is dropped from Call 2
Pickup # is removed Call 1
B is dropped / invalidated
|
GC1 [add to others to clarify]
GC2-CallActiveEvent-NONE GC2-ConnCreatedEvent-C GC2-ConnConnectedEvent-C GC2-CallCtlConnInitiatedEv-C GC2-TermConnCreatedEvent GC2-TermConnActiveEvent GC2-CallCtlTermConnTalkingEv
GC2-CallCtlConnDialingEv-C GC2-ConnCreatedEvent-PU GC2-ConnInprogressEvent-PU GC2-CallCtlConnEstablishedEv-C GC2-CiscoCallChangedEv
GC1-ConnCreatedEvent-C GC1-ConnCreatedEvent-PU GC1-ConnConnectedEvent-C GC1-CallCtlConnEstablishedEv-C GC1-TermConnCreatedEvent GC1-TermConnActiveEvent GC1-CallCtlTermConnTalkingEv GC1-ConnInprogressEvent-PU GC1-CallCtlConnOfferedEv-PU
GC2-ConnDisconnectedEvent-PU GC2-CallCtlConnDisconnectedEv-PU GC2-TermConnDroppedEv GC2-CallCtlTermConnDroppedEv GC2-ConnDisconnectedEvent-C GC2-CallCtlConnDisconnectedEv-C GC2-CallInvalidEvent GC2-CallObservationEndedEv
GC1-ConnDisconnectedEvent-PU GC1-CallCtlConnDisconnectedEv-PU
GC1-TermConnDroppedEv GC1-CallCtlTermConnDroppedEv GC1-ConnDisconnectedEvent-B GC1-CallCtlConnDisconnectedEv-B
|
CCalling: C, CCalled: NONE LRP: NONE REASON_NORMAL
CCalling: C, CCalled: NONE REASON_CALLPICKUP CCalling: C, CCalled: PU, LRP: PU
CCalling C, CCalled: PU CCalling: A, CCalled: C, LRP: B Calling: A, Called: B REASON_CALLPICKUP
CCalling: A, CCalled: C, LRP:B REASON_CALLPICKUP, LRP: PU
CCalling: C, CCalled: PU REASON_CALLPICKUP
CCalling: A, CCalled C, LRP: B REASON_CALLPICKUP
CCalling: A, CCalled C, LRP: B REASON_CALLPICKUP
|
There are only a handful of changes for the above Group Pickup case, and they all directly relate to the extra required step of dialing the pickup number.
Scenario Four
Observing all devices with Group Pickup and Auto-Pickup disabled.
Action
|
Event
|
Call Info
|
C goes offhook and pressed "Group Pickup" softkey
C is dialing the PU number
PU is removed from Call 2
C is removed from Call 2
Call 2 is destroyed
C gets a connection on Call 1
B is dropped from Call 1
C is ringing
C picks up
|
GC1
GC2-CallActiveEvent-NONE GC2-ConnCreatedEvent-C GC2-ConnConnectedEvent-C GC2-CallCtlConnInitiatedEv-C GC2-TermConnCreatedEvent GC2-TermConnActiveEvent GC2-CallCtlTermConnTalkingEv
GC2-CallCtlConnDialingEv-C GC2-ConnCreatedEvent-PU GC2-ConnInprogressEvent-PU GC2-CallCtlConnEstablishedEv-C
GC2-ConnDisconnectedEvent-PU GC2-CallCtlConnDisconnectedEv-PU GC2-TermConnDroppedEv GC2-CallCtlTermConnDroppedEv GC2-ConnDisconnectedEvent-C GC2-CallCtlConnDisconnectedEv-C GC2-CallInvalidEvent GC2-CallObservationEndedEv
GC1-ConnCreatedEvent[ADDRS] GC1-ConnInprogressEvent GC1-CallCtlConnOfferedEv
GC1-TermConnDroppedEv GC1-CallCtlTermConnDroppedEv GC1-ConnDisconnectedEvent GC1-CallCtlConnDisconnectedEv GC1-ConnAlertingEvent GC1-CallCtlConnAlertingEv GC1-TermConnCreatedEvent
GC1-TermConnRingingEvent GC1-CallCtlTermConnRingingEv GC1-ConnConnectedEvent GC1-CallCtlConnEstablishedEv GC1-TermConnActiveEvent GC1-CallCtlTermConnTalkingEv
|
CCalling: C, CCalled: NO, NO LRP REASON_NORMAL
CCalling: C, CCalled: NO, NO LRP REASON_NORMAL
CCalling: C, CCalled: PU
CCalling: C, CCalled: PU, LRP: PU REASON_CALLPICKUP
CCalling: A, CCalled: C, LRP: B Calling: A, Called: B REASON_CALLPICKUP
CCalling: A, CCalled: C, LRP: B REASON_CALLPICKUP
REASON_NORMAL
CCalling: A, CCalled: C, LRP: B REASON_NORMAL
|
The tables above have scenarios during which all of the devices were observed. The devices were run with every possible combination, across all varieties of Pickup and Group Pickup. Parts of the scenarios had the exact same output and others were redundant and are not shown here. For example, device A and B were identical and shown only once.
Scenario Five
Only observing device B.
Action
|
Call Events
|
Call IDs/Call Info
|
A is in the process of calling B
B is ringing
A is removed from Call 1
B is removed from Call 1
|
GC1-CallActiveEvent-NONE GC1-ConnCreatedEvent-B GC1-ConnInprogressEvent-B GC1-CallCtlConnOfferedEv-B GC1-ConnCreatedEvent-A GC1-ConnConnectedEvent-A GC1-CallCtlConnEstablishedEv-A GC1-ConnAlertingEvent-B GC1-CallCtlConnAlertingEv-B GC1-TermConnCreatedEvent
GC1-TermConnRingingEvent GC1-CallCtlTermConnRingingEv
GC1-ConnDisconnectedEvent-A GC1-CallCtlConnDisconnectedEv-A
GC1-TermConnDroppedEv GC1-CallCtlTermConnDroppedEv GC1-ConnDisconnectedEvent-B GC1-CallCtlConnDisconnectedEv-B GC1-CallInvalidEvent GC1-CallObservationEndedEv
|
CCalling: A, CCalled: B, Calling: A, Called: B, LRP: NONE REASON_NORMAL
REASON_CALLPICKUP
REASON_NORMAL
|
Scenario Six
Observing only device A.
Action
|
Call Events
|
Call IDs/Call Info
|
A goes offhook and dials B
B is ringing
C is ringing
B is removed from Call 1
|
GC1-CallActiveEvent-NONE GC1-ConnCreatedEvent-A GC1-ConnConnectedEvent-A GC1-CallCtlConnInitiatedEv-A GC1-TermConnCreatedEvent GC1-TermConnActiveEvent GC1-CallCtlTermConnTalkingEv GC1-CallCtlConnDialingEv-A GC1-CallCtlConnEstablishedEv-A GC1-ConnCreatedEvent-B GC1-ConnInprogressEvent-B GC1-CallCtlConnOfferedEv-B
GC1-ConnAlertingEvent-B GC1-CallCtlConnAlertingEv-B GC1-ConnCreatedEvent-C GC1-ConnInprogressEvent-C GC1-CallCtlConnOfferedEv-C
GC1-ConnAlertingEvent-C GC1-CallCtlConnAlertingEv-C
GC1-ConnDisconnectedEvent-B GC1-CallCtlConnDisconnectedEv-B GC1-ConnConnectedEvent-C GC1-CallCtlConnEstablishedEv-C
|
CCalling: A, CCalled: NO, NO LRP REASON_NORMAL
CCalling A, CCalled B, Called: NOT SET LRP: NONE
CCalling: A, CCalled: C, LRP: B Called: NOT SET REASON_CALLPICKUP
REASON_NORMAL
REASON_CALLPICKUP
REASON_NORMAL
|
Scenario Seven
Observing only device C with Auto-Pickup enabled.
Action
|
Call Events
|
Call IDs/Call Info
|
C goes offhook and presses "Pickup" hotkey
C is connected to Call 1
C is dropped from Call 2
Call 2 is invalidated / cleared
A and C are connected on Call 1
|
GC2-CallActiveEvent-NONE GC2-ConnCreatedEvent-C GC2-ConnConnectedEvent-C GC2-CallCtlConnInitiatedEv-C GC2-TermConnCreatedEvent GC2-TermConnActiveEvent GC2-CallCtlTermConnTalkingEv GC2-CiscoCallChangedEv GC1-CallActiveEvent-NONE GC1-ConnCreatedEvent-C GC1-ConnConnectedEvent-C GC1-CallCtlConnInitiatedEv GC1-TermConnCreatedEvent
GC1-TermConnActiveEvent GC1-CallCtlTermConnTalkingEv
GC2-TermConnDroppedEv GC2-CallCtlTermConnDroppedEv GC2-ConnDisconnectedEvent-C GC2-CallCtlConnDisconnectedEv-C GC2-CallInvalidEvent GC2-CallObservationEndedEv
GC1-ConnCreatedEvent-A GC1-ConnConnectedEvent-A GC1-CallCtlConnEstablishedEv-A GC1-CallCtlConnEstablishedEv-C
|
CCalling: C, CCalled: NO, NO LRP REASON_NORMAL
REAON_CALLPICKUP CCalling A, CCalled: NONE LRP: NONE
CCalling: A, CCalled: C, LRP: B REASON_CALLPICKUP
CCalling: C, CCalled: NONE REASON_CALLPICKUP
REASON_CALLPICKUP
CCalling A, CCalled: C, LRP: B REASON_CALLPICKUP
REASON_NORMAL
|
Scenario Eight
Observing only device C with Auto-Pickup disabled.
Action
|
Call Events
|
Call IDs/Call Info
|
C goes offhook and pressed "Pickup" softkey
Call 2 is destroyed
C is added to Call 1, but does not pick up
C is ringing
C picks up, and is connected to Call 1
|
GC2-CallActiveEvent-NONE GC2-ConnCreatedEvent-C GC2-ConnConnectedEvent-C GC2-CallCtlConnInitiatedEv-C GC2-TermConnCreatedEvent GC2-TermConnActiveEvent GC2-CallCtlTermConnTalkingEv
GC2-TermConnDroppedEv GC2-CallCtlTermConnDroppedEv GC2-ConnDisconnectedEvent-C GC2-CallCtlConnDisconnectedEv-C GC2-CallInvalidEvent GC2-CallObservationEndedEv
GC1-CallActiveEvent GC1-ConnCreatedEvent-C GC1-ConnInprogressEvent-C GC1-CallCtlConnOfferedEv-C GC1-ConnCreatedEvent-A GC1-ConnConnectedEvent-A GC1-CallCtlConnEstablishedEv-A GC1-ConnAlertingEvent-C GC1-CallCtlConnAlertingEv-C GC1-TermConnCreatedEvent GC1-TermConnRingingEvent GC1-CallCtlTermConnRingingEv
GC1-ConnConnectedEvent-C GC1-CallCtlConnEstablishedEv-C GC1-TermConnActiveEvent GC1-CallCtlTermConnTalkingEv
|
CCalling: C, CCalled: NO, NO LRP REASON_NORMAL
REASON_CALLPICKUP CCalling: C, CCalled: NONE
REASON_NORMAL
CCalling: A, CCalled: C, LRP: B REASON_CALLPICKUP
REASON_NORMAL
CCalling: A, CCalled: C, LRP: B REASON_NORMAL
|
Scenario Nine
Observing only device C with Group Pickup and AutoPickup enabled.
Action
|
Call Event
|
Call IDs/Call Info
|
C goes offhook and presses "Pickup" softkey
C dials the Pickup Number
C is added to Call 1 PU is added to Call 1
PU # is removed from Call 2
C is removed from Call 2
Call 2 I invalidated / cleared
C is connected to Call 1
PU is removed from Call 1
|
GC2-CallActiveEvent-NONE GC2-ConnCreatedEvent-C GC2-ConnConnectedEvent-C GC2-CallCtlConnInitiatedEv-C GC2-TermConnCreatedEvent GC2-TermConnActiveEvent GC2-CallCtlTermConnTalkingEv
GC2-CallCtlConnDialingEv-C GC2-ConnCreatedEvent-PU GC2-ConnInprogressEvent-PU GC2-CallCtlConnEstablishedEv-C GC2-CiscoCallChangedEv GC1-CallActiveEvent
GC1-ConnCreatedEvent-C GC1-ConnCreatedEvent-PU GC1-ConnConnectedEvent-C GC1-CallCtlConnEstablishedEv-C GC1-TermConnCreatedEvent GC1-TermConnActiveEvent GC1-CallCtlTermConnTalkingEv GC1-ConnInprogressEvent-PU GC1-CallCtlConnOfferedEv-PU
GC2-ConnDisconnectedEvent-PU GC2-CallCtlConnDisconnectedEv-PU GC2-TermConnDroppedEv GC2-CallCtlTermConnDroppedEv
GC2-ConnDisconnectedEvent-C GC2-CallCtlConnDisconnectedEv-C GC2-CallInvalidEvent GC2-CallObservationEndedEv
GC1-ConnCreatedEvent-A GC1-ConnConnectedEvent-PU GC1-CallCtlConnEstablishedEv-PU GC1-ConnConnectedEvent-C GC1-CallCtlConnEstablishedEv-C
GC1-ConnDisconnectedEvent-PU GC1-CallCtlConnDisconnectedEv-PU
|
CCalling: C, CCalled: NO, NO LRP REASON_NORMAL
CCalling: C, CCalled: PU
CCalling: C, CCalled: PU, LRP: PU REASON_CALLPICKUP REASON_NORMAL REASON_CALLPICKUP CCalling: A,C Called: C
CCalling: A, CCalled: C, LRP: B Calling: A, Called: B REASON_CALLPICKUP
CCalling C, CCalled: PU, LRP: PU REASON_CALLPICKUP
CCalling C, CCalled: PU, LRP: PU REASON_CALLPICKUP
REASON_NORMAL
CCalling: A, CCalled: C REASON_CALLPICKUP
CCalling: A, CCalled: C REASON_CALLPICKUP
|
Scenario Ten
Observing only device C with Group Pickup and Auto-Pickup disabled.
Action
|
Call Events
|
Call IDs/Call Info
|
C goes offhook, and presses "Group Pickup" softkey
C dials the PU Number
PU is dropped from Call 2
C is dropped from Call 2
Call 2 is destroyed
C is added to Call 1
C is ringing
C is connected to A
|
GC2-CallActiveEvent-NONE GC2-ConnCreatedEvent-C GC2-ConnConnectedEvent-C GC2-CallCtlConnInitiatedEv-C GC2-TermConnCreatedEvent GC2-TermConnActiveEvent GC2-CallCtlTermConnTalkingEv
GC2-CallCtlConnDialingEv-C GC2-ConnCreatedEvent-PU GC2-ConnInprogressEvent-PU GC2-CallCtlConnEstablishedEv-C
GC2-ConnDisconnectedEvent-PU GC2-CallCtlConnDisconnectedEv-PU GC2-TermConnDroppedEv GC2-CallCtlTermConnDroppedEv GC2-ConnDisconnectedEvent-C GC2-CallCtlConnDisconnectedEv-C GC2-CallInvalidEvent
GC1-CallObservationEndedEv
GC1-CallActiveEvent GC1-ConnCreatedEvent-C GC1-ConnInprogressEvent-C GC1-CallCtlConnOfferedEv-C GC1-ConnCreatedEvent-A GC1-ConnConnectedEvent-A GC1-CallCtlConnEstablishedEv-A GC1-ConnAlertingEvent-C GC1-CallCtlConnAlertingEv-C GC1-TermConnCreatedEvent
GC1-TermConnRingingEvent GC1-CallCtlTermConnRingingEv
GC1-ConnConnectedEvent-C GC1-CallCtlConnEstablishedEv-C GC1-TermConnActiveEvent GC1-CallCtlTermConnTalkingEv
|
CCalling: C, CCalled: NO, NO LRP REASON_NORMAL
CCalling: C, CCalled: PU, LRP: PU REASON_CALLPICKUP REASON_NORMAL
REASON_CALLPICKUP
REASON_CALLPICKUP REASON_NOTMAL
CCalling: A, CCalled: C, LRP: B REASON_CALLPICKUP
REASON_NORMAL
|
selectRoute() with Calling Search Space and Feature Priority
The selectRoute() API with calling search space and feature priority as array of int. is shown in the following table.
Action
|
Events
|
Call Info
|
Add call observer on phones A,B,C,D.
Register Route Point RP
Register route call back, with select route API with three rows route selected: A,.....CSS: 0, FP: 1
route selected: B,.....CSS: 1, FP: 3 route selected: D,.....CSS: 1, FP: 1
C calls RP
Call rings at A.
A answers. C-A call is connected.
|
GC1 CallActiveEv
GC1 ConnCreatedEv C:
GC1 ConnConnectedEv C
GC1 CallCtlConnInitiatedEv C:
GC1 TermConnCreatedEv TC
GC1 TermConnActiveEv TC
GC1 CallCtlTermConnTalkingEv TC
GC1 CallCtlConnDialingEv C:
GC1 CallCtlConnEstablishedEv C:
GC1 ConnCreatedEv RP:
GC1 ConnInProgressEv RP:
GC1 CallCtlConnOfferedEv RP:
After redirect request is processed
GC1 ConnCreatedEv A:
GC1 ConnInProgressEv A:
GC1 CallCtlConnOfferedEv A:
GC1 ConnDisconnectedEv RP:
GC1 CallCtlConnDisconnectedEv RP:
GC1 ConnAlertingEv A:
GC1 CallCtlConnAlertingEv A:
GC1 TermConnCreatedEv TA
GC1 TermConnRingingEv TA
GC1 CallCtlTermConnRingingEvImpl TA
GC1 ConnConnectedEv A:
GC1 CallCtlConnEstablishedEv A:
GC1 TermConnActiveEv A
GC1 TermConnActiveEv A
[C] CiscoRTPInputStartedEv
[A] CiscoRTPOutputStartedEv
[A] CiscoRTPInputStartedEv
[C] CiscoRTPOutputStartedEv
|
calling: C
lastRedirected:RP
called: A
|
Extension Mobility Login Username
Terminal A is in control list of user, Terminal B is not in control list of User. Extension Mobility login username is John, end user id user for application is John.
Action
|
Result
|
Call Info
|
Open provider, Terminal A doesn't have any observer, Application calls CiscoTerminal.getEMLoginUserName() at Terminal A.
|
InvalidStateException is thrown.
|
NA
|
Open provider, Add Observer to Terminal A, Application calls CiscoTerminal.getEMLoginUserName() at Terminal A.
|
Application should get empty string "" for username.
|
NA
|
Open provider, User "John" EMLogin to Terminal A and add observer to the Terminal A, Application calls CiscoTerminal.getEMLoginUserName() at Terminal A
|
Application should get String "John"
|
NA
|
User "John" EMLogin to Terminal A, now open provider, add observer to Terminal A, Application calls CiscoTerminal.getEMLoginUserName() at Terminal A.
|
Application should get String "John"
|
NA
|
User "John" EMLogin to Terminal A, now open provider, add observer to Terminal A, User "John" EMLogout of Terminal A, Application calls CiscoTerminal.getEMLoginUserName() at Terminal A.
|
Application should get empty string "" for username
|
NA
|
OpenProvider, User "John" EMLogin to Terminal B, add observer, application calls CiscoTerminal.getEMLoginUserName() at Terminal B
|
Application should get String "John"
|
NA
|
User "John" EMLogin to Terminal B, OpenProvider, add observer to Terminal B, Application calls CiscoTerminal.getEMLoginUserName() at Terminal B
|
Application should get String "John"
|
NA
|
Terminal A is in control list of user and configured with the Extension Mobility logout profile of user Kerry. The Kerry profile is configured with logout username as Kerry. There is another profile with login username of John.
Action
|
Result
|
Call Info
|
User John logs into Terminal A, OpenProvider and add observer to Terminal A. Application calls CiscoTerminal.getEMLoginUserName() at Terminal A.
John logs out at Terminal A. Application calls CiscoTerminal.getEMLoginUserName() at Terminal A.
|
Application should get String John.
Application should get String Kerry.
|
NA
NA
|
Calling Party IP Address
The following are some examples of call scenarios.
Basic Call Scenario
•
JTAPI application monitors party B
•
Party A is an IP phone
•
A calls B
•
IP Address of A is available to JTAPI application monitoring party B
Consultation Transfer Scenario
•
JTAPI application monitors party C
•
Party B is an IP phone
•
A talking B
•
B initiates a consultation transfer call to C
•
IP Address of B is available to JTAPI application monitoring party C.
Consultation Conference Scenario
•
JTAPI application monitors party C
•
Party B is an IP phone
•
A talking B
•
B initiates a consultation conference call to C
•
IP Address of B is available to JTAPI application monitoring party C.
Redirect Scenario
•
JTAPI application monitors party B and party C
•
Party A is an IP phone
•
A calls B
•
IP Address of A is available to JTAPI application monitoring party B
•
Party A redirects B to party C (
•
Calling IP address is not available to JTAPI application monitoring party B (not a supported scenario).
•
Calling IP address of B is provided to JTAPI application monitoring party C.
CiscoJtapiProperties
1) Set Socket Connect Timeout to 5 seconds; Plug out the Ethernet cable for PRIMARY CTI Manager and do a normal provider open. Expected Result: Socket Connect to Primary CTI Manager should fail in not more than 5 secs
2) Set Socket Connect Timeout to 5 seconds; Plug out the Ethernet cable for PRIMARY CTI Manager, set security options to True and do a secured provider open. Expected Result: Socket Connect to Primary CTI Manager should fail in not more than 5 secs (Socket Connect timed-out in ~5 seconds, though it took some additional time initially for verifying security certificates)
3) Set Socket Connect Timeout to 0 seconds; Plug out the Ethernet cable for PRIMARY CTI Manager, set security options to true and do a secured provider open. Expected Result: Socket Connect to Primary CTI Manager will no longer rely on new Service Parameter (Socket Connect timed-out in ~23 seconds, though it took some additional time initially for verifying security certificates).