Архив метки: Asterisk

SKYLINE Gsm VOIP Gateways

SKYLINE gsm manager


Данная программа предназначена для обзвона клиентов по предоставленному списку номеров и проигрывания им звукового сообщения, если клиента устроит предложение, она нажимает соответствующей клавишу на своем телефоне, ему отправляется СМС.
Получил как то задачу написать программу для управления GSM шлюзом SKYLINE. Т.к. данный шлюз не имеет из коробки софта для управления вызовами, а только умеет вести себя как SIP клиент. Было принято решение писать отдельный софт для взаимодействия с этим шлюзом по средством встроенного в него API и сервером Asterisk через AMI интерфейс. По итогу программа отправляет запросы на сервер, сервер в свою очередь делает вызов через шлюз, параллельно программа следить какие каналы на шлюзе свободны и дополнительно обрабатывает нажатие клавиш абонентов отправляя им СМС.

Возможно кому-то пригодится данная программа или заинтересуется ей или ее модификацией. Выложу ее сюда, можно качать. если будут вопросы то можете написать. Для ее работы должны быть настроен сервер Asterisk, установлена БД Firebird. Программа работает на операционной системе Windows.
Контакты:
e-mail: fil-23@ya.ru
telegramm: https://t.me/piligrimmu23

Программа: Скачать.

Asterisk отправка факса.

Разберем возможность отправки факсов с сервера Asterisk. Статья не полная т.к. я ее в свое время не дописал , а теперь не помню что вообще делал 🙁 (будет случай когда надо будет поднять факс, допишу)
План действий такой:
— Установка сетевого виртуального принтера cups-pdf на сервер
— Для использования виртуального принтера, установить samba (годная статья про samba)

Устанавливаем принтер cups-pdf

sudo apt-get install cups-pdf

Устанавливаем samba

sudo apt-get install samba

Переименуем оригинальный конфигурационный файл samba

 mv /etc/samba/smb.conf /etc/samba/backup_smb.conf

Создадим новый конфигурационный файл samba

nano /etc/samba/smb.conf

Добавим следующие параметры

[global]

server string = %h server (Samba, Ubuntu)
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
server role = standalone server
workgroup = WORKGROUP
security = user
map to guest = bad user
usershare allow guests = yes
#printing = cups
#printcap name = /etc/printcap

[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700

Данная конфигурация позволит нам подключаться к серверу без ввода логина и пароля
Перезагрузим сервис samba

 sudo service smbd restart && service nmbd restart

Подключимся к серверу samba и посмотрим что у нас получилось, по итогам должен появится принтер pdf
Подключаем себе этот принтер, подойдут любые драйвера поддерживающие PostScript, в моем случае подошли HP Color LaserJet 2700 PS Class Driver.
Проверим есть ли печать, после отправки документа на этот принтер, в домашней директории на сервере, должен появится PDF файл, с посланным содержанием.
Теперь не плохо бы данный PDF файл отредактировать в TIFF формат. Для этого отконфигурируем файл cups-pdf.conf

nano /etc/cups/cups-pdf.conf

Отыщем и подправим следующие строки на следующее содержание

Out /var/spool/cups-pdf
AnonDirName /var/spool/cups-pdf
Spool /var/spool/cups-pdf

Так же, нам потребуется перевести PDF файл в TIFF, для этого следует изменить следующую строку.

PostProcessing /bin/bash /var/spool/cups-pdf/pdf_to_tifof.sh

Создадим сам скрипт

sudo nano /var/spool/cups-pdf/pdf_to_tifof.sh

Добавим в него следующие строки (по своему усмотрению можете расширить этот функционал, я делал урезанную версию только чтобы заработало)

#!/bin/sh
$1 #сюда получаем первый параметр а это путь нашего
/usr/bin/gs -dSAFER -dBATCH -dQUIET -sDEVICE=tiffg3 -sPAPERSIZE=a4 -r204x196 -dNOPAUSE -sOutputFile=/var/spool/cups-pdf/outfax.tiff $1

Сделаем наш скрипт исполняемым

sudo chmod +x /var/spool/cups-pdf/pdf_to_tifof

Перезапустим службу CUPS

sudo /etc/init.d/cups restart

Тут статья обрывается и скорей всего я что-то еще не дописал.

Например экстейшен отправки факса из Asterisk, я представлю его ниже. Факс должен быть в формате tiff.

[fax-tx]
exten => send,1,NoOp(------------------- FAX from ${CALLERID(number)} ------------------)
 same => n,Wait(1)
 same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID})
 same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)})
 ;same => n,Set(FAXOPT(localstationid)=Name)
 ;same => n,Set(FAXOPT(maxrate)=14400)
 ;same => n,Set(FAXOPT(minrate)=2400)
 same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 same => n,NoOp(**** RECEIVING FAX : ${DT} ****)
 same => n,SendFAX(/var/spool/cups-pdf/faxout.tiff,d)
 same => n,NoOp(${FAXSTATUS})
 same => n,NoOp(number is ${CALLERID(number)})
 same => n,System(sendEmail -f fax@fax.fax -t info@gars.pro -u 'Fax отправлен' -o message-charset=utf-8 -m 'Номер:${CALLERID(number)}\nStatus:${FAXSTATUS}' -s localhost -l /var/log/fax.log)
 same => n,HangUp()

