К основному контенту

Как подключить Скайп к Астериск. How To connect Skype to Asterisk

Linux

Which packages are required to build mod_skypopen on Linux

You will need the libraries needed by Skype client and by the fake X server.
REALLY, you need all the packages below!
You can cut and paste the follow:
CentOS 5.x, RHEL5 required packages
yum install -y subversion autoconf automake libtool gcc-c++ \
ncurses-devel make libX11-devel Xvfb alsa-utils libXv libXScrnSaver \
xorg-x11-fonts* alsa-lib libXScrnSaver libtiff-devel libjpeg-devel \
glib2.i386 zlib.i386 alsa-lib.i386 libX11.i386 libXv.i386 \
libXScrnSaver.i386 kernel-devel
# then you need to install EPEL from here: http://fedoraproject.org/wiki/EPEL
# after installing EPEL
yum install git-core
Ubuntu 10.04.x (LTS) required packages
apt-get install ubuntu-standard build-essential linux-headers-$(uname -r) \
libX11-dev subversion automake autoconf wget  libtiff4-dev libjpeg62-dev libtool \
libncurses5-dev xvfb libx11-dev libasound2-dev xfs xfonts-100dpi \
xfonts-75dpi xfonts-scalable git-core ia32-libs lib32asound2 \
libc6-i386 lib32gcc1 lib32stdc++6 lib32ncurses5 lib32z1 alsa-base \
linux-sound-base libfontenc1 libfs6 libice6 libpixman-1-0 libsm6 \
libx11-6 libx11-data libx11-dev libxau-dev libxau6 libxaw7 libxcb1 \
libxcb1-dev libxcursor1 libxdmcp-dev libxdmcp6 libxext6 libxfixes3 \
libxfont1 libxi6 libxinerama1 libxkbfile1 libxmu6 libxmuu1 libxpm4 \
libxrandr2 libxrender1 libxss1 libxt6 libxv1 x11-common x11-xkb-utils \
x11proto-core-dev x11proto-input-dev x11proto-kb-dev xauth \
xfonts-100dpi xfonts-75dpi xfonts-encodings xfonts-scalable \
xfonts-utils xfs xkb-data xml-core xserver-common xtrans-dev xvfb \
libgl1-mesa-dri libcurl4-openssl-dev
Debian 6 (Squeeze) and Ubuntu 12.04.x (LTS) required packages
apt-get install ubuntu-standard build-essential linux-headers-$(uname -r) \
libX11-dev subversion automake autoconf wget  libtiff4-dev libtool \
libncurses5-dev xvfb libx11-dev libasound2-dev xfs xfonts-100dpi \
xfonts-75dpi xfonts-scalable git-core ia32-libs lib32asound2 \
libc6-i386 lib32gcc1 lib32stdc++6 lib32ncurses5 lib32z1 alsa-base \
linux-sound-base libfontenc1 libfs6 libice6 libpixman-1-0 libsm6 \
libx11-6 libx11-data libx11-dev libxau-dev libxau6 libxaw7 libxcb1 \
libxcb1-dev libxcursor1 libxdmcp-dev libxdmcp6 libxext6 libxfixes3 \
libxfont1 libxi6 libxinerama1 libxkbfile1 libxmu6 libxmuu1 libxpm4 \
libxrandr2 libxrender1 libxss1 libxt6 libxv1 x11-common x11-xkb-utils \
x11proto-core-dev x11proto-input-dev x11proto-kb-dev xauth \
xfonts-100dpi xfonts-75dpi xfonts-encodings xfonts-scalable \
xfonts-utils xfs xkb-data xml-core xserver-common xtrans-dev xvfb \
libgl1-mesa-dri libcurl4-openssl-dev libjpeg-dev
CentOS 6.x, RHEL6, Scientific Linux 6, Amazon Linux AMI required packages
yum -y install autoconf automake gcc-c++ git-core libjpeg-devel libtool \
make ncurses-devel unixODBC-devel openssl-devel gnutls-devel libogg-devel \
libvorbis-devel curl-devel libtiff-devel libjpeg-devel subversion autoconf \
automake libtool gcc-c++ ncurses-devel make libX11-devel Xvfb alsa-utils \
libXv libXScrnSaver xorg-x11-fonts* alsa-lib libXScrnSaver libtiff-devel \
libjpeg-devel kernel kernel-devel git xz xz-devel mesa-dri-drivers \
alsa-lib.i686  fontconfig.i686  freetype.i686  glibc.i686  libgcc.i686  \
libICE.i686  libSM.i686 libstdc++.i686  libX11.i686  libXau.i686 libxcb.i686 \
libXcursor.i686  libXext.i686 libXfixes.i686  libXi.i686  libXinerama.i686 \
libXrandr.i686  libXrender.i686 libXScrnSaver.i686  libXv.i686

