четверг, 20 августа 2015 г.

Mobile Connect и Mobile Voice Access в CUCM

Что же это такое?
1) Mobile Connect позволяет привязать к DN и end-user'у несколько внешних (доступных через route pattern) номеров (Remote Destination). При входящем звонке, если DN не поднимает трубку, звонок уходит на Remote Destination. Таким образом, не сообщая никому свой мобильный номер, можно покинуть рабочее место и остаться доступным для звонка. При этом линия на рабочем номере показывается поднятой - что-то вроде shared line.
Если ответить на Remote Destination номер и, разговаривая, вернуться к рабочему телефону, то можно дать отбой (попросив абонента повисеть на линии) на мобильном - тогда через несколько секунд звонок вернется на основной DN и, нажав на рабочем телефоне softkey - Resume, можно   продолжить разговор.
Да, можно еще сначала ответить на звонок на рабочем телефоне, а потом нажать softkey - Mobility и звонок уйдет на Remote Destination. Так, не прерывая разговора, можно отойти от своего стола.
2) Mobile Voice Access. MVA требует настроенного Mobile Connect, с Remote Destination'ами. К имеющемуся функционалу добавляет следующее - находясь на Remote Destination номере, абонент может позвонить на внешний офисный номер, набрать свой PIN и совершать звонки (как наружу так и на внутренние номера) от имени своего рабочего DN. Если же приходится звонить с другого номера (не с Remote Destination), то IVR попросит его ввести (а затем PIN), что дает возможность попадать внутрь корпоративной телефонии из любой точки.
Для MVA потребуется роутер с выходом во внешнюю телефонную сеть,  настроенный и подключенный к CUCM как gateway.

Итак, настроим Mobile Voice Access.

Шаг 1. Открываем CUCM, идем в меню "Device/Device Settings/Softkey Template". Делаем копию одного из шаблонов, переименовываем и настраиваем:
Нажав Configure Softkey Layout, добавим Mobility для состояний On Hook и Connected:


Шаг 2. Подключим этот softkey template к рабочему телефону ("Device/Phone/", жмем на нужный телефон):
Не забыв указать end-user'а.

Шаг 3. Настройка Remote Destination Profile - идем в "Device/Device Settings/Remote Destination Profile", жмем Add New:
Здесь нужно указать end-user'а и подключить DN.

Шаг 4. Теперь сами Remote Destination'ы - идем в "Device/Remote Destination", жмем Add New:
Не забываем поставить "птичку" в Line Association.
В секции "Ring Schedule" можно указать время/дни когда разрешается переводить звонки на этот номер. Cекция "When receiving a call during the above ring schedule" позволяет отфильтровать звонящих по Access List'у (его нужно предварительно создать в "Call Routing/Class of Control/Access List").

Шаг 5. Настройка End-User'а - открываем "User Management/End User", жмем на нужного пользователя:

Remote Destination Profile будет уже указан. Нужно настроить "Maximum Wait Time for Desk Pickup" в миллисекундах, после которых звонок уйдет на Remote Destination. Не забываем выставить птичку Enable Mobility.

Все, можно тестировать! Звоним на номер 1001, поднимаем трубку, затем нажимаем softkey - Mobility и перебрасываем звонок на Remote Destination. Поднимаем трубку на мобильном, убеждаемся что на телефоне с номером 1001 линия показывается как занятая, даем отбой на мобильном и через несколько секунд видим вернувшийся звонок на рабочий телефон, нажимаем softkey - Resume и проверяем связь.

Кстати, если CSS (и правила компании) не позволяют так запросто выйти на Remote Destination, нужно указать разрешающий CSS в параметре Rerouting Calling Search Space у Remote Destination Profile'а.


Если все ok - пришла пора Mobile Voice Access.

Шаг 1. Прежде всего нужно включить сервис - открываем Cisco Unified Serviceability интерфейс, идем в меню "Tools/Service Activation" и включаем "Cisco Unified Mobile Voice Access Service":
Save.

Шаг 2. Возвращаемся в Cisco Unified CM Administration, идем в меню - "Media Resources/Mobile Voice Access":
В качестве Mobile Voice Access Directory Number нужно указать любой свободный DN.

