Thursday, May 9, 2013

Учим Asterisk работать с телефоном Cisco 9971


Cisco 9971 На сегодняшний день это чудо инженерной мысли, к тому же, недешевое (я имею ввиду телефон Cisco 9971), так вот это чудо не умеет корректно работать с IP-PBX Asterisk. Это проявляется в неработающих софт-кнопках, например, создания конференции. Если быть точным, то кнопки работают, но при попытке создать конференцию видим на экране что-то вроде "Unable to create conference". Телефон работает по SIP протоколу. Такие дела.
 Выход, как всегда, есть: необходимо патчить Asterisk. Патчи накладываются на исходные тексты программы, после чего необходимо скомпилировать пропатченные исходники в бинарные файлы.


 Таким образом, этот процесс включает в себя целый ряд действий. Дальше описан краткий процесс применения патчей, компиляции и установки.
 Все описанное проходило на OC Debian 6.0.7. Используется установка с нуля. В случае, если Asterisk уже установлен, действия будут несколько отличаться. В основном, тем, что нам необходимо будет удалить установленную программу и сохранить конфиги. Бэкапы тоже не помешают.
 Итак, приступим. В первую очередь нам надо установить пакеты, необходимые для компиляции Asterisk.
root@debian:~# apt-get install build-essential linux-headers-`uname -r` g++  subversion libmysqlclient-dev libxml2-dev libncurses5-dev libsqlite3-dev libssl-dev libsrtp0-dev unixodbc-dev
 Дальше надо загрузить архивы с исходниками. Загружать будем с официального сайта. Мной использовалась версия 1.8.14 по той причине, что для нее есть патч. Патчи есть не для всех версий.
 Кроме исходников Астериска неплохо бы загрузить еще и исходники DAHDI-модуля.
root@debian:~# wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.14.0.tar.gz
root@debian:~# wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.6.1+2.6.1.tar.gz
 Возможно, вам будут необходимы и другие программы. Основной темы статьи это не касается, поэтому оставим дополнительные фичи и переходим к разархивированию исходных текстов. Начнем с DAHDI-модуля, тут ничего патчить не надо.
root@debian:~# tar zxvf dahdi-linux-complete-*.tar.gz
root@debian:~# cd dahdi-linux-complete-2.6*
 Компилируем модуль и устанавливаем
root@debian:~# make all && make install && make config
 Теперь переходим к Астериску.
root@debian:~# tar zxvf asterisk-1.8.14.0.tar.gz
 На этом этапе нам надо пропатчить исходники. Загружаем патч по ссылке
root@debian:~# wget https://issues.asterisk.org/jira/secure/attachment/44090/gareth-1.8.14.0.patch
 По этой ссылке https://issues.asterisk.org/jira/browse/ASTERISK-13145  можно найти патчи для разных версий Астериска, но далеко не для всех. Возможно, они там как-то совместимы с другими версиями с минимальными правками, но это лучше уточнять у разработчика. К слову, обсуждение патчей и диалог с разработчиком идет на странице по той же ссылке. Также там можно найти примеры конфигов.

 Вернемся к нашей недокомпилированной IP-PBX. Патчим астериск.
root@debian:~# patch -p0 < gareth-1.8.14.0.patch
 Если у вас возникают ошибки такого рода:
Hunk #141 FAILED at 27998.
Hunk #142 FAILED at 28824.
Hunk #143 FAILED at 30109.
Hunk #144 FAILED at 30390.
144 out of 144 hunks FAILED -- saving rejects to file asterisk-1.8.14.0/channels/chan_sip.c.rej
то вам следует проверить правильность каталога, где находитесь вы и папка с исходниками. В идеале (но не обязательно), все должно выглядеть вот так:
root@debian:~# ls
asterisk-1.8.14.0   gareth-1.8.14.0.patch
 Дальше процедура стандартная. Компилируем и устанавливаем пропатченный Asterisk
root@debian:~#./configure
root@debian:~# make menuconfig
root@debian:~# make && make install && make samples && make config
для корректной работы изменяем свойства каталогов
chown -R asterisk:asterisk /var/lib/asterisk
chown -R asterisk:asterisk /var/log/asterisk
chown -R asterisk:asterisk /var/run/asterisk
chown -R asterisk:asterisk /var/spool/asterisk
chown -R asterisk:asterisk /usr/lib/asterisk
chown -R asterisk:asterisk /dev/dahdi
chmod -R u=rwX,g=rX,o= /var/lib/asterisk
chmod -R u=rwX,g=rX,o= /var/log/asterisk
chmod -R u=rwX,g=rX,o= /var/run/asterisk
chmod -R u=rwX,g=rX,o= /var/spool/asterisk
chmod -R u=rwX,g=rX,o= /usr/lib/asterisk
chmod -R u=rwX,g=rX,o= /dev/dahdi
chown -R asterisk:asterisk /etc/asterisk
chmod -R u=rwX,g=rX,o= /etc/asterisk

 Если после ввода комманды chown -R asterisk:asterisk /dev/dahdi  вы получаете ошибку chown: cannot access `/dev/dahdi': No such file or directory, перезагрузите сервер.

 Перейдем к файлам настроек, там тоже есть свои особенности.

sip.conf

В этом файле, в разделе для данного телефона указываем значения
[601]

ciscounified=yes
dndbusy=yes
cisco_usecallmanager=yes
Ключевой параметр, это cisco_usecallmanager=yes. Именно он активирует правильную обработку сигнального протокола в пропатченном Asterisk.

extesions.conf

Для того, чтобы активировать перевод звонка через софт-клавишу CallForward необходимо добавить в файл extesions.conf следующие директивы
; Strip the x-cisco-serviceuri- prefix
exten => _[x]-cisco-serviceuri-.,1,Goto(${EXTEN:19},1)

; Enable forwarding
exten => _cfwdall-.,1,Answer
same => next,Set(SIPPEER(${CHANNEL(peername)},callforward)=${EXTEN:8})
same => next,Hangup(normal_clearing)

; Disable forwarding
exten => cfwdall,1,Answer
same => next,Set(SIPPEER(${CHANNEL(peername)},callforward)=)
same => next,Hangup(normal_clearing)
SEP***.cnf.xml 

Пример этого файла для данного телефона можно найти радом в патчем по ссылке, приведенной выше. В этом файле указаны специфические секции для работы софт-кнопок. Кроме того, указано название файла, где описаны действия для обработки их нажатий, или что-то вроде того. Название файла находится в секции <softKeyFile>softkey.xml</softKeyFile>
Пример его тоже можно найти по приведенной выше ссылке

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

1 comment:

  1. Just Another Network Blog: Учим Asterisk Работать С Телефоном Cisco 9971 >>>>> Download Now

    >>>>> Download Full

    Just Another Network Blog: Учим Asterisk Работать С Телефоном Cisco 9971 >>>>> Download LINK

    >>>>> Download Now

    Just Another Network Blog: Учим Asterisk Работать С Телефоном Cisco 9971 >>>>> Download Full

    >>>>> Download LINK MS

    ReplyDelete