Author: | Вадимовъ |
---|---|
Revision: | 1.1 |
Date: | 16.03.2009 |
Данный документ является частью документации, поставляемой в рамках проекта "ПТК ЦОИ", и описывает процесс инсталляции и конфигурирования сервера IP-телефонии Asterisk версии 1.6.1 в предположении, что планируется создание VoIP сети, состоящей из 18 автоматизированных рабочих мест (АРМ) с возможностью поддержки конференции и записи переговоров.
Привлечение дополнительного аппаратного обеспечения фирмы Digium для поддержки аналоговой и цифровой телефонии не предполагается.
Перед началом установки необходимо установить следующие пакеты:
Все релизы Asterisk ветки 1.4 с версией выше 1.4.21 и все релизы ветки 1.6 автоматически используют канал DAHDi вместо Zaptel, даже если Zaptel все еще установлен и присутствует в системе.
Для установки модуля канала DAHDi необходимо предварительно установить в системе исходные коды ядра ОС!
Установите пакет DAHDi согласно прилагающимся к нему инструкциям по установке, затем переконфигурируйте и пересоберите сам Asterisk.
Предполагается, что пользователь, проводящий процесс установки и настройки, имеет достаточные знания в области работы с командной оболочкой shell ОС Linux(Unix) и предварительно ознакомился с содержанием главы 3 [1].
Инсталляция производится от имени пользователя: asterisk Домашний каталог: /home/asterisk Имя сервера: asterisk IP адрес: 10.10.10.206 Операционная система: openSUSE 11.1 (i586) Релиз: Linux 2.6.27.7-9-pae #1 SMP 2008-12-04 18:10:04 +0100 i686 i686 i386 GNU/Linux
Модуль канала DAHDI (Digium Asterisk Hardware Device Interface) обеспечивает интерфейсный уровень между сервером Asterisk с одной стороны, и драйвером интерфейса Dahdi плюс программные эхоподавителели с другой. Этот модуль канала пришел на смену Zaptel и наследует все его основные возможности. Кроме того, были расширены возможности по работе с программными эхоподавителями и добавлены новые параметры в файл конфигурации.
Пакет Zaptel, который включал в себя, как модули драйверов ядра системы, так и пользовательские утилиты для конфигурации и управления этими модулями, был разбит на два пакета. Для Линукс систем это:
Получение исходного кода и установка:
$ cd ~ $ mkdir src3 $ cd src3 $ wget http://downloads.digium.com/pub/telephony/dahdi-linux/dahdi-linux-current.tar.gz $ tar zxvf dahdi-linux-current.tar.gz $ cd /home/rtbr/src3/dahdi-linux-2.1.0.4 $ make # make install
В результате в системе появится специальное псевдоустройство dahdi и драйвер dahdi_dummy в виде одноименного модуля ядра, необходимые как источник цифрового сигнала для поддержки возможности организации конференции. Устройство dahdi_dummy не предоставляет каналов и используется только как источник DAHDI сигналов таймера. Подробности см. на стр.77,90 [1].
Поддержка таймера может быть также необходима для "Music on Hold".
Подробности см. http://voip.rus.net/tiki-index.php?page=Asterisk+DAHDI+channels
Проверка наличия модуля ядра:
$ cd /lib/modules/2.6.27.7-9-pae/dahdi $ ls -l dahdi_dummy.ko -rw-r--r-- 1 root root 6366 2009-02-25 17:35 dahdi_dummy.ko
В результате процесса инсталляции в каталоге /dev появится псевдоустройство /dev/dahdi.
$ ls -l /dev/dahdi total 0 crw-rw---- 1 root root 196, 254 2009-02-26 14:50 channel crw-rw---- 1 root root 196, 0 2009-02-26 14:50 ctl crw-rw---- 1 root root 196, 255 2009-02-26 14:50 pseudo crw-rw---- 1 root root 196, 253 2009-02-26 14:50 timer
Загрузка модулей ядра (без стартового сценария) при необходимости осуществляется командой modprobe:
# modprobe dahdi # modprobe dahdi_dummy
Если все прошло нормально, то на экран ничего не выводится.
Выполнение этих двух команд предусмотрено в стартовом сценарии, который появляется в системе после установки пакета dahdi-tools (см.ниже).
Проверка наличия загруженных модулей:
$ lsmod | grep dahdi dahdi_dummy 3176 0 dahdi 185896 1 dahdi_dummy crc_ccitt 1884 1 dahdi
Чтобы выгрузить драйвер из памяти:
# rmmod dahdi
Установка данного пакета не является обязательной.
Процесс установки предусматривает выполнение следующей последовательности команд:
$ wget http://downloads.digium.com/pub/telephony/dahdi-tools/dahdi-tools-current.tar.gz $ tar zxvf dahdi-tools-current.tar.gz $ cd /home/rtbr/src3/dahdi-tools-2.1.0.2 $ ./configure # make menuselect # make # make install # make config install -D dahdi.init /etc/init.d/dahdi /sbin/chkconfig --add dahdi insserv: warning: script 'S01zaptel' missing LSB tags and overrides insserv: warning: script 'zaptel' missing LSB tags and overrides dahdi 0:off 1:off 2:on 3:on 4:on 5:on 6:off DAHDI has been configured. If you have any DAHDI hardware it is now recommended you edit /etc/dahdi/modules in order to load support for only the DAHDI hardware installed in this system. By default support for all DAHDI hardware is loaded at DAHDI start. I think that the DAHDI hardware you have on your system is:
При старте ОС загрузка модулей dahdi будет произведена стандартным скриптом /etc/init.d/dahdi
При необходимости ручной запуск:
asterisk:/etc/init.d # ./dahdi start Loading DAHDI hardware modules: No hardware timing source found in /proc/dahdi, loading dahdi_dummy
Примечание: для того, чтобы стартовый сценарий в ОС SuSe Linux не прерывал свою работу из-за ошибки, следует внести изменения в файл /etc/init.d/dahdi, добавив после:
# # Determine which kind of configuration we're using # system=redhat # assume redhat if [ -f /etc/debian_version ]; then system=debian fi
следующий фрагмент кода:
if [ -f /etc/SuSE-release ]; then system=suse fi
Предполагается запустить Asterisk под учетной записью пользователя asterisk , поэтому необходимо сначала создать этого пользователя в системе.
# useradd -c "Asterisk PBX" asterisk # passwd asterisk
переключимся на этого пользователя:
# su asterisk
Теперь от имени пользователя asterisk, под учетной записью которого будут выполняться последующие команды, следует загрузить копию Asterisk через SVN
$ svn co http://svn.digium.com/svn/asterisk/branches/1.6.1 asterisk-1.6.1
На эране появится примерно следующее:
... Checked out revision 482. Checked out revision 180334.
Необходимо точно знать какую версию предполагается загрузить. Так, при попытке загрузки несуществующей версии, например:
$ svn co http://svn.digium.com/svn/asterisk/tags/1.6 asterisk-1.6
На экран будет выдано:
svn: URL 'http://svn.digium.com/svn/asterisk/tags/1.6' doesn't exist
Для того, чтобы посмотреть имеющиеся в хранилище версии, доступные для скачивания, следует, например, ввести в броузере URL, показанный на рисунке ниже:
Возможно также получение исходного кода посредством:
$ wget http://downloads.digium.com/pub/asterisk-1.6-current.tar.gz
В этом случае понадобится распаковка:
$ tar zxvf asterisk-current.tar.gz
Итак, после загрузки исходного кода, перейдем в каталог:
$ cd asterisk-1.6.1
и выполним команду конфигурирования:
$ ./configure --prefix=$HOME/asterisk-bin --sysconfdir=$HOME/asterisk-bin --localstatedir=$HOME/asterisk-bin
Выполняя сценарий ./configure с флагом --prefix, системе указывается установить двоичные компонентыв подпапку asterisk-bin папки $HOME. Флаг --sysconfdir указывает системе, куда поместить конфигурационные файлы, а флаг --localstatedir - куда установить дополнительные файлы, например, звуковые. Главное здесь то, что, поскольку загрузка, компиляция и установка выполняются от лица пользователя asterisk, все, что создается, будет закреплено за этим пользователем и будет иметь права, предоставленные этому пользователю [1].
В результате выполнения команды configure на экране появится:
.$$$$$$$$$$$$$$$=.. .$7$7.. .7$$7:. .$$:. ,$7.7 .$7. 7$$$$ .$$77 ..$$. $$$$$ .$$$7 ..7$ .?. $$$$$ .?. 7$$$. $.$. .$$$7. $$$$7 .7$$$. .$$$. .777. .$$$$$$77$$$77$$$$$7. $$$, $$$~ .7$$$$$$$$$$$$$7. .$$$. .$$7 .7$$$$$$$7: ?$$$. $$$ ?7$$$$$$$$$$I .$$$7 $$$ .7$$$$$$$$$$$$$$$$ :$$$. $$$ $$$$$$7$$$$$$$$$$$$ .$$$. $$$ $$$ 7$$$7 .$$$ .$$$. $$$$ $$$$7 .$$$. 7$$$7 7$$$$ 7$$$ $$$$$ $$$ $$$$7. $$ (TM) $$$$$$$. .7$$$$$$ $$ $$$$$$$$$$$$7$$$$$$$$$.$$$$$$ $$$$$$$$$$$$$$$$. configure: Package configured for: configure: OS type : linux-gnu configure: Host CPU : i686 configure: build-cpu:vendor:os: i686 : pc : linux-gnu : configure: host-cpu:vendor:os: i686 : pc : linux-gnu :
На следующем шаге следует выбрать необходимые для установки модули и звуковые файлы.
$ make menuselect
Выбрать app_meetme из раздела Application! (Без предустановленного DAHDi недоступно.)
Далее следует
Затем
После окончания нажать "х".
На экране появится сообщение:
Generating input for menuselect ... menuselect changes saved! make: *** [menuselect] Interrupt
Далее следует провести установку от имени суперпользователя:
# make install
На экране должно появиться:
... +---- Asterisk Installation Complete -------+ + + + YOU MUST READ THE SECURITY DOCUMENT + + + + Asterisk has successfully been installed. + + If you would like to install the sample + + configuration files (overwriting any + + existing config files), run: + + + + make samples + + + +----------------- or ---------------------+ + + + You can go ahead and install the asterisk + + program documentation now or later run: + + + + make progdocs + + + + **Note** This requires that you have + + doxygen installed on your local system + +-------------------------------------------+
Теперь можно установить файлы примеров:
$ make samples
Файлы примеров будут установлены в папку $HOME/asterisk-bin/asterisk
Выполним тестовый запуск:
$ ./asterisk-bin/sbin/asterisk -cvvv
На экране получим:
Произведем установку и конфигурирование стартового сценария.
$ su # cd /home/asterisk/asterisk-1.6.1 # make config
На экране получим примерно следующее:
insserv: warning: script 'S01zaptel' missing LSB tags and overrides insserv: warning: script 'zaptel' missing LSB tags and overrides asterisk 0:off 1:off 2:off 3:on 4:off 5:on 6:off
Настроим ссылки:
# ln -s /home/asterisk/asterisk-bin/sbin/asterisk /usr/sbin/asterisk # ln -s /home/asterisk/asterisk-bin/sbin/safe_asterisk /usr/sbin/safe_asterisk # ln -s /home/asterisk/asterisk-bin/asterisk /etc/asterisk
Внесем изменения в файл asterisk-bin/sbin/safe_asterisk, изменив строку:
ASTARGS=""
на
ASTARGS="-U asterisk"
Сохранить изменения.
Запуск asterisk:
asterisk:/etc/rc.d # ./asterisk start Starting asterisk:
Убедиться, что asterisk запущен:
$ ps aux | grep asterisk root 20864 0.0 0.0 2936 688 pts/2 S 11:12 0:00 /bin/sh /usr/sbin/safe_asterisk asterisk 20868 2.5 0.2 23092 9308 pts/2 Sl 11:12 0:00 /home/asterisk/asterisk-bin/sbin/asterisk -f -U asterisk -vvvg -c
Команда make samples (последний шаг установки) создает множество конфигурационных файлов в etc/asterisk. В минимальной конфигурации необходимы только sip.conf, extensions.conf, voicemail.conf, meetme.conf. Для того, чтобы Asterisk не сообщал о том, что какие-то из конфигурационных файлов отсутствуют, можно оставить также и:
asterisk:/home/asterisk/asterisk-bin/asterisk # ls -l total 176 -rw-r--r-- 1 asterisk users 767 2009-03-05 10:50 amd.conf -rw-r--r-- 1 asterisk users 2555 2009-03-05 10:50 asterisk.conf -rw-r--r-- 1 asterisk users 7324 2009-03-05 10:50 cdr.conf -rw-r--r-- 1 asterisk users 8759 2009-03-05 10:50 dundi.conf -rw-r--r-- 1 asterisk users 4123 2009-03-02 17:37 extensions.conf -rw-r--r-- 1 asterisk users 8214 2009-03-05 10:50 features.conf -rw-r--r-- 1 asterisk users 929 2009-03-05 10:50 festival.conf -rw-r--r-- 1 asterisk users 3755 2009-03-05 10:50 followme.conf -rw-r--r-- 1 asterisk users 17571 2009-03-05 10:50 iax.conf -rw-r--r-- 1 asterisk users 3881 2009-03-05 10:50 manager.conf -rw-r--r-- 1 asterisk users 1532 2009-02-25 12:37 meetme.conf -rw-r--r-- 1 asterisk users 4413 2009-03-05 10:50 mgcp.conf -rw-r--r-- 1 asterisk users 1272 2009-03-05 10:50 modules.conf -rw-r--r-- 1 asterisk users 6856 2009-03-05 10:50 oss.conf -rw-r--r-- 1 asterisk users 1579 2009-03-05 10:50 phone.conf -rw-r--r-- 1 asterisk users 3108 2009-03-05 10:50 phoneprov.conf -rw-r--r-- 1 asterisk users 1451 2009-03-05 10:50 queuerules.conf -rw-r--r-- 1 asterisk users 20190 2009-03-05 10:50 queues.conf -rw-r--r-- 1 asterisk users 2893 2009-02-28 12:22 sip.conf -rw-r--r-- 1 asterisk users 5928 2009-03-05 10:50 skinny.conf -rw-r--r-- 1 asterisk users 2664 2009-03-05 10:50 smdi.conf -rw-r--r-- 1 asterisk users 4909 2009-03-05 10:50 unistim.conf -rw-r--r-- 1 asterisk users 16046 2009-03-05 11:28 voicemail.conf
Перед настройкой сервера следует в каталоге /home/rtbr/src3/etc/asterisk выполнить:
$ mv extensions.conf extensions.conf.sample $ touch extensions.conf $ mv sip.conf sip.conf.sample $ touch sip.conf $ mv extensions.ael extensions.ael.sample
SIP телефоны работают через SIP каналы. Они конфигурируются в файле sip.conf:
Минимальная конфигурация для первичной проверки работоспособности системы:
[general] context=default [1000] type=friend context=phones host=dynamic callerid=User 1 mailbox=1000 canreinvite=no
Примечание: директива canreinvite=no заставляет весь голосовой RTP трафик проходить через Asterisk.
[1000] - это имя, ассоциируемое с SIP клиентом, или это может быть произвольным именем SIP устройства, на которое можно ссылаться из других конфигурационных фалов. Обычно, если SIP телефон имеет номер екстеншена 1000, тогда, соответствующие ему настройки в этом файле начинается со строки [1000]. Обратите внимание, что для того, чтобы можно было позвонить на этот экстеншен 1000 следует описать его в плане набора. Тип SIP клиента может быть: "user", "peer" или "friend".
Для получения возможности записи разговора в файл, убедитесь, что аудиопоток проходит через сервер Asterisk, т.е. необходимо установить параметр canreinvite=no в файле конфигурации sip.conf, если это канал SIP, или использовать параметры t или T в команде Dial, или использовать трансляцию между звуковыми кодеками (абоненты используют различные кодеки для связи).
Полный текст файла sip.conf для всех требуемых АРМ-ов приведен в Приложении A.
Конфигурация плана набора содержится в файле конфигурации Asterisk - extensions.conf. Это один из самых важных конфигурационных файлов. В нем определяется обработка и маршрутизация входящих и исходящих вызовов. Этот файл управляет поведением всех соединений, проходящих через АТС. План набора состоит из контекстов. Определение контекстов - самая важная часть файла extensions.conf и самая важная часть конфигурации сервера Asterisk. Когда Asterisk принимает вызов, вне зависимости от того, поступил ли этот вызов из вне или с внутреннего абонента, этот вызов поступает на обработку в контекст. Выбор того, в каком контексте этот вызов будет обрабатываться, зависит от того, с какого канала поступил этот вызов. Когда конфигурируются каналы, которые планируется использовать в сервере Asterisk, одна из важных вещей, которую нужно указать в настройках каналов - это в какой контекст будут попадать вызовы, поступающие через каждый конкретный канал, используя определенную директиву, чаще всего такую:
context=incoming
В контексте определены разные, для каждого вызываемого пользователями наборы команд для исполнения (экстеншен). Например, в контексте может быть определен один набор команд, если пользователь набрал "1000", и другой набор команд, если пользователь набирает "9".
Контекст - это способ указать серверу Asterisk выполнить различные действия по обработке вызова в зависимости от того, откуда он поступил. Должен быть определен, по крайней мере, один контекст для того, чтобы Asterisk смог обрабатывать входящие вызовы через телефонную линию: это могут быть действия по вызову определенных экстеншенов или проигрывание приветственного сообщения и запись сообщения голосовой почты. Если требуется, чтобы Asterisk обрабатывал вызовы из внутренней сети особым образом, например, ограничить выбор вызываемых номеров экстеншенов или, если требуется ввести ограничение на набираемые номера в публичную телефонную сеть ? тогда нужно определить другой "контекст" в который будут попадать вызовы с "каналов", по которым подключены внутренние абоненты.
Каналы в asterisk - это внешние или внутренние соединения, по которым производиться доставка вызовов в АТС Asterisk. Каналом может быть соединение с обычным телефонным аппаратом или с обычной телефонной линией, или он может быть виртуальным (логическим) каналом для совершения вызовов (как, например, совершение телефонных вызовов через Интернет). В данном случае речь идет о типе канала - SIP: Протокол Инициирования Сеанса (Session Initiation Protocol), один из частоиспользуемых VOIP протоколов. SIP телефоны работают через SIP каналы. Они конфигурируются в файле sip.conf.
После того, как определены все требуемые SIP аккаунты для всех клиентов (АРМ-ов) в файле sip.conf, то у этих клиентов появляется возможность зарегистрироваться на сервере asterisk и совершать исходящие вызовы. Для того, чтоб они могли принимать вызовы, необходимо описать екстеншены для них в файле плане набора extensions.conf.
Пример:
exten => 1010,1, Dial(SIP/commander_in_chief,10,t)
Если кто-нибудь совершит вызов на номер 1010, тогда будут совершена попытка вызвать SIP клиента, зарегистрированного как commander_in_chief.
Если команда Dial() содержит параметр t или T, Asterisk не производит процедуру re-invite.
В рассматриваемой конфигурации диалплана сервера Asterisk, предусмотрена запись телефонных переговоров в файл. Запись продолжается пока связь по текущему каналу не будет закончена. Если не определен полный путь для файла, то они будут сохраняться в поддиректории по умолчанию: /var/spool/asterisk/monitor. В нашем конкретном случае используется каталог /tmp и формат звуковых файлов - wav.
Запись разговора звонящего и вызываемого абонента сохраняются в раздельные звуковые файлы. Именование указанных файлов производится по шаблону:
<SIP-звонящего абонента>-<SIP-вызываемого абонента>-<UNIX-время>.wav-[in|out].wav
Например, звонок абонента 241 абоненту 1000 будет записан в следующие два файла:
241-1000-1236086037.wav-in.wav 241-1000-1236086037.wav-out.wav
Примечание: Управление командой записи может предусматривать в момент окончания записи выполнение сервером Asterisk команды ОС для слияния двух звуковых файлов в один. По умолчанию, Asterisk будет исполнять программу soxmix, а потом удалит два исходных файла.
Полный текст файла extensions.conf для всех требуемых АРМ-ов приведен в Приложении Б. Для поддержки аудиоконференц-связи по номеру 600, следует использовать файл meetme.conf (Приложение Г). Подробности см. стр.208 [1]
Исходный код может быть получен из:
Предполагается, что IP хоста Asterisk 10.10.10.206
Поля 'User name' и 'Authorization user name' должны совпадать с уникальным ID SIP устройства ([1000]) из sip.conf !
В результате в окне терминала, с которого был запущен Asterisk появится сообщение о регистрации SIP-клиента:
*CLI> -- Registered SIP '1000' at 10.10.10.14 port 19458
Примечание: Обратите внимание, что Xlite сам посылает NAT пакеты keep-alive, следовательно, надобности в Asterisk SIP параметре qualify=yes (периодическая проверка доступности клиента) нет.
При запуске сконфигурированного телефона (см.выше) происходит его регистрция в Asterisk:
*CLI> -- Registered SIP '1000' at 10.10.10.14 port 42477 *CLI> -- Registered SIP '241' at 10.10.10.249 port 5060 > Saved useragent "Linksys/SPA922-5.1.15(a)" for peer 241 -- Registered SIP '1000' at 10.10.10.14 port 38407 > Saved useragent "X-Lite release 1100l stamp 47546" for peer 1000
Звонок на номер 1000 (сам себе).
В результате в окне терминала, с которого был запущен Asterisk появится сообщение.
В случае, если вызываемый абонент трубку не снял:
*CLI> == Using SIP RTP CoS mark 5 -- Executing [1000@phones:1] Macro("SIP/1000-08207320", "stdexten,1000,SIP/1000") in new stack -- Executing [s@macro-stdexten:1] NoOp("SIP/1000-08207320", "stdexten macro being executed") in new stack -- Executing [s@macro-stdexten:2] Set("SIP/1000-08207320","CALLFILENAME=/tmp/1000-1000-1236250345") in new stack -- Executing [s@macro-stdexten:3] Monitor("SIP/1000-08207320", "wav,/tmp/1000-1000-1236250345.wav,b") in new stack -- Executing [s@macro-stdexten:4] Dial("SIP/1000-08207320", "SIP/1000,10,rt") in new stack == Using SIP RTP CoS mark 5 -- Called 1000 -- SIP/1000-082258d8 is ringing -- Nobody picked up in 10000 ms -- Executing [s@macro-stdexten:5] Goto("SIP/1000-08207320", "s-NOANSWER,1") in new stack -- Goto (macro-stdexten,s-NOANSWER,1) -- Executing [s-NOANSWER@macro-stdexten:1] VoiceMail("SIP/1000-08207320", "1000,u") in new stack -- <SIP/1000-08207320> Playing 'vm-theperson.ulaw' (language 'en') -- <SIP/1000-08207320> Playing 'digits/1.ulaw' (language 'en') -- <SIP/1000-08207320> Playing 'digits/0.ulaw' (language 'en') -- <SIP/1000-08207320> Playing 'digits/0.ulaw' (language 'en') -- <SIP/1000-08207320> Playing 'digits/0.ulaw' (language 'en') -- <SIP/1000-08207320> Playing 'vm-isunavail.ulaw' (language 'en') -- <SIP/1000-08207320> Playing 'vm-intro.ulaw' (language 'en') -- <SIP/1000-08207320> Playing 'beep.ulaw' (language 'en') -- Recording the message -- x=0, open writing: /home/asterisk/asterisk-bin/spool/asterisk/voicemail/default/1000/tmp/RsGtig format: wav49, 0x820c6f8 -- x=1, open writing: /home/asterisk/asterisk-bin/spool/asterisk/voicemail/default/1000/tmp/RsGtig format: gsm, 0x8235cf8 -- x=2, open writing: /home/asterisk/asterisk-bin/spool/asterisk/voicemail/default/1000/tmp/RsGtig format: wav, 0x8214618 DTMF begin '#' received on SIP/1000-08207320 DTMF begin passthrough '#' on SIP/1000-08207320 DTMF end '#' received on SIP/1000-08207320, duration 100 ms DTMF end accepted with begin '#' on SIP/1000-08207320 DTMF end passthrough '#' on SIP/1000-08207320 -- User ended message by pressing # -- <SIP/1000-08207320> Playing 'auth-thankyou.ulaw' (language 'en') -- Recording was 0 seconds long but needs to be at least 3 - abandoning -- Executing [s-NOANSWER@macro-stdexten:2] Goto("SIP/1000-08207320", "default,s,1") in new stack -- Goto (default,s,1) == Channel 'SIP/1000-08207320' jumping out of macro 'stdexten' -- Executing [s@default:1] Verbose("SIP/1000-08207320", "1|Unrouted call handler") in new stack 1|Unrouted call handler -- Executing [s@default:2] Answer("SIP/1000-08207320", "") in new stack -- Executing [s@default:3] Wait("SIP/1000-08207320", "1") in new stack -- Executing [s@default:4] Playback("SIP/1000-08207320", "tt-weasels") in new stack -- <SIP/1000-08207320> Playing 'tt-weasels.ulaw' (language 'en') -- Executing [s@default:5] Hangup("SIP/1000-08207320", "") in new stack == Spawn extension (default, s, 5) exited non-zero on 'SIP/1000-08207320'
В случае, если вызываемый абонент ответил:
*CLI> == Using SIP RTP CoS mark 5 -- Executing [1000@phones:1] Macro("SIP/1000-08207320", "stdexten,1000,SIP/1000") in new stack -- Executing [s@macro-stdexten:1] NoOp("SIP/1000-08207320", "stdexten macro being executed") in new stack -- Executing [s@macro-stdexten:2] Set("SIP/1000-08207320", "CALLFILENAME=/tmp/1000-1000-1236250481") in new stack -- Executing [s@macro-stdexten:3] Monitor("SIP/1000-08207320", "wav,/tmp/1000-1000-1236250481.wav,b") in new stack -- Executing [s@macro-stdexten:4] Dial("SIP/1000-08207320", "SIP/1000,10,rt") in new stack == Using SIP RTP CoS mark 5 -- Called 1000 -- SIP/1000-0820d108 is ringing -- SIP/1000-0820d108 answered SIP/1000-08207320 -- Music class default requested but no musiconhold loaded. == Spawn extension (macro-stdexten, s, 4) exited non-zero on 'SIP/1000-08207320' in macro 'stdexten' == Spawn extension (phones, 1000, 1) exited non-zero on 'SIP/1000-08207320'
Толкование вышеприведенного выходит далеко за рамки данной Инструкции и требует глубоких знаний сути рассматриваемого предмета.
Примечание: когда имеется установленное соединение по протоколу SIP, то имя канала будет иметь такой формат:
SIP/peer-id
Поле peer - идентифицирует клиента, а id - это случайный идентификатор, используемый для уникальной идентификации канала, потому что с одним SIP клиентом может быть установлено несколько сеансов связи.
Например:
SIP/ipphone-45ed721c - SIP вызов, поступивший от клиента "ipphone"
SIP/192.168.1.8-01fb34d6 - SIP сеанс с IP адреса: 192.168.1.8
Примечание: Останов asterisk осуществляется командой stop now.
*CLI> stop now Beginning asterisk shutdown.... Executing last minute cleanups == Destroying musiconhold processes Asterisk cleanly ending (0).
Подробности различных аспектов установки следует смотреть в оригинальной документации на программный продукт (http://www.asterisk.org/).
[1] | (1, 2, 3, 4) Меггелен Д., Мадсен Л., Смит Д., Asterisk: будущее телефонии. Издательство: Символ-Плюс. Дата выхода: ноябрь 2008 ISBN 5-93286-128-2 ISBN 978-5-93286-128-8 тираж 2000 экз. Оригинал: "Asterisk: The Future of Telephony, Second Edition" ISBN 0-596-51048-9 язык: английский год издания: 2007 |
файл sip.conf
[general] context=default ; callerid=No CallID ; <1000> АРМ управления ЦОИ (yellow_ellipse) ; ; <1003> АРМ комплексирования ; <1004> АРМ управления МК ; ; <1001> АРМ управления ПМВО (yellow_ellipse) ; <1005> АРМ обработки информации от РЛС с координатным выходом ; <1006> АРМ контроля сопровождения трасс ; <1007> АРМ группирования и отбора для выдачи потребителям ; <1008> АРМ диспетчерского контроля ; ; <1009> АРМ тренажа ; <1010> АРМ документирования ; <1011> АРМ системного администратора ; <1012> АРМ администратора документооборота ; ; <1002> АРМ управления ПМННО (yellow_ellipse) ; <1013> АРМ обработки информации от РЛС с координатным выходом ; <1014> АРМ контроля сопровождения трасс ; <1015> АРМ группирования и отбора для выдачи потребителям ; <1016> АРМ диспетчерского контроля ; <1017> АРМ ДЗЗ [sets](!) type=friend context=phones host=dynamic canreinvite=no ; заставляет весь голосовой RTP трафик проходить через Asterisk [241](sets) ; Linksys IP-phone SPA922 callerid=LinkSys mailbox=241 [1000](sets) ; User 1000: АРМ управления ЦОИ callerid=User 0 mailbox=1000 [1001](sets) ; User 1001: АРМ АРМ управления ПМВО callerid=User 1 mailbox=1001 [1002](sets) ; User 1002: АРМ управления ПМННО. callerid=User 2 mailbox=1002 [1003](sets) ; User 1003: АРМ комплексирования callerid=User 3 mailbox=1003 [1004](sets) ; User 1004: АРМ управления МК callerid=User 4 mailbox=1004 [1005](sets) ; User 1005: АРМ обработки информации от РЛС с координатным выходом callerid=User 5 mailbox=1005 [1006](sets) ; User 1006: АРМ контроля сопровождения трасс callerid=User 6 mailbox=1006 [1007](sets) ; User 1007: АРМ группирования и отбора для выдачи потребителям callerid=User 7 mailbox=1007 [1008](sets) ; User 1008: АРМ диспетчерского контроля callerid=User 8 mailbox=1008 [1009](sets) ; User 1009: АРМ тренажа callerid=User 9 mailbox=1009 [1010](sets) ; User 1010: АРМ документирования callerid=User 10 mailbox=1010 [1011](sets) ; User 1011: АРМ системного администратора callerid=User 11 mailbox=1011 [1012](sets) ; User 1012: АРМ администратора документооборота callerid=User 12 mailbox=1012 [1013](sets) ; User 1013: АРМ обработки информации от РЛС с координатным выходом callerid=User 13 mailbox=1013 [1014](sets) ; User 1014: АРМ контроля сопровождения трасс callerid=User 14 mailbox=1014 [1015](sets) ; User 1015: АРМ группирования и отбора для выдачи потребителям callerid=User 15 mailbox=1015 [1016](sets) ; User 1016: АРМ диспетчерского контроля callerid=User 16 mailbox=1016 [1017](sets) ; User 1017: АРМ ДЗЗ callerid=User 17 mailbox=1017
файл extensions.conf
[general] ; ; If static is set to no, or omitted, then the pbx_config will rewrite ; this file when extensions are modified. Remember that all comments ; made in the file will be lost when that happens.. ; ; XXX Not yet implemented XXX ; static=yes ; ; ; if stati=yes and writeprotect=no, you can save dialplan by ; CLI command 'save dialplan' too ; writeprotect=yes autofallthrough=yes [globals] ; These variables are to avoid the irritating problem ; with inability to use regexp's on strings that have ; not been defined. ; CALLFILENAME=foo FOO=foo [macro-stdexten] exten => s,1,noop(stdexten macro being executed) exten => s,n,Set(CALLFILENAME=/tmp/${CALLERID(num)}-${ARG1}-${EPOCH}) ; e.g. "/tmp/241-1000-1235991831" exten => s,n,Monitor(wav,${CALLFILENAME}.wav,b) ; If flags contains the letter m, then when recording ; finishes, Asterisk will execute a unix program to combine ; the two sound files into a single sound file. ; By default, Asterisk will execute soxmix and then delete ; the original two sound files. Also b - Don't begin ; recording unless a call is bridged to another channel. exten => s,n,Dial(${ARG2},10,rt) ; Ring 10 seconds max exten => s,n,Goto(s-${DIALSTATUS},1) ; Jump based on status ; (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER) exten => s-NOANSWER,1,Voicemail(${ARG1},u) ; If unavailable, send to voicemail w/ unavail announce exten => s-NOANSWER,2,Goto(default,s,1) ; If they press #, return to start exten => s-BUSY,1,Voicemail(${ARG1},b) ; If busy, send to voicemail w/ busy announce exten => s-BUSY,2,Goto(default,s,1) ; If they press #, return to start exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer exten => a,1,VoicemailMain(${ARG1}) ; If they press *, send the user into VoicemailMain [default] exten => s,1,Verbose(1|Unrouted call handler) exten => s,n,Answer() exten => s,n,Wait(1) exten => s,n,Playback(tt-weasels) exten => s,n,Hangup() [incoming_calls] exten => _X.,1.NoOp(incoming calls context) exten => _X.,n,Dial(SIP/1000) [outgoing_calls] exten => _X.,1,NoOp() exten => _X.,n,Dial(SIP/my_service_provider/${EXTEN}) [internal] exten => 241,1, Verbose(1|Extension 241) exten => 241,n, Dial(SIP/241, 30) exten => s,n,Hangup() exten => 1000,1, Macro(stdexten,1000,SIP/1000) exten => user0, 1, Goto(1000|1) exten => 1001,1, Macro(stdexten,1001,SIP/1001) exten => user1, 1, Goto(1001|1) exten => 1002,1, Macro(stdexten,1002,SIP/1002) exten => user2, 1, Goto(1002|1) exten => 1003,1, Macro(stdexten,1003,SIP/1003) exten => user3, 1, Goto(1003|1) exten => 1004,1, Macro(stdexten,1004,SIP/1004) exten => user4, 1, Goto(1004|1) exten => 1005,1, Macro(stdexten,1005,SIP/1005) exten => user5, 1, Goto(1005|1) exten => 1006,1, Macro(stdexten,1006,SIP/1006) exten => user6, 1, Goto(1006|1) exten => 1007,1, Macro(stdexten,1007,SIP/1007) exten => user7, 1, Goto(1007|1) exten => 1008,1, Macro(stdexten,1008,SIP/1008) exten => user8, 1, Goto(1008|1) exten => 1009,1, Macro(stdexten,1009,SIP/1009) exten => user9, 1, Goto(1009|1) exten => 1010,1, Macro(stdexten,1010,SIP/1010) exten => user10, 1, Goto(1010|1) exten => 1011,1, Macro(stdexten,1011,SIP/1011) exten => user11, 1, Goto(1011|1) exten => 1012,1, Macro(stdexten,1012,SIP/1012) exten => user12, 1, Goto(1012|1) exten => 1013,1, Macro(stdexten,1013,SIP/1013) exten => user13, 1, Goto(1013|1) exten => 1014,1, Macro(stdexten,1014,SIP/1014) exten => user14, 1, Goto(1014|1) exten => 1015,1, Macro(stdexten,1015,SIP/1015) exten => user15, 1, Goto(1015|1) exten => 1016,1, Macro(stdexten,1016,SIP/1016) exten => user16, Goto(1016|1) exten => 1017,1, Macro(stdexten,1017,SIP/1017) exten => user17, 1, Goto(1017|1) exten => 500,1,Verbose(1|Echo test application) exten => 500,n,Echo() exten => 500,n,Hangup() [confs] exten => 600,1,Answer() exten => 600,2,MeetMe(600,DpM,54321) ; 'D'- dynamically add conference, prompting for a PIN (54321) ; 'p'- allow user to exit the conference by pressing '#' ; 'M'- enable music on hold when the conference has a single caller [phones] ; Контекст phones позволяет вызвать всех АРМ-абонентов include => internal include => confs include => outgoing_calls
файл voicemail.conf
[general] format=wav49|gsm|wav serveremail=asterisk attach=yes maxsecs=180 minsecs=3 skipms=3000 maxsilence=10 silencethreshold=128 maxlogins=3 emaildateformat=%A, %B %d, %Y at %r [default] 1234 => 4242,Example Mailbox,root@localhost 241 => 241,LinkSys,rtbr@localhost 1000 => 1000,ARM 0,rtbr@localhost 1001 => 1001,ARM 1,rtbr@localhost 1002 => 1002,ARM 2,rtbr@localhost 1003 => 1003,ARM 3,rtbr@localhost 1004 => 1004,ARM 4,rtbr@localhost 1005 => 1005,ARM 5,rtbr@localhost 1006 => 1006,ARM 6,rtbr@localhost 1007 => 1007,ARM 7,rtbr@localhost 1008 => 1008,ARM 8,rtbr@localhost 1009 => 1009,ARM 9,rtbr@localhost 1010 => 1010,ARM 10,rtbr@localhost 1011 => 1011,ARM 11,rtbr@localhost 1012 => 1012,ARM 12,rtbr@localhost 1013 => 1013,ARM 13,rtbr@localhost 1014 => 1014,ARM 14,rtbr@localhost 1015 => 1015,ARM 15,rtbr@localhost 1016 => 1016,ARM 16,rtbr@localhost 1017 => 1017,ARM 17,rtbr@localhost