Server side management of Instant Messaging contacts

When you add a new contact to your Jabber roster, the client awaits a confirmation from that contact that allows you to subscribe to their information. I have never had this work perfectly with all instant messaging clients. Sometimes an exit and relaunch of the client side applicaitons for both parties will resolve this issue, but that should not be necessary. A quicker fix is to use CommuniGate Pro WebMail to set your 'Sees Us' and 'Seen by Us' instant messaging (IM) settings for all IM clients you test or use, SIP and XMPP.

Login to WebMail and select the 'Basic' skin interface.

Pasted Graphic

After logging In, the upper right area of the interface should show a Buddies link.

Pasted Graphic 1

Account users can send buddy/contact subscription requests with the 'Request' button on this page.

Pasted Graphic 2

Requests that were previously sent to you by other contacts will also appear here and you can approve or deny their subscription to your information.

Pasted Graphic 3

I often use this interface to correct or clean the Group names I use for contacts. This utility allows me to unify how I organize my IM contacts information. Having this on the server side is very useful for management of this data especially when you use more than one instant messaging client.
|

Customizing the PBX Voice User Interface (VUI) audio files

The default CommuniGate Pro PBX audio can be customized with your own recordings. It is possible to create audio 'Environments' similar to how custom web 'Skins' interfaces can be created for each domain in CommuniGate Pro. The PBX audio storage model is also connected to subscriber's language preferences. If I change my language preference to German, for example, as expected my webmail and Pronto interfaces will present German text. If an audio package exists labeled and recorded in German, my voice user interface PBX audio prompts will play in German for all callers.

CommuniGate Pro Administrators frequently ask for recommendations about how to create an audio recordings package for the CommuniGate Pro PBX Voice User interface. I would really like to see a CGPL Application that will record prompts for the application a client wishes to customize. This would work as sort of an 'Application Self Service Mode" where a caller can dial the application, give a few DTMF codes and start recording prompts in the receiver based on the '.wav' files listed in the application. This is much like a user recording a personal greeting where the default will play and the user can elect to record a custom version. This should be very achievable with CommuniGate Pro and would fit PBX hosting services well.

It is possible to record your own audio package and upload that package into your CommuniGate Pro system. I will use the Auto Attendant application in this example and I will customize part of it for somedomain.com which is under the Main Domain getdata.org. I also use some very useful software that was freely available to convert and package the audio files. These are the basic steps:

  1. Analyze the Application(s) you wish to create an audio package for

  2. Create a list of the audio file names you will need to record

  3. Record your audio using for favorite media recording software and save your audio as separate WAV files

  4. If necessary, convert the recordings to the supported media formats

  5. Create a TAR package of the files

  6. Upload your audio package to the PBX environment you wish to use


Analyze the Auto Attendant Application to prepare to create custom audio

The Auto Attendant application is designed to offer many options that enable administrators to customize how calls are answered. There is a real time preferences page dedicated to the Language, Department, and dialing prefixes. The Documentation for Auto Attendant indicates how to customize using the real-time configuration options in the product. A simple example is customizing the Welcome message. The doc says:

If the PBX Center Account has a receptionprompt.wav file in its File Storage, then this file is played instead of the standard "Welcome" file.

This quick customization will play your welcome file named receptionprompt.wav before playing the rest of the application. However if you want to change the audio for all of those prompts you can find what files the application uses starting from the CGPL source files. For the Auto Attendant files I opened the following files from Users -> PBX in the administration interface:

Pasted Graphic

pbx.sppr
playmenu.sppi
reception.sppi
reception.sppr

I selected these because I read the application function and procedure lines to learn the Auto Attendant application dependancies. If you find all lines with the words PlayFile in these Applications you will find the names of the Audio files that can be custom recorded.

pbx.sppr
pbx.sppr:43: PlayFileInLoop("Blank",1000);
pbx.sppr:58: PlayFile("PleaseStandBy");
pbx.sppr:66: PlayFile("AccessDenied");
pbx.sppr:70: PlayFile("NoWaitingCalls");
pbx.sppr:72: PlayFile("ConnectingNow");
pbx.sppr:74: else PlayFile("Failure");
pbx.sppr:84: PlayFileInLoop("Blank",500);
pbx.sppr:85: PlayFile("GoodBye");


playmenu.sppi
playmenu.sppi:9: PlayFile(promptFile);
playmenu.sppi:10: PlayFile("Press");
playmenu.sppi:17: PlayFile("PoundKey");
playmenu.sppi:19: PlayFile("StarKey");
playmenu.sppi:23: PlayFile(sym == "*" ? "star" : sym == "#" ? "pound" : sym);

reception.sppi
reception.sppi:29: PlayFile("Welcome");
reception.sppi:67: if directoryDigits >= 0 then PlayFile("DialKnownExtension"); end if;
reception.sppi:109: PlayFile("InvalidEntry");
reception.sppi:113: PlayFile("Failure");
reception.sppi:117: PlayFileInLoop("Blank",1000);
reception.sppi:129: playFile("EnterPIN"); playFile("FinishByPound");
reception.sppi:129: playFile("EnterPIN"); playFile("FinishByPound");
reception.sppi:134: PlayFile("IncorrectPIN");
reception.sppi:136: PlayFile("Failure");
reception.sppi:147: playFile("TryingExtension");


reception.sppr
reception.sppr:18: PlayFileInLoop("Blank",1000);
reception.sppr:20: PlayFile("Welcome");
reception.sppr:24: PlayFile("DialKnownExtension.wav");
reception.sppr:59: PlayFile("InvalidEntry");
reception.sppr:61: PlayFile("Failure");
reception.sppr:63: PlayFileInLoop("Blank",1000);
reception.sppr:66: PlayFile("GoodBye");
reception.sppr:120: playFile("TryingExtension.wav");
reception.sppr:142: //PlayFile("ConnectingNow.wav");

