Author |
|
niko888 Intermediate
Joined: December 10 2006 Location: United States Posts: 3
|
Posted: December 11 2006 at 8:56pm | IP Logged
|
|
|
Hi there,
we are trying to use the Media Engine for the following scenario:
A user is placing a call and the SIP proxy is sending him to our application. The call gets connected and the system then is starting another call to a far enpoint (VoIP carrier gateway)while we decide on the second call which codecs should be used (transcoding between call legs) and where the calls need to be routed to. We need that for a edge proxy application. We tried to solve it using your conference feature but this way we can only handle one incoming call at a time which is not sufficient. We need to connect unlimited incoming and outgoing calls. Any idea of how to approach that? Is there a "hidden" (b2bua) back2back user agent functionality we have not seen yet? A hint would be greatly appreciated.
call 1.
call -> lanscape proxy -> our app takes call, connects to outgoing call leg -> voip carrier A
call 2.
call -> lanscape proxy -> our app takes call, connects to outgoing call leg -> voip carrier B
etc.
Best regards
niko888
|
Back to Top |
|
|
support Administrator
Joined: January 26 2005 Location: United States Posts: 1666
|
Posted: December 12 2006 at 11:51am | IP Logged
|
|
|
Hi niko888,
This sounds like a typical “Media Bridge” application.
Here is how we normally handle situations like this:
1) The VOIP Media Engine in the media bridge app should be configured using SWITCH_LINE mode. See the LineMode structure member of the START_SIP_TELEPHONY_PARAMS structure. Also, the Media engine should not use local multimedia audio – it’s not needed. Not enabling multimedia audio will help to reduce CPU usage.
2)
Some SIP user agent (soft phone) makes a call using the proxy.
3)
The proxy is set up to route the call to your VOIP Media Engine “Media Bridge” application. We will arbitrarily assume that the soft phone wants to use iLBC 20Ms media – however it could use any media type supported by the “Media Bridge” application (VOIP Media Engine).
4)
The “Media Bridge” app (based on its own rules) places another call to the appropriate VoIP carrier gateway using the required gateway codec (probably G729). Once the VoIP carrier gateway answers the outgoing call, the “Media Bridge” app will answer the incoming call originating from the soft phone.
5) Here is the important step: Once both “call legs” are established, your “Media Bridge” app can use the receive IVR and transmit IVR interfaces of each call to “tie” the 2 phone calls together. Remember, we have 2 calls going on. The call from the original soft phone and the call the “Media Bridge” app made to the gateway.
By connecting the 2 separate phone lines via the Rx and Tx IVR interfaces, you can effectively wire the 2 calls together and not have to worry about format/rate conversion. The media engine will do all of that for you.
In the Developer’s reference see the following sections for Tx and Rx IVR interfaces:
IVR Phone Line - Receiver Interface
IVR Phone Line – Transmitter Interface
6) If either side of the “Media Bridge” call terminates the call, your “Media Bridge” application should simply hang up the other related phone line and terminate the cross wiring using the Tx and Rx IVR interfaces of the used phone lines.
In the above scenario – calls 1 and 2 from your original description are completely isolated from one another.
If this is not exactly what you need, repost so we can go further.
Support
|
Back to Top |
|
|
niko888 Intermediate
Joined: December 10 2006 Location: United States Posts: 3
|
Posted: December 12 2006 at 5:00pm | IP Logged
|
|
|
Thank you very much! Works like a charm!
Time to buy a license for more lines:-)
Best
niko888
|
Back to Top |
|
|
niko888 Intermediate
Joined: December 10 2006 Location: United States Posts: 3
|
Posted: December 12 2006 at 5:12pm | IP Logged
|
|
|
And now there is the next challenge. Since A and B are completely isolated what would be the easiest way to tell A what's going on during the call setup? For example if the caller is connected to A and B is getting a busy signal we need to pass this information to A. Any hint in the right direction would be appreciated.
Best
niko888
|
Back to Top |
|
|
support Administrator
Joined: January 26 2005 Location: United States Posts: 1666
|
Posted: December 13 2006 at 6:49am | IP Logged
|
|
|
Hi niko888,
Sorry. We don’t quite understand what you want to do. From the original problem description you posted we thought your application was representative of a B2BUA or a “media bridge”.
Our understanding is that “Call 1” to “VOIP carrier A” should be totally isolated from “Call 2” to “VOIP carrier B” in all respects.
Maybe we are being mentally challenged here right now. We are not sure what you mean. Please elaborate a bit more and we will assist further.
Support
|
Back to Top |
|
|
support Administrator
Joined: January 26 2005 Location: United States Posts: 1666
|
Posted: December 13 2006 at 10:05am | IP Logged
|
|
|
Hi niko888,
We know that you are working with us on other development projects. We checked with another person here and we now understand your last request.
Let’s take the following example:
1)
A soft phone calls a certain phone number using the Centrex SIP proxy server.
2)
The SIP proxy then decides that the call must be forwarded to an “edge proxy” (or “media bridge”) that is developed by you using the VOIP Media Engine. I will use the term “media bridge” for the VOIP Media Engine application because that is the term we use here.
3)
The media bridge detects the incoming call from the proxy. We will identify this as “call leg 1”. This signals the media bridge to determine what VOIP gateway the call should further be routed to.
The media bridge then starts another call to the appropriate VOIP gateway. This is “call leg 2”.
4)
As you stated, what you need is to be able to terminate “call leg 1” using a defined SIP error code in the case that “call leg 2” to the gateway cannot be completed or experiences and error (like 486 “Busy Here”).
You can currently do this in your application but with limited error information passed back to the originating soft phone.
For example:
Right now, if the media engine calls the gateway (“call leg 2”), it can detect the following events:
Gateway lines are all consumed and the gateway returns “busy” (SipFarEndIsBusy)
All other gateway errors (SipFarEndError).
Gateway accepts the call (SipInCall).
Using the “event log” capability of the media engine, here are example event streams that can be sent to an application for these scenarios:
Code:
"Call leg 2" - Gateway is busy:
IMMEDIATE_NOTIFICATION, Phone Line 0, SipOutgoingCallInitializing
PHONE_LINE_NOTIFICATION, Phone Line 0: SipOutgoingCallStart
PHONE_LINE_NOTIFICATION, Phone Line 0: SipDialTone
PHONE_LINE_NOTIFICATION, Phone Line 0: SipDialing
PHONE_LINE_NOTIFICATION, Phone Line 0: SipSendInvite
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipStartOutgoingRing
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipReceivedProvisionalResponse
PHONE_LINE_NOTIFICATION, Phone Line 0: SipReceived100Trying
PHONE_LINE_NOTIFICATION, Phone Line 0: SipWaitForInviteOk
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipFarEndIsBusy
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipOnHook
"Call leg 2" - All other gateway errors.
IMMEDIATE_NOTIFICATION, Phone Line 0, SipOutgoingCallInitializing
PHONE_LINE_NOTIFICATION, Phone Line 0: SipOutgoingCallStart
PHONE_LINE_NOTIFICATION, Phone Line 0: SipDialTone
PHONE_LINE_NOTIFICATION, Phone Line 0: SipDialing
PHONE_LINE_NOTIFICATION, Phone Line 0: SipSendInvite
IMMEDIATE_NOTIFICATION, SipModifySipMessage
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipStartOutgoingRing
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipReceivedProvisionalResponse
PHONE_LINE_NOTIFICATION, Phone Line 0: SipReceived100Trying
PHONE_LINE_NOTIFICATION, Phone Line 0: SipWaitForInviteOk
PHONE_LINE_NOTIFICATION, Phone Line 0: SipReceived180Ringing
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipFarEndError
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipOnHook
"Call leg 2" – Accepted by the gateway:
IMMEDIATE_NOTIFICATION, Phone Line 0, SipOutgoingCallInitializing
PHONE_LINE_NOTIFICATION, Phone Line 0: SipOutgoingCallStart
PHONE_LINE_NOTIFICATION, Phone Line 0: SipDialTone
PHONE_LINE_NOTIFICATION, Phone Line 0: SipDialing
PHONE_LINE_NOTIFICATION, Phone Line 0: SipSendInvite
IMMEDIATE_NOTIFICATION, SipModifySipMessage
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipStartOutgoingRing
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipReceivedProvisionalResponse
PHONE_LINE_NOTIFICATION, Phone Line 0: SipReceived100Trying
PHONE_LINE_NOTIFICATION, Phone Line 0: SipWaitForInviteOk
PHONE_LINE_NOTIFICATION, Phone Line 0: SipReceived180Ringing
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipInviteOkReceived
PHONE_LINE_NOTIFICATION, Phone Line 0: SipSendInviteAck
IMMEDIATE_NOTIFICATION, SipModifySipMessage
PHONE_LINE_NOTIFICATION, Phone Line 0: SipOutgoingCallConnected
PHONE_LINE_NOTIFICATION, Phone Line 0: SipInCall
|
|
|
If the media bridge application detects the SipFarEndIsBusy or SipFarEndError events, then it knows that “call leg 2” to the gateway cannot be completed. In this case, the media bridge can abort “call leg 1” using the AbortIncomingCall() API procedure.
The only problem with this approach is that the originating soft phone will not be relayed the actual error code of the gateway. The soft phone will receive an error code of "480 Temporarily Unavailable" due to the media bridge executing the AbortIncomingCall() API procedure for “call leg 1”.
If we want to relay the actual gateway error response codes (or other error codes) to the soft phone, we will need to add additional functionality to the media engine. You can activate your support contract so that we may do this work.
It would amount to adding a new event that will be sent to the media bridge application that would specify the returned “call leg 2” SIP error code from the gateway. Also, the AbortIncomingCall() API procedure would need to be modified so that it can accept a SIP error code instead of simply defaulting to "480 Temporarily Unavailable".
Support
|
Back to Top |
|
|
|
|