Показаны сообщения с ярлыком voip. Показать все сообщения
Показаны сообщения с ярлыком voip. Показать все сообщения

понедельник, 29 сентября 2008 г.

Подружим Cisco IP Phone и Asterisk

Самый попурярный канал Asterisk, используемый в качестве канала подключения для клиентов это, конечно, SIP. Существует масса недорогих программных и аппаратных SIP-телефонов, легко интегрируемых в Asterisk. Но что делать, если нам в наследство (или в подарок!) достался один из замечательных VoIP-телефонов производства Cisco Systems, который в большинстве своём работают по собственному протоколу SCCP?


У меня так в руках оказался Cisco 7902, но без CallManager-а. Вот и решил проверить работоспособность аппарата с помощью Asterisk.

В Asterisk изначально есть канал skinny, однако рекомендуется всё-таки использовать более совершенный chan-sccp-b. Сообщается, что поддерживаются также устройства:

  • 12 — Cisco IP Phone 12SP+
  • 30 — Cisco IP Phone 30VIP
  • 7902 — Cisco IP Phone 7902G
  • 7905 — Cisco IP Phone 7905G - Fully supported
  • 7910 — Cisco IP Phone 7910
  • 7912 — Cisco IP Phone 7912G
  • 7920 — Cisco IP Wireless Phone 7920 - All basic features
  • 7935 — Cisco IP Conference Station 7935
  • 7936 — Cisco IP Conference Station 7936 - Fully supported
  • 7940 — Cisco IP Phone 7940 - Fully supported
  • 7941 — Cisco IP Phone 7941 - Initial Support
  • 7960 — Cisco IP Phone 7960 - Fully supported
  • 7961 — Cisco IP Phone 7961 - Initial Support / Reported to work
  • 7970 — Cisco IP Phone 7970 - Fully supported
  • 7971 — Cisco IP Phone 7971 - Fully supported
  • 7961GE
  • 7941GE
  • 7911
  • 7980 — Cisco IP Communicator
  • 7985
  • 7914 — Cisco IP Phone 7960 with 1 or 2 7914 addons
  • ata — Cisco ATA
  • KIRK — Kirk is a wireless phone that uses sccp

Его и поставим.
Сходим на страницу проекта, скачаем последнюю версию (в моём случае это chan_sccp_20071213.tar.gz).
# wget "http://downloads.sourceforge.net/chan-sccp-b/chan_sccp_20071213.tar.gz?modtime=1197572506&big_mirror=0"
# tar xf chan_sccp_20071213.tar.gz


Соберём модуль:

# cd chan_sccp_20071213/
# make
sh ./create_config.sh "/usr/include"
Creating config file
====================
Checking Asterisk version...
* found asterisk 1.4
Build PARK functions (y/n)[n]?y
Build PICKUP functions (y/n)[n]?y
Use realtime functionality (y/n)[n]?y
* found 'struct ast_channel_tech'
* found 'ast_bridged_channel'
* found 'struct ast_callerid'

<...>
Now compiling .... sccp_softkeys.c 558 lines
Now compiling .... sccp_socket.c 394 lines
Now compiling .... sccp_indicate.c 329 lines
Linking chan_sccp.so

Последняя строка говорит нам о том, что модуль собрался и готов к использованию. а нам это и надо, устанавливаем его простым копированием (туда, где модули Астериска, у меня в примере - по умолчанию).

cp chan_sccp.so /usr/lib/asterisk/modules/

Установили, теперь нужно убедить Asterisk в использовании его вместо стандартного. Для этого в /etc/asterisk/modules.conf пишем:

noload => chan_skinny.so
load => chan_sccp.so
Теперь необходимо создать конфиг модуля по образу и подобию со страницы описания. Добпвляем телефоны (аппараты - по MAC-адресу) и линии (номера - по екстеншену). В extensions.conf корректируем диалплан чтобы приходили входящие вызовы.

Ну и осталось дело за малым. Но немаловажным! TFTP-сервер.
У меня дистрибутив Gentoo, поэтому установка свелась к следующему:
# emerge net-ftp/tftp-hpa
# mkdir /tftproot
# /etc/init.d/in.tftpd start
# rc-update add in.tftpd default

В /tftproot должен находиться хотя бы XmlDefault.cnf.xml содержанием:

<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
</ports>
<processNodeName>IP Астериска</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</Default>

Также для каждого аппарата можно положить свой конфиг с именем типа SEP.cnf.xml. Необходимость - только если особое время/язык прошивки. Пример тут.

MAC-адрес написан на каждом телефоне на обратной стороне. Cisco IP Communicator использует MAC используемой сетевой карты.

понедельник, 25 августа 2008 г.

Asterisk - бесплатное VoIP-ядро для IP-телефонии

