понедельник, 31 января 2011 г.

Skype и Asterisk ( SIP транк)

Asterisk (PBX)Image via Wikipedi

SipToSis

- это программное обеспечение которое позволяет совершать и принимать звонки Skype на SIP адаптер или SIP атс (например Asterisk).

Требования к системе для Skype Gateway

Пример настройки Skype to Sip соединения для Windows и Asterisk

Есть комп под Windows с установленным Skype и комп с установленным Asterisk.

Настройки Asterisk

sip.conf
[skypetosip]
username=skypetosip
type=friend
context=your_context
secret=mypassword
host=IP адрес машины где установлен Skype (SipToSis)
dtmfmode=auto
port=5070
qualify=yes
disallow=all
allow=alaw
allow=ulaw
Настройте план набора в соответствии с вашими требованиями.
Например звонок на Эхо тест Скайп:
extensions.conf
[your_context]
exten => 123,1,Dial(SIP/skypetosip/echo123)

Настройки Skype SIP


  • Установите Skype и зарегистрируйте аккаунт.

  • Установите java 1.5 или выше скачать java

  • Скачайте SiptoSIS и распакуйте архив в папку siptosis в удобное для Вас место.

  • Запустите файл SIpToSis_win.bat

  • Разрешите доступ java.exe в клиенте Skype: Настройки > Дополнительно > Контроль доступа других программ к Skype.
Если все в порядке Вы увидите примерно следующее:
2010-02-22 15:09:09,972 Loading Skype PSTN Call History
2010-02-22 15:09:09,972 1 possible calls to import.
2010-02-22 15:09:10,002 0 PSTN calls imported
2010-02-22 15:09:10,022 PSTN counters reset at: 03:00:00 MSK
2010-02-22 15:09:10,022 Qualified PSTN calls today: 0 Time: 0 minutes
2010-02-22 15:09:10,042 AcctBalance: 1,00 FREECALL
Добавьте ярлык SipToSis_win.bat в автозагрузку.
Отредактируйте файлы:
Файл siptosis.cfg главные настройки
via_addr=SipToSis IP Address
skype_audioportbase=64432 \\Ваш порт в настройках Skype
host_port=5070
contact_url=sip:skyptosip@SipToSis_Ip_Address:5070
from_urlskypetosip» <sip:skypetosip@asterisk_Ip_Address:5070>
username=skypetosip
realm=asterisk
passwd=mypassword
expires=3600
do_register=yes
minregrenewtime=120
regfailretrytime=15
Файл SkypeToSipAuth.props для настройки приема входящих звонков со Skype на Asterisk
*,sip:Asterisk_sip_peer@Asterisk_IP_address:5060
#например
*,sip:103@192.168.1.11:5060
Могут быть интересны правила набора в файлах: SipOutDialingRules.props и SkypeOutDialingRules.props
Asterisk (PBX)Image via WikipediaВ предыдущей статье была рассмотрена настройка сервера IP-телефонии. При минимальных настройках можно совершать IP-звонки внутри организации. Достаточно просто завести аккаунты. Но что делать, если нужно позвонить на городской телефон. Для осуществления звонков по аналоговым линиям, на серваке лолжно стоять соответсвующее оборудование. Если нет железок - можно воспользоваться услугами sipnet.ru. В данной статье я постараюсь описать что и как надо настраивать для осуществления звонков на обычные телефоны. Итак, приступим.
Для начала идём на сайт sipnet.ru, регистрируем себе аккаунт. Нам выдают ID, пароль мы придумываем свой.
Теперь добавим аккаунт на нашем Asterisk серваке. Идём а админку FreePBX: Setup - Extensions. Жмём "Add Extension" в правом верхнем углу.
Device - Generic SIP Device. Жмём Submit. Откроется окно с настройками нового аккаунта, в котором можно указать различные парамется, как то: Наличие голосового майлбокса, необходимость записи и пр. В принципе, всё заполнять необязательно достаточно User Extension и Display Name. В поле Secret можно при желании вколотить пароль.
Жмём Submit внизу страницы, соглашаемся с FreePBX, что пароля не будет. Появится новый аккаунт 1001. При желании можно отредактировать настройки аккаунта 1001 просто кликнув по нему. Сейчас просто нажмём на оранжевую кнопку "Apply Configuration changes", чтобы все изменения легли в конфиги и сервак перечитал новые настройки. Вылезет оранжевая табличка с предложение рестартануть Asterisk по окончании внесения изменений. Соглашаемся, ждём, пока анимированная жаба наестся мошкары :)
Теперь идём в Setup - General Settings. Ищем параметр Allow Anonymous Inbound SIP Calls?. По умолчанию стоит No. Поставим Yes. Это необходимо, чтобы принимать ВХОДЯЩИЕ звонки, если таковые пойдут с sipnet.ru.
Жмём Submit внизу страницы, жмём на оранжевую кнопку "Apply Configuration changes".
Настала очередь создать транк на sipnet.ru Идём Setup - Trunks.
Жмём "Add SIP Trunk". В примере будут показаны логин sipnet.ru - 1234567, пароль - mypassword
Trunk Description
sipnet.ru
1234567
Dial Rules:
.
PEER Details:
host=sipnet.ru
fromdomain=sipnet.ru
fromuser=1234567
username=1234567
secret=mypassword
dtmfmode=rfc2833
type=peer
conext=contex-internal
disallow=all
nat=yes
allow=g723&g723.1&gsm&ulaw&alaw
insecure=very
USER Context:
1234567
USER Details:
secret=mysecret
type=user
conext=contex-internal
insecure=very
Register String:
1234567:mysecret@sipnet.ru/1234567
Должно получиться что-то типа такого:
Жмём Submit внизу страницы, жмём на оранжевую кнопку "Apply Configuration changes". Всё, транк создали. Осталось настроить входящие и маршруты. Для начала настроим исходящие звонки. Для этого идём Setup - Outbound Routes. В правом верхнем углу жмёмё "Add Route".
Route Name - Указываете название направления (sipnet)
Dial Patterns - шаблон номера, в соответсвии с которым будет использоваться имеено это направление. В примере я пустил все звонки через сипнет. Можно, к примеру указать 8495XXXXXXX - в этом случае через данное направление буду осуществляться звонки только в Москву.
Trunk Sequence - здесь указываете, через какой именно транк будут осуществляться звонки. В нашем случае это sipnet
Этих настроек зватит для осуществления звонков через транк sipnet. При желании можете побаловаться с другими настройками. Жмём "Submit" внизу страницы, жмём на оранжевую кнопку "Apply Configuration changes", ждём. После применения настроек можете настроить на локальном компе программный IP-телефон и попробовать позвонить. Очень рекомендую во время звонка зацепиться на серваке к астериску и посмотреть, что происходит. Для примера позвонил на свой домашний
 
Как видим, звонок пошёл на sipnet, а уже оттуда пришёл ко мне домой. Звонки во внешку работают. В заключении покажу как заворачивать входящие звонки с того же сипнета.
Идём "Setup" - "Incoming Route". Жмём в правом верхнем углу "Add Incoming Route"
Description - описание входящего маршрута.
DID Number - ID аккаунта на sipnet
В разделе "Set destination" указываем, куда должен прийти входящий звонок.
Жмём Submit внизу страницы, жмём на оранжевую кнопку "Apply Configuration changes", ждём, пока применятся настройки. Теперь все входящие звонки с sipnet будут приходить на пользователя 0001. Как этим пользоваться:

1 Звонки со скайпа.

Можно звонить со скайпа на sipnet аккаунт. Геморно, но можно.
Для вызова контактов SIPNET из сети Skype внесите имя skype.sipnet.ru в список контактов Skype.
Чтобы позвонить абоненту SIPNET выберите из списка контактов Skype имя skype.sipnet.ru и нажмите клавишу «Позвонить» (Call). После голосового приветствия нажмите на клавишу «Добавь номер телефона» и введите* цифровой SIP ID вызываемого абонента.
* – Версия Skype 3.x позволяет набирать цифры с клавиатуры сразу после установки соединения.
В версии Skype 4.x после установки соединения следует дополнительно вызвать номеронабиратель. Для этого нажмите справа от регулятора громкости на клавишу (треугольник) и в выпадающем меню нажмите раздел «Набор» и введите цифровой SIP ID вызываемого абонента. Иллюстрация набора в версии Skype 4.x представлена ниже.

2 Звонки со стационарных телефонов

Чтобы позвонить абоненту SIPNET, необходимо позвонить на телефон доступа 8–800–333–1401, а затем, в ответ на приглашение, ввести тональным набором цифровой SIP ID вызываемого абонента.

3 Звонки из офиса Skype-абонентам

Делается это следующим образом:
Для вызова контакта Skype из сети SIPNET введите адрес в формате user@skype.sipnet.ru (или user@skype.com)
Все звонки sipnet <--> skype бесплатны.
PS: Вот вроде и всё. Шибко ногами не пинайте - я не гуру астериска, но к конструктивной критике готов прислушаться.

Интеграция 1С и Asterisk

1C и Asterisk: формула успешного бизнеса

1C - самая популярная платформа для автоматизации бизнеса

Asterisk - самая популярная телефонная платформа

Как Вы думаете, что произойдет, если их объединить?

Получится продукт "Панель телефонии 1С"

Тот самый, который перенесет все возможности телефонии прямо в 1С:Предприятие Вашей конфигурации!

Тот самый, который на 20% уменьшит время обработки каждого звонка и позволит обрабатывать все звонки прямо из 1С!

Смотрите, как это происходит:

1С и Asterisk - это:

vkontakte.ru/board22091206
- Отображение контактов и номера звонящего в 1С
- Автоматическое открытие карточки при звонке
- Звонки из 1С
- Перевод, удержание вызов из 1С
- Отображения очередей ожидания
- Привязка клиентов по номеру телефона на опред. менеджера
- Прослушивание записей разговора из 1С
- Управление статусами операторов

1С и Asterisk увеличит число обработанных звонков