Шаг 3. Меню "System/Service Parameters", выбираем сервер, сервис (Cisco CallManager).
Переходим в секцию "Clusterwide Parameters (System - Mobility)":
Также стоит обратить внимание на параметр "Inbound Calling Search Space for Remote Destination": In the Inbound Calling Search Space for Remote Destination field, choose either Trunk or Gateway Inbound Calling Search Space (the default, which uses the CSS of the trunk or gateway that is routing the inbound call from the Remote Destination) or Remote Destination Profile + Line Calling Search Space (which uses the combined line and Remote Destination Profile CSS).

Секция "Clusterwide Parameters (Feature - Reroute Remote Destination Calls to Enterprise Number)" - интересный параметр "Reroute Remote Destination Calls to Enterprise Number":  if I call your mobile number from another phone in the network it will be matched to your SNR profile and anchored as an SNR style call.

Шаг 4. Включаем MVA у end-user'ов: переходим в меню - "User Management/End User", жмем на нужного пользователя:

Шаг 5. Настройка шлюза ("XXX.XXX.8.138" - ip адрес CUCM):

voice service voip 
 allow-connections h323 to h323

application

  service mva http://XXX.XXX.8.138:8080/ccmivr/pages/IVRMainpage.vxml

voice-port 0/1/3

 supervisory disconnect dualtone mid-call
 supervisory custom-cptone MyTELCO
 cptone RU
 timeouts call-disconnect 1
 description PSTN
 caller-id enable

dial-peer voice 1 pots

 service mva
 direct-inward-dial
 port 0/1/3

dial-peer voice 2 voip

 destination-pattern 3001
 voice-class codec 1
 session target ipv4:XXX.XXX.8.138

interface Vlan100

 description LAN
 ip address 10.20.1.249 255.255.255.248
 h323-gateway voip interface
 h323-gateway voip bind srcaddr 10.20.1.249

Шлюз принимает входящие звонки на порт voice-port 0/1/3. Первый call leg - входящий dial-peer 1, который match'ится по "port 0/1/3".  На этом порту включен MVA (direct-inward-dial) и подключен сервис под именем "mva" (название может быть любое). В разделе application сервис описан как url на CUCM сервере. Шлюз скачивает vxml файл, узнает, что нужно направить звонок на номер 3001 (и другие настройки). Второй call-leg - исходящий dial-peer 2, который match'ится по "desination-pattern 3001". И звонок уходит на CUCM на IVR.
Маленькая ремарка: приведенный выше конфиг взят из моей реальной лабы, он точно работает, но... я не нашел в vxml файле указания на номер 3001 (может плохо искал?), в конфиге роутера я его не указывал... direct-inward-dial на входящем dial-peer'е должен был переключить роутер в one-stage dial и искать исходящий dial-peer по DNIS, но... во первых DNIS пустой, так как звонок приходит на аналоговый FXO порт, а во вторых в номере, который я набираю чтобы попасть на этот порт, нет цифры 3001... хм, значит роутер все же узнает этот номер у CUCM'а.
Полезная команда: sh call application voice mva

Ну и конечно же шлюз 10.20.1.249 должен быть заведен на CUCM (меню "Device/Gateway"):

