8 June 2010

Телефония на Cisco (Call Manager Express) — Часть 1

Cisco
Начав изучать CVoice (642-436) я решил выкладывать некоторые лабы в виде статей. Первая часть — такой себе «Hello World», звонок с одного телефона на другой.


1. Компоненты схемы


Схема собрана на базе маршрутизатора Cisco 1751-V, стандартная версия которого продается с 64 Мб памяти и 32 Мб флеш.

Первая проблема, с которой я столкнулся — нехватка памяти. Для любого IOS версии 12.4 с поддержкой голоса требовалось 96 Мб, хотя никто не мешал запустить 12.3, но хотелось все-таки делать на последнем.
В итоге в маршрутизатор была добавлена еще планка памяти 64 Мб и поставлен модуль VIC-2FXS для подключения аналоговых телефонных аппаратов.

Вторая проблема, на которую ушло несколько больше времени — при загрузке не увиделся модуль VIC-2FXS. Как выяснилось после прочтения доков, для работы аналоговых голосовых модулей в маршрутизатор также нужно добавить плату сигнального процессора DSP. Пришлось добавлять планку PVDM-256k-4 с одним DSP на борту. После всех этих махинаций маршрутизатор наконец-то загрузился и нормально увидел модуль.

В качестве аналоговых телефонов были использованы два DECT/Skype телефона LinkSys CIT-300 и CIT-400.

2. Базовая конфигурация маршрутизатора


Для базовой настройки достаточно ввести всего несколько команд, с помощью которых мы создадим dial-peer-ы и определим, какая нумерация будет использоваться:
#звонок на номер 301 маршрутизируем в порт 2/0
dial-peer voice 1 pots
destination-pattern 301
port 2/0
!
#звонок на номер 302 маршрутизируем в порт 2/1
dial-peer voice 2 pots
destination-pattern 302
port 2/1

Фактически, уже после этих команд можно звонить с одного телефона на другой согласно сконфигурированной нумерации

3. Дополнительные настройки


Для разных стран существуют различные частоты сигналов КПВ, «Занято» и прочих. Эти параметры можно сконфигурировать и для портов маршрутизатора. Например, поменяем настройки сигналов на одном из портов:
voice-port 2/0
cptone RU
#эта команда установит привычные жителям пост-советского пространства тональности телефонных сигналов

Сравнив сигнал КПВ на двух телефонах можно легко заметить разницу.

Еще одна интересная функция — это определитель номера АОН. По умолчанию данная функция выключена, включить ее можно следующим образом:

voice-port 2/0
#эта команда включает функцию ответа на запрос Caller-ID телефоном
caller-id enable
#а эта позволяет также передать текстовое имя вызывающего абонента
station-id name vasya_pupkin
!
voice-port 2/1
caller-id enable
station-id name 302
!

Для передачи Caller-ID есть два метода, один из них — это передача номера с помощью DTMF, второй — в цифровом виде с использованием частотной модуляции (FSK) на скорости 1200 бит/сек. Соответственно, получать текстовые данные можно только с помощью второго номера.
Что удивительно, оба моих телефона запрашивают эту информацию у АТС (в данном случае, у маршрутизатора) но выводит номер только CIT-400



4. Проверка работоспособности системы


Итак, самое простое — это просто позвонить с одного телефона на другой
Что еще можно проверить:

команда show voice port summary покажет состояние voice-портов:
CME#sh voice port summary
IN OUT
PORT CH SIG-TYPE ADMIN OPER STATUS STATUS EC
=============== == ============ ===== ==== ======== ======== ==
2/0 -- fxs-ls up up off-hook idle y
2/1 -- fxs-ls up dorm on-hook idle y

PWR FAILOVER PORT PSTN FAILOVER PORT
================= ==================

В листинге видны номера интерфейсов, а также их текущее состояние.

Команда show diag покажет состояние модулей и плат маршрутизатора

Для поиска проблем в установлении соединения можно воспользоваться командами:
debug voip dialpeer — пошаговый анализ dial-peer-ов
debug vpm signal — отладка сообщений сигнализации.

Как раз здесь я смог увидеть, что мой CIT-300 тоже запрашивает Caller-ID но почему-то его не выводит:

CME#debug vpm signal
Voice Port Module signaling debugging is enabled
CME#
*Mar 1 02:06:55.963: htsp_process_event: [2/1, FXSLS_ONHOOK, E_DSP_SIG_1100]fxsls_onhook_offhook htsp_setup_ind
*Mar 1 02:06:55.963: [2/1] get_local_station_id calling num= calling name=302 calling time=03/01 02:06 orig called=
*Mar 1 02:06:55.983: htsp_process_event: [2/1, FXSLS_WAIT_SETUP_ACK, E_HTSP_SETUP_ACK]fxsls_check_auto_call
*Mar 1 02:06:56.463: htsp_digit_ready(2/1): digit = 3
*Mar 1 02:06:56.615: htsp_digit_ready(2/1): digit = 0
*Mar 1 02:06:56.783: htsp_digit_ready(2/1): digit = 1
*Mar 1 02:06:56.795: htsp_timer_stop3
*Mar 1 02:06:56.795: htsp_process_event: [2/1, FXSLS_OFFHOOK, E_HTSP_PROCEEDING]htsp_setup_req
*Mar 1 02:06:56.803: htsp_process_event: [2/0, FXSLS_ONHOOK, E_HTSP_SETUP_REQ]fxsls_onhook_setuphtsp_progress
*Mar 1 02:06:56.803: [2/0] set signal state = 0x0 timestamp = 0
*Mar 1 02:06:56.803: [2/0] htsp_set_caller_id_tx calling num=302 display_info=302 called num=301
*Mar 1 02:06:56.803: [2/0] Caller ID String 80 14 01 08 30 33 30 31 30 32 30 36 02 03 33 30 32 07 03 33 30 32 9E
*Mar 1 02:06:56.807: [2/0] htsp_set_caller_id_tx_time Caller ID:FSK_DURING_RING
*Mar 1 02:06:56.807: [2/0] htsp_start_caller_id_tx string length=23

*Mar 1 02:06:56.819: htsp_call_bridged invoked
*Mar 1 02:06:56.819: htsp_call_bridged invokedhtsp_progress_notify
*Mar 1 02:06:56.827: htsp_process_event: [2/0, FXSLS_WAIT_OFFHOOK, E_HTSP_VOICE_CUT_THROUGH]fxsls_waitoff_voice
*Mar 1 02:06:56.835: htsp_process_event: [2/1, FXSLS_OFFHOOK, E_HTSP_VOICE_CUT_THROUGH]fxsls_voice_cut_thru
*Mar 1 02:06:59.027: htsp_timer_stop3
*Mar 1 02:07:01.679: htsp_process_event: [2/1, FXSLS_OFFHOOK, E_DSP_SIG_0100]fxsls_offhook_onhook, HF duration Max=1000, HF duration Min=150
*Mar 1 02:07:01.679: htsp_timer - 1000 msec
*Mar 1 02:07:02.683: htsp_process_event: [2/1, FXSLS_OFFHOOK, E_HTSP_EVENT_TIMER]fxsls_offhook_timer
*Mar 1 02:07:02.687: htsp_timer_stop3
*Mar 1 02:07:02.703: htsp_process_event: [2/0, FXSLS_WAIT_OFFHOOK, E_HTSP_RELEASE_REQ]fxsls_waitoff_release
*Mar 1 02:07:02.703: [2/0] set signal state = 0x4 timestamp = 0
*Mar 1 02:07:02.715: htsp_process_event: [2/1, FXSLS_WAIT_RELEASE_REQ, E_HTSP_RELEASE_REQ]fxsls_waitrls_req_rls
*Mar 1 02:07:02.715: [2/1] set signal state = 0x4 timestamp = 0
*Mar 1 02:07:02.715: [2/1] set signal state = 0x4 timestamp = 0
*Mar 1 02:07:02.719: htsp_process_event: [2/1, FXSLS_ONHOOK, E_DSP_SIG_0100]fxsls_onhook_onhook


Есть еще одна интересная полудокументированная команда, позволяющая сымитировать вызов на любой из dial-peer-ов. Команда csim start 301 заставила звонить мой 301-й телефон. Данная команда вбивается из привилегированного режима и не видна при использовании контекстной подсказки. Но тем не менее, команда работает, причем поле вызывающего абонента остается пустым.

Для просмотра активных сессий можно использовать команду show call active voice

На этом пожалуй, все. Спасибо за внимание.

upd

Если у Вас модуль VIC-2DID, то при поднятии трубки вы не услышите КПВ, а при наборе номера будут короткие гудки.
Для решения проблемы нужно вбить команду:
Router(config)#voice-port 2/0
Router(config-voiceport)#no signal did
Tags:CMEVoIPciscocallmanagerтелефонияFXSdial-peervoiceVIC-2DID
Hubs: Cisco
+27
51.9k 96
Comments 9
Popular right now
SEO-специалист
December 7, 202064,900 ₽Нетология
iOS-разработчик с нуля
December 7, 202070,740 ₽Нетология
UX-дизайнер
December 7, 202047,940 ₽Нетология
Python для работы с данными
December 7, 202031,500 ₽Нетология