По статистике интеграция 1С с телефонией Asterisk сэкономит
- до 15 секунд при исходящем звонке,
- до 35 секунд на обработке входящего звонка
- до 2-х минут при переключении внутри компании!

Оператор, менеджер или сотрудник сервисной службы

Каждому из них связка 1С и Asterisk выведет первичную информацию о контакте на экране компьютера!
А это значит, что не надо тратить время на идентификацию клиента, сбор информации и уточнения различных данных!

Для кого?

Для центров приема и обработки заказов
Для компаний с большим потоков входящих звонков
Для компаний, которые за эффективное взаимодействие с клиентом

Только в январе!

Супер АТС Asterisk со связкой с 1С по СУПЕР цене!
Более 100 полезных функций, интеграция с 1С и год технической поддержке! И все это за 59 900 рублей!
Постройте эффективный бизнес вместе с Asterisk уже сегодня!

Скачать презентацию 1С и Asterisk в pdf

1С и Asterisk (512 Kb, PDF)

Установка Asterisk и FOP (Flash operator panel)

Скрипт установки Asterisk 1.4 и FOP2 – Flash Operator Panel 2 (с активной лицензией)

Установка Asterisk + Zaptel + Asterisk GUI
Скрипт установки Asterisk 1.4 с Zaptel и признанным веб-интерфейсом AsteriskGUI написан с целью максимально упростить установку стабильной системы Asterisk со всеми необходимыми функциями и удобным веб-интерфейсом управления для тех, кто не имеет особых навыков установки данной сисемы.
Итак, скрипт протестирован на дистрибутиве CentOS 5. В состав комплекта установки входят следующие элементы:

1. Asterisk 1.4.19
2. Zaptel 1.4.12-1
3. Libpri 1.4.10
4. Asterisk GUI (Подкорректированная версия GUI, взятая из дистрибутива AsteriskNOW B-6)
5. Вебсервер Apache + PHP5
6. Сервер баз данных MySQL
7. Кеширующий DNS-Сервер Bind
8. Webmin
9. Библиотеки и приложения, необходимые для установки и стабильной работы системы
10. Помимо стандартного пакета драйверов Zaptel для плат Digium, Tormenta и т.п будут автоматически установлены драйвера для плат Rhino и Openvox (на мой взгляд платы Rhino и Openvox заслуживают не меньшего внимания чем платы Digium, так как отличаются помимо устойчивой работы ещё и честной ценой и гарантией на 5 лет).
11. Русская озвучка (Тамара).
12. FOP2 – Flash Operator Panel 2 (с активной лицензией)


Перед началом установки пару слов о железе. Для супер-надёжной работы системы с минимальными нагрузками (до 20 одновременных звонков) мы обычно используем компьютер на базе Intel Celeron 430, 1GB ОЗУ. Мы не даром остановились именно на 400-ой серии процессоров Celeron – они отличаются прекрасной производительностью и минимальной теплоотдачей, что не маловажно, если Вы расчитываете на длительную бесперебойную работу системы. За последние 3 года не отказал ни один из серверов, собранных нами на этой платформе. Можно увеличить объём оперативной памяти, особенно если расчитываете крутить другие сервисы на этой машине. Идеально будет со старта поставить 2GB оперативной памяти. Лично мы используем для недорогих решений материнские платы Intel G-33 экспресс-чипсет, но это лично наша привязанность и не стоит воспринимать её как руководство к действию. Что касается жёстких дисков, то у каждого свой подход… Мы стремимся всегда к максимальной надёжности и отказоустойчивости и поэтому используем 2 жёстких диска, объединённых в RAID-1 массив средствами Linux, то есть стандартных Linux Software Raid. Для более производительных решений стараемся использовать серверное оборудование Supermicro. Вот, вобщем-то, и всё, что касается железа – можно начинать установку.
Итак приступим…
1. Прежде всего качаем и записываем на DVD-болванку CentOS 5 – скачать дистрибутив можно по ссылке:
http://ftp.tlk-l.net/pub/mirrors/centos.org/5.4/isos/i386/CentOS-5.4-i386-bin-DVD.iso
2. Выполняем установку CentOS 5 на чистый винт, отключив при установке поддержку GNOME. Более чем рекоммендую не устанавливать НИКАКИХ дополнительных приложений, библиотек, сервисов и т.п. После установки при первом запуске отключаем файерволы.
3. Перезагружаем систему, заходим с правами root и выполняем несколько комманд:
yum -y update
ждём завершения обновлений и затем
reboot

4. После ребута сервера начинаем установку…
cd /usr/src
wget http://files.pss.org.ru/asterisk/files/asterisk/zaptelbased/asterisk-install.sh
chmod 777 asterisk-install.sh
./asterisk-install.sh

Установка пройдёт автоматически и займёт некоторое время. Длительность установки от 15 минут до 2 часов будет зависеть от скорости вашего интернета и ресурсов вашей системы. По окончании установки компьютер перезагрузится и Вы сможете наслаждаться работой стабильного дистрибутива.
Адрес веб-интерфейса http://адрес_сервера/asterisk.php
Логин: admin
Пароль: admin
Адрес системной утилиты Webmin https://адрес_сервера:10000
Логин: root
Пароль: рутовый пароль системы
Адрес FOP2 http://адрес_сервера/fop2
Настройки операторской панели находятся в папке /usr/local/fop2
Необходимо настроить файлы fop2.cfg и buttons.cfg (переименовать buttons.cfg.sample в buttons.cfg)
Желаем приятной работы!

четверг, 27 января 2011 г.

Факс сервер на Asterisk

Факс сервер на Asterisk

Это решение отличается от факса по умолчанию во FreePBX, использующего rxfax и txfax. Вместо этого, с помощью HylaFax, вы получите полнофункциональный факс-сервер корпоративного класса.
  • CentOS 5.X
  • Asterisk должен быть установлен.
  • IAXmodem требует SPANDSP
  • HylaFax имеет зависимости:
    • libtiff-3.5.5 или выше
    • ghostscript-5.50 или выше
    • ghostscript-fonts-5.50 или выше
    • libtiff-devel
    • zlib-devel
Скачать Hylafax
Вопросы при FaxSetup:
Should an entry be added for the FaxMaster to /etc/aliases )yes(? yes
Users to receive fax-related mail )root? ( root 
HylaFAX configuration parameters are:
1 Init script starts faxq: yes
2 Init script starts hfaxd yes
3 Start old protocol: no
4 Start paging protocol: no
Are these ok yes? yes
Скачать Iaxmodem
-Прочтите README из IAXmodem для установки.
-В завершении установки, скопируйте бинарник iaxmodem в /usr/local/sbin
Создайте файл /etc/iaxmodem/ttyIAX0
device /dev/ttyIAX0   
owner uucp:uucp
mode 660
port 4570  #уникальный порт для каждого устройства!
refresh 300
server 127.0.0.1
peername iaxmodem0  # это IAX экстеншн в Asterisk!
secret 12345  # пароль экстеншена
cidname Fax1
cidnumber 78123216111
codec alaw
Настройте IAX экстеншн в Asterisk.
iax.conf
[iaxmodem0]
type=friend
username=iaxmodem0
context=modembank
secret=12345
host=127.0.0.1
qualify=yes
disallow=all
allow=ulaw;
trunk=no
requirecalltoken=no
Теперь, когда, IAXmodem сконфигурирован, научим Hylafax обращаться к нему. В исходниках IAXmodem есть файл config.ttyIAX. Скопируйте его в /var/spool/hylafax/etc/ изменяя название для каждого модема - config.ttyIAX0, config.ttyIAX1 и т.д.
Чтобы Hylafax начал принимать факсы, надо запустить IAXmodem и ttyIAX устройство. Вручную это можно сделать командами:
/usr/local/sbin/iaxmodem ttyIAX0

faxgetty /dev/ttyIAX0
В случае если появиться сообщение об отсутствии libiax.so.0 и libspandsp.so.1 :
ln /usr/local/lib/libiax.so.0.0.0  /lib/libiax.so.0
 ln /usr/local/lib/libspandsp.so.1.0.0  /lib/libspandsp.so.1
Если все работает, напишите в /etc/inittab
iax1:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX0
iax2:2345:respawn:/usr/local/sbin/iaxmodem ttyIAX1
mo1:2345:respawn:/usr/local/sbin/faxgetty ttyIAX0
mo2:2345:respawn:/usr/local/sbin/faxgetty ttyIAX1
  • Первые две строчки запускают два IAXmodem-а.
  • Последние две - позволяют получать факсы через эти модемы.
Командой /sbin/init q перезапустите inittab.
Теперь когда все работает, настройте маршрутизацию DID в Asterisk.
exten => 78123216111,1,Dial(IAX2/iaxmodem0/${EXTEN},10,r)
где ${EXTEN} переменная $CALLID4, получаемая Hylafax в /var/spool/hylafax/etc/FaxDispatch:
SENDTO=root;
FILETYPE=pdf;

case "$CALLID4" in
78123216111)
SENDTO="smirnov@neotek.ru"
;;
esac
или привяжемся к девайсу:
## and/or by device
SENDTO=root;
FILETYPE=pdf;

case "$DEVICE" in
  ttyIAX0) SENDTO=smirnov@neotek.ru;;
esac

распечатаем принятый факс на принтере
case "$DEVICE" in
        ttyIAX0)
                SENDTO=smirnov@neotek.ru   
                PRINTER=HP1200;;
esac
Добавьте в конец файла /var/spool/hylafax/bin/faxrcvd
# If $PRINTER not empty, then print $FILE with $PRINTER
        if [ -n "$PRINTER" ]; then
            $FAX2PS $FILE | lpr -P$PRINTER
        fi

Отправка факсов