Asterisk autoprovision Yealink логотип ч.2

В этой части поговорим о загрузке собственного логотипа в телефонный аппарат с помощью autoprovision. Для этого нам понадобится программа для создания *.dob файлов.
В следующей таблице перечислены поддерживаемый формат файла логотипа, разрешение и общий размер файла для каждой модели телефона:

Phone Model Logo File Format Resolution Total File Size
SIP-T28P .dob <=236*82 2 gray svale <=100К
SIP-T26P/T22P .dob <=132*64 2 gray svale <=100К
SIP-T21P/T19P .dob <=132*64 2 gray svale <=200К
SIP-T42G/T31P .dob <=192*64 2 gray svale <=100К
SIP-T23G .dob <=132*64 2 gray svale <=100К

У нас модель телефона T23G, будем делать свой логотип под нее.
Откроем редактор PAINT, выставим границы изображения в размере 132 на 64. Нанесем свой рисунок. В панели управления, выберем пункт Файл, далее выберем пункт сохранить как …. Из предложенных типов файлов, выберем Монохромный рисунок (*.bmp;*.dib)
Переходим в папку со скаченным архивом, запускаем приложение PictureExDemo.exe. В появившемся окне, для выбора нашего нового логотипа, нажмем кнопку Add. После загрузки логотипа в программу, нам понадобиться преобразовать его в .dob файл, для этого следует нажать кнопку Convert. С конвертированное изображение появится в папке adv, которая лежит в том же месте где и сама программа конвертации.
Загрузим конвертированный логотип на TFTP сервер, в нашем случае в директорию /srv/tftp/.
Теперь требуется внести изменения в глобальный конфигурационный файл
Параметр phone_setting.lcd_logo.mode определят вид отображения логотипа.
0 — IP-телефон не может отобразить логотип.
1 — Отображать системный логотип (надпись Yealink)
2 — Отображать пользовательский логотип
Нам подходить режим 2:

phone_setting.lcd_logo.mode = 2

Параметр lcd_logo.url указывает телефонному аппарату URL путь к файлу логотипа.

lcd_logo.url = tftp://192.168.120.200/mylogo.dob

Сохраняем, перезапустим телефонный аппарат, если все правильно то логотип будет отображаться.

Asterisk autoprovision Yealink ч.1

Задача, настроить на сервер Asterisk, autoprovision для телефонов Yealink в моем случае это будет модель T23G.
Перво на перво нам понадобятся знания о том что из себя представляет конфигурационный файлы, для этого обратимся к официальной источниками и данным:
Ссылка на офф.сайт
— Конфигурационные файлы с официального сервера или не с официального
— Инструкция с официального сайта.

Файл с название Common.cfg содержит общие настройки для всех телефонных аппаратом, например такие как Часовой пояс, NTP сервер, и прочее.
Файл с названием MAC.cfg содержит настройки для каждого отдельно взятого телефонного аппарата. Вместо MAC — вписывается mac адрес телефонного аппарат. В данном файле содержатся такие настройки как: логин, пароль, номер линии и прочее.

Autoprovision для данного вендера работает на различных протоколах передачи данных (таких как HTTP, FTP, HTTPS), мы будем использовать TFTP. Для начала нам потребуется установить TFTP сервер. Устанавливать будем на ту же машину на которой у нас крутится сервер Asterisk, под управлением Ubuntu 14.04. Установка:

sudo apt-get install openbsd-inetd tftpd tftp

