вторник, 29 марта 2016 г.

Перехват пакетов с IP-телефона на CME

Доброго времени суток!

На практике часто приходиться перехватывать пакеты с IP-телефона для анализа (SCCP-пакеты, SIP-пакеты, RTP-пакеты). Для этого нам потребуется компьютер с установленным ПО Wireshark. Суть в этом: на CME включаем функцию, при котором IP-телефон все принятые и отправленные пакеты порта network начинает пересылать в порт computer. И в этот же порт мы включаем наш компьютер с Wireshark. Для того чтобы включить эту функцию делаем следующие команды:

telephony-service
service phone spantopcport 0
create cnf-files
reset all

После этого телефон начинает отправлять все пакеты в указанный порт. Хорошего всем дня!

пятница, 25 марта 2016 г.

IVR скрипт для Cisco Call Manager

Доброго времени суток!

Сегодня разберем простейший IVR скрипт на vxml. На работе часто бывают случаи, когда нужно настроить автоответчик для правильного распределение звонка. Если у вас станция Cisco Call Manager Express, то удобнее будет это сделать на vxml. Начнём!

Voice XML - это язык XML, которая способствует взаимодействию абонента с приложением. VXML состоит из form и menuform может использоваться для сбора данных от звонящего, для проигрывания подсказки (prompt) и т.д.. menu позволяет выбрать абоненту различные меню и переводят его к другим form или menu.  Давайте попробуем кратко разобрать простой vxml скрипт:

<?xml version="1.0"?>
<vxml version="2.0" base="flash:IVR.vxml">

<var name="number"/> --------- Объявляем переменную number

<form id="main">       ---------- Создаем form с именем main
<property name="timeout" value="5s"/> 
<block> 
<prompt> 
<audio src="flash:/IVR/WelcomePromt-Alaw.wav"/> ----- Указываем расположение файла Приветствие (Приветствие говорит: Здравствуйте! Вы позвонили ...... Наберите номер абонента или ждите ответа оператора)
</prompt>
</block>
<field name="get_phone_num" type="number"> ------- Используется для сбора набранного номера от звонящего. Тип вводимых данных номер. (Может быть boolean, date)
<grammar type="application/grammar+regex">[0-9][0-9][0-9][0-9]</grammar> ---- Формат набираемого номера четырехзначный
  <filled>
   <assign expr="'phone://'+get_phone_num" name="number"/> ---- Назначаем значение
   <goto next="#TransferToDestNumber"/> ----- переводим в другой form для перевода звонка
  </filled>
</field>
<catch event="noinput">   <goto next="#sek"/>  </catch>  ---- Если абонент ничего не нажал, то переводим его в form sek.
</form>


<form id="TransferToDestNumber">  ---------- Создаем form с именем TransferToDestNumber
<transfer name="mycall" connecttimeout="20s" destexpr="number" bridge="true"> --- Звонок переводится в набранный номер
<filled>
<if cond="mycall == 'busy'">
   <prompt><audio src="flash:/IVR/busy-1.wav"/></prompt> ---- Проигрывается указанный звуковой файл, если набираемый номер занят
<elseif cond="mycall == 'noanswer'"/>
   <prompt><audio src="flash:/IVR/absent.wav"/></prompt> ------ Проигрывается указанный звуковой файл, если набираемый номер не отвечает.
</if>
</filled>
</transfer>
</form>

<form id="sek"> --------- Создаем form с именем sek
<transfer name="mycall" connecttimeout="30s" dest="phone://1010" bridge="true"> 
<filled>
<if cond="mycall == 'busy'">
   <prompt><audio src="flash:/IVR/busy-1.wav"/></prompt>
<elseif cond="mycall == 'noanswer'"/>
   <prompt><audio src="flash:/IVR/absent.wav"/></prompt>
</if>
</filled>
</transfer>
</form>

</vxml>


Вот и всё. В данном скрипте не было примера с menu. Возможно будет в следующих статьях. Удачного всем дня!

суббота, 19 марта 2016 г.

Как проверить регистрацию телефонов на CME

Доброго времени суток!

Есть две команды, которые можно использовать для проверки статусов телефонов. Есть масса других команд, которая могут дать аналогичную информацию. Но для меня они самые удобные информативные. Давайте их рассмотрим.

Для SIP-телефонов:
show voice register pool telephone-number 1010
Pool   ID                                          IP Address                 Ln    Dn     Number            State
===   ==================      ===========           ==    ==     ======       ==========
4      1111.AAAA.2222.BBBB      192.168.3.100              1       2       1010            REGISTERED

Для SCCP-телефонов:
show ephone summary brief    (Это команда есть только с CME 10.5)
=====================================================================
Phone Type      Ephone    MacAddress                      IpAddress        Ln   Dn    Number     Status
=====================================================================
6921                     5        AAAA.EEEE.7777.8888   192.168.3.105     1     5       1011       Unregistered


Эти команды также полезны,  для определения телефонного аппарата (МАС-адреса) к которому этот номер привязан. Например, для SIP-телефонов. мы знаем только номер 1010, применяя вышеуказанную команду можем определить:
- Тег dn,  в данном случае (voice register dn 2).
- Тег pool , в данном случае 4 (voice register pool 4).
- MAC-адрес, в данном случае 1111.AAAA.2222.BBBB.

Удачного всем дня!

Конференция на CME

Доброго времени суток!