Все, можно проверять :) Звоним на шлюз с Remote Destination номера - если CUCM по caller-id его узнает, то он спросит сразу же PIN, затем предложит нажать 1 и набрать номер для звонка. Можно набрать внутренний номер и убедиться, что звонок приходит как-будто с рабочего телефона (а там DN показывается как занятый). Даем отбой на мобильном номере (Remote Destination) и видим, что звонок перебросился на рабочий DN, нажимаем softkey - Resume и проверяем есть ли связь.
Пробуем позвонить с другого номера (которого нет в Remote Destination'ах) - CUCM должен попросить ввести Remote Destination с помощью dtmf, затем PIN и все то же самое.

четверг, 13 августа 2015 г.

Подключаем Cisco Unified Presence к CUCM

Итак, вводные данные: установленный CUCM, установленный CUPS.
При первом обращении, presence сервер просит ip адрес CUCM'а и логин/пароль, чтобы подключиться к нему через AXL. Тут нужно обратить внимание на то, что логин должен быть application user (а не end user) и у этого пользователя должен быть role - Standard AXL API Access. Завести такого пользователя в CUCM'е можно в "User Management/Application User". В CUPS'е эти параметры можно потом увидеть/поменять в "System/CUCM Publisher".
Ну и конечно в CUCM'е должен быть включен сервис (в интерфейсе Cisco Unified Serviceability: "Tools/Service Activation")  Cisco AXL Web Service.
В результате, подключившись через AXL, presence сервер сможет стянуть себе end user'ов.

Дальше в CUCM'е идем в "User Manager/User Settings/UC Service", жмем Add New:

Next. Указываем ip address сервера с CUPS:

Сохраняемся (Save).
Затем создаем еще один UC Service:

Этот сервис нужен для того, чтобы клиент под windows (CUPC или cisco jabber) мог управлять реальным телефоном (режим deskphone mode) и, если такая задача не стоит и нужно только видеть статус user'ов (или будет использоваться только режим softphone), то этот шаг можно пропустить.
Настраиваем (тут в качестве IP Address нужно указать ip CUCM сервера):
Save.

Созданные UC service'ы нужно объединить в один Service profile, для этого идем в "User Management/User Settings/Service Profile", жмем Add New и настраиваем:


Подключим профиль к end user'ам. Для этого идем в "User Management/End User", редактируем пользователя:
Попутно не забываем выставить Primary Extension.
Можно также пользователю добавить группу Standard CCM End Users, чтобы он мог заходить на страничку User Options presence сервера.

Сохраняемся и повторяем для других end user'ов.

Теперь идем в CUPS и проверим - загрузились ли в него пользователи ("User Management/End User"):
Если нет "птичек" в поле "Licensed IM and Presense" - значит стоит проверить привязку профиля (UC Service Profile) к пользователю.

Дальше, настройки CUPS: идем в "Presence/Gateways", жмем Add New:
Здесь указываем в качестве Presence Gateway адрес сервера CUCM.
Сохраняемся (Save).

Следующий шаг нужен для того, чтобы клиент под windows мог нормально отработать в режиме softphone (когда RTP ходит непосредственно до PC и CUPC сам терминирует звонок). Если такой задачи нет, можно его пропустить. 
Идем в "Application/Legacy Clients/Settings":
В качестве TFTP сервера указываем CUCM - с него CUPC будет скачивать конфигурационный файл устройства softphone.
Save.

Дальше настраиваем CCMCIP. Этот шаг обязателен, цитата: "The Cisco Unified Communications Manager IP Phone (CCMCIP) service runs on Cisco Unified Communications Manager and retrieves a list of devices associated with each user". Идем в "Application/Legacy Clients/CCMCIP Profile":
Указываем ip адрес CUCM сервера. Также, не забываем добавить в этот профиль end user'ов (кнопка Add Users to Profile). Есть интересный нюанс - опция "Make this the default CCMCIP Profile for the system" отрабатывает только если она была поставлена ДО того как пользователи перенеслись из CUCM в CUPS.

Все :) можно ставить CUPC (ну или Cisco Jabber).
Как уже стало ясно, есть два режима работы:
1) deskphone mode, когда CUPC управляет реальным телефоном и
2) softphone mode, когда CUPC сам может принимать и совершать звонки.

Начнем с deskphone mode:
Прежде всего нужно убедиться, что на CUCM запущен сервис Cisco CTIManager (Cisco Unified Serviceability: "Tools/Service Activation").
Также, DN контролируемого телефона должен быть ассоциирован с end user'ом, а в настройках end user'а, телефона и DN должны быть включены опции Allow Control of Device from CTI.
У end user'а должна быть добавлена role: Standard CTI Enabled.
Запускаем CUPC, вводим имя пользователя, пароль, ip сервера CUPS и:
В данном случае, я добавил пользователя ("dasha") в список контактов и теперь могу отслеживать его состояние, писать сообщения (для этого в его контакте должен быть указан "Адрес IM" в виде имя_пользователя@домен). Звонить можно по любому номеру, но звонок будет совершаться с реального телефонного аппарата.