Тестовая отправка факса командой- sendfax -n -d <faxnumber> <file.txt>:
# sendfax -n -d 8123216111 /etc/issue.net
We should see this in the CLI:

 -- Accepting AUTHENTICATED call from 127.0.0.1:
       > requested format = alaw,
       > requested prefs = (),
       > actual format = alaw,
       > host prefs = (alaw),
       > priority = mine
    -- Executing Answer("IAX2/iaxmodem0", "") in new stack
    -- Executing Dial("IAX2/iaxmodem0", "SIP/123456/8123216111") in new
 stack
    -- Called 123456/8123216111
    -- SIP/123456-0818f630 is making progress passing it to IAX2/iaxmode
m-3
    -- SIP/123456-0818f630 answered IAX2/iaxmodem0
    -- parse_srv: SRV mapped to host my-voip-provider.com, port 5060
  == Spawn extension (fax-out, 8123216111, 2) exited non-zero on 'IAX2/i
axmodem0'
    -- Executing Hangup("IAX2/iaxmodem0", "") in new stack
  == Spawn extension (fax-out, h, 1) exited non-zero on 'IAX2/iaxmodem0
'
    -- Hungup 'IAX2/iaxmodem0'
Используйте команду faxstat -s для проверки:
# faxstat -s
HylaFAX scheduler on localhost.localdomain: Running
Modem ttyIAX (177): Running and idle
Modem ttyIAX1 (166): Running and idle

JID  Pri S  Owner Number       Pages Dials     TTS Status
35   127 B   root 177           0:0   0:12         Blocked by concurrent cal
с помощью Winprint Hylafax.
Скачайте Winprint Hylafax
Установите Winprint Hylafax на компьютер.
Установите новый принтер:

При выборе порта для принтера - создать новый порт -Winprint Hylafax

Имя порта: по дефолту
Принтер: Apple Laser Writer # рекомендуют
Имя принтера: «Winprint Hylafax»
В свойствах установленного принтера, выбираем вкладку «Порты»

Конфигурируем порт

Чтобы Hylafax разрешил соединение, добавьте IP адрес машины на которой установлен Winprint Hylafax в файл: /var/spool/hylafax/etc/hosts.hfaxd. Поле password можно оставить пустым, Поле user должно быть заполнено.
При выборе печати документа через Apple Laser Write (или что там у Вас будет), появиться диалоговое окно:

введите номер телефона и ОК.

среда, 19 января 2011 г.

Вышел новый Asterisk с поддержкой Google Talk и Google Voice

Вышел новый Asterisk с поддержкой Google Talk и Google Voice

 

Компания Digium выпустила новую версию популярного open-source VoIP сервера Asterisk 1.8. Новая версия содержит множество улучшений, в т.ч.: поддержку Google Talk и Google Voice (теперь можно совершать и принимать звонки через эти сервисы), интеграцию с календарем Microsoft Exchange и iCal, возможность записи разговоров в высоком разрешении, новую систему логирования звонков, контроль статуса VoIP-устройств в кластере Asterisk-серверов с использованием протоколов Jabber/XMPP и PubSub, поддержку протокола IPv6 в SIP каналах. На сегодняшний день число пользователей Asterisk достигло 2 млн.

IP PBX с открытым кодом уже лидируют на американском рынке


Согласно исследованию популярного западного блога No Jitter, посвященного VoIP, общий объем рынка PBX в США составил 15,88 миллионов линий, при этом открытым АТС принадлежит доля, равная 18% этого рынка. Это больше, чем у  любого из крупных производителей офисных АТС: Nortel, Cisco, Avaya. При этом, доля открытых PBX постоянно растет. Основная причина успеха открытых IP АТС, в том, что эти система не уступают по качеству лучшим традиционным системам связи и при этом, они намного дешевле (как правило, на 40% и более). Ведущими поставщиками open-source IP АТС являются Digium, Polycom, Aastra, Sangoma. Asterisk — наиболее распространенная система открытой АТС, доля которой на рынке Open Source составляет более 85%. Роли конкурентов компании на рынке, таких как CallWeaver, FreeSWITCH, sipX/sipXecs и YATE постоянно варьируются.

Производительность Asterisk систем

Типичные вопросы, которые можно увидеть в пользовательском списке рассылки asterisk-users, примерно такие:

Насколько быстрым и мощным должно быть аппаратное обеспечение моего сервера, чтобы он мог удовлетворять моим потребностям?
Сколько одновременных вызовов может обрабатывать сервер Asterisk?

К сожалению, не существует простого и однозначного ответа на этот вопрос. Вам нужно будет ответить для себя на некоторые вопросы, часть которых приведена ниже, чтобы хоть как-то стать ближе к ответу или более четко сформулировать свои требования в форумах или в пользовательских списках рассылок:

  1. Какие типы телефонов? Вы планируете использовать (обычные аналоговые, SIP, Skinny, H.323, MGCP)?
  2. Сколько телефонов Вы планируете подключить?
  3. Сколько линий во внешний мир у Вас имеется, и какая для них используется технология (аналоговая линия, BRI, PRI, T1, VoIP)?
  4. Сколько у Вас, примерно, ожидается внутренних/внешних одновременных вызовов (например: 30%)? Обратитесь к таблицам для вычисления Эрланга (параметр интенсивности обработки требований в системах массового обслуживания) (смотри ссылки ниже), если у Вас есть сомнения по этому вопросу.
  5. Какие голосовые кодеки? будут у Вас использоваться, и будет ли у Вас необходимость в перекодировании из одного кодека в другой (транскодировании)? Tip: наберите команду: SHOW TRANSLATION в CLI консоли.
  6. Какие возможности и сервисы будет предоставлять ваша система (подавление эха, голосовая почта, конференции и очереди вызовов & call-центр, запись разговоров, факсы, голосовое меню, синтез и распознавание речи)?
  7. Насколько надежной/Asterisk at large? должна быть Ваша система?
  8. Сколько серверов с Asterisk вы планируете использовать для Вашей задачи?
  9. Что поддерживается Вашей IP сетью из возможностей (скорость, поддержка QoS, VLAN, Power-over-Ethernet)?
Следующими шагом можно сделать следующее:
  • a) Посмотреть секцию: рекомендации по аппаратному обеспечению?, и
  • b) после этого, если такое возможно, построить тестовую систему, которая сможет симулировать задачи, которые Вам требуются. Например, можно запустить тест загрузки с использованием .call фалов, которые генерируются неким скриптом.

Сколько вызовов сервер может обрабатывать одновременно?

Ниже приводиться коллекция отчетов из пользовательского списка рассылки "asterisk-users":