На работе часто бывает ситуации, когда пользователям необходмо сделать конференц-звонок. Как это реализовать на Call Manager Express ? Давайте рассмотрим.

Есть два типа конференций: ad-hoc и meet-me.
Конференция ad-hoc --- инициатор конференций самостоятельно вручную добавляет каждого участника через кнопку конференция. Подходят, когда количество участников до 10
Конференция meet-me ---- инициатор создает виртуальную комнату со специальным номером, а остальные участники попадает в эту комнату, набрав у себя этот же номер. Подходят, когда количество участников от 2 и выше.

Мы рассмотрим настройку конференций meet-me. Для начала создадим номер для конференций с несколькими линиями:
ephone-dn 50 octo-line     ------ Создаем номер с 8 линиями
number 1122                     ------ Номер конференций
conference meet-me         ------- Тип конференций
preference 1                      ------- Задаем высший приоритет для этого ephone-dn (при конференций первую очередь будет использоваться его линии)
no huntstop      ----- это команда позволяет использовать линии других ephone-dn, когда закончатся линии этого ephone-dn.

ephone-dn 51 octo-line
number 1122
conference meet-me
preference 2
no huntstop

Таким образом мы создали конференц-номер 1122 с 16 линиями(участниками). Созданный номер можно проверить командой: show ephone-dn conference meet-me
type                     active       inactive       numbers
===================================
Meet-me               0                 16                1122
Dn tags: 50, 51

Здесь 0 показывает количество активных участников. Теперь инициатор у себя на телефоне нажимает soft-key meet-me или конференция, набирает номер 1122. Таким образом создает конференцию, а остальные участники просто набирает номер 1122.

Правда, нам ещё нужно регистрировать медиа-ресурсы для конфы, но про это я расскажу в следующих статьях.


Регистрация SIP телефонов на CME

Доброго времени суток!

Сегодня рассмотрим вопрос по регистраций SIP-телефонов на CME.

Сначала настроим глобальные настройки:

voice register global
mode cme                        ---------------- Указываем режим СМЕ 
source-address 192.168.3.1 port 5060 ---- адрес и порт СМЕ куда регистрируется телефоны   
max-dn 50                     ---------------- Определяем макс. колич. номеров (потом можно изменить)
max-pool 50                  ---------------- Макс. количество аппаратов (телефоны, софтфоны)
load 3905 CP3905.9-4-1-0     -------- Для каждой модели указываем нужную версию прошивки
timezone 40                            -------- Временная зона (для Астаны +6)
time-format 24                       -------- Указываем нужный формат времени
date-format D/M/Y                -------- Формат даты (по умолчанию будет M/D/Y)
camera                                   -------- для видео-телефонов включаем камеру
video                                      -------- включаем видео для видео-телефонов (напр: Cisco 9951)
user-locale RU load CME-locale-ru_RU-Russian-10.0.2.7.tar   ------ для русификаций

Теперь создадим номер:
voice register dn 5              -------- здесь 5 явяляется уникальным тегом этого номера
number 1010                      -------- указываем номер
name SupportCisco            ------- отображаемое имя при звонке

После этого создадим пул для аппарата и привияжем ему созданный номер 1010:
voicee register pool 1                   -------  здесь явяляется уникальным тегом этого пула
id mac 1111.AAAA.2222.BBBB ------- указываем МАС-адрес телефона
type 3905                                      ------- модель аппарата
number 1 dn 5                               ------- привязываем номер к этому аппарату
dtmf-relay rtp-nte                         ------- определяем тип dtmf
codec g711alaw                           -------- указываем кодек для звонка (можно несколько кодеков)
camera                                         -------- если поддерживает
video                                            -------- если поддерживает

Теперь создадим конфиг-файл для этого аппарата. В процесе регистраций телефон загрузит себе этот файл:
voice register global
create profile

Созданный файл можно проверить следующей командой:
show voice register tftp-bind
И вот наш файл:
tftp-server url flash:/its/SEP1111AAAA2222BBBB.cnf.xml  alias SEP1111AAAA2222BBBB.cnf.xml

Если в процессе регистраций будет какие-то проблемы, то для траблшутинга можно использовать следующие команды:
debug tftp events
debug tftp error

Удачного всем дня!



понедельник, 14 марта 2016 г.

Отключение video аттрибутов на SDP протокола SIP

Доброго времени суток!

Недавно столкнулся с проблемой при звонке через SIP-транк. Схема такая: sccp video phone---СМЕ--SIP-провайдер. При звонке на город через видео-телефоны звонки отбиваются. А с обычных (без видео) телефонов звонок проходит нормально. Оказывается оборудование провайдера отбивают звонки с параметрами видео на медиа-аттрибутах SDP.  Этот глюк они не могли решить долго, поэтому пришлось действовать самому)))
Для этого мы вручную удалили видео-аттрибуты с SDP при INVITE с помощью следующей команды:
voice class sip-profiles 100
request INVITE sdp-header Video-Attribute remove
request INVITE sdp-header Video-Media modify "m=video(.*)" ""
request INVITE sdp-header Video-Bandwidth-Info remove

request INVITE sdp-header Video-Connection-Info remove

Теперь эту команду можно применить глобально:

voice service voip
sip
sip-profiles 100

Либо на определенных диал-пирах:

dial-peer voice 1 voip
voice-class sip profiles 100

После этого звонки заработали. Удачного всем дня!