Теперь - softphone mode:
Для этого в CUCM нужно добавить устройство softphone. Идем в "Device/Phone", жмем Add New:
Для CUPC версий меньше 8.0 - нужно выбирать тип устройства Cisco Unified Personal Communicator.
Настраиваем:
Обязательно указываем Owner User ID - это должен быть end user, под которым логинимся в CUPC.
Для устройств типа Cisco Unified Cliend Services Framework название (Device Name) может быть произвольным, но для Cisco Unified Personal Communicator нужно соблюдать формат UPC<USERNAME>, где <USERNAME> это имя end user'а.
Далее, нужно в созданное устройство добавить DN (логичнее использовать тот же номер, что и на реальном телефонном аппарате) и ассоциировать этот DN с end-user'ом:
Теперь идем в настройки end user'а - User Management/End User, жмем на нашего пользователя и добавляем только что созданное устройство в список контролируемых:
Далее нужно убедиться, что на CUCM сервере запущен TFTP (в интерфейсе Cisco Unified Serviceability).
Запускаем CUPC, логинимся и:
Опция "Использовать Cisco *** для аудио" внизу коммуникатора предоставляет возможность переключаться между режимами deskphone и softphone.

Если softphone mode не хочет работать, нужно проверить доступность TFTP сервиса. Для этого любым tftp клиентом нужно запросить с CUCM сервера файл <DEVICENAME>.cnf.xml, где <DEVICENAME> имя созданного softphone устройства.
Если файл скачивается, то его следует открыть текстовым редактором и найти параметр:
<processNodeName>cucm</processNodeName>
то, что будет между тегами (в данном случае - cucm) должно резолвиться с данного PC в ip CUCM сервера.

Почти всё... Можно писать сообщения, выставлять себе разные статусы, звонить непосредственно с компьютера или управлять с него телефонным аппаратом. Но кое-чего не хватает - собственно говоря, самого presence'а -  текущее состояние DN'ов никак не отображается в CUPC (только статусы других CUPC клиентов).
Для того чтобы это исправить нужно на CUCM настроить SIP trunk в сторону CUPS, и указать CUCM'у что он должен его использовать для PUBLISH сообщений о статусе линий.

Открываем CUCM, идем в "System/Security/SIP Trunk Security Profile". Жмем Add New и выставляем четыре "птички":
Теперь можно создавать trunk. Идем в "Device/Trunk", жмем Add New:
Next:
Указываем ip адрес CUPS сервера, раннее созданный security profile и сохраняемся. Не забываем также сделать reset.

Теперь - "System/Service Parameters", выбираем сервер и сервис (Cisco CallManager). В списке параметров находим IM and Presence Publish Trunk и в выпадающем списке выбираем созданный SIP trunk в сторону CUPS:
Save.

Попутно проверяем "System/Application Server":
Если он не завелся при интеграции, можно завести вручную. И лучше использовать ip адрес вместо доменного имени.

Дальше идем на CUPS. Тут нужно проверить Incoming ACL и Outgoing ACL для CUCM сервера. При интеграции эти правила автоматически создаются, но, возможно, также стоит сменить доменное имя на ip адрес. Эти правила нужны для того, чтобы разрешить коммуникации между CUCM и CUPS без аутентификации.
"System/Security/Incoming ACL":
И "System/Security/Outgoing ACL":

Теперь можно наблюдать состояние линий end user'ов:

Разумеется нужно не забыть проверить привязку всех DN к соответствующим end user'ам.

Ссылки:
-Пошаговая инструкция интеграции Cisco IM and Presence 9 (CUPS) с CUCM 9
-Cisco Jabber 9 для Windows. Пошаговая инструкция интеграции и настройки
-CUPC and Jabber for Windows Softphone Troubleshoot

среда, 22 июля 2015 г.

Интеграция Cisco Unity Connection с CUCM (посредством SIP)