Important Note from the documentation: If the PlayFile argument does not have a '.wav' or any extension, Communigate Pro will try supported extensions.


Create a list of the audio file names you will need to record

From this analysis I have decided to Customize my Welcome greeting, TryingExtension.wav, and GoodBye. You could choose to change all of some of the prompts.

Record your audio using for favorite media recording software and save your audio as separate WAV files

I am not an experienced audio recording expert. I have used software such as Audacity with a basic microphone device for testing but I am not qualifies to make equipment or recording recommendations. Just be sure to create a separate file for each prompt you wish to change and make sure you have not left too much or too little empty space before or after the file plays.

For my custom Welcome greeting I have created a file called receptionprompt.wav per the documentation noted above. I have also created TryingExtension.wav and Goodbye.wav to build a package that I can add with the CommuniGate Pro Administration interface Environment Editor.

If necessary, convert the recordings to the supported media formats

I did not know how to use the recording and audio file editing software well so i recorded audio in a WAV format that is not compatible with the Supported Media Formats. I can convert all of my audio files with a helpful sound utility such as SoX. In a command shell I convert one of my files easily with a command:

sox TryingExtension-preconvert.wav -t.wav -r8000 -c1TryingExtension.wav

If I was in a directory with many .wav files to convert I could convert them all and save them to a new directory.

for i in *.wav; { sox $i -t.wav -r8000 -c1 ../audio_resamples/$i; }

Create a TAR package of the files


I use the command line tar tool to create the package of customized audio. Note that I am only creating a package of two files in this example. The custom Welcome file will be installed as the documentation instructs.

tar cvf custom_audio.tar *.wav

The CommuniGate Pro environment editor tool will expand the .tar file and install all of the audio into the environment you choose. Note that I could have added a custom application (.sppr) file to distribute a complete and ready to install PBX application in a single tar package.

Upload your audio package to the PBX environment you wish to use

We can start by uploading the receptionprompt.wav to the PBX account's storage area in order to customize our Welcome message.

Pasted Graphic 1

that one step changed the Welcome message for the entire system. It is possible to only change the Welcome message for a single domain using the audio package steps below.

For this example I do not need to replace the default recordings found in Users -> PBX although I could choose to do this If I want all of my domains to use the custom recordings. In this case I will customize somedomain.com. I navigate to the PBX tab for somedomain.com and select 'Create Custom Environment'.

Pasted Graphic 2

Once I create the environment somedomain.com now has a separate PBX and has inherited all of the files in the default system PBX.

Pasted Graphic 3

The Environment Editor tools allow me to upload the custom audio tar package.

Pasted Graphic 4

Once the package is uploaded I can call the PBX from a SIP registration of someuser@somedomain.com hear the auto attendant for somedomain.com and confirm that I hear the files I created.
|

Linux Flash Player 9 Font issues fix for Pronto

Now that Flash Player 9 has been officially released for Linux, more are testing Pronto! on Linux. Some have reported font issues in some distributions. The reports show that Pronto loads with no text labels anywhere in the interface. This can be corrected in the OS.

I read somewhere that the Flash Plugin for Linux Firefox requires gsfonts-x11. These fonts were installed and the X server restarted on a Linux system that displayed this problem after the GhostScript Fonts were added to the installation, Pronto! loaded as expected. You can obtain the fonts from this site:

ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/fonts/ghostscript-fonts-std-8.11.tar.gz

A search on your favorite search engine should return other file formats for the package management system that your favorite Linux distribution uses.
|

SIP Call Flow Diagram Tool

CallFlow Sequence Diagram Generator is good tool for creating call flow diagrams from packet capture files. With the documentation on the source forge page I have successfully used this on MacOS, Linux, and Solaris systems.

My tips for using this tool are:

  • Be sure to download the version of Batik they recommend on the project page

  • Do create a text file in the root folder named 'filter' with the contents: tcp.port == 5060 || udp.port == 5060



These Images are example of the output generated by this software:

Simple Registration

4.1.12_reg

Call Activity

eyebeam_pslater_to_ab_callflow
|

Some Firewall issues can degrade CommuniGate Pro MAPI performance

Several clients were recently unable to troubleshoot CommuniGate MAPI Connector slow performance that was also described as stalls or frozen Outlook. Some changes to the MAPI Conector in version 1.2.4 were made to address this issue. This has been documented in the Known MAPI Connector issues document online. This post may be somewhat dated as the current version is 1.2.6, however I wish to publish this for those who may not have upgraded their server and clients or can improve their MAPI performance from the firewall configuration (if possible). The MAPI conector is locally using MAPI to interact with Outlook while interacting with CommuniGate Pro over the CommuniGate Pro IMAP service ports 143 or 993 if using SSL. The data on the server side remains in standard based formats.

The documented fix for 1.2.4 is:

The default IDLE period is 60 seconds now to work around problems with some NAT firewall. The new "Workaround NAT/Firewall issues" option was added to account settings

Some firewalls between end user's Outlook clients and the CommuniGate Pro server prevent connections from staying alive long enough resulting in a long timeout at the client. Shorter IDLE periods are now used to try to prevent the firewall hole from becoming unavailable prematurely. Those who know about firewalls may be able to suggest how tune them better for interaction with MAPI Connector. A request has been received for a custom IDLE setting in the MAPI connector this is being considered by development. Also being considered is code to re-open stale connections.

