Thursday, May 26, 2011

Cisco H.323 gateway with FXS port transfer via TCL script

Ultimately, I want to accept hookflash transfers on a T1 CAS fxs-loop-start trunk connected to an older IVR with a Dialogic T1 card.  Before I test in production, I wanted to verify this script version reliability and configuration options.  Here I am simply using an analog telephone on an VIC2-FXS card, rather than a VWIC2-1MFT-T1/E1 port connected to the Dialogic card.

Using app-h450-transfer., etc. from Cisco's site.

H.323 gateway at is on CUCM at It's a Cisco 2811 with VIC2-2FXS port installed at 0/1/0 with IOS version c2800nm-ipvoicek9-mz.124-22.YB2.bin

! NOTE: the entries here are case sensitive.
! Run "show flash:" to verify the directory and TCL script name
! The WORD "transfer" below is defined by me and could be any friendly name
! It's used on dial-peers later.
! The "param delay-time 0" entry defines how long to wait for the consultation setup
! The script default is 2 seconds.
! Here I've chosen to require no setup time.
! This requires no time between the when the XTO digits are dialed and the XOR hangs up.
service transfer flash:app-h450-transfer.
paramspace english index 0
paramspace english language en
paramspace english location flash:/PROMPTS/EN/
paramspace english prefix en
param delay-time 0
! Just binding H.323 to the Ethernet interface.
interface FastEthernet0/0
ip address
duplex full
speed auto
no mop enabled
h323-gateway voip interface
h323-gateway voip bind srcaddr
! NOTE: here I adjust what an acceptable hookflash duration is from the XOR
voice-port 0/1/0
timing hookflash-in 750 150
description *** XOR ***
! NOTE: here we associate the service called transfer that is defined above with the incoming voip dial-peer.
! Now a the CUCM knows what to do with a hookflash signal when sending the gateway a call to 1300.
dial-peer voice 100 voip
service transfer
voice-class h323 1
incoming called-number 1300
dtmf-relay h245-alphanumeric
codec g711ulaw
no vad
! NOTE: here we look for 1300 and send the call to port 0/1/0.
dial-peer voice 12 pots
destination-pattern 1300
port 0/1/0
forward-digits 0
! NOTE: here we allow the XOR to dial [1-8]... on CUCM to transfer to.
dial-peer voice 101 voip
destination-pattern [1-8]...
voice-class h323 1
session target ipv4:
dtmf-relay h245-alphanumeric
codec g711ulaw
no vad

Now when CUCM user dials 1300 and call is sent to this H.323 gateway, the analog phone at port 0/1/0 rings. The 1300 user can answer, hookflash, dial any other 4 digits and hang up. The callee hears MoH from flash momentarily and is transfered to whatever was dialed.

! For reference, here is the "show flash" output
-#- --length-- -----date/time------ path

1 47509252 Jun 08 2009 15:44:12 c2800nm-ipvoicek9-mz.124-22.YB2.bin
2 92882 Mar 13 2008 14:18:32 app-h450-transfer.
3 0 May 25 2011 16:38:20 PROMPTS
4 0 May 25 2011 16:38:20 PROMPTS/EN
5 21108 Sep 29 2003 15:05:06 PROMPTS/EN/
6 21108 Sep 29 2003 15:05:02 PROMPTS/EN/
7 96024 Sep 29 2003 15:05:10 PROMPTS/EN/
8 96024 Sep 29 2003 15:05:04 PROMPTS/EN/
9 54172 Sep 29 2003 15:05:02 PROMPTS/EN/
10 54172 Sep 29 2003 15:05:08 PROMPTS/EN/
11 42484 Sep 29 2003 15:05:06 PROMPTS/EN/
12 42484 Sep 29 2003 15:05:02 PROMPTS/EN/
13 12668 Sep 29 2003 15:05:08 PROMPTS/EN/
14 12668 Sep 29 2003 15:05:02 PROMPTS/EN/
15 19512 Sep 29 2003 15:05:06 PROMPTS/EN/
16 19512 Sep 29 2003 15:05:00 PROMPTS/EN/
17 31832 Sep 29 2003 15:05:02 PROMPTS/EN/
18 31832 Sep 29 2003 15:05:00 PROMPTS/EN/
19 496521 Sep 29 2003 15:05:00 PROMPTS/EN/
20 496521 Sep 29 2003 15:05:08 PROMPTS/EN/
21 496521 Sep 29 2003 15:05:10 PROMPTS/EN/
22 496521 Sep 29 2003 15:05:04 PROMPTS/EN/
23 35456 Sep 29 2003 15:05:06 PROMPTS/EN/
24 35456 Sep 29 2003 15:05:02 PROMPTS/EN/
25 23506 Sep 29 2003 15:05:06 PROMPTS/EN/
26 23506 Sep 29 2003 15:05:00 PROMPTS/EN/
27 42484 Sep 29 2003 15:05:04 PROMPTS/EN/
28 42484 Sep 29 2003 15:05:00 PROMPTS/EN/
29 17159 Sep 29 2003 15:05:02 PROMPTS/EN/
30 17167 Sep 29 2003 15:05:10 PROMPTS/EN/
31 200024 Sep 29 2003 15:05:08 PROMPTS/EN/
32 200024 Sep 29 2003 15:05:04 PROMPTS/EN/