On Rackspace Cloud, you need to additionally install:
yum install libSM libXi libXrender libXrandr  libXfixes libXcursor libXinerama freetype fontconfig
On Amazon AWS, Amazon Linux AMI you cannot get libXScrnSaver.i686, so download and install it:
wget http://ftp.scientificlinux.org/linux/scientific/6.0/i386/os/Packages/libXScrnSaver-1.2.0-1.el6.i686.rpm
rpm -i libXScrnSaver-1.2.0-1.el6.i686.rpm

On Amazon AWS, RHEL6.1 AMI does not give you Xvfb. Do this:
yum install xorg-x11-server-Xorg
wget http://ftp.scientificlinux.org/linux/scientific/6.0/x86_64/os/Packages/xorg-x11-server-Xvfb-1.7.7-26.el6.x86_64.rpm
rpm -iUvh xorg-x11-server-Xvfb-1.7.7-26.el6.x86_64.rpm


Загрузку mod_skypopen каждый делает по своему… Ну соль в том, что сначала нужно запустить скайпы и лишь потом загружать freeswitch mod_skypopen.
1 вариант загрузки : запустить freeswitch -nc, запустить скайпы и сделать что-то типа «fs_cli ‘load mod_skypopen’»;
2 вариант загрузки : записать строку «<load module=»mod_skypopen»/>» в файл /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
Установка и настройка скайпа:
1
2
dpkg -i getskype-linux-deb-32
С последней версией часто вылетает, рекомендуется версия 2.0.0.72, скачать можно отсюда: http://www.ad-host.ru/skype-debian_2.0.0.72-1_i386.deb
Разрешаем зависимости:
1
apt-get install -f
Добавляем пользователя skype и даем ему права на свой каталог:
1
2
3
adduser --home /home/skype --ingroup audio --disabled-password skype
mkdir -p /home/skype/multi/
chown -R skype.audio /home/skype/multi
Загрузка модуля ядра:
1
2
3
modprobe snd_dummy
rmmod snd_dummy
echo "snd_dummy" >> /etc/modules
Приступаем к настройке скайпов:
1
/usr/bin/Xvfb :101 -ac &

1
2
su skype -c "/bin/echo 'SkypeUSERName SkypePASSWORD'| DISPLAY=:101 /usr/bin/skype --dbpath=/home/skype/multi/interface01 --pipelogin &"
x11vnc -display :101
Далее подключимся с другой машины, через vncviewer по локальному ip адресу, дождемся регистрации в skype
Редактируем конфиг по пути /home/skype/multi/interface01/SkypeUSERName/config.xml
Ищем секцию и описываем секцию , дабы skypopen мог управлять скайпом через АРІ: если такой секции нет, ее нужно создать:
1
nano /home/skype/multi/interface01/SkypeUSERName/config.xml
1
2
3
4
5
6
<UI>
<API>
<Authorizations>skypopen</Authorizations>
<BlockedPrograms></BlockedPrograms>
</API>
</UI>
Клонируем для нужного количества каналов
1
2
cd /home/skype/multi
for i in $(seq 2 N); do i=$(printf "%02d" $i); cp -a interface01 interface$i; done
где N — нужное количество Skype-каналов.
Создаем скрипт для запуска скайпа (взято с хабра (с)):
1
nano /usr/local/bin/sk
Вставляем свое:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/sh
SKYPE_SYSTEM_USER=skype
SKYPE_HOME=/home/skype/multi
SKYPE_USER=skype_user
SKYPE_PASSWORD=skype_secret
SKYPE_INSTANCES=N
XVFB=/usr/bin/Xvfb
 
module_reload() {
  rmmod snd-dummy
  modprobe snd-dummy
}
 