После этого уже можно использовать TFTP сервер, но лучше проверить файл.

sudo nano /etc/inetd.conf

В этом файле найдем строку вида.

tftp        dgram   udp wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.tftpd /srv/tftp

Тут указано, что файлы для загрузки будут находится в директории /srv/tftp, если вас это не устраивает, измените последний параметр.
Так же следует на папку, где будут лежать файлы изменить права доступа

udo chown -R nobody /srv/tftp

Перезапустим службу inetd

sudo /etc/init.d/openbsd-inetd restart

Проверим работу TFTP сервера. Для начала установим TFTP клиент, чтобы можно было подключаться к TFTP северу. Для установки TFTP клиента выполните в терминале команду:

sudo apt-get install tftp

Теперь создадим на сервере в директории /srv/tftp какой-нибудь файл, например, myfile. Для создания файла myfile и записи в него текста «This is my file» выполните в терминале команду:

echo This is my file > /srv/tftp/myfile

Теперь мы можем запустить TFTP клиент командой tftp. Команда tftp принимает в качестве параметра IP адрес сервера. Если вы запускаете клиент на локальном компьютере, то укажите IP адрес 127.0.0.1, если же на удаленном компьютере, то укажите IP адрес сервера.

tftp 127.0.0.1

Когда клиент запустится, вы попадете в режим ввода команд для клиента TFTP. Выполните команду get myfile, которая означает получить файл с именем myfile с сервера.

tftp> get myfile

В случае, если вы все сделали правильно, файл myfile загрузится с TFTP сервера. Для выхода из TFTP клиента введите команду quit.

Так же для Autoprovision требуется DHCP сервер с включенной опцией 66 и внесенным в неё параметром адреса TFTP сервера.

TFTP сервер установлен, DHCP настроен, теперь можно заняться Autoprovision.
Переименуем файл Common.cfg в y000000000044.cfg, загрузим его на сервер в директорию /srv/tftp/ и внесем изменения.

sudo nano y000000000044.cfg

Укажем адрес сервера Auto provision (tftp)

auto_provision.server.url = 192.168.120.200

Больше пока ни чего не надо.

Переименуем файл MAC.cfg в мак адрес вашего телефонного аппарата 001565abcdef.cfg, загрузим его на сервер в директорию /srv/tftp/ и внесем изменения.

sudo nano 001565abcdef.cfg

Параметр указывает отключаем или включаем учетную запись, в нашем случае включаем.

account.1.enable = 1

Указывает имя отображаемое на дисплее

account.1.auth_name = 4201

Указывает имя авторизации (login)

account.1.user_name = 4201

Указывает пароль пользователя

account.1.password = pass4201

Указываем адрес SIP сервера

account.1.sip_server.1.address = 192.168.120.200

Сохраняем данные.
Можно запускать телефонный аппарат, если все сделано правильно, то он подхватит конфигурационные файлы.

Ссылка 1

Asterisk, отправка факса на email

Перерыл кучу интернета, дабы добраться до истины, но ни где не нашел достойного и подробного описания с объяснением до момента «взлетела». Попробую исправить это упущение.
И так, у нас есть Ubuntu 14.04.1, Asterisk 12. Требуется настроить его на принятие факсов. Не будем использовать решение от Digium, а будем использовать spandsp в ходящее в поставку Asterisk. Но т.к. мы собирали Asterisk сами, то данный модуль у нас отсутствует. Скачаем его и пересоберем Asterisk по новой.
Скачиваем пакет spandsp

wget http://soft-switch.org/downloads/spandsp/spandsp-0.0.6.tar.gz

Разархивируем его

tar -xzvf spandsp-0.0.6.tar.gz

Для работы нам понадобиться библиотека libtiff , установим ее. Сначала пропишем новый репозиторий и обновим

echo 'deb http://cz.archive.ubuntu.com/ubuntu saucy main universe' >> /etc/apt/sources.list.d/extra.list
apt-get update

Теперь установим библиотеку

apt-get install libtiff4 libtiff4-dev

Библиотека установлена, теперь перейдем не посредственно к установке spandsp. Переходим в каталог с spandsp и собираем его.

cd spandsp-0.0.6
./configure --prefix=/usr/local
make
make install

Далее нужно указать пути библиотек для системы, вносим некоторые изменения

/etc/ld.so.conf.d/spandsp.conf << EOF
/usr/local
/usr/local/lib
EOF