Есть прекрасные сайты, работающие по принципу википедии, например http://voip-info.org, рассказывающие о том, что такое Asterisk и с чем его есть. Я хочу остановиться на паре подводных камней которые ждут тех, кто хочет поставить Asterisk впервые.

Итак, что мы имеем? Компьютер под управлением GNU/Linux, желание обзавестись своим мощным, да и ещё бесплатным софтсвичом, некривые руки и немного терпения.

Что нужно ещё? Ах да, немного знаний и инструментов. Инструменты будут простыми - исходные тексты Астериска с http://www.asterisk.org, пара библиотек (об этом подробнее ниже) и консолька нашего сервера.

Но сначала пару слов теории в качестве лирического отступления.

Asterisk является модульной системой, причём эта модульность во многом определяет его функциональность и работоспособность. Как и такие же модульные программы (MirandaIM, Foobar2000, Far...), при добавлении/удалении модулей с соответствующей настройкой, можно добиться совершенства. Своего совершенства, конечно.

Он поддерживает работу с различными протоколами VoIP, как широко распространёнными (H.323, SIP), так и менее используемые и специфические (собственные: IAX, IAX2; проприетарные, как SCCP (Cisco Skinny Client Control Protocol); ТФОП-основанные: Zap, VPB; специфические: MGCP, Agent, Local). В мире Asterisk соединения по какому-либо из протоколов называется каналом. Существует (я это особо подчеркну) коммутация вызовов из одного канала в другой, при этом конвертируя звуковой поток из одного кодека в другой. При переводе звонка (или объединения в конференции) можно без проблем подключить третий канал/кодек и так далее.

Таким образом, наши возможности кажутся безграничными. Главным в этой ситуации я скажу необходимость ответить для себя - что конкретно планируется. Это поможет избежать дополнительных настроек и вообще выполнять много лишней работы.

Астериск немного своеобразный продукт и многое что связано с его происхождением дало отпечаток на дальнейшую судьбу. Проект создавался и ведётся под крылом коммерческой компании Digium. Digium живёт за счёт разработки оборудования в качестве аппаратной платформы для Asterisk, в частности плат PSTN для возможности "приземлять" звонки из IP или наоборот, перенаправлять вызовы с обычных телефонов на VoIP. Однако из-за этого проект Asterisk распространяется по двойной лицензии, так что в нём могут присутствовать закрытые модули. Самый яркий пример - патентованный кодек G.729.


Итак, самый первый подводный камень - использование стандартного менеждера пакетов для установки Asterisk. Получаем версию двухлетней (а в gentoo на состояние 2008 года и того более) версию. С теми ещё косяками. Даже если и версия будет новая, все настройки будут по умолчанию, со всеми ненужными модулями. А самое страшное - с отсутствием нужных. Выход - скачать исходники (цылка), либо изменить дерево пакетов/портов для поддержки актуальной версии asterisk.

Так что качаем исходники, распаковываем.. Перед make есть возможность сделать одну нужную вещь, а именно: make menuitems. Обязательно заходим в менюшку, шаримся по пунктам. Смело удаляем ненужное (мы же уже почитали хоть немного http://voip-info.org и представляем в общих чертах, что нам нужно). Переходим к make.

Сделали ./configure, make, make install и, как нам посоветовали, make samples. В итоге посмотрели в /etc/asterisk и от изобилия новых конфигов плюнули на всю IP-телефонию и решили, что разбираться со всем этим проще всего будет как нибудь в другой раз.

Мой совет: стоит новые конфиги перенести в другое место, обратно вернуть только основное по одному, жестоко удаляя после копирования всё-всё лишнее (ибо будет мешать восприятию). У меня для начала было это:
asterisk.conf
extensions.conf
modules.conf
cdr.conf
sip.conf
h323.conf
[добавить]

Забыли про поддержку H.323! Ведь он частенько необходим. Оказалось, что в исходниках есть отличное README (channels/h323/README). Оно говорит о том, что перед процессом сборки Астериска нужно заюзать дополнительные библиотеки: PwLib и OpenH323. Причём только определённых версий, ибо можем получить кучу проблем на голову в виде ошибок компиляции. Там же расписан правильный порядок сборки Asterisk если необходимо использовать H323.

cd /path/to/pwlib./configure
make clean opt
cd /path/to/openh323
./configuremake clean opt
cd /path/to/asterisk/channels/h323
make opt
cd /path/to/asterisk
make install


Вот собственно самые основные грабли при установке Asterisk.

От себя добавлю что в идеале сделать пользователя, скажем asterisk и от него выполнять сборку, чтобы впоследствие иметь изолированный сервис от непривилегированного пользователя. А если выделить ему отдельную папку, например /asterisk, то будет удобно удалять/добавлять руками нужные модули (при небоходимости, конечно), и писать дополнительные приложения самостоятельно для интеграции с чем-либо.. но это уже совсем другая история.