Phoning It In – Unity Express


This short lab in the Phoning it in series  will go over the basics of using soft Cisco IP Phones to a  Cisco Unity Express router. Since I don’t have a CUE module I’m using a INE rack rental for this. 


First things first lets configure the CUCME router so that it can handle SIP and Skinny phones. The CUE module likes to use NTP so let’s make the router a NTP master.

Branch03-RTR(config)#ntp master

Next we’ll configure the configure SIP CME

Branch03-RTR(config)#voice register global
Branch03-RTR(config-register-global)# mode cme
Branch03-RTR(config-register-global)# source-address port 5060
Branch03-RTR(config-register-global)# max-dn 10
Branch03-RTR(config-register-global)# max-pool 10
Branch03-RTR(config-register-global)# authenticate register
Branch03-RTR(config-register-global)# timezone 6
Branch03-RTR(config-register-global)# ntp-server mode unicast
Branch03-RTR(config-register-global)# create profile

And also the voice service so SIP can register.

Branch03-RTR(config)# voice service voip
Branch03-RTR(conf-voi-serv)# allow-connections h323 to h323
Branch03-RTR(conf-voi-serv)# allow-connections h323 to sip
Branch03-RTR(conf-voi-serv)# allow-connections sip to h323
Branch03-RTR(conf-voi-serv)# allow-connections sip to sip
Branch03-RTR(conf-voi-serv)#$redundancy 0 hs-redundancy 0 fallback none 
Branch03-RTR(conf-voi-serv)# sip
Branch03-RTR(conf-serv-sip)# bind control source-interface Loopback0
Branch03-RTR(conf-serv-sip)# bind media source-interface Loopback0
Branch03-RTR(conf-serv-sip)# registrar server

The CUE module is initially configured with the interface sm command. To get started we need to give the interface an IP like normal, this acts as the CUE default gateway. Then we have to give Unity Express itself and tell it the default gateway with the service-module commands.

Branch03-RTR(config)#interface sm1/0 
Branch03-RTR(config-if)#ip add
Branch03-RTR(config-if)#service-module ip address
Branch03-RTR(config-if)#service-module ip default-gateway
Branch03-RTR(config-if)#no shut
Oct 10 15:15:44.447: %LINK-3-UPDOWN: Interface SM1/0, changed state to up
Oct 10 15:15:45.447: %LINEPROTO-5-UPDOWN: Line protocol on Interface SM1/0, changed state to up

Next we need to tell the router how to reach the CUE IP address by giving it a /32 static route that points to the module.

Branch03-RTR(config)#ip route sm1/0

Then we can  connect to the CUE module like so

Branch03-RTR#service-module sm1/0 session

If you are using a rack rental like I am you will want to start by factory defaulting the module so you aren’t bothered by other labs that have been done on the box.

First tell the module to go offline

CUE# offline 
!!!WARNING!!!: If you are going offline to do a backup, it is recommended
that you save the current running configuration using the 'write' command,
prior to going to the offline state.

Putting the system offline will disable management interfaces.

Are you sure you want to go offline?[confirm]

Then reset it to factory default

CUE(offline)# restore factory default 
!!!WARNING!!!: This operation will cause all configuration and data
on the system to be erased. This operation is not reversible.

Do you wish to continue?[confirm]
Restoring the system. Please wait .....done
System will be restored to factory default when it reloads.

Press any key to reload:k

System reloading ....


Once the module boots back up it will take you through a startup wizard that I would recommend running through.

 Welcome to Cisco Service Engine

Setting the system time from hardware clock

********** rc.aesop ****************
Populating resource values from /etc/sm_rsrc_file
Populating resource values from /etc/default_rsrc_file
Populating resource values from /etc/products/cue/default_rsrc_file
Populating resource values from /etc/products/cue/sm_rsrc_file
Push button monitor started
Processing manifests . . . . . . . . . . . complete
==> Management interface is eth0
==> Management interface is eth0

Serial Number: FOC14454M1V
Disk /dev/md0 doesn't contain a valid partition table
Disk /dev/sdc doesn't contain a valid partition table
INIT: Entering runlevel: 2
********** rc.post_install ****************

IMPORTANT:: Welcome to Cisco Systems Service Engine 
IMPORTANT:: post installation configuration tool. 
IMPORTANT:: This is a one time process which will guide 
IMPORTANT:: you through initial setup of your Service Engine.
IMPORTANT:: Once run, this process will have configured 
IMPORTANT:: the system for your location.
IMPORTANT:: If you do not wish to continue, the system will be halted 
IMPORTANT:: so it can be safely removed from the router.