Собираем Asterisk с поддержкой spandsp модуля. Обратимся к статье Установка Asterisk. Для начала выполним очистку

make distclean

По новой проверим все

./configure

Перейдем не посредственно к меню добавления модулей

make menuselect

В разделе Resource Modules необходимо убедится что выбрано два модуля. res_fax и res_fax_spandsp
Сохраняем конфигурацию и пересобираем Asterisk по новой

make
make install

После запускаем новый Asterisk

service asterisk start

Заходим в консоль

asterisk -rvv

И проверяем подключены ли модули

fax show capabilities

В нормальном случае должно выглядеть так

Registered FAX Technology Modules:

Type : Spandsp
Description : Spandsp FAX Driver
Capabilities : SEND RECEIVE T.38 G.711 GATEWAY

1 registered modules

Проверим еще вот таким образом какие модули у нас загружены

module show like fax

В нормальном случае должно выглядеть так

Module                         Description                              Use Count  Status
res_fax.so                     Generic FAX Applications                 1          Running
res_fax_spandsp.so             Spandsp G.711 and T.38 FAX Technologies  0          Running
2 modules loaded

Если чуда не произошло то пытаемся перезапустить и загрузить данные модули

CLI> module reload res_fax.so
CLI> modeule load res_fax_spandsp.so

Если Asterisk выдал ошибку

Error loading module 'res_fax_psandsp.so' : libspandsp.so.2 cannot open shared object file: No such file or directory

То выходим из консоли Asterisk и вводим следующую команду

 ln /usr/local/lib/libspandsp.so.2.0.0  /lib/libspandsp.so.2

Модули подключили, а как же принять факс, и сохранить его в файл на сервере? Для этого отредактируем файл конфигурации диалплана в разделе [incoming_calls]

[incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,answer()
exten => _X.,n,ReceiveFAX(/home/user/fax/rr.tif,f)

Перезапустим диалплан.

sudo asterisk -rcvv
Asterisk*CLI> dialplan reload

Пробуем отправить факс. Проверяем наличие файла в указанной директории. Идем дальше. Теперь требуется отправить данный файл на email.
Для начала установим пакет говорящий сам за себя sendemail

sudo apt-get install sendemail

Попробуем тестово отправить наше сообщение из консоли по smtp протоколу через какой нибудь сервер. Для этого нужно чтобы уже на этом сервере у нас была заведена учетная запись и пароль. В моем случае я назвал учетку fax

sendemail -f sender@local.host -t dest@example.com -u test -m "test test" -s mail.example.com:25 -o tls=auto -xu fax -xp p@s$w0rd -a "/home/user/fax/rr.tif"

Письмо ушло и мы получили его на той стороне. Теперь попробуем заставить это делать Asterisk
Для этого снова отредактируем фаил конфигурации диалплана. Приведем его к такому виду

[general]

[globals]

[default]

[incoming_calls]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии 2)
exten => _X.,n,Goto(fax-rx,receive,1)    ;переводим вызов на "процедуру" принятия факса

[outgoing_calls]
exten => _X.,1,Verbose(Совершается исходящий вызов)
exten => _X.,n,answer()
exten => _X.,n,Dial(SIP/Operator_SIP/${EXTEN})

[phones]
include => outgoing_calls

[fax-rx]
exten => receive,1,NoOP(------------------- FAX from ${CALLERID(number)} ------------------)
 same => n,Answer()     ;подымаем трубку
 same => n,Set(DT=${TIMESTAMP}-${CALLERIDNUM}-${UNIQUEID})      ;загоняем в переменную время номер звонящего и еще какую то херь
 same => n,Set(FAXOPT(headerinfo)=Received by ${CALLERID(number)} ${STRFTIME(${EPOCH},,%Y-%m-%d %H-%M)})
; same => n,Set(FAXOPT(localstationid)=Name)
; same => n,Set(FAXOPT(maxrate)=14400)
; same => n,Set(FAXOPT(minrate)=2400)
 same => n,NoOp(FAXOPT(ecm) : ${FAXOPT(ecm)})
 same => n,NoOp(FAXOPT(headerinfo) : ${FAXOPT(headerinfo)})
 same => n,NoOp(FAXOPT(localstationid) : ${FAXOPT(localstationid)})
 same => n,NoOp(FAXOPT(maxrate) : ${FAXOPT(maxrate)})
 same => n,NoOp(FAXOPT(minrate) : ${FAXOPT(minrate)})
 same => n,NoOp(**** RECEIVING FAX : ${DT} ****)
 same => n,ReceiveFAX(/home/user/fax/${FAXOPT(headerinfo)}.tif,f)
 same => n,System(sendemail -f sender@local.host -t dest@example.com -u test -m "test test" -s mail.example.com:25 -o tls=auto -xu fax -xp p@s$w0rd -a "/home/severin/fax/${FAXOPT(headerinfo)}.tif")
 same => n,HangUp()