If you are on the most recent version and still have problems, it is recommended to use integrated CommuniGate MAPI troubleshooting tool be used to gather detailed MAPI logs of the problem along with CommuniGate Pro logs set to ALL INFO and report this along with OS, versions, and network configuration information to Technical Support
|

Mozilla Lightning Calendar issue with CommuniGate Pro 5.1.x

A client was testing Mozilla Lightning/Calendar and CommuniGate Pro 5.1.x. each time they added or updated an entry they received a error 500 about an invalid format. Mozilla's Bugzilla contains a report of Bug number 327602. Our support has received several requests to investigate this and they have shared some information on the current status of this issue. Note that I really want this to work. I previously invested time in testing Apple's iCal and Evolution clients for use with CommuniGate Pro. The more choices we can find the better for all who need to schedule things.

There is a larger problem in the world of calendar and scheduling software that CommuniGate Systems Development has approached in a unique way. There is no ubiquitous calendar standard in use in the real world today. CommuniGate Pro's Calendar service implements multiple Calendar RFC standards and multiple access methods including http, https, and MAPI to IMAP. CommuniGate Prois also able to support multiple accept and respond scheduling formats. The standard based information is stored in standard formats even when non-RFC based methods that remain popular today (Outlook and Notes) access that data. Today I can email anyone and can be fairly sure that message will be delivered to them regardless of their messaging system and mine. I wish the state of calendar and scheduling services was the same. I believe it will be someday. I think the CommuniGate approach is pragmatic about what many use today, but embraces open standards as the productive future for these services.

I have read claims that this is a CalDAV or WebDAV problem. This is not accurate and is clarified on the bug report. The problem is better described on the posts in the bug report. The response from support was posted by a Mozilla bug reporter and responses from the project developers communicate the following to me:

  1. Acknowledge that the bug has not been fixed yet

  2. Acknowledge that Previous versions of the calendar client products did not behave this way it

  3. Declare that there is no violation of the spec rfc2445 from either party

  4. Label this a workaround for CommuniGate Pro therefore warranting a lower priority


I understand their thought process. I think they also have their own calendar server and it would be understandable if that is used as the reference for their testing and not CommuniGate Pro. CORRECTION from lilmatt: Mozilla does not have a calendar server project. I hope this testing is opened up to include products like CommuniGate Prothat strive for the same standards goals that CommuniGate Systems strives for as demonstrated in our list of implemented RFCs. The hope I am left with is that the same poster writes that "The bug just hasn't been fixed yet". I hope this means that there is some intent to support what was previously supported in Sunbird 1.0. CORRECTION from lilmatt: Sunbird 1.0 has never been released. If "it worked in a previous version of Sunbird", it was likely Sunbird 0.2. The observation of our support team that was posted in the report that this is alpha code which may change many times before a stable release is offered is fair. This does imply some risk in making a change in a stable version of CommuniGate pro to support an alpha calendar client that may change.

For now Mozilla Calendar puts the description of the TimeZone after that timezone is used. CommuniGate Pro does not support that. We are considering a fix if the final versions of Mozilla will continue to behave this way. It would seem reasonable to see what progress is made because the description of the bug indicates they are ready to fix this in future versions. Current versions of CommuniGate Pro only import the events if you have the timezone description above the actual place where the timezone is used.

Update: Changes were included in newer builds of Mozilla Calendar and this issue appears resolved. Other issues not directly related to this post have appeared since the bugzilla note below and I have reported those to our development team for resolution.

From: bugzilla-daemon@mozilla.org
Date: January 15, 2007 2:22:14 PM PST
Subject: [Bug 327602] Pushing the calendar file failed. Status code: 500: Illegal Calendar data format

--- Comment #32 from Bas van den Bosch 2007-01-15 14:20:26 PST ---
Just tested the latest nightly builds of both sunbird and ligtning on a
webdav-server and local: no problems so nothng gets broken.

On Communigate 4.3.12 I got no problems up till now when starting
with blank agenda's. When using pre-existing agenda's there may be some
problems (in my case outlook-mapi calendar, synchronized with my nokia),
don't know yet wether these are caused by sunbird or by communigate.

sunbird: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9a2pre)
Gecko/20070115 Calendar/0.6a1
lightning: 0.4a1 - build 2007011505 on Thunderbird 1.5.0.9

It seems like we finally have communigate with sunbird/lightning back...
Going to do some more testing and troubleshooting. Thanks all...
|

Firewall features and audio problems with CommuniGate VoIP

CommuniGate Pro SIP supports both Near End and Far End NAT Traversal. I previously wrote about ports that should be opened and which CommuniGate Pro server network configurations are most important to ensure the server has enough information to get the signaling and media from one end point to another. When media is send from one SIP end point to another using these features, it can travel through a variety of devices that may apply their own special magic to that traffic. When all of the CommuniGate Pro configuration is sane, this is usually the cause of one-way or no audio issues. It is always possible that there may be a CommuniGate Pro issue, if this is suspected anyone can always log SIP in ALL INFO mode and send the error logs to support@communigate.com.

The most common CommuniGate Pro configuration error I've found is not opening the firewall for the ports configured in the Media Proxy Parameters or not defining the WAN IPv4 Address. However, depending on how your firewall opens those ports there may be more to investigate to ensure media information arrives at the intended destination. If the end user is remote, there are many small NAT only or NAT with firewall features devices that can exist in the path.

A Home Router Example and Solution