Замечание: Если у Вас возникнет желание что-то добавить в этот список, пожалуйста, используйте процент загрузки CPU и Памяти, а не параметр "load average". Это дает более конкретную информацию и имеет важное значение при сравнении разного аппаратного обеспечения и разных операционных систем. Записи отсортированы по мощности CPU.

  • Для старых и медленных CPU, смотри раздел: рекомендации по аппаратному обеспечению?.
  • Основанный на Gumstix SIP-to-IAX прокси сервер может маршрутизировать около 40 вызовов одновременно (транскодинг кодеков не используется, Gumstix 400XM, голосовая почта располагается на CF карте)
  • Pentium 133 MHz, 16 Mb ram: Обарбатывает до 3 одновременных SIP вызовов без ухудшения качества (насчет использования транскодинга информации нет).
  • Linksys NSLU2, известный как "slug" (NAS Device ценой $79): Обрабатывает около 4 SIP вызовов с использованием кодеков g711 или gsm (но не с g729), с его процессором: IXP400.
  • Pentium 1, 166mhz, 32Mb ram: Успешно справился с четырьмя SIP вызовами с кодеком g711.
  • Pentium II 233/64 RAM: 2xBRI (4 ISDN канала) плюс несколько SIP устройств.
  • Процессор SC1100 на платформе Net4801 смог нормально декодировать только два голосовых потока с использованием G.729a кодека. Это, в общем, подтверждает, что серверу Asterisk требуется около 30 MHz процессорной мощности на каждый активный голосовой канал. Тогда 266 MHz CPU на платформе Net4801, теоретически, поддерживает около восьми одновременных вызовов. Подразумевается, что для всех вызовов используется голосовой кодек - G.711. Soekris Net4801, несмотря на то, что недорогой, довольно надежная платформа, предоставляет адекватную процессорную мощность для поддержки шести екстеншенов и до четырех активных канала связи одновременно.
  • (Май 2005) На Soekris board: безукоризненно транслировалось из G.729 IAX2 в G.729 SIP (может быть был включен IAX транк). Замечание: трансляции кодеков не производилось. Имелось, как минимум, ~30 вызовов в этой конфигурации (использовался AstLinux)
  • Soekris 4801 - может спокойно поддерживать 20 - 25 SIP клиентов, если они все используют одинаковый кодек (использовался ulaw). Известна конфигурация, где работало около 20+ sip клиентов и T1 карточка для zap канала, при этом все работало прекрасно. Если у Вас присутствует транскодирование между голосовыми кодеками, тогда soekris - это не Ваш выбор, но для небольших систем это неплохой вариант.
  • При количестве участников в конференции MeetMe: в 28 персон на машине с CPU Pentium II, 300MHz, 128 MB, vmstat показывает 70% простоя процессора.
  • "У меня имелось в течении дня от 15, до, максимум, 30 участников конференции, все из которых использовали одну и туже конфигурацию meetme. Asterisk работал на старой 4U 500Mhz машине (двухпроцессорная система с одним установленным CPU). За некоторыми исключениями, в виде проблем с некоторыми программными sip телефонами, данная реализация оказалась довольно безпроблемной."
  • Интегрированная VIA с 800 MHz CPU: Максимальное число одновременных вызовов с транскодированием кодеков, для протокола speex: 4, для ilbc: 9; для g729: 11, для g726: 22, для lpc10: 24, для gsm: 25, для A-law: 83
  • Asterisk 1.2 beta - очень неплохо обрабатывал SIP соединения: Был запущен Asterisk на 1 GHz Лэптопе и легко справлялся с 250 одновременными вызовами с переназначением RTP потоков между оконечными устройствами напрямую (re-invited). Все это потребовало всего около 9% процессорной мощности. а с трансляцией кодеков в RTP потоке (ulaw-alaw, простенькая задача) - этот лэптоп грузился на 99% при работе примерно с 50 вызовами...
  • Celeron 1GHz с 2 GB RAM обрабатывал 72 DID, 24 соединения с обычной АТС, и выступал в роли FAX сервера. (Использовалась версия Asterisk1.0.9)
  • Dual P3 1.13ghz, с пятью каналами в публичную сет через PRI -> G729 канал связи, имел постоянную загрузку, равную 0.45
  • Dual 1.266 PIII с 2 GB RAM обрабатывал 75-85 одновременных SIP сессий (GSM кодек) + 3 IAX2 транка, в общей сложности - около 100 вызовов одновременно (использовался Asterisk 1.0.9). Так же эта машина использовалась в качестве файлового сервера (с авторизацией по LDAP в Win2K ADS домене).
  • Intel P4 1.7G 512mg RAM, 20 gig HDD: с двумя картами T400P использовался, как точка входа телефонных соединений из вне и обрабатывал 60 аналоговых телефонов; по 24'м каналам PRI
  • (Апрель 2003) chan_h323: Появилась возможность работать в режиме сквозной передачи голосовой информации (codec pass-through) в Asterisk (в отличие от драйвера chan_oh323), но по прежнему не реализован "jitter" буфер. Мы сымитировали 125 одновременных запросов в случайных (15 секундных) интервалах, использование транзитной передачи голосового потока, на машине с 500mhz P4, дало результат, что эти запросы без осложнений удовлетворялись с задержкой не более 5 секунд. На той же машине было сымитировано 45 одновременных вызовов с использованием транскодирования GSM кодека, и снова без длинных задержек в процессе установки связи.
  • На сегодняшний день, мы добились потрясающего результата в 790 одновременно проигрываемых звуков. (протокол sip, любой кодек.) На PC ценой всего 350$. Тест прошел на машине: P-IV 2.4ghz с 512mb ram. Пока Вы не нагружаете CPU жадными до процессорного времени задачами, такими как транскодирование голосовых кодеков, Вы можете довести загрузку до 1% неактивности процессора без малейших сбоев в звуке, в данном тесте.
  • Celeron 2.4 GHz, 386 MB RAM, 1xT1 - использовался (только) для 10 телефонов
  • 2.6 GHz Pentium4 800MHz bus с HT технологией, 2 GB RAM (однако, 1 GB реально достаточно): 40 одновременных вызовов SIP-->ZAP (может и больше бы получилось): "Равномерно, в течении периода продолжительностью около 12 часов, а в течение дня общее количество вызовов достигает 5000. На данном сервере приблизительная загрузка (load average) прыгает от 0.00 до 6.25 в течение минуты"
  • Информация о производительности с использованием кодека g729, взятая с сайта Digium: Внутреннее тестирование с использованием dual Intel Xeon 1.8GHz CPU, позволяет совершать 60 одновременных вызовов. Dual Xeon с 2.8GHz CPU позволяет совершать 80 одновременных вызовов.
  • "Загрузка очень сильно зависит от того, что у Вас делается на сервере. Например, простая система с IVR/Zap и только одним T1 каналом может обрабатывать 10 одновременных вызовов в SIP&Zap конференции (как минимум, по моему опыту)."
  • P4-3Ghz/1Gb RAM: используется format_mp3 для музыки ожидания (MoH) на ОС FreeBSD 5.4 с CVS HEAD версией Asterisk (Июль 2005). Прекрасное качество декодирования mp3 файлов... до 70 процессов одновременно проигрываемой музыки ожидания (MoH) (8khz 16bit mono mp3), состояние нагрузки CPU - около 80% простоя.
  • (Август 05) Pentium 4 (без технологии HT) 3.0Ghz, 1 GB Ram. Обработал 46 SIP вызовов с кодеком G.711, при которых во все каналы произносились цифры, при помощи функции: SayDigits(1234567890). Приблизительно, загрузка (load average) составила: 0.43.
  • Мы проделали некоторые эксперименты по проверке производительности на машине с 3GHz HT CPU с 1GB RAM, с зеркалированными обычными IDE дисками. В машине были установлены карты: Digium quad-PRI, TDM40B, TDM22B и Sirrix quad-BRI. Этот сервер смог работать со 120 активными вызовами через 4 PRI канала. Сервер играл музыку ожидания (MusicOnHold) в 60 каналов, проигрывая некоторое приглашение в формате GSM в эти каналы. Использование процессора: "user" - около 25%, "system" - так же около 25%. (Мне кажется, что "system" часть нагрузки на процессор уменьшилась бы, если бы я убрал неиспользуемые карты). Я смог добавить до 5000 SIP регистраций и 5000 IAX2 регистраций - всего получилось около 100 попыток регистрации клиентов в секунду. Что добавило еще 40% пользовательской нагрузки на CPU, и он оказался полностью загружен. Качество аудиосигнала по-прежнему оставалось нормальным, хотя на PRI интерфейсе наблюдались небольшие прерывания. Загрузка (Load average) при этом прыгала между значениями 5 и 10. Объем трафика по ethernet интерфейсу, который генерировался регистрациями клиентов, составил: 550Kb/s исходящий и 400Kb/s входящий.
  • "Dual Xeon 3.06: 120 каналов (60 вызовов) по протоколу H.323, кодек G.729 - использовало 10% CPU, транскодирование кодеков не производилось"
  • "Находясь в поисках подходящей задачи для 'оценки производительности'. Мы провели некоторые обсуждения по этому поводу, но пока, практически, Вы не сможете обеспечить приемлемое качество звука при более чем 20-25 одновременных вызовов, когда в asterisk присутствует транскодирование голосовых кодеков и используется протокол H323." (замечание: может быть, это относиться только к драйверу oh323? Тест от Astertest для драйвера h323 показывает, что для кодеков, активно использующие CPU, например, g729, ilbc и speex, используемый протокол значения не имеет, следовательно, протоколы h323, sip и iax должны показать одинаковые результаты).
  • "Я где-то читал, что один человек испытал около 45 одновременных вызовов с использованием транскодирования кодеков. Возникает вопрос, если это все что может один сервер, зачем в этом случае брать карту 4 E1s Digium, когда она поддерживает 120 каналов, но сервер не может их обработать с транскодированием голосовых кодеков из VOIP в канал TDM?"
  • "У меня на практике получилось 100 каналов с кодеком G.729 на машине с dual 3.0ghz Xeon CPU. Цена вопроса: около $42 за канал (я купил SCSI подсистему с RAID, и включая $10 отчислений за лицензию на использование G.729 кодека.) (Не включая карту Digium 4 T1/E1) Ваша выгода может варьироваться в зависимости от производительности системы и цен. Цена решения на базе AS5300: около $110 за канал, и эта разница может использоваться при выборе оптимального по цене решения."
  • В своем тестировании я получил 200 одновременных вызовов на процессоре Xeon 2.4, используя SIPP, каждый вызов длился 10 секунд с периодичностью 20 входящих вызовов в секунду, использовался протокол SIP, а не Zap. У меня не было второго процессора, чтобы проверить надежду на то, чтобы получить, хотя бы не 400 вызовов для двухпроцессорной системы, но может быть хоть 350.
  • (Январь 2006) Сервер Dual Xeon 2.8 GHz Intel Chassis, 1GB RAM: Работал с +-35 IAX2 каналами, отправляя вызовы через 2 x PRI (E1) Digium Zap канала. Важно, что сервер записывал все вызовы и записывал все cdr записи в базу данных Mysql.
  • (Апрель 2005) Сервер Dell PowerEdge? dual 3.2 GHZ XEON (32 bit), 2GB ram: Был сконфигурирован с использованием механизма realtime для екстеншенов, sip и iax клиентов, с использованием локального сервера mysql, 80% всех вызовов - это IAX <-> SIP вызовы без транскодирования голосовых кодеков и без использования буфера "jitter", и 20% от общего количества, это IAX <-> IAX перенаправлении вызовов, опять же без трансляции кодеков. Сервер не имел zap каналов. Итак, когда у меня имелась нагрузка из 100 одновременных вызовов , что подразумевает 200 одновременных каналов для IAX и SIP вызовов (где 80% - это вызовы по каналу IAX в канал SIP/RTP), тогда сервер asterisk использовал примерно 30% - 35% процессорного времени, а работа сервера mysqld вносила около 1% в загрузку всего сервера.. Итак, максимальное число вызовов, которое у меня получилось - около 300 ..
  • Один очень важный момент, который нужно учитывать, когда Вы говорите о вызовах SIP->Zap в Asterisk, это пиковая нагрузка на процессор. Возьмем среднюю машину с четырьмя процессорами, которая может быть и способна обрабатывать 200 одновременных разговоров в связке Sip->Zap, но, в реальности, будут возникать 4x пиковые максимальные нагрузки, которые будут случайно появляться в процессе разговора по каналу Sip->Zap, и которые могут привести к сбою всей Вашей системы, если появятся.
  • Сервер Asterisk может обрабатывать максимально только 250 одновременных ZAP каналов. Это связано с ограничением в 255 каналов, которое заложенно в драйвере ZAP. Дополнение (Сентябрь 2005): это ограничение было убрано уже ОЧЕНЬ давно. Драйвер Zaptel содержит другой интерфейс для открытия файлов устройств в количестве - ~250 или более, существующих в директории /dev/zap.
  • Mark Spencer, 29-11-2004: Я перевел IAXTel на использование механизма "realtime", но он по прежнему очень грузит систему, видимо из-за больших задержек. На данный момент имеется 6000 зарегистрированных пользователей, около 1000 из них, обычно, одновременно зарегистрированы на сервере iaxtel.
  • (Май 2005) Я тестировал CVS-HEAD Версию. Я смог получить 5551+ sip "сеансов", без прохождения медиапотока через asterisk, без всяких проблем (тестирование производилось с участием только одного SIP пользователя). Загрузка (load average) имела значение: 2-3. Замечание по поводу конфигурации... На моем 3ghz P4 HT сервере я могу получить 629 SIP вызовов с кодеком ulaw и медиапотоком, идущим через Asterisk (проверено), тоже без проблем. Загрузка (load average) сервера колебалась вокруг значения 14, и звук оставался безупречным... Итак, если у Вас имеется сервер с двумя процессорами 3.4 ghz Xeon, то у Вас не должно возникнуть проблем с использованием DS3 в asterisk. (Это в случае, если значение для прерываний установлено 1000 в секунду, а не 28000 и когда для вызовов используется кодек ulaw) ... заметьте, что если не установите лимит ulimit -n 100000 или другой, предназначенной для этого командой, перед запуском сервера asterisk, то у Вас количество файловых дескрипторов (FD) хватит, примерно, на 151 возов.
  • (Май 2005) Реальный барьер расширяемости системы, который я вижу, связан с количеством зарегистрированных в системе пользователей... Как много их выдержит один сервер (как минимум для IAX протокола). Я видел сообщения, что Dual Xeon 3.2GHz не может обрабатывать больше, чем 1000 IAX клиентов. ... Я сумел получить примерно 2500 одновременно работающих в системе пользователей на одном сервере, внеся некоторые модификации в файл iax2.h (время истечения периода регистрации было изменено с 60 до 240 секунд) нормальные IAX клиенты будут работать с этой установкой... Кстати, не делайте это значение более большим, потому что многие шлюзы с NAT будут удалять свои динамические записи для NAT трансляции через 300 секунд, а некоторые даже через 30 секунд!
  • (Май 2005) Пока Вы еще не можете обрабатывать 10k пользователей в Asterisk, Я смог. Даже больше, это реальность. Некоторые из этих систем - это очень простенькие сервера для обработки media, в то же время некоторые из них так же обрабатывают регистрации пользователей. В то же время, я согласен, что Asterisk нуждается в дополнительных средствах, которые помогают обрабатывать регистрацию пользователей и расширяют его масштабируемость. На данный момент, причина, по которой я еще использую SER прокси - это скорость обработки регистраций и распределение нагрузки. Asterisk же предоставляет все, что мне необходимо для обработки вызовов.
  • (Апрель 2005) "Signate Telephony Server 5000", с системой ввода/вывода со скоростью 51 Gb/sec поддерживает более чем 5,000 сеансов вызовов по протоколу SIP на один модуль, используя 80% емкости гигабитной сети. До 8 модулей расширения могут использовать соединительную шину, имеющую скорость 6.4GB/sec на основе технологии SGI, что позволяет управлять системой способной поддерживать более 40,000 одновременных потоков вызовов.