Сохраняем. Перезапускаем диалплан.

sudo asterisk -rcvv
Asterisk*CLI> dialplan reload

Проверяем работспособность.

Ссылки на статьи которые я использовал:
Ссылка 1
Ссылка 2
Ссылка 3
Ссылка 4

Asterisk, совершаем первый вызов на городскую линию.

И так, Asterisk у нас работает на входящие звонки, но не работает на исходящие. Надо решать.
Для того чтобы совершать и принимать звонки (да, то что мы описывали в предыдущей статье в разделе [default] тоже работает, но после внесения изменений описанных здесь, потребность и возможность в использовании этого раздела для приема звонков отпадет) добавим конфигурацию для нашего оператора.
Т.к. у нас оператор связи работает по SIP протоколу, обратимся для редактирования к файлу sip.conf

 sudo nano /etc/asterisk/sip.conf

И внесем данные об операторе

[Operator_SIP]
type=peer               ;указываем что при получении INVITE(вызов) будем сравнивать не имя поставщика сервисов а его IP адрес
host=sipprovaider.ru    ;указываем от кого мы должны получать/отправлять INVITE
fromuser=8800000        ;имя пользователя для аутентификации
defaultuser= 8800000
secret=p@ssword$
context=incoming_calls  ;задаем контекст, на него же будем принимать звонки
dtmfmode=rfc2833        ;метод генерации тонального DTFM-кода
disallow=all            ;запрещаем все кодеки
allow=gsm               ;разрешаем кодек GSM
allow=ulaw              ;разрешаем кодек
insecure=invite         ;

Далее нам требуется отредактировать диалплан.

 sudo nano /etc/asterisk/extensions.conf

Отредактируем его до такого вида

[general]

[globals]

[default]

[incoming_calls]
exten => _X.,1,Verbose(Получен вызов с внешней линии)
exten => _X.,n,Dial(SIP/100)

Как видно в контекст

[incoming_calls]

который мы описали в sip.conf поступает звонок и мы его сразу переводим на номер 100.
Перезапустим в Asterisk конфигурационные файлы.

sudo asterisk -rcvv
AsteriskGARS*CLI> dialplan reload
AsteriskGARS*CLI> sip reload

И попробуем совершить звонок с городского номера на телефонный аппарат.
Теперь требуется совершить звонок с внутреннего номера на городской. Для этого снова отредактируем файл диалплана

 sudo nano /etc/asterisk/extensions.conf

Следующим образом. Создадим раздел [outgoing_calls].

[outgoing_calls]
exten => _X.,1,Verbose(Совершается исходящий вызов)
exten => _X.,n,Dial(SIP/Operator_SIP/${EXTEN})

${EXTEN} — переменная которая содержит набранный вами номер.
Еще один важный момент, т.к. у нас телефонный аппарат находится в контексте phones, а метод вызова находится в контексте outgoing_calls, то они между собой не связаны, для того чтобы связать между собой эти два контекста воспользуемся выражением include. Добавим в фаил extensions.conf вот такие строки

[phones]
include => outgoing_calls

Сохраняем пере запускаем конфиги и пробуем дозвониться на городские линии.

sudo asterisk -rcvv
AsteriskGARS*CLI> dialplan reload

Все должно работать.

Принимаем первый внешний звонок на внутренний номер.

И так, телефон подключен к Asterisk, а Asterisk подключен к оператору связи, теперь как бы дозвониться нам до абонента 100, с внешнего мира? Нужен Dialplan. В данном случае, мы на прямую пробросим наш городской номер на телефонный аппарат.Переименуем дефолтный файл диалплана extensions.conf

 sudo mv /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.backup

Создадим новый файл extensions.conf.

sudo nano /etc/asterisk/extensions.conf