My own Home firewall router caused a problem where I would receive a PSTN call from a Cisco router to CommuniGate Pro to my SIP IP phone and not hear the other party. SIP calls to and from me did not have this problem and audio was always bi-directional as expected. However If I called back to the PSTN caller the audio became bi-directional as expected. After an upgrade of the firmware I found a NAT Endpoint Filtering option that I set to Endpoint Independent for both TCP and UDP in order to correct this problem. I was able to configure this for both UDP and TCP. The product's documentation explains this option with the following entry in their help pages:

NAT Endpoint Filtering
The NAT Endpoint Filtering options control how the router's NAT manages incoming connection requests to ports that are already being used.

Endpoint Independent
Once a LAN-side application has created a connection through a specific port, the NAT will forward any incoming connection requests with the same port to the LAN-side application regardless of their origin. This is the least restrictive option, giving the best connectivity and allowing some applications (P2P applications in particular) to behave almost as if they are directly connected to the Internet.

Address Restricted
The NAT forwards incoming connection requests to a LAN-side host only when they come from the same IP address with which a connection was established. This allows the remote application to send data back through a port different from the one used when the outgoing session was created.

Port And Address Restricted
The NAT does not forward any incoming connection requests with the same port address as an already establish connection.

Note that some of these options can interact with other port restrictions. Endpoint Independent Filtering takes priority over inbound filters or schedules, so it is possible for an incoming session request related to an outgoing session to enter through a port in spite of an active inbound filter on that port. However, packets will be rejected as expected when sent to blocked ports (whether blocked by schedule or by inbound filter) for which there are no active sessions. Port and Address Restricted Filtering ensures that inbound filters and schedules work precisely, but prevents some level of connectivity, and therefore might require the use of port triggers, virtual servers, or port forwarding to open the ports needed by the application. Address Restricted Filtering gives a compromise position, which avoids problems when communicating with certain other types of NAT router (symmetric NATs in particular) but leaves inbound filters and scheduled access working as expected.

UDP Endpoint Filtering - Controls endpoint filtering for packets of the UDP protocol.
TCP Endpoint Filtering - Controls endpoint filtering for packets of the TCP protocol.

I did send logs to our support previously and they identified issues with the media, however there was not enough data in the logs because the problem was occurring after it arrived at my network.

An Office Linux Installation Example

A business partner of CommuniGate Systems was configuring their local CommuniGate Pro PBX and was experiencing an audio problem on all SIP endpoints. This included calls that terminate on Communigate Pro Through their Linux IP Chains or IP Tables firewall configuration. Their CommuniGate Pro Configuration did contain all of the information required to successfully perform NAT traversal, but this Linux firewall required a change to enable this. Even though Media Proxy parameters mentioned above were opened in the Linux firewall, they were not configured to " Allow all Established and Related " traffic through these ports. Once that change was made the audio was problem was eliminated. A search for this term and most major firewall brand names returns many related results.

The Bad Networking Practices Example

In some cases, usually when traveling, we have come across Internet Service providers that use non private IP address ranges for users of their NATed Network. A workaround can be configured in CommuniGate Pro's NATed Addresses configuration If subscribers of the system find themselves with an IP that is NATed but could be a real public IP address. This usually affects registration before it affects audio, but I have seen cases where the end user's SIP client appears to register, usually through the Clients NAT Traversal features, but then has problems with Voice or Instant Messaging.

We have had to put the following configurations in a separate dedicated CommuniGate Pro SIP Proxy for these cases. A separate proxy is not really required, but this method was used only to have the main system's NATed Addresses configuration pure, while another system bears the burden of mixing private and public address spaces to help those less frequent cases.

20.0.0.0/24 ; South America Hotel
193.168.0.0/24 ; Central America Hotel
81.254.75.0/24 ; Hotel in West Europe
12.108.98.0/24 ; WiFi service in North America

It is worth mentioning that Software and Hardware SIP Phones, Video Conferencing, or any other client should not need to use NAT Traversal tricks at the client level to work with CommuniGate Pro. It is recommended that these features and other methods like STUN be disabled when configuring your SIP network.
|

XIMSS Click to Call or call bridging example

Google has popularized web Call Bridging features as presented by http://maps.google.com. When a search result returns a local business the Google application presents a 'call me' option that will accept your phone number, call you, and then call the business. This basic functionality has been available in CommuniGate Pro for some time now. It first appeared in the standard webmail interface where the phone numbers or SIP addresses for contacts are presented as URLs to allows subscribers to click to call. Webmail then calls the extension of the subscriber and connects to the number linked from the contacts record. This type of functionality can be delivered from CommuniGate Pro to subscribers via Flash, AJAX, Widget, or any other UI that can send, receive, and parse XML messages over TCP. XIMSS based Applications can perform SIP voice tasks now and a simple application to drive it. If you wish to do more than bridge the call and provice audio from your application, it is possible to use the signallBind functions to have your program exchange the media, your application needs access to the audio resources on your platform. XIMSS is documented here:

http://www.communigate.com/communigatepro/XMLAPI.html

Here is a basic click-to-call example using CommuniGate Pro and XIMSS. CommuniGate Pro's existing webmail click to call feature allows users to click a contact's number which causes the server to call your SIP address and then calls the contact. If you would like to create an very simple application that is an end user utility for 'Click-to- call' you can create one very fast that does not require the user to enter webmail. You can choose to write the interface with flash, ajax, j2me, widget or whichever development environment your project requires. You can test this example with netcat (nc), curl, telnet, or a perl tcp session manager script. You can telnet directly to the XIMSS port of 11024 or to the http port of your test CommuniGate Pro installation 8010 or 80 to test your XML messages. Please note that SSL and SASL options are also available, I am not using those in these examples. If you test a direct connection, learn to type the null character, on a US keyboard it is control-@ or control-shift-2.