Do you wish to start configuration now (y,n)? y
Are you sure (y,n)? y

Enter Hostname
 (my-hostname, or enter to use se-11-11-3-254): CUE01

Enter Domain Name
 (, or enter to use localdomain):

IMPORTANT:: DNS Configuration:
IMPORTANT:: This allows the entry of hostnames, for example, instead 
IMPORTANT:: of IP addresses like for application configuration. In order 
IMPORTANT:: to set up DNS you must know the IP address of at least one of your

Would you like to use DNS (y,n)?n

WARNING: If DNS is not used, IP addresses will be required.

Are you sure (y,n)? y

Enter IP Address of the Primary NTP Server
 (IP address, or enter for 
Found server

Enter IP Address of the Secondary NTP Server
 (IP address, or enter to bypass):

Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa 4) Arctic Ocean 7) Australia 10) Pacific Ocean
2) Americas 5) Asia 8) Europe
3) Antarctica 6) Atlantic Ocean 9) Indian Ocean
#? 2
Please select a country.
 1) Anguilla 28) Haiti
 2) Antigua & Barbuda 29) Honduras
 3) Argentina 30) Jamaica
 4) Aruba 31) Martinique
 5) Bahamas 32) Mexico
 6) Barbados 33) Montserrat
 7) Belize 34) Nicaragua
 8) Bolivia 35) Panama
 9) BQ 36) Paraguay
10) Brazil 37) Peru
11) Canada 38) Puerto Rico
12) Cayman Islands 39) St Barthelemy
13) Chile 40) St Kitts & Nevis
14) Colombia 41) St Lucia
15) Costa Rica 42) St Martin (French part)
16) Cuba 43) St Pierre & Miquelon
17) CW 44) St Vincent
18) Dominica 45) Suriname
19) Dominican Republic 46) SX
20) Ecuador 47) Trinidad & Tobago
21) El Salvador 48) Turks & Caicos Is
22) French Guiana 49) United States
23) Greenland 50) Uruguay
24) Grenada 51) Venezuela
25) Guadeloupe 52) Virgin Islands (UK)
26) Guatemala 53) Virgin Islands (US)
27) Guyana
#? 11
Please select one of the following time zone regions.
 1) Newfoundland Time, including SE Labrador
 2) Atlantic Time - Nova Scotia (most places), PEI
 3) Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
 4) Atlantic Time - New Brunswick
 5) Atlantic Time - Labrador - most locations
 6) Atlantic Standard Time - Quebec - Lower North Shore
 7) Eastern Time - Quebec - most locations
 8) Eastern Time - Ontario - most locations
 9) Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
10) Eastern Time - Thunder Bay, Ontario
11) Eastern Time - east Nunavut - most locations
12) Eastern Time - Pangnirtung, Nunavut
13) Central Standard Time - Resolute, Nunavut
14) Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
15) Central Time - central Nunavut
16) Central Time - Manitoba & west Ontario
17) Central Time - Rainy River & Fort Frances, Ontario
18) Central Standard Time - Saskatchewan - most locations
19) Central Standard Time - Saskatchewan - midwest
20) Mountain Time - Alberta, east British Columbia & west Saskatchewan
21) Mountain Time - west Nunavut
22) Mountain Time - central Northwest Territories
23) Mountain Time - west Northwest Territories
24) Mountain Standard Time - Creston, British Columbia
25) Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
26) Pacific Time - west British Columbia
27) Pacific Time - south Yukon
28) Pacific Time - north Yukon
#? 20

The following information has been given:

 Mountain Time - Alberta, east British Columbia & west Saskatchewan

Therefore TZ='America/Edmonton' will be used.
Is the above information OK?
1) Yes
2) No
#? 1

Local time is now: Mon Oct 10 09:27:56 MDT 2016.
Universal Time is now: Mon Oct 10 15:27:56 UTC 2016.
executing app post_install

Enter Call Agent
1) Cisco Unified Communications Manager (CUCM) -- default
2) Cisco Unified Communications Manager Express (CUCME)
#? 2
Setting Call Agent to CUCME
executing app post_install done
INIT: Switching to runlevel: 4
INIT: Sending processes the TERM signal
==> Starting CDP
STARTED: probe
STARTED: fndn_udins_wrapper
STARTED: /usr/wfavvid/
STARTED: /usr/bin/

Waiting 49 ...