Диалплан состоит из контекстов (это очень важно), кто знаком с программированием, то это сравнимо с процедурами. По умолчанию всегда имеются три контекста [general] [globals] и [default](не указывается явно).
Для решения наших целей нам нужен контекст default, добавим в него такие действия. Поступает звонок, АТС беред трубку, проигрывает звуковой файл, кладет трубку:

[general]

[globals]

[default]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии)        ;передаем произвольный текст в детальный вывод
exten => _X.,n,Answer()                                         ;поднимаем трубку
exten => _X.,n,Playback(hello-world)                            ;проигрываем звуковой файл
exten => _X.,n,Hangup()                                         ;ложим трубку

Сохраняем, перезапустим диалплан и проверим.

sudo asterisk -rcvv
dialplan reload

_X. — это шаблон, он обозначает любой набор цифр. В место шаблона можно было бы указать внешний номер нашей организации, но будем более универсальны.

Проверили, послушали приветствие, убедились что звонки с внешних линий к нам проходят. Теперь усложним: будем сразу поступающие звонки перенаправлять на внутренний номер 100. Для этого воспользуемся приложением Dial. Данное приложение пытается соединить каналы. Правим наш диалпан, заменим строчку в которой идет проигрыш звукового сигнала, на Dial.

[general]

[globals]

[default]
exten => _X.,1,Verbose(1,Получен звонок с внешней линии)        ;передаем произвольный текст в детальный вывод
exten => _X.,n,Answer()                                         ;поднимаем трубку
exten => _X.,n,Dial(SIP/100)                                    ;переводим вызов на абонента 100
exten => _X.,n,Hangup()                                         ;ложим трубку

Сохраняем, перезапустим диалплан и проверим.

sudo asterisk -rcvv
dialplan reload

Если все правильно сделали, то должно заработать. Обращаю ваше внимание, что на исходящие звонки, с внутренних номеров на городские, наша АТС еще не настроена.

Подключение Asterisk к оператору связи

Сегодня будем пробовать подключаться к оператору связи через SIP протокол.
Так как это SIP протокол, то нам придется редактировать файл sip.conf

 sudo nano /etc/asterisk/sip.conf

Для подключения будем использовать выражение register, «данное выражение используется для регистрации вашего Asterisk на удаленном сервере».
У нас есть логин- телефон, пароль и адрес сервера для регистрации, попробуем зарегистрироваться. Делаем это в разделе [general]

[general]
register=88009999999:p@$$w0RD@sip01.serveroperator.ru

После занесения данных, сохраняем файл и пере запускаем конфигурацию sip протокола asterisk.

sudo asterisk -rcvv
sip show peers

Если не было ошибок проверяем регистрацию

Asterisk*CLI> sip show registry
Host                                    dnsmgr Username       Refresh State                Reg.Time
sip01.serveroperator.ru:5060            N      88009999999        105 Registered           Mon, 13 Apr 2015 08:23:35
1 SIP registrations.

Все ОК, мы зарегистрировались на другом сервере, в данном случае на сервере оператора.

Подключение телефонного аппарата к Asterisk

Описание находится в книге Asterisk будущее телефонии Глава 4. Конфигурация SIP-телефона.

Будем рассматривать на примере Yealink-T22.
Переименуем наш файл конфигурации sip.conf в sip.conf.backup

sudo mv /etc/asterisk/sip.conf /etc/asterisk/sip.conf.backup

Создадим новый файл конфигурации sip.conf

sudo nano /etc/asterisk/sip.conf

И в несем в него минимальные конфигурационные данные для работы с SIP телефоном:

[100]                   ;аккаунт регистрации, считай его ID и номер телефона
type=friend             ;указываем что устройство может принимать и совершать вызовы
host=dynamic            ;указываем что IP адрес у телефона динамический т.е. по DHCP
context=phones          ;"контекст" в котором данный номер работает.

Далее заходим на сам телефонный аппарат по его IP адресу. И в разделе Аккаунт выставляем адрес сервера телефонии, и аккаунт (номер) телефона в Asterisk:
090420151620
Жмем сохранить и переходим дальше к нашему серверу.
Т.к. sip.conf файл уже настроен его нужно применить. Для этого входим в консоль управления Asterisk

sudo asterisk -rcvv

И перезапускам файл sip.conf

sip reload

Если все прошло без ошибок, то можно проверить статус подключения.