Определение предельной загрузки

То, что действительно важно - это нагрузка на Вашу систему и типы каналов, которые у Вас используются. Каналы Zap более надежно работают при предельной загрузке, чем любые из VOIP каналов. Действия по управлению могут не работать на предельных нагрузках. Все VOIP каналы более подвержены проблеме потери качества на предельной нагрузке. При максимальной нагрузке, имеется ввиду значение load average, равное 5.00 и выше (10.00 на машине с двумя CPU) , влияют еще и другие факторы. Нагрузка на систему, создаваемая используемыми каналами связи, различается от сервера к серверу, в зависимости от используемого CPU/RAM/Motherboard и от других приложений, запущенных на этом же сервере.

Аппаратное обеспечение от Digium (Июль 2005)

Карты компании Digium теперь стали более интеллектуальными! Компания Digium гордо анонсировала второе поколение firmware для своих многоканальных карт TE-серии для PCI шины. Это firmware позволяет использовать некоторые новые возможности. Они позволяют картам обрабатывать больше задач средствами аппаратного обеспечения самих карт, тем самым, разгружая центральный процессор для выполнения других действий, при этом, увеличивая его производительность, и давая возможность обрабатывать больше каналов связи, проходящих через один PC или сервер.
... При этом на 67% увеличивается производительность, по сравнению с предыдущими проверками ...

Новая версия firmware меньше полагается на центральный процессор сервера для решения задач обработки сигналов в картах Digium, тем самым уменьшая нагрузку на CPU и увеличивая производительность в целом и позволяя обрабатывать больше количество одновременных вызовов. Например, сервер с двумя процессорами 3-GHz 800FSB Intel XEON с кэшом 1MB L2, и с установленной картой Digium 4-port T1/E1, теперь могут конвертировать 120 SIP каналов с голосовым кодеком G.729 в публичную телефонную сеть без модуля подавления эха от Digium, и 150 каналов с голосовым кодеком G.729 при использовании модулей подавления эха компании Digium.

Если у Вас имеется очень большой трафик.