IMPORTANT:: Administrator Account Creation 
IMPORTANT:: Create an administrator account. With this account, 
IMPORTANT:: you can log in to the Cisco Unity Express GUI and 
IMPORTANT:: run the initialization wizard. 

Enter administrator user ID:
 (user ID): admin
Enter password for admin:
Confirm password for admin by reentering it:


At this point we are done with the CUE command line, while you can setup a mailbox with CLI, it tends to be more efficient to use the web interface. Though you can see what we have done by looking at show run from within the CUE session at the end of the lab.

Open up a web browser and go to


Go to System -> Call-In Numbers

Click Add, select voicemail and enter in the extension that will be used for voicemail and then click add.


Next off to Voicemail -> Message Waiting Indicators  and check Subscribe  and Unsolicited Notify

Subscribe Notify – This means that CUCME will register with Unity Express to retrieve MWI notifications when  a voicemail message arrives.

Unsolicited Notify – This method simply has CUE send a SIP Notify message when a message is received.

Outcalling – This is an older method for SCCP where the on and off state for MWI each have a extension on the system. The respective extension is called to turn the MWI on or off as needed.

We won’t bother looking at outbound today since it isn’t that interesting.


With the system setup out of the way, lets add some mailboxes. You can integrate CUE with CUCME so you can import users from the router but entering in things manually will suite our purposes just fine for today.


Once you add the user it will take you to the Add new mailbox page as long as the Create Mailbox check box is checked.


We’ll go ahead and add the rest of our phones.


Back on the router, we’ll tell the DNs to forward missed calls to the voicemail extension 8001. We’ll also enable MWI on SIP.

Branch03-RTR(config)#voice register dn 1
Branch03-RTR(config-register-dn)#call-forward b2bua busy 8001 
Branch03-RTR(config-register-dn)#call-forward b2bua noan 8001 
Branch03-RTR(config-register-dn)#call-forward b2bua unregistered 8001
Branch03-RTR(config)#voice register dn 2 
Branch03-RTR(config-register-dn)#call-forward b2bua busy 8001 
Branch03-RTR(config-register-dn)#call-forward b2bua noan 8001 
Branch03-RTR(config-register-dn)#call-forward b2bua unregistered 8001

Then we’ll enable the changes with the create profile command.

Branch03-RTR(config)#voice register global 
Branch03-RTR(config-register-global)#create profile

For our SCCP phones we can use a template to do the same thing.
Note: we don’t need to use a template but it is a bit cleaner.

Branch03-RTR(config)#ephone-dn-template 1 
Branch03-RTR(config-ephone-dn-template)#call-forward busy 8001 
Branch03-RTR(config-ephone-dn-template)#call-forward noan 8001 timeout 20

Branch03-RTR(config)#ephone-dn 1
Branch03-RTR(config-ephone-dn)#ephone-dn-template 1
Branch03-RTR(config-ephone-dn)#ephone-dn 2 
Branch03-RTR(config-ephone-dn)#ephone-dn-template 1

Earlier we talked about the subscribe types for a router to talk to CUE, that is configured under sip-ua with the mwi-server command. If you want to use unsolicited add the unsolicited keyword to the end.

Branch03-RTR(config-sip-ua)#mwi-server ipv4:

The voicemail button itself is configured with the voicemail command  under telephony-service or voice register global

Branch03-RTR(config-telephony)#voicemail 8001 
Branch03-RTR(config-telephony)#create cnf-files 
Creating CNF files
Branch03-RTR(config)#voice register global 
Branch03-RTR(config-register-global)#voicemail 8001 
Branch03-RTR(config-register-global)#create profile

Lastly we need to add a dial-peer that sends calls to extension 8001 to the CUE module.

Branch03-RTR(config)#dial-peer voice 8001 voip
Branch03-RTR(config-dial-peer)# destination-pattern 8001
Branch03-RTR(config-dial-peer)# session protocol sipv2
Branch03-RTR(config-dial-peer)# session target ipv4:
Branch03-RTR(config-dial-peer)# dtmf-relay sip-notify
Branch03-RTR(config-dial-peer)# codec g711ulaw
Branch03-RTR(config-dial-peer)# no vad

At this point you should be able to make a test call and leave a voicemail. If everything is happy you should get a voicemail notification and be able to check your message.


You can also log into the user web inbox to check messages the url is:


That is it for tonight, next time we’ll look more into dial-peers and translation patterns etc before moving on to the big UC servers 🙂

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.