This section describes the sequence of events when Blueworx Voice Response makes an outgoing call on behalf of an application, using a common channel signaling process.
Blueworx Voice Response provides error processing to ensure that a call is never left connected in the event of failure. This table shows what Blueworx Voice Response does when a channel process failure occurs at different phases during the establishment of an outgoing call:
Phase |
Error Processing |
---|---|
A |
None. |
B |
Send the SL_CALL_ABORT_REQ primitive to the signaling process. Because of channel negotiation, the pack and channel may not be determined until after the call is established. In this case, the pack and channel on the SL_CALL_ABORT_REQ may be set to SL_UNDEFINED_VPACK and SL_UNDEFINED_CHAN. |
C |
Play the technical difficulties message to the caller. This message is a prerecorded message included with Blueworx Voice Response, which says “We are experiencing technical difficulties. Please hang up and try again later”. Send the SL_CALL_ABORT_REQ primitive to the signaling process. |
The flows shown in Figure 1 are as follows:
/* Local variables */ SL_REQUEST_ST slRequest ; SL_RET_CODE slRC ; int iSeqNo ; int iChan ; . . . /* Build an SL_CALL_SETUP_REQUEST */ slRequest.id = SLID_REQUEST_ST ; slRequest.iseq_no = 0 ; slRequest.pidCHP = getpid() ; slRequest.Command.id = SL_CALL_SETUP_REQUEST ; slRequest.Parms.call_setup_request_st.sizetLength = sizeof(slRequest.Parms.call_setup_request_st) ; slRequest.Parms.call_setup_request_st.slCallReference = SL_CALL_REF_NULL ; slRequest.Parms.call_setup_request_st.pause = pause_parameter_from_state_table ; slRequest.Parms.call_setup_request_st.ring_wait = ring_wait_parameter_from_state_table ; slRequest.Parms.call_setup_request_st.ring_time = ring_time_parameter_from_state_table ; slRequest.Parms.call_setup_request_st.iChannelNo = SL_UNDEFINED_VPACK ; slRequest.Parms.call_setup_request_st.iVpackNo = SL_UNDEFINED_CHANNEL; slRequest.Parms.call_setup_request_st.ifdBearerChannel = file_descriptor ; slRequest.Parms.call_setup_request_st.ChannelGroupSet[0] = FALSE; /* unused */
} /* end for */ slRequest.Parms.call_setup_request_st.phone_num = phone_num_parameter_from_state_table ;
slRC = sl_send_request( sigproc, & slRequest, &iSeqNo );
/* Local variables */ SL_HANDLE slHandle ; SL_REQUEST_ST slRequest ; SL_CONFIRM_ST slConfirm ; SL_RET_CODE slRC ; . . . /* Build a successful SL_CALL_SETUP_CNF */ slConfirm.id = SLID_CONFIRM_ST ; slConfirm.iseq = slRequest.iseq ; slConfirm.pidCHP = slRequest.pidCHP ; slConfirm.Command.id = SL_CALL_SETUP_CNF ; slConfirm.Parms.call_setup_confirm_st.sizetLength = sizeof( slConfirm.Parms.call_setup_confirm_st ) ; slConfirm.Parms.call_setup_confirm_st.ReplyCode = SL_REPLY_SUCCESS ; slConfirm.Parms.call_setup_confirm_st.slCallReference = slRequest.Parms.call_setup_request_st.slCallReference ; slConfirm.Parms.call_setup_confirm_st.iChannelNo = allocated_channel; slConfirm.Parms.call_setup_confirm_st.iVpackNo = allocated_vpack; slConfirm.Parms.call_setup_confirm_st.iChannelGroup = allocated_channel_group; slConfirm.Parms.call_setup_confirm_st.tone_type = PROG_UNKNOWN; slConfirm.Parms.call_setup_confirm_st.tone_id = 0;
slRC = sl_send_confirm( slHandle, &slConfirm ) ;