First your application must login. Have it take input for user@domain and password and send an XML message for login to the server:


<login id="x001" authData="user@domain" password="thepass"/>


Your program sends the null character (ASCII 0) to complete that message and the server responds.


<session urlID="6-SESSIONYl02MWIhIwPsb" userName="user@domain"/ ><response id="x001" />


Once logged in your application can reuse the Session URL ID to offer many thing to the user in the realm of Messaging, Signaling, and Scheduling. This simple example for Click-to-call has a single input, phone number or SIP address. The program we are creating changes the interface after successful login and presents an input field and a button control with the word 'Call'. If this is j2me on a mobile phone, I might have the application auto-login the user based on their phone SIM information and maybe only use a PIN number to confirm access making a kinder mobile phone user interface experience.

The user chooses to dial +52 (55) 5350 4672. The program we are creating reformats that number into a SIP URL for our server and connects the user to that number. First we call the user account from the server:


<callStart id="x001" callLeg="4444" peer="user@domain;services=no">
<sdp ip="[IP_OF_CGP]" origUser="-" sessionID="7777777" sessionVersion="9999" originIP="[IP_OF_CGP]">
<media media="audio" ip="[IP_OF_CGP]:16398" protocol="RTP/AVP" direction="sendrecv">
<codec id="0" name="PCMU/8000" />
<codec id="4" name="G723/8000" />
<codec id="8" name="PCMA/8000" />
<codec id="101" name="telephone-event/8000" format="0-15"/>
</media>
</sdp>
</callStart>


Program sends the null character and the server responds:


<response id="x001" /><callConnected callLeg="4444"><sdp ip="[IP_OF_CGP]" origIP="[IP_OF_SOFTPHONE]" origUser="-" sessionID="10837624" sessionVersion="10837666" subject="eyeBeam"><media direction="sendrecv" ip="[IP_OF_SOFTPHONE]: 9242" media="audio" protocol="RTP/AVP"><codec id="0" name="PCMU/ 8000" /><codec id="8" name="PCMA/8000" /><codec format="0-15" id="101" name="telephone-event/8000" /></media></sdp></callConnected>


This calls your end user. Note that the end user accepts the call with the Eyebeam softphone. The Server response returns information you can have your program parse and act on if you wish. You can read about all of those XML message options in the XML API link above. Note that your user can have their CommuniGate Pro preferences set to forward their calls to a mobile phone. This is very handy if you are in a country where inbound mobile calls are not charged by the minute. Even if the call is billed per minute, it is very convenient for a mobile user to establish calls in this manner without worrying about having their softphone or IP phone registered. This callStart can go anywhere based on the users preferences on the server.

I now have a connected the server's call to the end user. I wish to connect them to +52 (55) 5350 4672. I can use the callLeg I defined to do this with a call transfer.


<callTransfer id="x001" callLeg="4444" peer="011525553504672@domain"/>


Send the null character.
Server says:


<response id="x001" /><callDisconnected callLeg="4444"/>


A few things happened here. The program we are creating knows that my server expects international calls from the US to begin with 011, so the program replaces the international long distance symbol of '+' and replaces this with 011. You can accept the '+' on your server if you wish, this is simply a routing rule in CGP. The reformatted destination number is then sent to the server as a SIP address where CommuniGate Pro has a gateway configured to handle the call. The Gateway can be a physical box with SIP routing capabilities or an account on a service that supports SIP standards for routing calls. CommuniGate Pro connects the user with their destination number and disconnects the call leg that it had established directly with the end user. We can end our session if we want our program to do that now.


<bye id="x001" /> send null


Note that in this same session I could have added a calendar item or a completed task to serve as a end user record of the call. I could have also sent instant messages from the server to the user via XMPP or SIP notifying the user of the call progress. After the program we are creating works, it can be refined to add pre-recorded audio prompts for the user and/or the destination. "Please hold while I connect your call" "Call Connected" "Sorry I could not connect your call press 1 to retry or 2 to hangup" ", etc...

Instead of just Click-to-call we could have created a Podcasting application supported by some CG/PL that calls the end user prompts them for their Podcast recording and records the audio. It is then possible to programatically generate the XML for the RSS feed that the podcast requires and post that to the users blog.
|

Accessing CommuniGate Pro LDAP from Outlook and MacOS Address Book

CommuniGate Pro's built in support for Directory and the LDAP Protocol makes it possible for LDAP clients to directly access useful server information. The most common use is Mail User Agent auto-lookup or auto-complete addressing, or user/accounts directory searching. These examples are based on the default configuration of CommuniGate Pro. There are server side considerations, access controls, and customization options that administrators should investigate to learn more about the information that can be returned to subscribers of the system.

Outlook 2003's LDAP Client

I have not found the Outlook LDAP client very friendly. This experience is probably different and configured differently when using Outlook with Active Directory. Everyone I know who has configured this has expressed some sort of unhappiness with the Outlook LDAP client's user interface because of limited sort and search options when the query results are presented. However it does work and can be useful to configure if all of your accounts are not in your CommuniGate Pro Contacts Address Book

This is how I configured the Outlook 2003 LDAP client.

From Outlook -> Tool -> Email Accounts...

Pasted Graphic 4

Add a New Directory or Address Book -> Internet Directory Service (LDAP) -> Next

Pasted Graphic 5

Server Name: cgp.mydomain.com
I select my server requires me to login and add my user and pass - I do not select SPA authentication (won''t work)

Pasted Graphic 6