Saturday, May 14, 2011

Migrate Cisco CUCM SMB to Asterisk proof of concept

Had a request of a customer to upgrade a small (50 user) Cisco VoIP solution to the latest revisions to maintain manufacturer support. In the discussion process, it became clear additional features were desirable and as a result the licensing models would have to be changed, upgrade and recurring costs would increase, and third party applications would have to be employed.

This post will serve as a log of a really casual attempt to reproduce the desired functionality using Asterisk and / or FOSS software. My desire is to actually perform the install and configs vs. reading about them to verify what people discuss on the Internet re: Asterisk is actually what people want and / or would accept transitioning to.

The goals are:
  • 50 hardphone deployment over 2 sites. currently call control exists at site A only, and the phones are Cisco 7940s
  • BLF functionality on phones
  • IVR to answer incoming calls and provide options via DTMF
  • ACD / Call Queueing environment to distribute calls among 10 agents
    • all calls should be able to be recorded
    • calls should be able to be recorded on demand
    • historical reports of call distribution and abandoned calls should be available
    • agents should be able to identify what option was chosen from the IVR to reach them
  • voicemail with retrieval from Outlook
  • audio paging
  • texting 
  • all signaling and RTP traffic must stay on LAN

Ubuntu 11.04 download
  • decided on the Ubuntu OS to keep things easy knowing this may not be the production OS of choice
  • burned using Sonic RecordNow CD
  • simple next-next-next install on an old Dell Dimension desktop
  • found issues with the default display options
    • used "Ubuntu (no effects)" setting during login
    • changed top and bottom bars to 32 height for easier reading
  • changed Eth0 from DHCP to static address
  • changed / created root user password via "sudo password root" (I am not concerned about the hashed / blank / secure root password at this time). 
Asterisk on Ubuntu 10.04
  • decided to use the guide above as basic install steps vs. a live CD etc. to be able to dissect issues later if necessary
  • found corporate desktop using IE7 made copying code difficult from site
  • decided to simply download the script and review
Asterisk on Ubuntu script
  • used scripted install due to issues copying documented install elements
  • changed PASSWORD variable in script to something I could remember
  • used text editor find / replace to change "aptitude" to "apt-get"
  • ran in terminal via "bash"
Added Generic IAX Extension via FreePBX

Installed Attractel Zoiper softphone for easy testing
Installed Counterpath X-Lite softphone
  • configured new IAX account (basically user / password) and registered Zoiper phone
  • configured new SIP account (basically user / password) and registered X-Lite phone
  • called voicemail, myself, some feature codes, etc. to test basic functionality.
Added IVR module using FreePBX Module Admin option.
  • added Test IVR with a few useless options
  • added feature code in FreePBX to access from softphone
  • added blank inbound route to same IVR and used 7777 to simulate call from softphone

Made some test calls between Zoiper and X-Lite.  Found X-Lite seems to support Asterisk's implementation of presence basically natively.  After some very simple configuration in X-Lite that involved adding the other Zoiper extension to the contact list, the X-Lite contact list was updated when a call was in / was not in progress on the other Zoiper extension.  See setup and updated list below:

X-Lite contact list config
X-Lite reflects Zoiper is in call
A little research on Voip-Info indicates it is as well. Although Asterisk doesn't seem to use the Presence Information Data Format (PIDF) defined in RFC 3863, this functionality / type of support is what my customer is looking for regarding BLF buttons.


Added Queueing and Queuing Priorities Asterisk modules via FreePBX. 
  • Don't need Queuing  Priorities except for testing.
  • Added test queue as option from test IVR.
  • Basic call routing and queuing features function as expected.
  • CID Prefix does not work.  Was expecting "Test" to prefix caller ID on test agent phone display. Will need to research dependencies / bugs.
  • Agent audio prompt to agent on answer works nicely.

Tuesday, May 03, 2011

CUCM ring down phone

You may run into scenarios where you need to configure a phone to dial a number automatically with out user intervention (i.e. elevators, emergency phones, etc.)

To create a phone or line on a Cisco CUCM system that automatically dials a number when going off-hook, there are four basic steps.

1: Create a new Partition.

This PT will be applied to a new Translation Pattern, and be referenced by a new Calling Search Space.

2: Create a new Calling Search Space.

This CSS will be applied to the device / DN serving as a ring down phone. Add the new Partition created above (step 1) to this new CSS.

3: Create a new Translation Pattern.

The pattern should be blank. The partition should be the new Partition created above (step 1). The Calling Search Space should be one that provides access to the number to be dialed automatically. The Called Party Transform Mask should be the target number to be dialed when the device goes off hook.

4. Apply the new CSS created above (step 2) to the device / DN to serve as a ring down phone.
At this point, when the device / DN goes off hook, the CSS is searched for Partitions that contain a matching pattern.  The blank pattern in the new Translation Pattern is matched.  Since dialing nothing is a match, the calling party, now blank, is translated to the number in the Called Party Transform Mask and that number is rung without any other input.

Update 09/28/2015:  here's another how-to version including information regarding SIP phones