Привет всем!
Не могу удержаться и не поделиться опытом реализации такой нужной фичи как call paging на Cisco CallManager. Работать это должно примерно так:
К сожалению, несмотря на то, что пейджинг – стандартная функция любой традиционной АТС, CCM его не умеет. Однако, благодаря встроенному в телефоны серии 7900 XML-браузеру, пейджинг (и не только его) можно реализовать в виде сервиса.
Вот здесь есть неплохой гайд по этому поводу. Из него можно узнать, что общение с телефоном состоит в передаче ему неких XML объектов, которые заставляют его предпринять какие-то действия. Действий этих немного: вывести текст, меню или изображение, совершить вызов, проиграть звук и, что интересует нас больше всего, передать звук из микрофона в RTP на заданный адрес или принимать RTP и проигрывать звук в динамик (используется g.711u).
Я использовал всего два объекта (синтаксис описан в том же гайде):
Самая примитивная реализация может выглядеть примерно так:
Реализовал я это все на php+mysql (для хранения адресов телефонов. Разбираться, как получить их из базы самого CCM мне было уже лень), но предупреждаю сразу – я даже близко не программист, поэтому все, что вы увидите здесь и здесь – самый настоящий говнокод. Proceed with caution.
А много чего: прогноз погоды/курсы валют/новости, обмен текстовыми сообщениями, напоминалки/будильники, слышал даже про трансляцию картинки с камер видеонаблюдения. И да, для самых любопытных – замечено, что при удаленном включении микрофона телефон сигнализирует об этом только непримечательным значком на дисплее…
Не могу удержаться и не поделиться опытом реализации такой нужной фичи как call paging на Cisco CallManager. Работать это должно примерно так:
- абонент снимает трубку, нажимает клавишу доступа к функции и начинает вещать;
- заранее определенные телефоны получают и воспроизводят звук через свои динамики громкой связи.
К сожалению, несмотря на то, что пейджинг – стандартная функция любой традиционной АТС, CCM его не умеет. Однако, благодаря встроенному в телефоны серии 7900 XML-браузеру, пейджинг (и не только его) можно реализовать в виде сервиса.
Теория
Вот здесь есть неплохой гайд по этому поводу. Из него можно узнать, что общение с телефоном состоит в передаче ему неких XML объектов, которые заставляют его предпринять какие-то действия. Действий этих немного: вывести текст, меню или изображение, совершить вызов, проиграть звук и, что интересует нас больше всего, передать звук из микрофона в RTP на заданный адрес или принимать RTP и проигрывать звук в динамик (используется g.711u).
Я использовал всего два объекта (синтаксис описан в том же гайде):
- CiscoIPPhoneExecute – выполнить команду или открыть URL. Для управления передачей аудио-потока используются команды RTPRx и RTPTx;
- CiscoIPPhoneText – вывести текст на дисплей телефона. Помимо собственно текста и заголовка, этот объект может содержать элементы SoftKeyItem – программируемые клавиши. На них можно назначить действия (отдельно для нажатия и отпускания) аналогично объекту CiscoIPPhoneExecute.
Реализация
Самая примитивная реализация может выглядеть примерно так:
- скажем телефонам проигрывать RTP с заданного порта:
<CiscoIPPhoneExecute> <ExecuteItem Priority="0" URL="RTPMRx:239.0.0.45:20480:90"/> </CiscoIPPhoneExecute>
Обратите внимание на команду RTPMRx — после серии экспериментов я решил рассылать звук мультикастом. Адрес выбран произвольно, номер порта должен быть четным и в диапазоне 20480-32768; - на телефоне, с которого производится пейджинг, создадим минимальный интерфейс: текстовую метку и две кнопки, «начать» и «выйти»:
<CiscoIPPhoneText> <Title>Оповещение</Title> <Prompt>Нажмите кнопку Начать</Prompt> <Text>Оповещение</Text> <SoftKeyItem> <Name>Начать</Name> <URL>RTPTx:Stop</URL> <URLDown>RTPMTx:239.0.0.45:20480</URLDown> <Position>1</Position> </SoftKeyItem> <SoftKeyItem> <Name>Выйти</Name> <URL>SoftKey:Exit</URL> <URLDown>http://10.1.1.65/page_stop.php</URLDown> <Position>4</Position> </SoftKeyItem> </CiscoIPPhoneText>
По нажатию кнопки «Начать» телефон получает команду из элемента URLDown, RTPMTx:239.0.0.45:20480, и начинает посылать звуковой поток на указанный адрес. Когда абонент отпускает кнопку, телефон выполняет команду RTPTx:Stop из элемента URL; - к сожалению, я не нашел способа выполнить две команды на одно действие пользователя, поэтому после отпускания кнопки «Начать» телефоны-приемники продолжают воспроизводить RTP (которого уже нет). Поэтому при нажатии кнопки «Выйти» для каждого слушающего трансляцию телефона вызывается еще один объект:
<CiscoIPPhoneExecute> <ExecuteItem Priority="0" URL="RTPMRx:Stop"/> </CiscoIPPhoneExecute>
Реализовал я это все на php+mysql (для хранения адресов телефонов. Разбираться, как получить их из базы самого CCM мне было уже лень), но предупреждаю сразу – я даже близко не программист, поэтому все, что вы увидите здесь и здесь – самый настоящий говнокод. Proceed with caution.
Что еще можно из этого сделать
А много чего: прогноз погоды/курсы валют/новости, обмен текстовыми сообщениями, напоминалки/будильники, слышал даже про трансляцию картинки с камер видеонаблюдения. И да, для самых любопытных – замечено, что при удаленном включении микрофона телефон сигнализирует об этом только непримечательным значком на дисплее…