I click more settings and add my searchbase: ou=people,dc=cgp,dc=mydomain,dc=com,o=my company (ou and o are defaults)

Pasted Graphic 7 Pasted Graphic 8

Then I am not certain why but I need to exit outlook and re-open it again before it will be available.

To test the Access I open the Outlook LDAP Client Interface from the menu Tools -> Address Book -> Show Names from the: -> cgp.communigate.com (to match my example above)

Pasted Graphic 9

This presents you with the directory data, but in my opinion not in the most user friendly format. The complaints I have received about the Outlook LDAP client range from sorting the lookups and limited searching, but I have never had a problem with the basic functionality.

The MacOS Address Book LDAP Client

The configuration for the MacOS Address Book LDAP client is similar to the Outlook example above. Open the Address Book -> Preferences... menu and configure the LDAP preference item.

Pasted Graphic 10

Pasted Graphic 11

My examples do not show ssl/tls configurations, but CommuniGate Pro is capable of serving LDAP with an encrypted port if needed. The LDAP configuration in CommuniGate Pro can be customized. This could change your Search Base string in your client configuration. The Directory browser administrator's tool can be used to test the LDAP configuration. Another configuration detail to consider is that it is also possible to optionally not keep your CommuniGate Pro LDAP information in sync with your local CommuniGate Pro settings.
|

Emergency Calls notification

It can be useful for operators of a CommuniGate Pro system to be notified if any telephony service subscriber dials an emergency number with their CommuniGate Pro account. I have provided a few examples below using the North American Emergency number 911 and the default account of postmaster as the notified administrator/account Note that regardless of Notification configuration, 911 call records will also exist in the default CDR files and optionally in the Logs based on your Real-Time log levels configurations.

It is worth noting that the default CommuniGate Pro router configuration found under Settings -> Router in the web administration interface contains several emergency number examples:

<911@*> = emergency@localhost ; 911: NA emergency
<112@*> = emergency@localhost ; 112: EU emergency
<01@*> = emergency@localhost ; 01: RU emergency
S: = emergency#pbx ; start 'emergency' app


The Internet Telephony Service Provider (ITSP) who asked the question that prompted this posting is interested in sending an email to the administrator whenever a subscriber dials 911. The CG/PL application option in the last line of the default 'emergency examples' above enables many possible actions that include Recording emergency calls, IM and/or email messages and more. A custom application can be created called '911toemail.sppr' that composes custom email messages to the postmaster account. There are then many possibilities for the routing of 911 calls to the applications that perform the needed notification. Once the composition application is developed and incorporates the routing you wish to use for 911 one can then use a router entry such as this one to route 911 calls to this application:

<911@*> = #911toemail ; Route 911 emergencies through the 911toemail.sppr application

For help with email composition in a CG/PL applications, I suggest looking at the existing 'conference-old.sppr' stock application found in Users -> PBX. This application contains email composition code that can serve as an example of how to create very customized application to perform this service. A snippet of this CG/PL email message composition code is:

CG/PL message composition example:




messageBody = "Below is your new conference ID number:\e " + thePassword;
if isOpen then
messageBody = messageBody + "\e\eThis conference is an 'open' one: anyone can start it";
else
messageBody = messageBody + "\e\eBelow is your new conference Leader PIN (Password):\e " + OwnerPassword;
end if;
messageBody = messageBody + "\e\eThank you for using the Conference Center.\e";
void(SendEMail(MyEmail(),"Your new conference ID",parameter.owner,null,messageBody));




Another option for notification that can add more flexibility to the custom 911 notifications is to use the CommuniGate Pro Signaling Rules engine to fork all of the 911 calls to the CG/PL 911toemail application and incorporate any other rules engine actions options to minimize the need to develop more complex CG/PL applications. Using Signaling Rules can also help you create special cases based on the time of day or the name and perhaps the domain of the caller. Multiple rules can be created and multiple priorities can be used to order the rules and stop processing if criteria for the notifications have already been met.

Once the email composition application is ready a signal rule can be created In this part of the configuration interface:

Pasted Graphic 1

If you are creating or have multiple rules you should consider the Stage and Priority options the Help link in the upper right corner of the above screenshot will provide detailed information about how to use these options. Following the Edit link on this page will take you to the configuration of the new 911 notify rule. Add any information you wish to describe your rule for other administrators to the Comment Field. An example that forks all of your users 911 cals to the 911toemail.sppr application for email notification to the postmaster is displayed below. Note that the 'To:postmaster' information will be contained in the 911toemail.sppr script

Pasted Graphic 3

As mentioned above additional Actions and Parameters can be used to send Instant Messages to the Administrators Group of the ITSP. Another notification that may be useful is a notification to the primary contact of the ITSP hosted service business customer.
|

CommuniGate Pro on Jabber Software Foundation Servers List

With kind cooperation from Peter Saint-Andre CommuniGate Pro has been listed on the Jabber Software Foundation Servers List. I will submit updates to the listing with more features information that was incomplete on my previous submission. I will also submit more of the Operating Systems CGP supports.

The Server is listed on this table.

A Server Detail Page for CommuniGate Pro is also available.
|

Get off your Asterisk?

Ever since CommuniGate Systems released PBX Application services and the stock group of PBX applications in CommuniGate Pro (CGP), many have asked me questions ranging from CommuniGate vs. Asterisk to CommuniGate with Asterisk. I try to encourage a John Nash/Game Theory approach to reviewing these systems, however not everyone agrees with this. I am sharing in this posting notes I've taken and questions I've asked and answered about these two products. I continue to receive requests for a checklist like listing of all has that Asterisk does not and visa versa. This information is available and I believe better learned direct from both products documentation and trying both products as both can be downloaded and publish information about what services they offer and which RFCs they support.

