Integrating Speech Server with Office Communications Server
While Speech Server is apart of Office Communications Server, the two do not rely on each and actually do not integrate with each other out of the box. However that doesn't mean it can not be done.
There are two main scenarios which I am always asked about are:
1.) Communicator Calls to Speech Server
2.) Transferring Speech Server calls to Communicator
Calling Speech Server from Communicator
The first thing you need to do is setup a static route in OCS to Speech Server. Here you will need to assign a sub domain, something like ivr.domain.com. This tells OCS to route all calls where the domain contains ivr.domain.com to Speech Server.
Next in the Speech Server administrator console you will need to add the OCS Front End Server as a Trusted SIP Peer on non default ports, such as 5068 for TCP and 5069 for TLS. This is required as OCS doesn't handle the 302 Redirect Messages that Speech Server uses, by assigning non default ports we "turn off" these SIP messages. You will also need to enable Mutual TLS.
Note: This will be using TLS, OCS will already have a certificate installed, but Speech Server probably won't, now would be the time to install a certificate on Speech Server.
Next you will need to deploy your application and again assign non defaults ports, these ports should be the same ports as the Trusted SIP Peer. You can assign a "telephone number" to the application as well.
Now you can dial the Speech Server application from Communicator by dialing the static route, like firstname.lastname@example.org.
411 being the extension that you assigned to your application and ivr.domain.com being the sub domain you specified in the OCS routing tab.
Transferring Calls to OCS users
When trying to create a transfer type Speech Server application, you need to know one rule. You can only transfer via the SIP Peer in which the call orginated.
Let's take the static route example we setup previously, if my Speech Server application does a transfer to another OCS user, it would transfer back to the OCS Front End Server and would transfer apporiately via a specified SIP URI. However you couldn't transfer the call to say a PSTN, as the call orginated via OCS.
Note: To do this type of "internal" transfer, make sure to add Speech Server to the Host Authorization tab in the Front End Properties of OCS.
Back to the orginal scenario, a call comes in via the PSTN to probably a VoIP Gateway, meaning when we do a transfer it will be routed back to that same gateway. Depending on your VoIP Gateway, you need to have rules, one or more numbers assigned to forward to Speech Server, and the rest of the numbers should get routed to the Mediation Server.
Typically you do not want Speech Server to sit behind the Mediation Server but next it, as shown in the diagram below.
In your Speech Server application when we do a transfer, instead of transferring to a SIP URI like: sip:email@example.com;transport=tcp, you need to transfer to a TEL URI, like tel:+firstname.lastname@example.org;transport=tcp. Using the TEL URI, the gateway will correctly route it to the mediation server and the mediation server will in turn route it to the correct user.
Tip: Depending on your VoIP Gateway, SIP Proxy, PBX, whatever, specificing the transport parameter is a good idea. I've run into issues where the some 3rd party SIP applications revert back to UDP if this isn't specified.