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—Page 1
Direct Transfer/Arbitrary Transfer—Page 2
Consult Transfer Scenario
Conference and Join
Join/Arbitrary Conference Scenario—Page 1
Join/Arbitrary Conference Scenario—Page 2
Consult Conference Scenario
Barge and Privacy
Barge Feature
CBarge Feature
Privacy
CallSelect and UnSelect
Dynamic CTIPort Registration Per Call
Dynamic Registration for CTIPort
Media Termination at Route Point
Redirect Set OriginalCalledID
Scenario One
Scenario Two
Single Step Transfer
Modifying Calling Number
Scenario One
Scenario Two
AutoAccept for CTIPort and RoutePoint
Forced Authorization and Customer Matter Codes Scenarios
Scenario One
Scenario Two
Scenario Three
Scenario Four
Scenario Five
Super Provider Message Flow
SuperProvider and Change Notification Enhancements Use Cases
Scenario A
Scenario B
Scenario C
Scenario D
Scenario E
Scenario F
Scenario G
QSIG Path Replacement Use Cases
Device State Server Message Flow
Partition Support
Using getPartition() API
Using getAddress(String number, String partition) API
Simple Call Scenario
Park DN Scenario
Change in Partition
Use Cases for JTAPI Partition Support
Hairpin Support
Use Cases for Hairpin Support
QoS Support
Use Cases for JTAPI QoS
TLS Security
SRTP Key Material
Use Case 1
Use Case 2
Use Case 3
Device and Line Restriction
SIP Support
SIP REFER/REPLACE
REPLACES Message Flow
REFER Message Flow
Scenarios for IN-Dialog REFER
Scenario A
Scenario B
Scenario C
Scenario D
Scenario E
Scenario F
Scenario G
Scenario H
Scenario I
Scenario J
Scenario K
For OutOfDialog Refer
SIP 3XX Redirection
3XX Redirection - 302 Moved Temporarily
3XX Redirection - Contact Busy
3XX Redirection - Contact Does Not Answer
3XX Redirection - Contact Within Cisco Unified Communications Manager Cluster Configured with Call Forward
3XX Redirection - Non-Available Target Member
Unicode Support
Use Cases for Unicode Display Name
Use Cases to Get Locale and UniCodeCapabilities of Terminal
Backward Compatibility Enhancements
Scenario A
Scenario B
Scenario C
Scenario D
Half Duplex Media Support Message Flow
Recording and Monitoring
Scenario 1
Scenario 2
Scenario 3
Scenario 4
Scenario 5
Scenario 6
Scenario 7
Scenario 8
Scenario 9
Scenario 10
Scenario 11
Scenario 12
Scenario 13
Scenario 14
Scenario 15
Scenario 16
Scenario 17
Scenario 18
Scenario 19
Scenario 20
Intercom
Used case for intercom call Scenario
Used case for DeviceState whisper
Do Not Disturb
Scenario 1
Scenario 2
Scenario 3
Scenario 4
Scenario 5
Scenario 6
Scenario 7
Scenario 8
Scenario 9
Scenerio 10
Scenario 11
Scenario 12
Scenario 13
Secure Conferencing
JTAPI Cisco Unified IP 7931G Phone Interaction
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—Page 1
–
Consult Transfer Scenario
•
Conference and Join
–
Join/Arbitrary Conference Scenario—Page 1
–
Consult Conference Scenario
•
Barge and Privacy
–
Barge Feature
–
CBarge Feature
–
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 Scenarios
•
Super Provider Message Flow
•
SuperProvider and Change Notification Enhancements Use Cases
•
QSIG Path Replacement Use Cases
•
Device State Server Message Flow
•
Partition Support
•
Hairpin Support
•
QoS Support
•
TLS Security
•
SRTP Key Material
•
Device and Line Restriction
•
SIP Support
•
SIP REFER/REPLACE
•
Unicode Support
•
Backward Compatibility Enhancements
•
Half Duplex Media Support Message Flow
•
Recording and Monitoring
•
Intercom
•
Do Not Disturb
•
Secure Conferencing
•
JTAPI Cisco Unified IP 7931G Phone Interaction
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—Page 1
Direct Transfer/Arbitrary Transfer—Page 2
Consult Transfer Scenario
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 Scenario—Page 1
Join/Arbitrary Conference Scenario—Page 2
Consult Conference Scenario
The message flow for Consult Conference acts the same as the flow for Arbitrary Conference.
Barge and Privacy
The following diagrams illustrate the message flows for Barge and Privacy.
Barge Feature
CBarge Feature
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.
Dynamic Registration for CTIPort
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
|
Call1
|
ConnCreatedEv for D ConnConnectedEv for D CallCtlConnEstablishedEv for D
|
CallingParty=A CalledParty = B LastRedirectedParty=C CurrentCalledParty=D
|
META_CALL_REMOVE_PARTY
|
Call1
|
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 selectsRoute 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 Scenarios
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's ability to handle failover scenarios and the time required to shift between Superprovider and normal user modes.
Scenario A
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.
Expected Behavior
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 B
Normal user opens provider and opens a few devices in control list. From admin pages, Superprovider privilege is added to the user.
Expected Behavior
Application receives CiscoProviderCapabilityChangedEvent event. User will now be able to acquire/open devices not in its control list.
Scenario C
Normal user opens provider and opens a few park DNs. From admin pages, park DN monitor privilege is removed for the user.
Expected Behavior
Application receives CiscoProviderCapabilityChangedEvent event. JTAPI will cleanup all park DN addresses.
Scenario D
Normal user opens provider. From admin pages, park DN monitor privilege is added for the user.
Expected Behavior
Application receives CiscoProviderCapabilityChangedEvent event. Application registers the park DN monitoring feature and is able to monitor park DN.
Scenario E
Normal user opens provider. From admin pages, "modify calling party" privilege is removed for the user.
Expected Behavior
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 F
Normal user opens provider. From admin pages, "modify calling party" privilege is added for the user.
Expected Behavior
Application receives CiscoProviderCapabilityChangedEvent event. Application is able to change the calling party number in a call during redirect.
Scenario G
Superprovider user opens provider and acquires a device not in control list. From admin pages, the device is deleted.
Expected Behavior
Application receives CiscoTermRemovedEv event. Device is closed from JTAPI perspective.
QSIG Path Replacement Use Cases
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 Message Flow
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) API
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) API
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.
Simple Call Scenario
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 Scenario
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.
Change in Partition
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.
Use Cases for 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.
Table A-1 Use Cases for JTAPI Partition Support
S.No.
|
Pre-Condition
|
Use Case
|
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
Use Cases for Hairpin Support
Table A-2 Use Cases for 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
Use Cases for 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-3 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.
Use Case 1
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
|
Use Case 2
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.
|
Use Case 3
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 isRestricted on T1,T2, T3
Application queries for isRestricted 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 REFER/REPLACE
REPLACES Message Flow
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
|
REFER Message Flow
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.
Scenarios for IN-Dialog REFER
There are 11 scenarios (A through K) described in the sections that follow for IN-Dialog REFERs.
Scenario A
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 B
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 C
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 D
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 E
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 F
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 G
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 H
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 I
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 J
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 K
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
For 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
Use Cases for Unicode Display Name
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.
|
Use Cases to Get Locale 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 A
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 B
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 C
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 D
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 Support Message Flow
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 1
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 2
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 3
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 4
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 5
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 6
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 7
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 8
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 9
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 delivered to
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 10
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 11
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 12
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 13
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 14
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 15
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 16
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 17
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 18
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 19
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 20
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
Used case for intercom call Scenario
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
|
Used case for DeviceState whisper
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 folters 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 1
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 2
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 3
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 4
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 5
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 6
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 7
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 8
Application sets the feature priority to FEATUREPRIORITY_EMERGENCY in redirect() and selectRoute() API in CiscoRouteSession.
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
|
Scenario 9
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
|
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
|
Scenerio 10
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 11
DND is enabled on the terminal A. Terminal A comes IN_SERVICE. Application invokes getDNDStatus() on CiscoTermin 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 12
DND is enabled on terminal A. Terminal A comes IN_SERVICE. Application invokes setDNDStaus(). 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 13
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
|
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
|
|