I have received reports of clients registering their Asterisk to CommuniGate Pro via SIP and also registering CommuniGate Pro to Asterisk via SIP. This was done in some cases to experiment and in others to migrate from one to the other. I was informed in one case that Asterisk was used only to function as a software layer that provides a Digium card driver to CommuniGate Pro. I doubt that is efficient and would most likely not recommend that, but that fact that it might be possible is interesting. There are many other SIP devices you can get from a company like Voxilla to create a SIP environment from your PSTN connection. Cisco 2600 series routers with SIP WIC expansion modules have been tested successfully tested with CommuniGate Pro and are in production in several areas.

There is more that can be written about and Asterisk, I welcome comments to this posting in case there are important details we should address.

Text in blue came from others and I was asked to respond to it. I have copied my responses in bold text.

We already use Asterisk and SER as IP telephony platform, which scale very well, allow us to do anything we want, and they're free, besides
having much more applications ready for production (billing, voicemail, IVR, callback, etc...);


I agree that applications matter a lot. There are more available on Asterisk due to success of the ecosystem that has been created by the price and very groundbreaking approach of Asterisk. One can achieve this in (see CGPL) an example voicemail system comes with the platform. For delivery of these types of solutions, CommuniGate Pro is extremely more efficient and innovative in my opinion, but many do not realize how "ready and easy to develop" it it is. Most Asterisk friends tell me that even with the available community modules they end up doing more development on other items Asterisk does not have, things that does. The "and SER" addition to the above highlights a CommuniGate internal and external integration advantage. SER would not be an additional install to manage with CGP, a fully featured SIP proxy is part of the platform. We must and are working to publicize this more.

Yes, ComuniGate Pro cluster solves load sharing and redundancy problems, but Asterisk is free, more flexible, and already has dozens of
applications ready for production.

CommuniGate Applications are distributed with the download of Communigate Pro. They are designed to be customized. There is a "download psychology" that I this has been missed in the distribution of CommuniGate Pro. For some time now software professionals have become accustomed to downloading many separate pieces and parts to augment or add functionality to a downloadable product. This is common in many other products including open source projects. I have received questions from people requesting the download information for the voicemail application, auto attendant, or conference server for CommuniGate Pro. The assumption is that these are all separate downloads and there must also be a separate SDK. The download of CommuniGate Pro contains these applications and their audio with documentation and comments in their source to help with customization. Some find this hard to believe because the footprint of the package is under 12 megabytes and installs very quickly without much effort.

Asterisk is Free. CommuniGate Pro now has the Community Edition mode where 5 accounts or less on the

Does CommuniGate Pro come with a powerful Least Cost Routing engine? Rebrand capability for resellers? Callback and IVR applications? Flexible billing engine?

Least Cost Routing - IP trunking Gateways, The included Gateway Caller application, Signaling Rules, ENUM Support, and Advanced Routing

Rebrand? Yes, for graphical interfaces there is Skins support for multiple domains. Each domain can have it's own PBX and set of personalized applications. The Service provider can customize the delivery method for multi level re-branding (provider, license holder and provider's client)

For Callback and IVR see CGPL and the included PBX applications including webmail's click-to-call feature for contacts. I also have a XIMSS example with I will share on this blog another day.

It is possible today to create a "CDR Helper Application" for CommuniGate Pro. This follows the same integration model that External authentication solutions and 3rd party plugins do, The CGatePro Helper Protocol. A CDR helper application, running alongside CGatePro obtains the CDR records via its "stdin" channel. The application can be written in any language, and is usually very small and simple. It should implement the API of the Billing or reporting system planned for use with which could be MySQL or in another database format.

The CDR information can be sent to the Billing or Reporting system via RADIUS protocol which is used by some billing systems. The CDR information can also be sent to the Billing or Reporting system via HTTP protocol (to a specified URL).

VoIP is not just about SIP signalling, or dumping a simple CDR to some file, neither in a PBX cenario or a softswitch cenario. In the first case, it's about connecting to PSTN, supporting FXS/FXO/BRI/PRI/GSM/DECT equipment, creating IVR applications quicky, supporting call queues, ACD and voicemail, allowing users to save money by using DISA, increasing their productivity through TAPI and fax integration. In a softswitch
cenario, it's about uncompromised NAT traversal, codec translation, flexible billing, powerful LCR calculation, cost/profits analysis, etc...

We must not be communicating our platform's capabilities well. Perhaps we should brag more about the fact that these things can be done with CommuniGate Pro. One excuse I use for myself is that Communigate Pro is "difficult to believe" or the "market psychology" for downloading or how these solutions are build. In the end it is really our job to make this known. Hopefully more on this blog is a small start that will lead to more. If this CommuniGate Pro is the platform equivalent of the mythical "Automobile that runs on Water" it should be evangelized better.

We cannot count on the world to read our documentation. If some of the markets we work to serve seem to misunderstand us, our offering, or our message then we must deliver the information in an understandable form. I believe our PSTN support is the most innovative and not "race to zero" or "walled gardens", but it seems we have failed to communicate this. I am working more with the communications side of our company. Perhaps this could help escape many of the negative assumptions some make about us.

A client of one of our distributors is an Internet Telephony Service Provider (ITSP) that is serving 2 major vertical markets. Keys to this win was all of the time our distributor partner put into developing applications, integrating other products and testing to win the confidence of the provider. The service provider has followed the model of as a platform and does not request turnkey operability for all features of the platform. They create what they need with partners, own that intellectual property, and earn additional revenue from those services. The following services are delivered with this provider's offering:

