Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Goal (short description)

Tying This recipe describes tying Microsoft Office Communications Server 2007 (OCS) to Asterisk. This enables users that have a hard phone connected to an Asterisk PABX, to enable users to call from OCS through Asterisk and be called on their (extension) number.

  • make calls from their Microsoft Office Communicator to the PSTN
  • be dialled from the PSTN and answer the call on either the hard phone or Office Communicator (for instance when working from home)
  • let them control forwarding and simultaneous ringing options from the Communicator
  • have an archive of call records and missed calls notifications in Microsoft Outlook
  • click to dial on telephone numbers within Outlook

Applicability

OCS is meant as a value adding service platform that connects to PABX-esoffers Unified communications by integrating IPTelephony, presence, instant messaging and e-mail. The power lies in the connections. A powerfull connection, and also a difficult, is to connect it to a PABX. In this case, the PABX is based on Asterisk. Asterisk takes care of the connectivity with the PSTN and the number plan.

OpenSER acts as a proxy between Asterisk and OCS, since OCS only supports SIP over TCP and Asterisk only SIP over UDP.

...

No Format
SIP:
Communicator 2007 <-TLS--> OCS&nbsp; <-TLS--> OCS med serv <\- TCP \-> OpenSER <\- UDP \-> Asterisk <-> PSTN
No Format
Media:
Communicator 2007 <-SRTP-> OCS <-SRTP->&nbsp; OCS med serv <------------RTP----------> Asterisk <-> PSTN

...

  • Linux machine with Asterisk, a number plan and PSTN connectivity
  • Linux machine with OpenSER 1.2.1 or higher http://www.openser.org/mos/view/Download/
  • Microsoft Office Communications Server 2007 core installation
  • Windows 2003 machine to install OCS Mediation Server 

OCS can be either Enterprise Edition or Standard Edition. For the basic installation guides of OCS, see http://technet.microsoft.com/en-us/library/bb676082.aspx.

You need an extra a second windows machine to install an OCS Mediation Server, which is the designated node for external SIP connectivity.
For specifics on installing OCS Mediation Server, see http://www.microsoft.com/downloads/details.aspx?FamilyId=24E72DAC-2B26-4F43-BBA2-60488F2ACA8D&displaylang=en

...

Assuming you have a working Asterisk setup, only few things have to be taken care of. Use NAT=no

Create a SIP trunk, see http://blog.lithiumblue.com/2007/12/interim-information-on-integration-ocs.html&nbsp;forImage Added an example if you use Trixbox as your Asterisk server. Use the following settings in your SIP.conf.:

No Format

         host=<your OpenSER IP address>
         port=5060
         qualify=no
         type=peer
         context=from-internal

Forward all incoming calls from the PSTN destined for know known extensions to the SIP trunk that connects to OpenSER.

Asterisk should always send a full E.164 number to OCS, starting with a plus sign (plus)!

...

The normalization rule is written in .net regular expression format. See http://www.regular-expressions.info/tutorial.html for more explanation of regular expressions. In our case, we translate any number starting with a zero to a Dutch number:

No Format
\^0(\d*)$&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \->&nbsp;&nbsp;&nbsp;       ->       \+31$1

It basically means that for any new translation (^) of a number that starts with a 0 and then containing any number of digits \d* it should take the part of the number between brackets () and use it as variable in the translation. The translation adds +31 to it.
THE '+' SIGN IS ABSOLUTELY CRUCIAL!!!!! Don't forget to put it there! Please double check whether it's in the config! Don't say we didn't warn!
When you're done with the 'Localization Profiles' tab you can add 'phone usages' in the 'voice properties' dialog, which are useful for assigning to users and logging these types of use. Be sure to also create at least one Policy in the Policy tab.

...

Fill in the line URI. which can be of the form

No Format
tel:+<nr>                  (yes, the '+' again!)

Install and configure OCS Mediation Server

...

Edit your openser.cfg as follows or download openser.cfg for your convenience:

Code Block
debug=5
log_stderror = no
fork=yes
children=4alias=<your OpenSER proxy FQDN>listen=udp:<your OpenSER proxy IP address>:5060
listen=tcp:<your OpenSER proxy IP address>:5060check_via=no
dns=no
rev_dns=nompath="/usr/local/lib/openser/modules/"loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "maxfwd.so"
loadmodule "uri.so"
loadmodule "uac.so"
modparam("uac","from_restore_mode","auto")
loadmodule "textops.so"
loadmodule "rr.so"
modparam("rr", "enable_full_lr", 1)
modparam("rr", "enable_double_rr",0)
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/openser_fifo")
loadmodule "xlog.so"
modparam("xlog", "buf_size", 4096)
modparam("xlog", "force_color", 1)
route {
if (mf_process_maxfwd_header("10")) {
	sl_send_reply("483","Too Many Hops");
	exit;
};
if (msg:len >= 2048 )  {
	sl_send_reply("513", "Message too big");
	exit;
};
 
if (loose_route()) {
	append_hf("P-hint: rr-enforced\r\n");
	route(1);
};
 
if (!uri==myself) {
	append_hf("P-hint: outbound\r\n");
	route(1);
};

route(1);

	# If coming from OCS
	if (src_ip==<your OCS Mediation Server IP address>)
		{ if (method=="INVITE|BYE") {
			xlog("L_INFO", "*** invite from OCS M=$rm RURI=$ru F=$fu T=$tu IP=$si ID=$ci\n");
		}
		t_relay("udp:<your Asterisk Server IP Address>:5060");
	}
	# else coming from Asterisk
	else {
		t_relay("tcp:<your Asterisk Server IP Address>:5060");
	};
	exit;
}

...