Pull to refresh

Call paging на Cisco CallManager

Reading time3 min
Views5.2K
Привет всем!
Не могу удержаться и не поделиться опытом реализации такой нужной фичи как call paging на Cisco CallManager. Работать это должно примерно так:
  1. абонент снимает трубку, нажимает клавишу доступа к функции и начинает вещать;
  2. заранее определенные телефоны получают и воспроизводят звук через свои динамики громкой связи.

К сожалению, несмотря на то, что пейджинг – стандартная функция любой традиционной АТС, CCM его не умеет. Однако, благодаря встроенному в телефоны серии 7900 XML-браузеру, пейджинг (и не только его) можно реализовать в виде сервиса.

Теория

Вот здесь есть неплохой гайд по этому поводу. Из него можно узнать, что общение с телефоном состоит в передаче ему неких XML объектов, которые заставляют его предпринять какие-то действия. Действий этих немного: вывести текст, меню или изображение, совершить вызов, проиграть звук и, что интересует нас больше всего, передать звук из микрофона в RTP на заданный адрес или принимать RTP и проигрывать звук в динамик (используется g.711u).
Я использовал всего два объекта (синтаксис описан в том же гайде):
  • CiscoIPPhoneExecute – выполнить команду или открыть URL. Для управления передачей аудио-потока используются команды RTPRx и RTPTx;
  • CiscoIPPhoneText – вывести текст на дисплей телефона. Помимо собственно текста и заголовка, этот объект может содержать элементы SoftKeyItem – программируемые клавиши. На них можно назначить действия (отдельно для нажатия и отпускания) аналогично объекту CiscoIPPhoneExecute.

Реализация

Самая примитивная реализация может выглядеть примерно так:
  1. скажем телефонам проигрывать RTP с заданного порта:
    <CiscoIPPhoneExecute>
    <ExecuteItem Priority="0" URL="RTPMRx:239.0.0.45:20480:90"/>
    </CiscoIPPhoneExecute>
    

    Обратите внимание на команду RTPMRx — после серии экспериментов я решил рассылать звук мультикастом. Адрес выбран произвольно, номер порта должен быть четным и в диапазоне 20480-32768;
  2. на телефоне, с которого производится пейджинг, создадим минимальный интерфейс: текстовую метку и две кнопки, «начать» и «выйти»:
    <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;
  3. к сожалению, я не нашел способа выполнить две команды на одно действие пользователя, поэтому после отпускания кнопки «Начать» телефоны-приемники продолжают воспроизводить RTP (которого уже нет). Поэтому при нажатии кнопки «Выйти» для каждого слушающего трансляцию телефона вызывается еще один объект:
    <CiscoIPPhoneExecute>
    <ExecuteItem Priority="0" URL="RTPMRx:Stop"/>
    </CiscoIPPhoneExecute>
    


Реализовал я это все на php+mysql (для хранения адресов телефонов. Разбираться, как получить их из базы самого CCM мне было уже лень), но предупреждаю сразу – я даже близко не программист, поэтому все, что вы увидите здесь и здесь – самый настоящий говнокод. Proceed with caution.

Что еще можно из этого сделать

А много чего: прогноз погоды/курсы валют/новости, обмен текстовыми сообщениями, напоминалки/будильники, слышал даже про трансляцию картинки с камер видеонаблюдения. И да, для самых любопытных – замечено, что при удаленном включении микрофона телефон сигнализирует об этом только непримечательным значком на дисплее…
Tags:
Hubs:
Total votes 9: ↑9 and ↓0+9
Comments4

Articles