Scott Stingel www.evtmedia.com пишет:
Мой крупный клиент имел конфигурацию из 15 серверов asterisk, которая могла обрабатывать до 1800 одновременных вызовов с использованием системы голосового меню (IVR), Поступающих с большой местной АТС DMS-100, через 60 E1 каналов. Обычно, вызовы были очень короткими (5 секунд).
  • Я предложил: Использовать 1 процессор (шасси) (например: 2.8Ghz P4) для каждых из 4 каналов E1 (например: одна карта TE405P), когда имеется большое число попыток установки соединения. Я попробовал использовать dual-Xeon, дабы посмотреть, сможет ли он нормально работать с двумя картами TE410P, вместо одной, в системе, где используется только голосовое меню - IVR, но множество вызовов стало отбрасываться при максимальной нагрузке. Таким образом, я определил, что в один сервер можно максимально поместить по одной карте TE410 или TE405. Если у Вас производиться ограниченное количество процессов транскодирования голосовых кодеков, и не имеется большого числа вызовов, то Вы можете получить более чем 120, используемых одновременно, каналов в системе, но подходите к этому вопросу осторожно! А так же, я произвел новое тестирование, с использованием нового firmware для карт Digium, смотри текст выше.
  • В максимальной степени используйте возможности плана набора (extensions.conf). AGI скрипты предоставляют широкие возможности, но ценой этого является уменьшение производительности, когда Вы используете скрипты с большим количеством строк. (Для дополнительной информации, смотри: designers' FAQ #2)
  • По поводу, какой процессор использовать, смотри страницы Wiki, посвященные этому вопросу. Я успешно использовал для этих целей процессоры P4 и Xeon на платформах с материнской платой от Tyan и Intel.

512 одновременных вызовов SIP--SIP с Цифровой записью разговоров.

Как использовать RAM диск для устранения дефицита ресурсов системы ввода/вывода, связанного с использованием цифровой записи вызовов с помощью функции Monitor.
Аппаратное обеспечение для сервера Asterisk: Quad Xeon MP CPU 3.16 GHz с 20 GB RAM.

Тестирование нагрузки - Zap каналы

Scott Stingel: Вы можете построить тестовую систему для Zap каналов в asterisk, с использованием .call файлов (смотри: sample.call). Вот, что было найдено:

(a) Я не думаю, что это управление очередью нормально работает, если существует ограничение на количество ресурсов, которые используются для совершения исходящих вызовов. Например, если Вы определите группу (например, "g9"), в которую входят две линии для совершения исходящих вызовов, все это будет работать прекрасно, если число одновременных исходящих вызовов никогда не будет превышать двух. Третий call-файл, в данном примере, будет прочитан сервером, но его обработка сразу же закончиться с ошибкой. Итак, я сделал механизм в моем Perl скрипте для гарантии того, что предыдущий вызов был полностью завершен - это было сначала не так то просто, т.к. я не знал точно, когда наступает этот момент, но обработка в perl скрипте этих событий делает данную задачу проще.

(b) Существует проблема, связанная с одновременным созданием файлов в директории для формирования исходящих вызовов. При более чем 12-15 исходящих вызовов одновременно, естественно, если есть достаточное число каналов для совершения исходящих вызовов. Asterisk будет считывать их, но не сможет обработать некоторые фалы. Это сценарий для тестирования производительности, и, наверно, не очень реалистичный, но кое-что он позволяет проверить. Это не очень критично было для меня, если я использовал более мощный процессор. Отметьте, что эта проблема возможно уже решена (смотри текст далее).

Jesse Janzer: Краткая заметка, Мы реализовали систему для пейджинга и одновременно размещали более чем 30 файлов в директории для исходящих вызовов (в процессе выполнения agi скрипта), для совершения вызовов, проблем замечено не было...

Возможность использования директории и помещения туда .call файлов для совершения исходящих вызовов работает нормально при небольших количествах вызовов, если Вы равномерно создаете файлы в этой директории.

Фишка: Вы можете управлять временем начала совершения исходящего вызова, установив значение параметра mtime в Вашем .call файле. Смотри пример простого скрипта по ссылке: http://www.fnords.org/~eric/asterisk.

Тестирование производительности карт Quad T1? - Digium против Sangoma


Тестирование нагрузки - IP каналы.

Juanjo: Не забудьте увеличить максимальное число файловых дескрипторов? и RTP портов.
Используется приложение SIPP?.

Тест 1:
Я достиг значения в 1500 одновременных SIP/GSM вызовов, на екстеншен, где используется приложение Echo, с периодичностью в 50 вызовов в секунду и продолжительностью в 10 секунд, при использовании машины с одним процессором Xeon 2.4Ghz. Так или иначе, но Я пытался создать более менее реальный сценарий, полагая, что команда Echo не сильно занимается обработкой звукового потока, а просто копирует его из входящего канала в исходящий.
В процессе тестирования Я мониторил сервер Asterisk используя аппарат Cisco 7960, прослушивая музыку ожидания (MusicOnHold), примерно при количестве одновременных вызовов 500-600 начали наблюдаться перерывы в проигрывании музыки ожидания.

Тест 2:
Я настроил клиента (UAC) на генерацию вызовов с частотой 10 вызовов в секунду и продолжительностью 10 секунд и соответствующих вызываемых абонентов (UAS), которые отвечали на эти вызовы. Команда, которая использовалась для генерации вызовов с использованием кодека GSM, была следующая:
sipp 192.168.65.100 -s 700 -sf uac.xml -d 10000 -r 10

Команда для приема вызовов на другом сервере была такая:
sipp -sf uas.xml

Я использовал свои файлы uac.xml и uas.xml для работы с кодеком GSM, Мониторя качество звука на моем телефоне: Cisco 7960, прослушивая музыку ожидания (MusicOnHold). На моем процессоре Xeon 2.4Ghz, все вызовы обрабатывались нормально, и не было ни каких проблем с качеством прослушиваемой музыки. Обратите внимание, что у меня использовались настройки: nat=yes и canreinvite=no для вызывающего и вызываемого клиента (UAC/UAS), в файле конфигурации sip.conf. Старые версии приложения SIPP не поддерживают авторизацию.
  • В конфигурации: 40 вызовов в секунду с продолжительностью в 10 секунд (что подразумевает 400 одновременных вызовов) все у меня работало прекрасно.
  • В конфигурации: 50 вызовов в секунду с продолжительностью в 10 секунд, вызовы не отбрасывались, но стала появляться повторная передачи некоторых SIP пакетов.
  • В конфигурации: 60 вызовов в секунду, некоторое число вызовов было отброшено, но забавно, что это никак не сказалось на качестве аудиопотока, который прослушивался через телефон Cisco 7960.
Однако: Я не видел никакого RTP трафика, который бы шел с SIPP в роли вызывающего клиента (UAC), это говорит, что Asterisk вообще не генерирует трафика, после того, как он синхронизируется с сеансом, по которому поступил вызов AFAIK. Таким образом, может быть эти тесты и не измеряют общую производительность Asterisk, а только возможности стека протокола SIP. Другое решение - это направление всех вызовов в екстеншен с приложеним MusicOnHold?, тогда весь трафик будет проходить через сервер Asterisk, что даст более взвешенный и полный результат.


Olle E Johansson сообщает свои результаты тестирования - свыше 10 000 одновременных вызовов!

В процессе замены большой устаревшей системы Nortel на несколько современных 1U-2U серверов было проведено множество тестов производительности новой системы, чтобы ответить на вопрос - как много вызовов обрабатывает один Asterisk сервер, в пересчёте на удельную себестоимость в евро?

Сначала обычным образом была достигнута производительность примерно в 2000 каналов при G.711 (64 Кбит * 2000 = 128 Мбит) на одном quad core процессоре и сетевой карте Intel Pro/1000 на сервере IBM. На этом этапе наблюдалась неустойчивая работа балансировщика IRQ, что приводило к пропусканию всего траффика только через одно ядро процессора. Этот тест проделывался несколько раз на нескольких системах с различными сетевыми интерфейсами, для того чтобы различными способами повысить производительность - с другими драйверами, другими картами, другим аппаратным обеспечением, но все признаки говорили о том, что проблема лежит в области обработки сетевого трафика RTP Астериск посредством CPU. Что также подтверждалось несколькими другими независимыми группами разработчиков.

И для меня стало неожиданным приятным сюрпризом в понедельник (24 августа 2009), когда мы проинсталлировали простую рабочую версию Asterisk 1.4 на новый HP Proliant DL380 Generation 6 сервер, и сделали циклические тесты на старые сервера IBM. Три сервера запетлевали звонки между собой, и общее количество одновременных вызовов достигло таким образом 10 000 каналов без каких-либо проблем! Соединения SIP to SIP, в режиме point-2-point RTP bridge, в основном с проксированием медиа. На этот момент наш дешёвый гигабитный коммутатор работал на пределе возможностей, также и сетевые интерфейсы. Замеры показывали примерно до 850 Мбит траффика на порт, что более, чем достаточно. Все CPU (а их было 16 вместе с hyperthreading) не были даже в пиковой загрузке, Астериск занимал некоторую часть наиболее правильным образом, но было ещё достаточно резерва, чтобы ещё запустить какие-то другие процессы в обработку.


Замечания
  • Перекодирование из одного голосового кодека в другой (транскодирование) потребляют много ресурсов процессора (интенсивное использование CPU), то же самое можно сказать и о процессе подавлении эха.
  • На использование голосового кодека g729 в Asterisk можно приобрести лицензию, тогда как лицензия на использование кодека g723.1 - не доступна, по этому Asterisk позволяет использовать этот кодек только в режиме прозрачной передачи (pass-thru).
  • Транковые каналы для протокола IAX могут помочь существенно уменьшить сетевой трафик, при использовании 3 или более одновременных вызовов между двумя серверами Asterisk.
  • Технология Hypterthreading не очень хорошо реализована в ядре 2.4.x; новая версия ядра 2.6.x более пригодна к использованию с технологией HT.

Таблицы для расчета Erlang'а

Расчет количества внешних телефонных линий, которые могут Вам понадобиться,

вторник, 18 января 2011 г.

Искусство Asterisk => Диалпланы

Сегодня поговорим о структуре "сердца" Asterisk - файла диалпланов extensions.conf. Именно в этом файле мы определяем, как будет вести себя asterisk при входящих и исходящих вызовах. По сути, он состоит из списка инструкций или шагов, которым будет следовать Asterisk. В отличие от традиционных систем телефонной связи, диалплан Asterisk является полностью настраиваемым. Чтобы добиться успеха в построении собственной системы Asterisk, необходимо понять концепцию диалплана. Если вы пытались прочитать некоторые примеры диалпланов и сочли их невыполнимыми или пробовали написать диалплан Asterisk и не достигли успеха, не отчаивайтесь, сейчас мы все попробуем разобрать.

Диалплан состоит из четырех основных элементов: контекстов, добавочных номеров, приоритетов и приложений. Мы рассмотрим все эти части и то, как они работают
вместе. После объяснения роли каждого из этих элементов в диалплане перейдем к процессу поэтапного создания базового функционального диалплана.

Контексты

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

Контексты различаются по именам. Имена контекстов заключаются в квадратные скобки ([ ]). Допустимыми символами для образования имени являются буквы от A до Z (верхнего и нижнего регистра), цифры от 0 до 9, дефис и символ подчеркивания. Например, контекст для входящих вызовов может выглядеть так:

[incoming]

Все инструкции, размещаемые после описания контекста и до описания следующего контекста, являются частью данного контекста. В начале диалплана находятся два специальных контекста, [general] и [globals].
Раздел [general] содержит список общих настроек диалплана (о которых, вероятно, вам никогда не придется беспокоиться), а о контексте [globals] мы поговорим в другой статье, когда речь пойдет о «Глобальных переменных». Пока что достаточно знать, что эти два контекста являются специальными. Созданные вами контексты можно называть как угодно, только не используйте имена [general] и [globals]!

При описании канала (а именно так выполняется подключение элементов к системе) одним из параметров этого описания является контекст. Иначе говоря, контекст – это точка диалплана, с которой будет начинаться обработка соединений, выполняемых через этот канал.
Другое важное применение контекстов (возможно, самое важное) – обеспечение безопасности. Правильно применяя контексты, определенным абонентам можно предоставить доступ к функциям (таким, как междугородная связь), которые недоступны для других. Если диалплан разработан неаккуратно, пользователи из-за ваших же косяков могут получить возможность мошенничать в вашей системе.

Добавочные номера

В мире телекоммуникаций термин «добавочный номер» (extension) обычно обозначает числовой идентификатор, который присвоен линии, идущей к конкретному телефону. Однако в Asterisk это намного более широкое понятие, поскольку оно определяет уникальные последовательности шагов (каждый шаг включает приложение), которые
Asterisk будет применять к вызову по этой линии. В каждом контексте может быть задано столько добавочных номеров, сколько требуется.
При вызове конкретного добавочного номера (входящим или внутренним звонком) Asterisk будет выполнять шаги, определенные для этого добавочного номера. Поэтому именно добавочные номера определяют, что происходит со звонками при их обработке соответственно диалплану.

Синтаксис добавочного номера – это слово exten, за которым следует стрелка, образованная знаками равенства и «больше чем»:

exten =>

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

Полный добавочный номер состоит из трех компонентов:

* Имени (или номера).
* Приоритета (каждый добавочный номер может включать множество шагов; порядковый номер шага называется его приоритетом).
* Приложения (или команды), которое выполняет некоторое действие над вызовом.

Эти три компонента разделяются запятыми:

exten => имя,приоритет,приложение()

Вот пример того, как может выглядеть настоящий добавочный номер:

exten => 123,1,Answer()

В этом примере имя добавочного номера – 123, приоритет – 1, а приложение – Answer(). Теперь пойдем дальше и рассмотрим, что такое приоритеты и приложения.

Приоритеты

Каждый добавочный номер может включать множество шагов, называемых приоритетами. Каждый приоритет пронумерован последовательно, начиная с 1, и выполняет одно определенное приложение. Например, следующий добавочный номер отвечает на звонок (в приоритете под номером 1) и затем выполняет разъединение (в приоритете под
номером 2):

exten => 123,1,Answer()
exten => 123,2,Hangup()

Не переживайте, если вы не понимаете, что такое Answer() и Hangup(), мы очень скоро их рассмотрим. Здесь главное – запомнить, что для отдельного добавочного номера Asterisk выполняет приоритеты по порядку.

Ненумерованные приоритеты

Начиная с версии 1.2 Asterisk был введен приоритет n, что означает «следующий». Каждый раз, когда Asterisk встречает приоритет n, она берет номер предыдущего приоритета и добавляет 1. Это упрощает внесение изменений в диалплан, поскольку
теперь не надо изменять номера всех шагов. Например, диалплан может быть таким:

exten => 123,1,Answer()
exten => 123,n,выполнить что-то
exten => 123,n,выполнить что-то еще
exten => 123,n,выполнить последнее
exten => 123,n,Hangup()

Asterisk будет самостоятельно вычислять номер следующего приоритета при каждой встрече с приоритетом n. Однако следует отметить, что приоритет под номером 1 должен быть задан обязательно. Если случайно для идущего первым приоритета задать n вместо 1, добавочный номер будет недоступен.

Приложения

Приложения – это рабочие лошадки диалплана. Каждое приложение выполняет определенное действие над данным каналом, например воспроизведение звука, прием тонального ввода, вызов канала, разрыв соединения и т. д. В предыдущем примере было представлено два простых приложения: Answer() и Hangup(). Сейчас мы подробнее рассмотрим, как они работают.

Для выполнения некоторых приложений, таких как Answer() и Hangup(), не требуется никаких дополнительных инструкций. Некоторым приложениям необходима дополнительная информация. Эти данные, называемые аргументами, могут передаваться в приложения, чтобы оказывать влияние на то, как они выполняют свои действия. Чтобы передать аргументы в приложение, разместите их через запятую в круглых скобках, следующих за именем приложения.

Простой диалплан

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

Добавочный номер s

Прежде чем приступить к настройке диалплана, придется остановиться еще на одном вопросе. Необходимо рассмотреть добавочный номер s. Когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер, они передаются на добавочный номер s. (s – сокращение от start (начало), поскольку именно здесь начнется обработка вызова, если с ним не передана информация о добавочном номере.)

Поскольку это именно то, что требуется для нашего диалплана, перейдем к делу. Для каждого вызова будет выполняться три действия (ответ на него, воспроизведение звукового файла и разъединение), поэтому добавочному номеру s понадобится три приоритета. Поместим три приоритета в контекст [incoming], поскольку было принято реше-
ние о том, что все входящие вызовы должны обрабатываться в этом контексте.

[incoming]
exten => s,1,приложение()
exten => s,n,приложение()
exten => s,n,приложение()

Теперь осталось только вставить приложения – и наш первый диалплан готов.

Приложения Answer(), Playback() и Hangup()

Прежде чем мы будем отвечать на звонок, воспроизводить звуковой файл и затем выполнять разъединение вызова, нам нужно научиться это делать. Приложение Answer() (Ответ) используется для ответа каналу, по которому выполняется звонок. Оно выполняет исходную настройку для канала, получающего входящий вызов. (Некоторые приложения не требуют обязательного ответа каналу, но соответствующий ответ на звонок перед тем, как выполнять какие-либо действия над каналом, является очень хорошей практикой.)
Как упоминалось ранее, Answer() не принимает аргументов. Приложение Playback() (Воспроизведение) воспроизводит в канале предварительно записанный звуковой файл. При использовании приложения Playback() ввод, поступающий от пользователя, просто игнорируется.

Чтобы использовать Playback(), задайте в качестве аргумента имя файла (без расширения). Например, Playback(filename) обеспечит воспроизведение звукового файла filename.gsm (о форматах и кодеках разговор будет в другой статье), предполагая, что он размещен в стандартной папке для звуковых файлов. Обратите внимание, что по желанию можно указать и полный путь к файлу.
Приложение Hangup() (Разъединить) выполняет именно то, что подразумевается под его именем: оно разъединяет активный канал. Это приложение должно применяться в конце контекста для завершения текущего вызова, что защитит от несанкционированного использования диалплана абонентами. Приложение Hangup() не принимает аргументов.

Наш первый диалплан

Теперь, когда добавочный номер готов, сведем все вместе и создадим наш первый диалплан.
В первом приоритете нашего добавочного номера мы будем отвечать на звонок, во втором – воспроизводить звуковой файл hello-world.gsm, а в третьем будет выполнен разрыв соединения. Вот как выглядит диалплан:

[incoming]
exten => s,1,Answer()
exten => s,n,Playback(hello-world)
exten => s,n,Hangup()

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

Создание интерактивного диалплана

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

Приложения Background(), WaitExten() и Goto()

Один из самых важных ключей к построению интерактивных диалпланов Asterisk – приложение Background()(Фон). Как и Playback(), это приложение воспроизводит записанный звуковой файл. Однако, в отличие от Playback(), если пользователь нажимает кнопку (или последовательность кнопок) на клавиатуре телефона, оно прерывает воспроизведение и переходит к добавочному номеру соответственно нажатым цифрам. Например, если абонент нажмет кнопку 5, Asterisk прекратит воспроизводить звуковое сообщение и передаст управление вызовом первому приоритету добавочного номера 5.

Чаще всего приложение Background() используется для создания голосовых меню (которые часто называют автоответчиками или интерактивными секретарями). Многие компании используют голосовые меню для направления абонентов на соответствующий добавочный номер, таким образом освобождая своих секретарей от необходимости отвечать на все звонки.

Синтаксис Background() аналогичен синтаксису Playback():

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)