skype_start() {
  for i in $(seq 1 $SKYPE_INSTANCES); do
    i=`printf "%02d" $i`
    $XVFB :1$i -ac >> /dev/null 2>&1 &
    sleep 3
    su $SKYPE_SYSTEM_USER -c "/bin/echo '$SKYPE_USER $SKYPE_PASSWORD'| DISPLAY=:1$i  /usr/bin/skype \
    --dbpath=$SKYPE_HOME/interface$i --pipelogin >> /dev/null 2>&1 &"
    echo "Skype $i started"
  done
}
 
skype_stop() {
kill -TERM `ps -u $SKYPE_SYSTEM_USER -o pid=` >> /dev/null 2>&1
sleep 3
kill -TERM `ps -C Xvfb -o pid=` >> /dev/null 2>&1
}
case "$1" in
  start)
        module_reload
        sleep 3
        skype_start
        ;;
  stop)
        skype_stop
        ;;
  restart)
        skype_stop
        sleep 3
        skype_start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac
сделать этот скрипт исполняемым:
1
chmod +x /usr/local/bin/sk
Редактируем конфиг mod_skypopen для нужного количества каналов:
1
nano /usr/local/freeswitch/conf/autoload_configs/skypopen.conf.xml
Ниже привожу кусочек своего конфига как пример:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<configuration name="skypopen.conf" description="Skypopen Configuration">
  <global_settings>
    <param name="dialplan" value="XML"/>
    <param name="context" value="default"/>
    <param name="destination" value="7777"/>
    <param name="skype_user" value="skype_user"/>
    <param name="report_incoming_chatmessages" value="true"/>
    <param name="silent_mode" value="false"/>
    <param name="write_silence_when_idle" value="true"/>
    <param name="setsockopt" value="true"/>
  </global_settings>
  <!-- one entry here per each skypopen interface -->
<!-- ниже приводится пример на 4 канала -->
  <per_interface_settings>
    <interface id="1" name="interface1">
        <param name="X11-display" value=":101"/>
    </interface>
    <interface id="2" name="interface2">
        <param name="X11-display" value=":102"/>
    </interface>
    <interface id="3" name="interface3">
        <param name="X11-display" value=":103"/>
    </interface>
    <interface id="4" name="interface4">
        <param name="X11-display" value=":104"/>
    </interface>
</per_interface_settings>
</configuration>
Здесь
7777 — экстеншн, на который будет маршрутизироваться входящий Skype-вызов;
:101 — дисплей X-сервера (для второго канала это будет :102 и так далее)
skype_user — имя Skype-акаунта
скопируем freeswitch в ../bin/ для запуска
1
cp /usr/local/freeswitch/bin/freeswitch /usr/local/bin/
Запускаем скрипт sk, FreeSwitch и пробуем загрузить mod_skypopen:
1
2
3
sk start
freeswitch
freeswitch@internal> load mod_skypopen
Если все хорошо, то выполнив команду sk list, можно увидеть список skypopen-интерфейсов.
Добавляем mod_skypopen в список модулей, загружающихся во время старта FreeSwitch. Для этого в файле /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml нужно раскоментировать строчку
1
<load module="mod_skypopen"/>
Важным моментом является то, что skype-клиенты должны запускаться до загрузки модуля mod_skypopen, т.е. перед стартом FreeSwitch. Также, остановка уже задействованных mod_skypopen копий Skype приведет к падению FreeSwitch.
Как Вы, вероятно, помните входящие Skype-вызовы будут маршрутизироваться на экстеншн 7777, который еще надо создать. Для этого в директории /usr/local/freeswitch/conf/dialplan/default создаем файл 02_skype.xml следующего содержания:
1
2
3
4
5
6
7
8
9
10
11
12
<include>
  <extension name="skype_incoming">
    <condition field="destination_number" expression="^7777$">
      <action application="set" data="skype_add_outband_dtmf_also_when_bridged=true"/>
      <action application="set" data="hangup_after_bridge=true"/>
      <action application="set" data="effective_caller_id_name=${caller_id_name} (${caller_id_number})"/>
      <action application="set" data="effective_caller_id_number=${caller_id_number}"/>
      <action application="bridge" data="sofia/gateway/asterisk/5555"/>
      <action application="hangup"/>
    </condition>
  </extension>