Asterisk*CLI> sip show peers
Name/username             Host                                    Dyn Forcerport Comedia    ACL Port     Status                                                                                                                               Description
100/100                   192.168.120.10                           D  Auto (No)  No             5062     Unmonitored                                                                                                                        
1 sip peers [Monitored: 0 online, 0 offline Unmonitored: 1 online, 0 offline]

В данном случае все ОК и телефон зарегистрировался.

Поговорим о безопасности.
Т.к. наш телефон могут взломать и воспользоваться международными и междугородными звонками за наш счет, обезопасим себя, установим сложные пароли на вэб вход телефона (сами разберитесь где это). И защитим немного сам сервере Asterisk. Открываем sip.conf

sudo nano /etc/asterisk/sip.conf

В разделе [general].Сменим порт на который хотим принимать SIP соединения.

bindport=6743

Запрещаем отправку детального ответа «на отказ в соединении»

alwaysauthreject=yes

В дискрипшене аппарата ограничиваем диапазон сетей с которых ожидать подключение.

deny=0.0.0.0/0.0.0.0
permit=192.168.120.0/24

Устанавливаем пароль для аутентификации

secret=p@$$W0rd

В итоге получаем такой конфиг:

[general]
bindport=4563           ;порт на который желаем принимать SIP соединение
alwaysauthreject=yes    ;не выдаем детального сообщения причины почему нет подключения.

[100]                   ;аккаунт регистрации, считай его ID и номер телефона
type=friend             ;указываем что устройство может принимать и совершать вызовы
host=dynamic            ;указываем что IP адрес у телефона динамический т.е. по DHCP
context=phones          ;"контекст" в котором данный номер работает.
secret=p@$$W0rd         ;пароль для аутентификации аппарата на сервере
deny=0.0.0.0/0.0.0.0    ;запрещаем подключение со всех IP адресов
permit=192.168.120.0/24 ;разрешаем подключение с определенного диапазона IP адресов

Это не полный перечень как обезопасить себя, статья на эту тему.

Установка Asterisk

Годная статья , автор молодец, по этому запостю ее к себе с маленькими обновлениями.

Установку Asterisk 12 будем проводить на ОС Ubuntu 14.04.01 server x86_64, установленную на Oracle VM VirtualBox.

Заходим в терминал Ubuntu и обновим системные пакеты.

sudo apt-get update
sudo apt-get upgrade

Перезагрузим систему

sudo reboot

Синхронизируем время, для этого установим сервер NTP

sudo apt-get install ntp

Установим зависимости, которые будут необходимы для корректной работы Asterisk

sudo apt-get install build-essential linux-headers-`uname -r` openssh-server mysql-server mysql-client libgnutls28 bison flex curl sox libncurses5-dev libssl-dev libmysqld-dev libmysqlclient-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool git g++ subversion uuid-dev vim-nox php5 php5-curl php5-cli php5-mysql php-pear php-db php5-gd

В процессе установки нужно будет ввести пароль для root пользователя MYSQL
080420151126
Перезагружаем систему

sudo reboot

Создадим папку, куда будем скачивать дистрибутивы Asterisk, DAHDI и LibPRI

sudo mkdir -p /usr/src/asterisk-12
cd /usr/src/asterisk-12

Скачиваем исходники Asterisk 12.8.1 (на момент написания инструкции последняя актуальная версия), DAHDI (пакет, ранее называвшийся zaptel, который осуществляет обработку аналоговых и цифровых интерфейсов), libPRI (библиотека, предназначенная для работы с потоковыми TDM-интерфейсами ISDN: PRI (Primary Rate Interface) и BRI (Basic Rate Interface))

sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-12.8.1.tar.gz
sudo wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-2.10.1+2.10.1.tar.gz
sudo wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4.15.tar.gz

Распаковываем скаченные исходники

sudo tar xvfz dahdi-linux-complete-2.10.1+2.10.1.tar.gz
sudo tar xvfz libpri-1.4.15.tar.gz
sudo tar xvfz asterisk-12.8.1.tar.gz

Для начала компилируем DAHDI

cd /usr/src/asterisk-12/dahdi-linux-complete-2.10.1+2.10.1
sudo make all
sudo make install
sudo make config

Далее компилируем LibPRI

cd /usr/src/asterisk-12/libpri-1.4.15/
sudo make
sudo make install

Начнем установку Asterisk 12. Необходимые модули устанавливаем командой make menuselect.

cd /usr/src/asterisk-12/asterisk-12.8.1/
sudo ./configure

При установке может вылететь ошибка

