Пациент - Asterisk 1.8 на Ubuntu-server 9.04. Задача - привязать к астериску аккаунт Skype, чтобы принимать звонки из скайпа на IP-телефон, и звонить с IP-телефона по скайпу. Для этого существует штатное расширение Asterisk производства Digium, но оно коммерческое и лицензии стоят денег. Однако существует свободный проект - SipToSis, позволяющий сделать то же самое, пусть и путем предварительных ритуальных плясок с сисадминским народным музыкальным инструментом.


Первое, что нам понадобится - это сам скайп, ибо альтернативных клиентов ввиду закрытости протокола не существует, и SipToSis работает путем взаимодействия с ним через Skype API. Поскольку для работы Skype нужна графическая оболочка, то чтобы запустить его в консольном Linux, используем Xvfb (X Virtual Frame Buffer), и для настройки с другой машины - x11vnc:

sudo apt-get install xvfb x11vnc

Скачаем и установим собственно Skype: качаем последнюю версию deb-пакета с http://www.skype.com, сохраняем как skype.deb, устанавливаем:

sudo dpkg -i skype.deb

Для работы SipToSis необходима Java версии не ниже 1.5. Установим:

sudo apt-get install sun-java6-jre

Cкачаем SipToSis c http://www.mhspot.com/sts/siptosis_download.php

Разархивируем в /etc/siptosis и проставим chmod на исполняемый файл:

chmod +x /etc/siptosis/SipToSis_linux

Теперь настроим asterisk. В users.conf добавим:

[Skype]
username=Skype
type=friend
context=Skype
secret=
host=dynamic
nat=no
dtmfmode=auto
canreinvite=no
incominglimit=1
outgoinglimit=1
call-limit=1
busylevel=1

В extensions.conf добавим

exten => 1001,1,Dial(SIP/Skype/echo123)

И перезагрузим asterisk.

Теперь правим конфиг SipToSis:

sudo nano /etc/siptosis/siptosis.cfg

Закомментируем блок настроек, начинающийся с “#Sample AUTO config with NO registration” и раскомментируем блок “#Sample Asterisk registration example”, в нем исправим:

host_port=5070
contact_url=sip:Skype@127.0.0.1:5070
from_url=”Skype”
username=Skype
realm=asterisk
passwd=
expires=300
do_register=yes
minregrenewtime=120
regfailretrytime=15

Запускаем:

sudo /usr/bin/Xvfb :101 -ac &
sudo DISPLAY=:101 /usr/bin/skype &
sudo x11vnc -display :101 &

Подключаемся с другой машины (в моем случае, с Windows XP через VNC Viewer), вводим в Skype логин-пароль, отключаем все лишнее.

Теперь запускаем :

sudo DISPLAY=:101 /etc/siptosis/SipToSis_linux

Если все сделано правильно, SipToSis запустится и попытается подключиться к Skype. Skype выдаст вопрос - разрешить ли подключение. Разрешаем и ставим галку “запомнить”.

Проверяем: набираем с подключенного к Asterisk клиента 1001 - мы должны услышать тестовый звонок Skype.

Чтобы принимать входящие звонки, в /etc/siptosis/SkypeToSipAuth.props прописываем соответствующее правило. Например:
*,sip:user1@127.0.0.1:5060 - перенаправлять все входящие звонки Skype SIP-юзеру “user1″. Естественно, нужно создать в extensions.conf контекст “Skype”, в котором разрешить звонки на этот extension.

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