</include>
где
asterisk — название шлюза, на который будет уходить вызов (АТС на базе Asterisk)
5555 — экстеншн на этом шлюзе (для тестирования лучше всего просто поставить там Music On Hold)
Осталось настроить…
SIP-транк между FreeSwitch и Asterisk
На сервере c FreeSwitch в директории /usr/local/freeswitch/conf/sip_profiles/external создаем файл asterisk.xml следующего содержания:
1
2
3
4
5
6
7
8
<include>
  <gateway name="asterisk">
  <param name="username" value="freeswitch"/>
  <param name="realm" value="asterisk.example.tld"/>
  <param name="password" value="supersecret"/>
  <param name="register" value="false"/>
  </gateway>
</include>
где
asterisk — имя шлюза (должно совпадать с указанным в предыдущем шаге);
asterisk.example.tld — имя хоста с Asterisk;
freeswitch — имя пользователя для доступа к шлюзу;
supersecret — пароль.
На сервере с Asterisk добавляем в sip.conf следующее:
[freeswitch]
dtmfmode=info
type=peer
host=1.1.1.1
username=freeswitch
port=5080
fromdomain=1.1.1.1
secret=supersecret
где
1.1.1.1 — адрес сервера с FreeSwitch
freeswitch, supersecret — см. предыдущий шаг
Не забываем также указать контекст, для корректной маршрутизации вызова.
Осталось перечитать sip.conf:
rasterisk -x ‘sip reload’
Теперь при поступлении звонка на skype_user FreeSwitch будет соединять его с экстеншеном 5555 на хосте с Asterisk.

Комментарии

Популярные сообщения из этого блога

Автообзвон на Asterisk (FreePBX)

Syntax of call files Specify where and how to call Channel : <channel>: Channel to use for the call. CallerID : «name» <number> Caller ID, Please note: It may not work if you do not respect the format: CallerID: «Some Name» <1234> MaxRetries : <number> Number of retries before failing (not including the initial attempt, e.g. 0 = total of 1 attempt to make the call). Default is 0. RetryTime : <number> Seconds between retries, Don't hammer an unavailable phone. Default is 300 (5 min). WaitTime : <number> Seconds to wait for an answer. Default is 45. Account : Set the account code to use. If the call answers, connect it here: Context : <context-name> Context in extensions.conf Extension : <ext> Extension definition in extensions.conf Priority : <priority> Priority of extension to start with Set : Set a variable for use in the extension logic (example: file1=/tmp/to ); in Asterisk 1.0.x use

Настройка записи разговоров freepbx

1. Заходим на Web-интерфейс  2. Выбираем   « Панель пользователя» и вводим логин и пароль для входа(логин и пароль — это внутренний номер абонента). 3. Если правильный логин и пароль, то попадаем в интерфейс пользователя: Дата  — дата звонка; Время  — время звонка; Номер  — отображается телефонный номер   ( а под ним — внутренний номер   ), с которого был произведен звонок; Источник  — указывается внутренний номер; Назначение  — указывается внутренний номер, куда был послан звонок; Длительность  — указывается время в секундах, телефонного разговора; Монитор  — имеет две иконки:  — открывает флеш плеер для проигрывания записи разговора;  — предлагает сохранить запись разговора на жесткий диск. 3. Прослушивание записи разговоров может происходить в двух вариантах: Вариант 1 Выбираете интересующий Вас звонок и нажимаете на иконку  , после чего под строчкой звонка откроется полоска флеш-плеера, где можно будет управлять ходом прослушивания звукового файла: Ва

Запись и обслуживание разговоров в Asterisk FreePBX

Как и многие другие компании мы используем  FreePBX —  графический интерфейс для Астериск. Служба безопасности требует записывать все входящие и исходящие звонки , не проблема все делается просто: Заходим в админку http://sip.domain.local/admin/config.php , далее General Settings и делаем как у казанно у меня на скрине: Вот вроде и все , но если не следить за записями  они забьют все место на масиве. На помощь нам приходит bash =) , пишем скрипт который будет удалять записи старше 14 дней ( для службы безопасности такой срок устраивает) #!/bin/bash # Указываем директорию где расположены файлы RECORDINGS=/var/spool/asterisk/monitor # Указываем период за какой срок удалять файлы записи  RECORDINGEXPIRY=14 # Указываем за какой срок хранить логи LOGEXPIRY=365 # Дата DATE=`date` # Удаляем записи старше $RECORDINGEXPIRY дней find $RECORDINGS -mtime +$RECORDINGEXPIRY -exec rm -rfv > removal-$DATE.log # Удаляем логи старше $LOGEXPRY find . -mtime +$LO