На данный момент мой CUC уже связан с CUCM (Интеграция Cisco Unity Connection с Cisco Unified Communications Manager'ом (посредством SCCP)), но ничего не мешает попробовать SIP. Тем более, что этот вариант даже проще...

Открываем CUCM, идем в System / Security / SIP Trunk Security Profile:
Find, затем - Non Secure SIP Trunk Profile:
Отмечаем checkbox'ы напротив: Accept out-of-dialog refer, Accept unsolicited notification, Accept replaces header.
Save.

Теперь создадим SIP trunk - идем в меню Device / Trunk, жмем Add New:
В качестве Trunk Type выбираем SIP Trunk.
Next. Настраиваем:
Тут главное не забыть активировать Redirecting Diversion Header Delivery - Outbound в секции Outbound Calls, иначе не будет работать Forwarded Routing Rules в CUC (в видео, по ссылке внизу страницы, этот момент упущен).
Указываем также Non Secure SIP Trunk Profile, который отредактировали чуть раньше. IP адрес CUC сервера и т.д....
Save,

Итак, SIP trunk есть, но пока из CUCM на него нет маршрута. Идем в меню: Call Routing /  Route/Hunt / Route Pattern. Add New:
В качестве номера, через который будет осуществляться выход из CUCM в CUC, я указал 7000 (это может быть любой свободный DN).
В качестве destination'а куда отправлять звонок - CUC_SIP_trunk, созданный шагом раньше.
Save.

Итак маршрут создан, но нужно еще привязать DN 7000 к voicemail'у. Идем в меню: Advanced Features / Voce Mail / Voice Mail Pilot. Жмем Add New:
"Make this the default Voice Mail Pilot for the system" - по желанию :) если отметить - при нажатии на телефоне кнопки voicemail будет набираться именно этот DN. 

Теперь Voice Mail Profile - идем в Advanced Features / Voice Mail / Voice Mail Profile, Add New:
Выбираем только что созданный Voice Mail Pilot (7000).
"Make this the default Voice Mail Profile for the System" - аналогично... если отметить, то forward настройки на voicemail будут срабатывать именно для этого profile. При наличии нескольких Voice Mail Profile, можно индивидуально выставлять в настройках DN, какой profile (а значит и pilot номер) он будет использовать.

Пора переходить к CUC.
Слева в навигационной панели выбираем Telephony Integrations / Phone System, жмем Add New:
Пусть называется SIP_CUCM.
Save:
Оставляем все как есть. Идем слева в панели в Telephony Integrations / Port Group. Жмем Add New:
Выбираем нашу phone system (SIP_CUCM), выбираем тип (SIP), даем название и указываем ip адрес CUCM сервера.
Save:
В свойствах Port Group отмечаем Register with SIP Server. После сохранения изменений (Save) может потребоваться Reset. Жмем Reset.

Теперь нужно создать порты (согласно лицензии и возможностям железа) - именно они будут определять количество одновременных соединений между CUCM и CUC. Идем в Telephony Integrations / Port, жмем Add New:
Save.

Ссылки:
CAPPS Video #2 Integrating Cisco Unity Connection with CUCM via SIP
Configuring Cisco Unity Connection for SIP Support

вторник, 21 июля 2015 г.

Перенос пользователей из CUCM в Cisco Unity Connection (с помощью AXL сервиса)

На самом деле все просто.

Конечно, прежде всего надо настроить шаблон. Открываем Cisco Unity Connection, идем в Templates / User Templates, выбираем voicemailusertemplate:
Настраиваем (главное, конечно, выбрать phone system):
Save.

Далее идем в Telephony Integrations / Phone System, жмем на нашу PBX (SCCP_CUCM), идем в меню:
 Выбираем: Edit / Cisco Unified Communications Manager AXL Servers:
Заполняем данные нашего CUCM сервера:
Save и Test.

Теперь нужно убедиться, что в CUCM нужный нам сервис запущен. Открываем CUCM, идем в Cisco Unified Serviceability:
Убеждаемся что сервис Cisco AXL Web Service активен:
Если нет - активируем.

Есть только одна проблема - перенести получится только End User'ов, у которых Primary Extension не пуст. Идем в Cisco Unified CM Administration, затем User Management / End User, Find, жмем на интересующего нас пользователя и проверяем:
Если Primary Extension пуст - сначала связываем End User'а с телефоном (Device Associations), затем в выпадающем списке Primary Extension выбираем какой номер у этого пользователя основной (ведь даже на одном телефоне может быть несколько номеров).
Save.

Возвращаемся в Cisco Unity Connection. Идем в навигационной панели слева в Users / Import Users:
Выбираем нужную phone system и жмем Find:
Все, можно импортировать. Import Selected.

Теперь, если абонент с номером 1003 нажмет на телефоне кнопку voicemail, то вместо Opening Greeting он попадет в свой voicemail ящик.

Кстати, чтобы удалить такого пользователя, нужно сначала удалить AXL сервер из phone system.