Music on Hold for Cisco and Linksys Phones
E1 hardware gateways
Point of Sales (POS) over IP with Visa and Mastercard through CommuniGate
Fax over IP with CommuniGate
Certification with 2 other ITSPs for redundancy
Simultaneous ring calls to mobile phones when required

I disagree your PSTN support is innovative, CommuniGate Pro has NO PSTN support whatsoever, it just forwards the call to external gateways. Of
course we could discuss if PSTN support will be relevant in the future, with everyone using SIP clients, and using IP trunks to connect us to the world, but there are millions of PSTN equipments out there, and support for them IS needed.

"Just forwarding" in my opinion is a bit over simplified and unfair. The gateway workarounds and media proxy behavior are only two of several examples that I find unmatched in the industry. I do not see much long term value in the Software Driver to E1/T1 and all other interfaces model. Many do. I do see the need mentioned above, and there is significant life for it as there is for any interface. Many in the world still use parallel or USB1 interfaces to print instead of network interfaces, or bluetooth, or 1394 connections. Yes, all connections have their place, best-use scenario, etc... Are we too far ahead of the market? I do not believe so. I do see the risk of not pleasing the pragmatic telecommunications buyers. They will spend a lot on what is already known in the telco closets. We do test and do report information for those tested devices.

Our benchmarks (most recent SIP whitepaper) show where we are going with this. The pure IP trunks method is where we are strong in calls per second, etc... However, this does not mean that we only desire "large carrier customers". How many products that serve these largest environments scale down to a 25 user license? Good Examples are found where we compete in the messaging market, Critical Path and Open Wave specifically. While we can scale as they do and larger/more efficiently in messaging but they do not scale down. This says much about quality of architecture and code.


If not "racing to zero" means using CommuniGate Pro as a NGN platform to ensure long term business continuity and profits, integrating email,
fax, IM, VoIP, providing triple-play, value-added services, etc..., instead of just betting on VoIP call termination, with decreasing prices (look at VoIPBuster, and Skype), of course I'd agree CommuniGate Pro would be our choice if CommuniGate Systems had a "ready to run" product, instead of "ready to develop", at a price we could pay.

In my opinion most of the examples you gave of technology you prefer are less "ready to run" than CGP. However their approaches are very different. I do not think a product needs to stay "Telco centric" to solve the same problems, but I do recognize that transition times should be respected. The most recent build and interfaces and reflecting this. This is the part of delivery that some will find too slow, while others say it is too fast. We can only try to balance as best as possible. More applications are coming for CommuniGate Pro. I will write about them here as much as possible. Writing about those already included is also a good idea.

If "walled gardens" means not to bet/build/develop/rely on proprietary technology, then our hat is off to CommuniGate Systems, I personally have
known/loved/recommended CommuniGate Pro for many, many years now, (I believe I asked for a license in 1998), and I respect the way CommuniGate Systems has always managed to use standards to solve problems, and never developed closed protocols.
|

A Telephone User Interface (TUI) for Windows Messenger

Disclaimer: I nor anyone related to this posting cannot accept any responsibility for the modifications made by this tip. Proceed at your own risk with the information shared in this posting.

A friend shared this Windows Registry modification that adds a TUI dialpad with numbers to Windows Messenger. Windows Messenger is a Microsoft SIP client that should not be confused with .NET or MSN messenger (though compatible with those services). The source of the .reg file is:

windows_messenger.reg contents:




Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Messenger\Client]
"CorpPC2Phone"=dword:00000001
"DisablePawn"=dword:00000001




The next time you launch Windows Messenger, you'll see the "Start Phone call" option. The interface is not very convenient, but it enables a phone keypad, that allows you to send send DTMF signals to the applications you connect to.
|

Music on Hold with CGPL

This solution was submitted by Marcos Taschelmayer and Rafael Veiga Saluotto of GetNet Comunicações.

The CG/PL code and CommuniGate Pro configuration below can be used to create a SIP URI Music on Hold (MOH) server. This solution does not provide a Music on Hold server that requires an RTP stream URI.

This CG/PL code and CommuniGate Pro configuration has been tested and confirmed fuctional with a Linksys SPA-941 IP phone with firmware 4.1.12(a).

Create the following CG/PL script named mohserver.sppr:




// mohserver.sppr
// Accept an incoming call (stop if it's not possible)
// Play the PressPound media file
// Wait for any input for up to 5 seconds
// If the "pound" ("#") symbol was entered,
// play the Good media file - The audio file in this example is named MOH-Music.wav
// Stop

entry Main is
if AcceptCall() != null then stop; end if;
while isConnected() loop
PlayFile ("MOH-Music");
end loop;
end entry;




CommuniGate Pro Configuration for MOH

1. Upload the application and WAV file to the CommuniGate ProPBX where you wish to deliver the MOH service. In this example I use the root PBX of the main domain.

fetch.php

2. Create a user account called moh (warning you probably wish to create a hard password or disable authentication for this account as a person will not use it, but you do not want is easily accessable)

fetch.php

3. Use the simplified Real-Time Rule Divert Calls in the moh@domain.com account to redirect all calls to #mohserver

fetch.php

Linksys SPA-941 IP Phone Configuration

1. Connect to the phone advanced administration interface page

fetch.php

2. Locate the Field MOH Server on Ext 1 or 2 and add the moh SIP URI this field

fetch.php

To test this service place a call from the IP phone or receive a call on the IP Phone and use the IP phone to put the call on hold. The music should begin for the other party shortly after the hold button is selected.
|