И так, ситуация: вы только что узнали про Астериск и его возможности, и захотели использовать его у себя дома, или ваше руководство захотело IP-телефонию в офис.
Первое что нам необходимо — сервер с установленной операционкой. По ряду причин я выбрал для своих серверов CentOS 6. Все примеры будут с привязкой к этой ОС, так как именно на ней получаются наиболее стабильные сервера. Тем не менее, я ни коим образом не пытаюсь ограничить вас выборе. Астер нормально заведется и под Debian-ом, и под Arch-ем, и даже на FreeBSD. Замечу: желательно не пользоваться гипервизорами на начальном этапе, так как вы можете получить «металлический» голос, либо его полное отсутствие. Про таймеры и прерывания расскажу в следующей статье, так как их описание и настройка выходит за рамки этой статьи. В том случае, если свободного сервера у вас нет и без виртуальной машины не обойтись, обязательно ставьте x86-го гостя.
После того, как вы установили операционку на сервер, можно приступить к установке Астериска. Добавляем репозитории Didgium:
rpm -Uvh http://packages.asterisk.org/centos/6/current/i386/RPMS/asterisknow-version-3.0.1-2_centos6.noarch.rpm yum update
Устанавливаем dnsmasq:
yum install dnsmasq
Устанавливаем Астериск:
yum install asterisk asterisk-configs --enablerepo=asterisk-12
Важное замечание: цифра в конце строки указывает на мажорную версию Астериска. В примере будет установлена наиболее свежая версия из 12-й ветки, доступная в репозиториях.
После установки перезагружаем сервер и заходим в шелл Астериска:
asterisk -rv
Обратите внимание на ключи, c которыми запускается шелл. Количество ключей «v» влияет на количество выводимой информации при звонке, их количество варьируется от 1 до 14.
Если установка прошла успешно и Астериск запустился, вы увидите вот такое приглашение:
asterisk*CLI>
Поздравляю, Астериск установился и готов к работе. Но пока что шелл нам не нужен, поэтому пишем exit.
Для того, чтобы сэкономить ваше время и сделать материал понятным, рассмотрим теорию на конкретном примере, а также разберем основные термины, которыми вам придется оперировать при настройке, при общении с саппортом оператора и своими коллегами. Для примера мы заведем двух внутренних пользователей с номерами 100 и 101, и двух операторов телефонии. Один из операторов будет предоставлять нам городские номера через транк с регистрацией, другой будет обеспечивать доступ к направлениям дальней связи, используя транк без регистрации.
Первое что вам требуется сделать — создать пиров в файле /etc/asterisk/sip.conf. Открываем его:
nano /etc/asterisk/sip.conf
И сразу переходим в конец файла. Вставляем следующий текст:
[internal](!) type=friend insecure=invite,port context=office fromdomain=<имя домена или IP> host=dynamic disallow=all allow=alaw qualify=yes canreinvite=no nat=no [100](internal) secret=XXX [101](internal) secret=XXX
Мы завели двух внутренних пиров с номерами 100 и 101. Разберем эти настройки, так как их понимание — ключ к успешному внедрению Астериска.
[internal](!)
[internal], это имя шаблона, а (!) указатель шаблона.
Почему сразу начинаем использовать шаблоны? Потому что они сокращают время настройки и уменьшают количество текста с конфигурационном файле, а для понимания они очень просты.
type=friend
Доступные параметры: «peer», «user» и «friend». Очень часто встречается ошибочное мнение относительно того, чем они отличаются. Многие считают, что параметр «user» разрешает только исходящие, «peer» — только входящие звонки, а «friend» разрешает звонки в обе стороны. Это не так. Использование ключа «peer» отключает проверку соответствия имени пользователя и пароля при звонке. При использовании параметра «peer», Астериском проверяется только соответствие IP-адреса и номера порта источника вызова, при использовании «user» — проверяется поле username, а проверка адреса источника не производится. Параметр «friend» заставляет проверять поле username и IP-адрес источника.
insecure=invite,port
invite — отключается аутентификация при входящем звонке.
port — отключается проверка порта источника.
При первоначальной настройке пропишите оба ключа.
context=office
Контекст, в котором будут обрабатывается исходящие звонки от этого устройства. Подробности чуть ниже.
fromdomain=<имя домена или IP>
Имя SIP-домена. Для первоначальной настройки укажите IP адрес сервера с Астериском.
host=dynamic
IP-адрес пира. В случае использования авторизации по логину и паролю — ставьте dynamic. Конкретный IP указывается только в том случае, если настройки пира используются для транка без регистрации.
disallow=all
allow=alaw
Указываем разрешенные кодеки.
В нашем примере первая строка запрещает использование всех кодеков, а вторая — разрешает g711-a. Настройки кодеков индивидуальны для каждого случая, однако, большинство Российских и Украинских провайдеров используют g711a и g729. Последний — пропиетарный, и Астериском поддерживается лишь в Passthrough-режиме (то есть, невозможен транскодинг).
qualify=yes
Эта строка заставляет Астериск опрашивать устройство или софтфон пакетами OPTIONS. Необходим для мониторинга и траблшутинга.
canreinvite=no
Запрещает пересылать медиа напрямую между устройствами. Рекомендую ставить «no», для упрощения настройки.
nat=no
Говорим Астериску, что пир не за натом. Описание ключей и вариантов их использования, если сервер за ним, выходит за рамки статьи. Про варианты обхода расскажу в следующей статье.
[100](internal)
secret=XXX
[101](internal)
secret=XXX
Тут мы задаем имя пира и берем настройки из шаблона. Единственные уникальные параметры в нашем примере — имя пира и пароль.
На этом мы закончили настраивать внутренних пиров, перейдем к настройке стыка с операторами. Добавим 2 записи в конец sip.conf:
[operator1] fromdomain=<имя домена или IP> host=1.2.3.4 insecure=invite,port port=5060 qualify=yes type=friend username=YourLogin secret=YourPass disallow=all allow=alaw context=operator1
Не буду расписывать значения каждой строки, т.к. все настройки идентичны настройкам внутренних пиров, за исключением поля host. В том случае, если Астериск выступает в роли клиента (а для сервера оператора наш астериск является клиентом), нам нужно указать адрес сервера оператора или его dns-имя.
Добавим второго оператора:
[operator2] fromdomain=<имя домена или IP> host=5.6.7.8 insecure=invite,port port=5060 qualify=yes type=friend disallow=all allow=alaw. context=operator2
Отличий тоже никаких, за исключением отсутствия строк username и secret, так как, напомню, второй оператор не использует регистрацию.
Осталось настроить регистрацию на сервере оператора №1. Для этого в файле sip.conf, перед секцией описывающей настройки оператора вставим следующую строку:
register => udp://YourLogin:YourPass:YourLogin@1.2.3.4/YourLogin
Синтаксис, для неподготовленного человека, выглядит сложным, поэтому не заморачивайтесь и просто позвоните в саппорт провайдера и узнайте у них о том, как регистрироваться на сервере Астериском, либо попросите выслать настройки. Как правило, большинство операторов без проблем высылают пример конфигурации под свои софт-свитчи.
Наверняка вы редактировали файлы конфигурации под пользователем с ограниченными правами. Если это так, то Астериск не сможет получить доступ к файлу конфигурации, поэтому пишем:
chown asterisk:asterisk /etc/asterisk/sip.conf
На этом настройка пиров закончена, ее достаточно для работы в минимальной конфигурации, сохраняем и закрываем файл и возвращаемся в шелл Астериска командой:
asterisk -rv
В шелле Астериска пишем команду:
sip reload
Теперь вы можете зарегистрировать на своем Астериске пользователей с логинами 100 и 101. Проверяется состояние регистрации следующей командой:
sip show peers
Если вы все настроили правильно, то увидите примерно вот такой вывод:
asterisk*CLI> sip show peers Name/username Host Dyn Forcerport Comedia ACL Port Status Description 100/100 10.0.0.52 D Yes Yes 59080 OK (1 ms) 101/101 10.0.0.57 D Yes Yes 49973 OK (1 ms) operator1 1.2.3.4 No No 5060 OK (22 ms) operator2 5.6.7.8 No No 5060 OK (22 ms)
Если вы это видите, то, поздравляю, ваши устройства или софтфоны успешно зарегистрировались и Астериск увидел сервера операторов.
Состояние регистрации проверяется командой:
sip show registry
Если регистрация прошла успешно, то вы должны увидеть вот такой вывод:
asterisk*CLI> sip show registry Host dnsmgr Username Refresh State Reg.Time 1.2.3.4:5060 N YourLogin 120 Registered 1 SIP registrations.
На этом настройка пиров закончена, перейдем к настройке диалплана. Диалплан — это сердце Астериска, с помощью него обрабатываются абсолютно все звонки. Астериск понимает несколько языков, но в нашем примере мы будем использовать стандартный, появившийся в самых первых релизах Астериска. Файл конфигурации хранится в файле /etc/asterisk/extensions.conf.
Откроем его командой:
nano /etc/asterisk/extensions.conf
В стандартных файлах конфигурации хранится много дефолтных правил. Они нам не нужны, поэтому очистим содержимое и пропишем следующее:
[general] static=yes writeprotect=no [globals]
Это параметры необходимые для нормального чтения диалплана, поэтому менять их не следует.
Начнем с простого. Нам нужно позвонить с номера 100, на номер 101. Для этого нужно прописать правило, сразу после секции globals:
[office] exten => _1XX,1,Dial(SIP/${EXTEN})
Разберем эту строку.
[office] — имя контекста, в котором обрабатываются звонки от пира.
exten => — указатель начала шага.
_1XX — маска. На маске остановимся чуть подробнее. С помощью нее сортируются все звонки, попадающие в контекст диалплана.
Маска использует набор паттернов для сортировки звонков по caller-id:
X – любая цифра от 0-9 N – любая цифра от 2-9 [234-6] – цифры 2, 3, 4 и 6 . – любые возможные символы
Маска начинается с символа "_", который означает что это шаблон. В случае, если вы забудете указать его, Астериск примет 1XX за вызываемый номер и передаст Dial-у паттерны вместо номера телефона, и звонок не состоится.
1 — номер действия.
Dial — это приложение. В диалплане можно использовать более 200 различных приложений, которые используются для манипуляций со звонками. Сейчас, в самом начале, мы будем использовать только одно приложение — Dial. Из названия понятно, что оно используется для совершения звонков.
(SIP/${EXTEN}) — аргументы для приложения. В нашем примере, для внутренних пиров мы используем протокол SIP, поэтому первый аргумент, который мы передаем dial-у — указывает на используемый протокол сигнализации. ${EXTEN} — текущий экстеншен, его значение берется из заголовка (из поля destination).
/ — разделитель для передаваемых аргументов.
Каждый из параметров разделяется запятыми. В нашем примере используются трехзначные номера, поэтому в маске должно быть 3 паттерна. В случае, если вы захотите использовать иную длину нумерации, то пишите в маске нужное количество паттернов. Теперь сохраняем файл, открываем шелл астериска и пишем команду:
dialplan reload
Если возникли проблемы с доступом к файлу, то пишем:
chown asterisk:asterisk /etc/asterisk/extensions.conf
И снова перезагружаем диалплан через шелл Астериска.
Теперь пробуем звонить. Если вы все правильно настроили, то пир с номером 100 дозвонится до пира с номером 101. Сейчас мы можем звонить внутри офиса, между пирами, которые работают в контексте office. Для того что бы позвонить в город, нам нужно написать правило для исходящих звонков через первого оператора. Прописываем его в контекст office, выглядит оно так:
exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)
Перезагружаем диалплан и пробуем звонить в город.
Теперь нам надо принять входящий звонок. Сделаем новый контекст в диалплане, пишем в конец файла:
[operator1] exten => s,1,Dial(SIP/100&SIP/101)
Поясню что означает «s». Это стандартная маска в Астериске, под которую попадают абсолютно все вызовы. То есть, если мы используем транк с регистрацией, входящий caller-id будет «s».
Сохраняемся и перезагружаем диалплан. Теперь мы можем принять входящий звонок через оператора, предоставляющего нам городской номер.
Сейчас нам понадобилось позвонить на сотовый телефон, с федеральным номером. Допишем еще одну строку в контекст [office]:
exten => _89XXXXXXXXX,1,Dial(SIP/${EXTEN}@operator1)
Сохраняемся, перезагружаем диалплан и звоним. Все. Теперь мы можем полноценно использовать услуги оператора, предоставляющего городской номер.
Однако, тут кроется небольшая проблема, которая возникнет при звонке на сотовые телефоны других регионов. Так как номер телефона федеральный, то все звонки пойдут через первого оператора. Поэтому уместно уменьшить размер масок в диалплане. К примеру:
exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1)
С такой конструкцией все звонки на телефоны с кодами из диапазонов 890982XXXXX-890999XXXXX и 8901421XXXX-8901651XXXX пойдут через первого оператора. Не совсем удобно, соглашусь с этим. В будущих статьях выложу конфигурацию диалплана для автоматического выбора оператора в зависимости от направления звонка, так как подобное опять же выходит за рамки этой статьи.
Теперь нам осталось пустить междугородние звонки через второго оператора. Добавляем строку в контекст [office]:
exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567) same => n,Dial(SIP/${EXTEN}@operator2)
Как вы заметили, тут появились новые приложения, которые обрабатывают звонки. Set(CALLERID(num)=74991234567) — так как мы используем транк без регистрации, то это значит что мы должны отсылать оператору caller-id. Этот номер не обязательно должен существовать. Тут мы просто представляемся провайдеру и не более. Какой номер подставлять — зависит от оператора. Некоторые предоставляют услугу подмены caller-id на номер другого оператора, для совершения исходящих вызовов по межгороду или для зоновуй связи. За подробностями обращайтесь к оператору. same => n — указатель, который позволяет не писать каждый раз маску и номер действия. К примеру:
exten => 78121234567,1,Answer exten => 78121234567,1,Set(CALLERID(name)=Trunk_1 exten => 78121234567,1,Dial(SIP/1000)
Можно заменить на:
exten => 78121234567,1,Answer same => n,Set(CALLERID(name)=Trunk_1 same => n,Dial(SIP/1000)
Во втором случае все гораздо проще, не так ли?
На этом все, мы настроили Астериск. Теперь мы можем звонить в город, на сотовые, по межгороду и у нас есть внутренняя связь между пирами. Получаем вот такой, вполне рабочий диалплан:
[general] static=yes writeprotect=no [globals] [office] exten => _8909[89][2-9][1-3]XXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _8901[456][2-5]1XXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _[78][3-689]XXXXXXXXX,1,Set(CALLERID(num)=74991234567) same => n,Dial(SIP/${EXTEN}@operator2) exten => _XXXXXXX,1,Dial(SIP/${EXTEN}@operator1) exten => _1XX,1,Dial(SIP/${EXTEN}) [operator1] exten => s,1,Dial(SIP/100&SIP/101)
Спасибо за внимание.
Комментарии (40)
horlon
18.08.2015 13:21Во-первых, гибкость — всеравно FreePBX не дает тех возможностей, что Asterisk (из собственного опыта знаю). Ну да, можно писать руками, но оно почти всегда идет в конфликт со свистоперделками, которыми FreePBX напичкан. Если, конечно задача не банальный IP сервер с минимумом функционала.
Во-вторых, чистая установка и возможность поставить на сервер, на котором уже что-то крутится.
В-третьих FreePBX не на любое железо встает (с этим я тоже сталкивался, после чего я его, как вариант, больше не рассматриваю вообще).Jodes
18.08.2015 14:22И в куда же не встал FreePBX? Можно пример?
MKudryavcev
18.08.2015 15:16Intel Atom и старые AMD. Модели уже не назову — не помню.
dos_88
18.08.2015 18:12Прошу прощения, FreePBX зависит это железа? Что? Это же надстройка над астериском с веб интерфейсом…
apple01
18.08.2015 18:36видимо имеется в виду сборка freepbx distro
Jodes
19.08.2015 14:04freepbx distro встает на атомные матери.
horlon
19.08.2015 14:23freepbx distro лично у меня не встал ни на одну железку.
Это были сервера supermicro (2013 года выпуска) и комп на основе материнки intel со встроенным процом (на нее я ради интереса пробовал ставить). Подробностей уже и не вспомню, т.к. почти два года уже нет на руках этого оборудования.
Сипались ошибки ядра и некоректной работы драйверов, вплоть до зависаний наглухо.
miga
18.08.2015 16:14nat=no
Говорим Астериску, что пир не за натом. Описание ключей и вариантов их использования, если сервер за ним, выходит за рамки статьи. Про варианты обхода расскажу в следующей статье.
Можно не морочиться и писать во всех пирах nat=yes. Смысл этой настройки очень простой — если nat=yes, то астериск будет отвечать пиру не на тот IP-адрес, что он указал в заголовке Contact, а на тот, что стоит в SRC пакетов от пиры.Ovoshlook
18.08.2015 16:43-1А вообще эта опция depricated
nat=auto_force_rport,auto_comediatgz
18.08.2015 21:33-1У нормальных свитчей вообще никаких настроек на нат нет, все определяется и работает само.
Ovoshlook
18.08.2015 23:58аха)) как родились сами, так и работают сами) И вообще самый правильный свитч — Это девушка оператор которая проводами соединяет звонящих) вот она с натом вообще отлично работает.
Ovoshlook
18.08.2015 16:40-4На написание этой статьи меня побудило практически полное отсутствие how-to по настройке Астериска, с понятными новичку примерами.
Не официальная документация
help.ubuntu.ru/wiki/asterisk
Официальная докуметация
www.asterisk.org/sites/asterisk/files/mce_files/documents/asterisk_quick_start_guide.pdf
(это все первая страница гугла по запросу asterisk install)
Ну и для тех кто хочет знать больше всех
asterisk-service.com/downloads/Asterisk-%20The%20Definitive%20Guide,%204th%20Edition.pdf
Отсюда вопросы:
Какими методами поиск информации вы пользуетесь?
Зачем ваша статья?MKudryavcev
18.08.2015 18:05Какими методами поиск информации вы пользуетесь?
В основном читаю документацию и гуглю, иногда пользуюсь яндексом.
Зачем ваша статья?
Первые два предложения, из первого абзаца:
В сети можно найти кучу информации по настройке IVR, по настройке авторизации SIP-пользователей через LDAP, мануалов по созданию HA-кластеров с Астерисками внутри, etc., но нет ни одной статьи о том, как завести его с нуля, да и еще с примерами. Практически везде предлагается сразу же использовать все возможности, которые предлагает Астериск, а если убрать часть функционала, предлагаемого в мануале, то в большинстве случаев это приведет к получению неработоспособной конструкции.
Я понимаю, Вы уже забыли что такое каша из информации в голове у новичка. Эта статья для того, что бы структурировать уже имеющуюся информацию и получить новую, которая необходима для запуска, пусть и не в продакшн, а хотя бы на стенде.Ovoshlook
18.08.2015 18:19Я прекрасно понимаю что такое каша в голове когда, сталкиваешься с новыми технологиями. Многие разработчики сталкиваясь с чем-то новым сначала получают порцию этого замечательного блюда в свой мозг. Я в таком состоянии пребываю раз в месяц — минимум.
Цель моего вопроса — понять какую новизну несет Ваша статья. На сколько я знаю идеологию HABRAHABR — это сообщество специалистов, которые публикуют здесь что то новое. То чего еще нет нигде. То есть библиотека хабра по сути своей уникальна и Ваша статья как то не вписывается в эту идеологию. Книга (а я хочу заметить — отличная книга, где все разжевано как раз вот для новичков) asterisk definitive guide (ну на крайний случай asterisk — будущее телефонии) содержит в общем то все, что вы тут изложили. Новизны нет.MKudryavcev
18.08.2015 18:57+1Цель статьи — структурировать имеющуюся в голове новичка информацию, это я написал в предыдущем комментарии. Относительно идеологии и уместности статьи — возможно Вы правы. Удалить?
Гайд по астериску и про будущее телефонии читал. Да, обе содержат исчерпывающую информацию про большую часть функционала. Собственно, с помощью них и поднял у себя телефонию. Но за какое время вы их переварите? За какое время поймете, что вот без этой фичи телефония нормально не заведется, а вот другую можно реализовать уже после запуска? У меня ушла почти неделя на то, что бы поднять астер на стенде и вывести в продакшн. Долго. Очень долго. Лишь из-за того, что пришлось перелопатить горы информации. Не хватало аналога статьи, которую я написал. Собственно, поэтому она тут. Еще вопросы?
Ovoshlook
18.08.2015 17:53А) Я пооонял) Статья для тех, кто любит перечитывать одно и то же на разных рессурах))) Надо будет накопипастить себе и опубликовать Asterisk Defenitive guide)))
exten => _78121234567,1,Answer
И тут неожиданно всплывает вопрос:
Зачем писать номер шаблоном?MKudryavcev
18.08.2015 18:09И тут неожиданно всплывает вопрос:
Зачем писать номер шаблоном?
Извиняюсь, поправил.
varnav
18.08.2015 22:08Какой смысл в голом астериске, есть же AsteriskNOW? А кто думает что во FreePBX нельзя что-то дописать и исправить под себя — тот просто не умеет его готовить. Есть наборы конфигов custom (дополняющие) и override (заменяющие), через них можно сделать почти всё то же что и на чистом астериске.
Ovoshlook
18.08.2015 23:55Прикрутите редис к AsteriskNOW. Сделайте кастомную обработку звонка в очередь на каждого агента с неограниченными переадресациями.
varnav
19.08.2015 04:26Смогу и это.
Ovoshlook
19.08.2015 11:02Ну и в итоге у вас получится то же самое что голый Астериск. Во FreeBPX эти изменения будут незаметны и не управляемы. Смысл тогда от FreePBX, если для внесения изменений вм нужнао лезть в конфигурационные файлы и вносить изенения там?
Да и вообще — я так понимаю вы видели то генирирует в диалплан FreePBX. В общем то даже дело не в том как он генирирует в диалплан. а в том что он именно ГЕНИРИУЕТ В ДИАЛПЛАН. То есть об универсальности кода программисты FreePBX похоже даже не подозревают.
А если у меня будет 150 транков (а такое вполне реально — был живой пример когда к PBX подключались номера Мультифона для исходящих с них, чтобы обратно перезванивали на сотовые. Для простоты и удобства общения), FreePBX будет для всех генерить DIALPLAN конфиги?varnav
19.08.2015 11:36Если у вас 150 транков и в штате есть спец реально хорошо знающий астериск — тогда чистый астериск оправдан.
Если их у вас 5 транков и админ общего профиля — тогда нет.
А вообще у меня был в подопечных колл-центр с довольно хитроумными запросами, и высококастомизированный. Всё отлично делалось штатными средствами FreePBX и только в одном месте пришлось править его PHP-генератор, и то в двух строчках (добавить перенаправление на опросник после разговора).Ovoshlook
19.08.2015 12:37Ну вот я о том и говорю — что FreePBX использовать можно, но когда на нем решаются стандартные задачи, а когда нужна гибкая система — то тут от него толку никакого — либо городить свой огород с костылями и дописками — либо написать все заново. Свое. Но зато это будет работать как нужно, а не как получилось.
varnav
19.08.2015 04:28Кроме того, инструмент хорош под задачи. Знаю несколько организаций которые зачем-то вместо FreePBX ставили чистый астриск а потом их админы не могли с ним справиться. Что конечно радовало меня но не радовало руководство этих организаций. А ведь им не нужны были никакие кастомизации и отлично бы подошёл FreePBX!
Dagobertus
19.08.2015 07:19Можете уточнить с чем именно не могли справиться эти админы?
varnav
19.08.2015 10:50Asterisk полностью называется Asterisk Communications Fremework, и правильнее сказать что он не конфигурируется а программируется. Если во FreePBX бывает достаточно поставить галочку, то в чистом астере зачастую надо писать пяток строчек в диалплан, а то и не пяток. Для этого надо как-то владеть «языком» на котором это пишется. В общем задача нестандартная.
Dagobertus
19.08.2015 06:59Есть частные случаи, для которых чистый астериск больше подходит, например самодельный gsm-шлюз.
Лично мне тот-же FreePBX просто неудобен. Редактирование конфигов напрямую для меня проще и нагляднее.
gadzhi15
19.08.2015 11:01Пробовал настроить FreePBX с GSM шлюзом AddPac. Были откровенные глюки, хотя все настройки были корректные. В итоге поставил Asterisk. Имхо настройка где-то даже проще. И уже глубоко понимаешь что и как работает
JuriM
19.08.2015 11:02+2Действительно, очень много статей по астериску, где подробно расписывается процесс сборки астериска со всеми модулями из исходников, и в конце — теперь все, запускаем астериск и можно звонить!
Как именно звонить — остается загадкой.
litnialex
25.08.2015 12:50MKudryavcev, прекрасная статья! Только «insecure=port,invite» в шаблоне пользователей — это прямо ножом по сердцу. Люди ведь потом плюются на Астериск, говоря, что он дырявый как решето. А все дело в настройках.
Это круто, что вы решили поделиться опытом с другими. И если цель статьи еще и поднобраться опыта с фидбеков — мой вам совет, insecure использовать исключительно там, где это абсолютно необходимо.
CANMOS
25.08.2015 15:31Некоторый опыт по прикручиванию Asterisk к российским сетям связи у нас есть, возможно напишем статью и поделимся с вами MKudryavcev.
de1m
мне вот итересно в чём приимущество asterisk перед freepbx? В freepbx тоже можно при желании руками писать, но смысл?
MKudryavcev
Преимущество в том, что чистый asterisk делает то что нужно, а не то что можно. FreePBX, как и другие сборки, напичкан всем что пихается и в него установлено все, что устанавливается. Из-за этого очень сложно что либо переделать под свои задачи, а конфиг и диалплан, сгенерированные web-интерфейсом, невозможно переписать вручную в файле конфигурации.
Emily_Rose
Если человеку достаточно дыр в самом Астериске, то дополнительные дыры FreePBX, ему не особо нужны. Лично для меня FreePBX абсолютно не юзабелен. Большая часть модулей, которые там есть, не достаточно гибкие, что б ими пользоваться. Это мое личное мнение.
Dagobertus
На мой взгляд, на выбор между «чистым» asterisk'ом и freepbx может повлиять первое знакомство. Например я, начав с «чистого», не смог потом освоить freepbx. Для меня последний неудобен.