configure: error: *** JSON support not found (this typically means the libjansson development package is missing)

Для этого делаем следующее

cd /usr/src/
sudo wget http://www.digip.org/jansson/releases/jansson-2.7.tar.gz
sudo tar xvfz jansson-2.7.tar.gz
cd jansson-2.7/
sudo ./configure --prefix=/usr/
sudo make clean
sudo make
sudo make install
sudo ldconfig

Далее запускаем еще раз установку Asterisk

cd /usr/src/asterisk-12/asterisk-12.8.1/
sudo ./configure
sudo make menuselect

080420151455
По большей части, все необходимые модули уже включены. Вы можете что-то добавить или удалить. При выборе модуля у него будет короткое описание, за что он отвечает.

В разделе Add-ons выбираем модули format_mp3(понадобиться чтобы делать голосовое меню не в gsm формате, а в mp3) и все опции относящиеся к MySQL. Они понадобятся в случае подключения FreePBX.
Не забудьте загрузите модуль meetme.
Во вкладке Core Sound Packages – выберите необходимые форматы звуковых пакетов.
080420151502
В Music On Hold File Packages включаем все модули.
В Extras Sound Packages включаем первые 4 модуля содержащие EN
После настройки нажмите F12 для сохранения данных и выхода в окно консоли.
Далее вводим команду:

sudo make

Во время выполнения функции make у меня вылезла ошибка.

**************************************************************
***                                                        ***
***   --->  READ THIS OR YOUR BUILD WILL FAIL  <---        ***
***                                                        ***
*** format_mp3 has been selected to be installed, but the  ***
*** mp3 decoder library has not yet been downloaded into   ***
*** the source tree.  To do so, please run the following   ***
*** command:                                               ***
***                                                        ***
***          $ contrib/scripts/get_mp3_source.sh           ***
***                                                        ***
**************************************************************

   [CC] app_mysql.c -> app_mysql.o
   [LD] app_mysql.o -> app_mysql.so
   [CC] cdr_mysql.c -> cdr_mysql.o
   [LD] cdr_mysql.o -> cdr_mysql.so
   [CC] format_mp3.c -> format_mp3.o
format_mp3.c:39:24: fatal error: mp3/mpg123.h: Нет такого файла или каталога
 #include "mp3/mpg123.h"
                        ^
compilation terminated.
make[1]: *** [format_mp3.o] Ошибка 1
make: *** [addons] Ошибка 2

Для её устранения, вводим требуемую команду.

sudo contrib/scripts/get_mp3_source.sh

Запускаем опять команду make

sudo make

Далее вводим команды

sudo make install
sudo make samples
sudo make config

Перезагружаем сервер

sudo reboot

Проверяем работоспособность Asterisk. Вводим команду

sudo rasterisk

Далее автор предлагает обезопасить систему путем ввода и передачи брозд правления новому пользователю. Я этого не делал, но все же приведу цитату.
Если необходимо обезопасить систему, можем задать пользователя для управления Asterisk. Создаем пользователя, его каталог и пароль. Далее даем ему права для работы с Asterisk.

sudo adduser asterisk
sudo mkdir /home/username
sudo passwd username
sudo chown -R asterisk. /var/run/asterisk
sudo chown -R asterisk. /etc/asterisk
sudo chown -R asterisk. /var/{lib,log,spool}/asterisk
sudo chown -R asterisk. /usr/lib/asterisk

Перезагружаем сервер

sudo reboot

Заходим под пользователем asterisk

su asterisk

Проверяем работоспособность Asterisk. Вводим команду

rasterisk

И попадаем в консоль управления Asterisk.
Сделаем некоторую настройку для MySQL. Заходим в MySQL.

mysql -uusername -ppassword -hlocalhost

Здесь сокращения:
-h host
-u user
-p password
Пробел после них отсутствует
Или mysql –u username -p
После ввода пароля мы окажемся в консоле mysql. Создадим пользователя asterisk с localhost и паролем ‘password’.

create user 'asterisk'@'localhost' identified by 'password';

Пользователь создан. Для проверки посмотрим список пользователей:

select user,host,password from mysql.user;

Создадим базу данных asteriskcdrdb, asterisk.

create database asterisk;
create database asteriskcdrdb;

Далее определяем владельца базы данных

GRANT ALL PRIVILEGES ON asterisk.* TO asterisk@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asterisk@localhost IDENTIFIED BY 'password';
flush privileges;