В более ранних версиях Asterisk, если приложение Background() завершало воспроизведение звукового сообщения и в текущем добавочном номере больше не было приоритетов, Asterisk ничего не делала и ожидала ввода абонента. Такое поведение больше не является для Asterisk принятым по умолчанию. Если требуется, чтобы Asterisk ожидала ввода абонента после завершения воспроизведения звукового сообщения, можно вызвать приложение WaitExten() (Ожидание добавочного номера). Приложение WaitExten() ожидает от абонента набора телефонного номера и часто вызывается сразу после приложения Background(), как в данном фрагменте диалплана:

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()

Если требуется, чтобы приложение WaitExten() ожидало ответа в течение определенного времени (вместо использования времени ожидания по умолчанию), просто укажите число, соответствующее необходимому количеству секунд, в качестве первого аргумента в WaitExten():

exten => 123,n,WaitExten(5)

И Background(), и WaitExten() позволяют абоненту производить набор номера. После этого Asterisk пытается найти в текущем контексте добавочный номер, соответствующий введенным абонентом цифрам. Если Asterisk находит однозначное соответствие, она направляет вызов на этот добавочный номер. Продемонстрируем это, добавив несколько строк в наш пример:

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()
exten => 2,1,Playback(digits/2)
exten => 3,1,Playback(digits/3)
exten => 4,1,Playback(digits/4)

Если вызвать добавочный номер 123 из примера выше, он воспроизведет звуковое сообщение с фразой «main menu» (главное меню) и после этого будет ожидать ввода цифр 2, 3 или 4. Если нажать одну из этих цифр, Asterisk воспроизведет ее для вас. Также вы обнаружите, что, если ввести другую цифру (например, 5), Asterisk не обеспечит ожида-
емого результата.

Также возможна ситуация, когда Asterisk обнаружит неоднозначное соответствие. Это можно легко продемонстрировать, введя в предыдущий пример добавочный номер под именем 1:

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()
exten => 1,1,Playback(digits/1)
exten => 2,1,Playback(digits/2)
exten => 3,1,Playback(digits/3)
exten => 4,1,Playback(digits/4)

Наберите добавочный номер 123 и затем по подсказке главного меню введите 1. Почему Asterisk сразу же не воспроизводит этот номер? Потому, что цифра 1 неоднозначна; Asterisk не понимает, какой добавочный номер вызывается, 1 или 123. Он ожидает несколько секунд ввода другой цифры (например, 2 для вызова добавочного номера 123). Если набора никаких других цифр не последовало, по завершении времени
ожидания Asterisk направляет вызов на добавочный номер 1. (Задавать собственные значения времени ожидания мы научимся посже)
Прежде чем двигаться дальше, посмотрим, что было сделано на данный момент. Вызвав наш диалплан, абоненты услышат приветствие. Если они нажмут 1, то услышат номер 1, если 2 – то номер 2 и т. д. Для начала это неплохо, но давайте это все немного усовершенствуем. С помощью приложения Goto() (Перейти к) заставим диалплан повторять приветствие после воспроизведения номера.

Как следует из его имени, приложение Goto() используется для перенаправления вызова в другую часть диалплана. Синтаксис Goto() требует передачи в него в качестве аргументов целевого контекста, добавочного номера и приоритета:

exten => 123,n,Goto(контекст,добавочныйномер,приоритет)

Теперь давайте применим приложение Goto() в нашем диалплане:

[incoming]
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(incoming,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(incoming,123,1)

Две новые строки обеспечат возвращение управления над вызовом добавочному номеру 123 после воспроизведения выбранного номера.

Обработка ошибочных вводов и времени ожидания

Теперь, когда создание нашего первого голосового меню уже близится к завершению, введем специальные добавочные номера. Во-первых, нам необходим добавочный номер для недействительных вводов; когда абонент нажимает не ту кнопку (например, 9 для предыдущего примера), вызов направляется на добавочный номер i. Во-вторых, необходим
добавочный номер для обработки ситуаций, когда абонент не производит ввод вовремя (время ожидания по умолчанию – 10 с). Если абонент слишком долго не нажимает кнопку после запуска приложения WaitExten(), вызовы направляются на добавочный номер t. Вот как будет выглядеть диалплан после введения этих двух добавочных номеров:

[incoming]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(incoming,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(incoming,123,1)
exten => 3,1,Playback(digits/3)
exten => 3,n,Goto(incoming,123,1)
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(incoming,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()

Использование добавочных номеров i и t делает диалплан несколько более надежным и практичным. Но надо сказать, он по-прежнему довольно примитивен, потому что внешние абоненты не имеют возможности соединения с реальным живым человеком. Для этого нам придется ознакомиться с еще одним приложением – Dial() (Звонить).

Одно из самых ценных свойств Asterisk – это возможность установления соединения между разными абонентами. Это особенно полезно, когда абоненты используют разные методы связи. Например, абонент А может звонить по традиционной аналоговой телефонной линии, тогда как пользователь В может сидеть в кафе в другой части света и говорить по IP-телефону. К счастью, большую часть тяжелой работы по установлению соединения и выполнению преобразований между разными сетями Asterisk берет на себя. От вас требуется лишь научиться использовать приложение Dial().

Синтаксис Dial() немного сложнее, чем синтаксис приложений, которые применялись до сих пор, но не пугайтесь. Dial() принимает четыре аргумента. Первый – получатель вызова. Он состоит (в самой простой форме) из названия технологии (или транспортного протокола), с помощью которой выполняется вызов, символа слэш и имени удаленной
конечной точки или ресурса. Самыми широко используемыми типами технологий являются Zap (для аналоговых каналов и каналов T1/E1/J1), SIP и IAX2. Например, допустим, требуется вызвать конечную точку Zap, определенную как Zap/1, которая представляет собой FXS-канал с подключенным к нему аналоговым телефоном. Технология –
Zap, ресурс – 1. Аналогично, для вызова устройства SIP получателем вызова может быть SIP/Jane, а для устройства IAX – IAX2/Fred. Если бы потребовалось, чтобы при вызове добавочного номера 123 диалплана Asterisk звонил по каналу Zap/1, мы бы ввели следующий добавочный номер:

exten => 123,1,Dial(Zap/1)

Также можно звонить по нескольким каналам одновременно, объединяя получателей вызова с помощью символа амперсанда (&):

exten => 123,1,Dial(Zap/1&Zap/2&SIP/Jane)

Приложение Dial() будет дозваниваться всем заданным получателям вызовов одновременно и установит связь с любым из заданных каналов, который ответит первым. Если приложение не может связаться ни с одним вызываемым абонентом, Asterisk задаст переменной DIALSTATUS (статус звонка) значение, соответствующее ситуации невозможности дозвониться на вызываемые номера, и продолжит выполнение следующего приоритета добавочного номера.

Приложение Dial() также позволяет устанавливать связь с удаленной конечной точкой VoIP, которая не была предварительно описана в конфигурационных файлах канала. Вот полный синтаксис такого типа соединения:

Dial(технология/пользователь[:пароль]@удаленный_хост[:порт][/удаленный_доба-
вочный_номер])

В качестве примера можно позвонить на демонстрационный сервер Digium, который использует протокол IAX2, по следующему добавочному номеру:

exten => 500,1,Dial(IAX2/guest@misery.digium.com/s)

Полный синтаксис приложения Dial() для звоноков по каналам Zap немного иной, как показано ниже:

Dial(Zap/[gGrR]канал_или_группа[/удаленный_добавочный_номер])

Например, вот как описывался бы вызов номера 1-800-555-1212 по Zap-каналу под номером 4.

exten => 501,1,Dial(Zap/4/18005551212)

Второй аргумент приложения Dial() – время ожидания, задаваемое в секундах. Если время ожидания задано, Dial() будет пытаться дозвониться по заданным номерам в течение этого количества секунд, а потом перейдет к следующему приоритету добавочного номера. Если время ожидания не задано, Dial() будет дозваниваться на вызываемые
каналы до тех пор, пока кто-нибудь не ответит или пока вызывающий абонент не повесит трубку. Введем для нашего добавочного номера время ожидания 10 с:

exten => 123,1,Dial(Zap/1,10)

Если ответ на звонок получен до истечения времени ожидания, связь между каналами устанавливается и диалплан выполнен. Если вызываемый номер просто не отвечает, занят или недоступен по какой-то другой причине, Asterisk задаст переменную DIALSTATUS и перейдет к следующему приоритету добавочного номера.

Давайте применим то, что изучили на данный момент, в другом примере:

exten => 123,1,Dial(Zap/1,10)
exten => 123,n,Playback(vm-nobodyavail)
exten => 123,n,Hangup()

Как видите, этот пример будет воспроизводить звуковой файл vm-nobodyavail.gsm в случае, если звонок остается без ответа.

Третий аргумент Dial() – строка опций. Она может содержать один или более символов, влияющих на поведение приложения Dial(). Список возможных опций слишком велик, чтобы приводить его здесь ( о нем мы поговорим позже); рассмотрим лишь самую популярную из них – опцию m. Если указать m в качестве третьего аргумента, вызывающая сторона, пока выполняется дозвон до вызываемого абонента, будет слышать во время ожидания вместо гудков музыку (конечно, если эта музыка сконфигурирована правильно). Чтобы добавить опцию m в наш последний пример, просто
изменим первую строку:

exten => 123,1,Dial(Zap/1,10,m)
exten => 123,n,Playback(vm-nobodyavail)
exten => 123,n,Hangup()

Теперь, когда мы научились использовать приложение Dial(), добавочные номера 1 и 2 в диалплане стали бесполезными. Давайте заменим их новыми добавочными номерами, которые позволят внешним абонентам дозваниваться до Виталия (Vit) и Елены (Lena):

[incoming]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Dial(Zap/1,10)
exten => 1,n,Playback(vm-nobodyavail)
exten => 1,n,Hangup()
exten => 2,1,Dial(SIP/Lena,10)
exten => 2,n,Playback(vm-nobodyavail)
exten => 2,n,Hangup()
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(incoming,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()

Четвертый и последний аргумент приложения Dial() – URL. Если вызываемый канал поддерживает прием URL в момент вызова, заданный URL будет передан (например, если используется IP-телефон, поддерживающий прием URL, этот URL появится на дисплее телефона; аналогично, если используется программный телефон, URL может
быть выведен на экран монитора). Этот аргумент применяется очень редко.

Обратите внимание, что второй, третий и четвертый аргументы могут быть опущены. Например, если требуется определить опцию, но при этом вы не собираетесь задавать время ожидания, просто оставьте пропуск на месте аргумента времени ожидания, как в данном примере:

exten => 1,1,Dial(Zap/1,,m)

пятница, 14 января 2011 г.

Автообзвон в Asterisk

Автообзвон в Asterisk
В данной статье я хочу рассказать о том, как создать простейший Автоинформатор. С другой стороны, кто-то может создать на основе этой статьи систему дозвона с сайта или обзвона абонентов по расписанию. В общем, огромные возможности для изобретательного ума (-:

Осуществлять всё это будем при помощи call файлов. Наиболее полная и доступная информация находится по адресу http://www.voip-info.org. Здесь вы можете узнать, какие параметры необходимо в нём указать, а какие – по желанию.

Прежде всего несколько предостережений:

* дата создания этих файлов должна быть в будущем, т.е. астериску через дату файла необходимо указать, когда исполнить этот файл
* данные файлы НЕЛЬЗЯ создавать в исходящей директории Asterisk-а, они могут туда быть только скопированы или перемещены из любого другого места
* вы должны заранее рассчитать, сколько call-файлов можно одновременно запускать на выполнение. Это зависит от мощности оборудования, на котором установлен Asterisk, а так же от ширины доступных каналов для осуществления звонков.

Прежде всего хочу сообщить, что все действия я буду осуществлять в системе с установленным Trixbox.

Для начала давайте создадим простой call-файл, результатом выполнения которого будет следующее: система набирает один внутренний номер, а когда там поднимают трубку, то она набирает другой внутренний номер:

#Внутренний звонок
#
Channel: Local/101 #Эта строка говорит о том, что вызывается внутренний абонент «101». Безусловно, он должен быть в системе

Callerid: 100 #эта строка указывает нам на то, как у вызываемого абонента отобразится, кто его вызывает

MaxRetries: 5
RetryTime: 300
WaitTime: 45
Extension: 100 #После того, как абонент «101» возьмёт трубку, необходимо соединить его с абонентом «100»

Priority: 1

В принципе, это и есть весь файл. Теперь надо сделать ещё пару действий:

1. В командной строке набрать:
# date
Mon Feb 11 15:49:15
# touch –t 200802111550
Сначала система сообщает нам своё системное время, а затем мы устанавливаем время файла.

2. Скопировать или перенести данный файл в соответствующую директорию Asterisk-а:
# mv /var/spool/asterisk/outgoing

При достижении указанного времени Asterisk исполнит указанный файл. Ещё раз обращаю ваше внимание, что НЕЛЬЗЯ создавать call-файл непосредственно в /var/spool/asterisk/outgoing.

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

Channel: IAX2/100 #сначала внутренний абонент
Callerid: 100
MaxRetries: 5
RetryTime: 300
WaitTime: 45
Context: from-internal
Extension: 38067ХХХХХХХ #если внутренний снимает трубку, звоним абоненту на мобильный
Priority: 1

Хочу обратить ваше внимание, что в этом случае в системе должны быть настроены соответствующим образом trunk и исходящее соединение с диал-планом, в соответствии с которым система сможет набрать указанный внешний номер.

В этом варианте мы сначала звоним абоненту на мобильный, а потом соединяем его с внутренним, с начальником (-:

Channel: IAX2/out-trunk/38067XXXXXXX
Callerid: 100
MaxRetries: 5
RetryTime: 300
WaitTime: 45
Context: from-internal
Extension: 100
Priority: 1

В данном варианте я использую IAX2 транк для звонка, хотя это может быть и SIP транк, и Zap линия.

В следующем примере мы создадим именно то, что в общем случае можно назвать автодозвоном и автоинформатором. Иными словами, система дозвонится на указанный номер и проиграет заранее записанное сообщение. Я буду использовать стандартный звуковой файл.

Channel: Local/101
Callerid: 100
MaxRetries: 5
RetryTime: 300
WaitTime: 45
Context: test-sound
Extension: s
Priority: 1

Дозвон будет осуществляться на внутренний номер «101», при желании можно указать и внешний номер, как это указанно в предыдущих примерах. Но обращаю ваше внимание на Context: test-sound.

Для этого в файл extensions_custom.conf необходимо внести следующее:

[test-sound]
exten => s,1,DigitTimeout,5 ; Set Digit Timeout to 5 seconds
exten => s,2,ResponseTimeout,10 ; Set Response Timeout to 10 seconds
exten => s,3,Answer
exten => s,4,Wait(1)
exten => s,5,Background(demo-congrats) ; "play outbound msg"
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup

Не забудьте перезапустить Asterisk, а то все внесения изменений руками не вступают в силу, пока вы его не перегрузите.

Вот и всё, что я хотел рассказать о call-файлах. Теперь, имея телефонную базу абонентов, можно делать обзвон и сообщать им, например, их состояние счёта или какую-то полезную информацию.
http://myasterisk.ru/