По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Задача: Организовать многоканальный номер, который будут обслуживать несколько операторов, с возможностью просмотра статистики и прослушивания записей разговоров в спорных ситуациях. Многоканальный номер подается оператором в SIP-транке. Операторы будут подключаться или с помощью sip-клиента на ПК (с использованием гарнитуры), или с помощью отдельного стационарного телефона. $dbName_ecom = "to-www_ecom"; $GoodID = "5552350028"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName_ecom) or die(mysql_error()); $query_ecom = "SELECT `model`, `itemimage1`, `price`, `discount`, `url`, `preview115`, `vendor`, `vendorCode` FROM `items` WHERE itemid = '$GoodID';"; $res_ecom=mysql_query($query_ecom) or die(mysql_error()); $row_ecom = mysql_fetch_array($res_ecom); echo 'Кстати, купить '.$row_ecom['vendor'].' '.$row_ecom['vendorCode'].' можно в нашем магазине Merion Shop по ссылке ниже. С настройкой поможем 🔧 Купить '.$row_ecom['model'].''.number_format(intval($row_ecom['price']) * (1 - (intval($row_ecom['discount'])) / 100), 0, ',', ' ').' ₽'; $dbName = "to-www_02"; mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение "); mysql_select_db($dbName) or die(mysql_error()); Учитывая все вышеперечисленное, принято решение установить ip-АТС, которая "из коробки" поддерживает работу по протоколу SIP и запись разговоров. Можно было бы настроить Asterisk, например, на базе FreePBX или Elastiks, но учитывая цену необходимого системного блока, а так же трудозатраты, остановились на аппаратной реализации. Под наши нужды вполне подошла младшая модель линейки ip-АТС производителя Grandstream UCM6202. Общий набор оборудования под этот небольшой проект: IP-АТС Grandstream UCM6202 Два телефона Fanvil X2C телефон для контакт-центра (без трубки) Две гарнитуры Fanvil HT201 - Headset - HD моно гарнитура для телефонов Настройка Grandstream UCM6202 Подключение к устройству Для подключения к АТС с последней версией прошивки, разъем WAN устройства необходимо подключить к роутеру, который раздает адреса по DHCP. Так же к этой сети должен быть подключен Ваш ПК, с которого Вы собираетесь производить настройку. На лицевой панели АТС есть маленький ЖК-дисплей состояния, на котором отображается текущее состояние устройства. На этом экране можно увидеть ip-адрес, который получило устройство и по которому можно подключиться к нему. Учетные данные для подключения: login: admin password: <указан на нижней стороне устройства на наклейке со штрих-кодом> Смена пароля Для удобства (и безопасности), после первого входа этот пароль можно сменить, сделать это довольно просто. Для этого в левой панели выбрать раздел "Обслуживание/Пользовательское управление", в появившемся справа списке выбрать необходимую учетную запись (в данном случае, она будет единственной) и нажать в этой строчке на пиктограмму "редактировать": На открывшейся странице вводим старый пароль, отмечаем галочку "сменить пароль" и вводим новый пароль: После выполнения нужных действий необходимо нажать на кнопку "сохранить" вверху справа. Так же, чтобы изменения вступили в силу, необходимо нажать на кнопку "Применить изменения" (она появляется только в случае, когда настройки еще не применены). Добавление внутренних номеров (абонентов) В Asterisk и ему подобных системах внутренние номера называются Extensions (или расширения). Для подключения абонентов необходимо добавить новые расширения и задать им параметры. Эта процедура выполняется в следующей форме ("Расширение/Транк Добавочные номера": Нажимаем кнопку "Добавить" и открывается следующая страница: На ней заполняем поля, отмеченные красной звездочкой. Основные, которые нам понадобятся для регистрации sip-телефонов (или sip-клиентов), находятся в разделе "Общие": "Добавочный номер", "Пароль SIP/IAX". В поле "Разрешение" указываем уровень доступа абонента к услугам связи. В системе несколько уровней доступа, минимальный "локальный", максимальный "международный". Эти же уровни назначаются исходящим маршрутам. Соответственно, если у маршрута уровень "локальный", его смогут использовать абоненты с любым уровнем, если уровень маршрута "национальный", для доступа к маршруту у абонента должен быть уровень "национальный" или выше. По-умолчанию, назначается уровень "Страна", который подразумевает отсутствие всяких ограничений, о чем выводится соответствующее предупреждение при сохранении настроек. В разделе "Пользовательские настройки" можно указать имя и фамилию, которые будут отображаться в истории вызовов и на экранах некоторых типов телефонов. Здесь же в поле "Пароль" указывается пароль для доступа к личному кабинету абонента, где он может просмотреть свою историю звонков и прослушать записи (если запись разговоров активирована). По окончании настройки необходимо сохранить внесенные изменения и применить настройки. Так же в станции есть возможность подключения до двух аналоговых телефонов. Для этого при создании внутреннего номера выбираем тип расширения "FXS-расширение". При создании здесь нужно указать порт FXS, через который будет подключаться телефон, в поле "Аналоговая станция". На вкладке "Среда" есть возможность тонкой настройки линии и параметров Flash, которые используются для перехода в режим удержания вызова: Добавление транков (линий от оператора связи) К станции можно подключить VoIP-транки, а так же аналоговые линии, используя два разъема FXO. Создание VoIP -транка Для создания SIP-транка перейдем в раздел "Расширение/Транк VoIP-транки": Нажимаем кнопку "Добавить SIP транк", появится форма: Поля для заполнения будут различаться в зависимости от того, какой тип транка выбран с регистрацией или без нее. Для настройки транка без регистрации - "Транк SIP (пир)", достаточно указать произвольное название в поле "Имя поставщика", ip-адрес или доменное имя удаленной станции в поле "Имя узла". Дополнительно можно указать номер CallerID, который будет подставляться при исходящих звонках с этого транка. Этот CallerID, указываемый в поле "Идентификатор вызывающего абонента", имеет низкий приоритет перед параметром в других разделах (например, в настройках внутреннего номера). Пояснение есть в подсказке в самом веб-интерфейсе. Создание аналогового транка (в нашем случае не используется) Переходим в раздел "Расширение/Транк Аналоговые транки". Нажав кнопку "Добавить", увидим следующую форму: Здесь задаем произвольное имя транка, указываем порты FXO, которые задействуем в данном транке. В разделе "Параметры тонового сигнала" в поле "Страна сигнала" следует выбрать Российскую Федерацию, чтобы сигналы КПВ, занятости и прочие звучали в привычной для нашей страны форме. Параметр "Схема идентификатора вызывающего абонента" влияет на определение номера звонящего, который выдает оператор в линию (если эта услуга подключена). Этот параметр следует уточнить у своего поставщика услуг, или подобрать опытным путем. В полях "Усиление приема" и "Усиление передачи" можно ввести значения от -13дБ до +12дБ. В большинстве случаев данные параметры можно оставить по-умолчанию. Параметр "Усиление приема" следует уменьшить, если при связи через эту линию вы слышите абонента слишком громко, и увеличить в противном случае. Параметр "Усиление передачи" влияет на слышимость для абонента на другой стороне, то есть, если он слышит Вас слишком тихо, параметр нужно увеличить, если слишком громко уменьшить. Добавление маршрутов Для того, чтобы осуществлять вызовы, в станции должны быть маршруты. Для начала создадим исходящий маршрут. После нажатия кнопки "Добавить", появляется следующая форма: Здесь необходимо указать название маршрута, задать шаблон для выхода на это направление и выбрать созданный ранее транк в разделе "Основной транк". В этом же разделе имеется возможность отрезать начальные цифры в набираемом номере, например, если внутренние абоненты набирают "9" для выхода на внешнюю линию. Для этого в поле "Ряд" необходимо указать количество цифр, которые нужно удалить. В поле "Добавление в начало" можно указать цифры, которые необходимо добавить в начало номера перед отправкой оператору. Указав уровень привилегии в разделе "Общие", можно ограничить доступ некоторым абонентам, если указать их уровень привилегий ниже, чем у транка. Особое внимание следует уделить полю "Шаблон", в котором задается шаблон символов, которые нужно набрать для выхода на этот маршрут. Если маршрут единственный, как в нашем случае, можно ограничиться комбинацией _x.. Здесь: _ - символ начала шаблона (обязательный); x - любая цифра от 0 до 9; . - любое количество любых возможных символов. Если в станции несколько транков и необходимо разграничить выходы на них, то в шаблонах необходимо обозначить символы для выхода на каждое направление. Правила задания шаблонов есть в подсказке в веб-интерфейсе. В общем случае, шаблоны соответствуют шаблонам Asterisk, информацию по которому можно найти в интернете. В дополнительных настройках есть возможность указать резервный транк, на который будет направляться вызов при неработоспособности основного, а так же задать маршрутизацию по времени. Для того, чтобы принять входящий вызов, необходимо настроить входящие маршруты. Как обычно, нажимаем кнопку "Добавить", открывается следующая форма: В поле "Транки" указывается транк, к которому будет применяться маршрут. Так как у нас создан только один транк, он здесь указан по-умолчанию. В поле "Шаблон" мы указываем те символы, которые ожидаем получить от оператора в качестве Б-номера (вызываемого номера, то есть того, который набрал внешний абонент). В нашем случае, у оператора приобретен один номер, в городе шестизначная нумерация, соответственно, мы указываем его в шаблоне: _294259 В этом случае, если оператор пришлет другой номер, вызов смаршрутизирован не будет. Мы так же могли бы указать шаблон < _x. >, в этом случае все вызовы, вне зависимости от Б-номера, будет проходить по указанному маршруту. Если мы приобретаем несколько номеров, то мы можем маршрутизировать каждый номер отдельно, создавая маршрут на каждый номер и указывая в нем в качестве шаблона необходимый Б-номер. Далее, в разделе "Режим по умолчанию", необходимо указать "Назначение по умолчанию" из выпадающего списка. Например, если выбрать параметр "Добавочный номер", то далее мы можем указать любой внутренний номер, существующий в станции: Если выбрать "Очереди", появится возможность выбрать созданную ранее очередь вызовов. В нашем случае необходимо организовать многоканальный номер. Вызов необходимо направить в очередь, где будет два оператора. Чтобы указать эту очередь в маршруте, она должна существовать. Создадим ее, а затем отредактируем входящий маршрут. Создание очереди вызовов Переходим в раздел "Опции вызова/Очередь вызовов" и нажимаем "Добавить": Отрывается форма основных параметров очереди: Здесь следующие поля для настройки: Расширение внутренний номер очереди. Система сама указывает номер, изменять его нет необходимости Стратегия определяет стратегию вызова операторов очереди. В нашем случае выбираем "Звонок всем": все телефоны, включенные в очередь, будут звонить одновременно. Описание всех стратегий есть во всплывающей подсказке. Имя название очереди, по которому мы сможем различать ее в других разделах настройки станции. Музыка при удержании если оставить по-умолчанию, при попадании в очередь звонящий слышит музыку. Есть так же возможность установить обычные гудки - сигнал контроля посылки вызова. Файлы для функции "Музыка при удержании" можно менять, добавлять и отключать по своему смотрению. Подробнее можно посмотреть в разделе "Настройки АТС / Музыка при удержании". В разделе "Приветственное сообщение" мы можем добавить голосовое приветствие, загрузив аудиофайл соответствующей кнопкой. Файл в формате mp3. Остальные параметры можно оставить по-умолчанию. Во вкладке "Агенты" приведен список доступных внутренних номеров, здесь необходимо выбрать номера, которые будут принимать звонки: Сохранив изменения, теперь мы можем отредактировать входящий маршрут, указав в назначении вновь созданную очередь вызовов. Сохранение записей разговоров Для сохранения записей разговоров в станцию устанавливается дополнительная память. Есть возможность подключить флеш-накопители SD или USB (на задней панели есть соответствующие порты). Устройство поддерживает объем памяти до 128Гб. Перед установкой накопителя его необходимо отформатировать в формате NTFS. После установки, накопитель должен отобразиться в панели состояния системы ("Состояние системы / Панель"), в разделе "Емкость памяти устройства": Чтобы выбрать устройство для хранения записей, необходимо перейти в раздел "Настройки АТС / Настройки хранения записей". По-умолчанию включена функция автоопределения, то есть, если установлено внешнее запоминающее устройство, оно будет выбрано автоматически. Запись разговоров можно настроить для разных категорий: Для внутренних номеров в разделе редактирования номера на вкладке "Функции" внизу есть параметр "Автоматическая запись": Для очереди вызовов так же есть данный параметр: Следует отметить, что если запись будет включена и для очереди вызовов, и для каждого участника данной очереди, записи будут дублироваться в детализации. Файлы аудио доступны для просмотра и прослушивания в разделе "CDR/Записи": Справа, напротив каждой записи, есть пиктограммы для прослушивания, скачивания или удаления записи. Данная форма доступна для администратора системы. При этом каждый пользователь системы (каждый абонент имеет учетную запись для входа в систему) может просматривать только свои записи: Для того, чтобы у одного сотрудника была возможность просматривать статистику и прослушивать записи всех операторов, создадим учетную запись в системе с такими правами. Переходим в раздел "Обслуживание/Пользовательское управление" и переходим на вкладку "Пользовательская привилегия": Нажав кнопку добавить, создадим новую привилегию "supervisor" и назначим ему три привилегии из доступного списка: Теперь перейдем в этом же раздела на вкладку "Информация о пользователе" и добавим нового пользователя, назначив ему вновь созданный уровень привилегий ("Пользовательская привилегия: supervisor") : После применения настроек, созданный пользователь сможет просматривать записи всех абонентов системы: На этом основная настройка системы окончена. Конфигурирование облегчается тем, что почти по всем параметрам имеется встроенные в веб-интерфейс подсказки, которые всплывают при поднесении курсора к соответствующему полю. Версия ПО устройства: 1.0.20.8 Версия программы: 1.0.20.17
img
Привет, друг! Мы подготовили удобную инструкцию по установке и настройке SFTP-сервера Linux. Что такое SFTP? SFTP - это безопасный протокол передачи файлов - «Secure SHell» File Transfer Protocol. То есть это версия FTP, которая для безопасности поверх использует SSH. FTP делает то же самое, но без шифрования, поэтому использовать SFTP предпочтительнее. Установка SFTP-сервера на Linux Чтобы выполнить эти шаги, вам нужно иметь права sudo. SFTP прост в установке, но сначала необходимо установить OpenSSH со стороны сервера и SSH-пакет со стороны клиента. Чтобы установить OpenSSH на сервер, используйте следующую команду: sudo apt install openssh-server [Ubuntu/Debian] sudo yum –y install openssh-server openssh-clients [CentOS/RHEL] Вам также понадобится SSH на компьютере, с которого вы хотите получать доступ к серверу SFTP. sudo apt install ssh [Ubuntu/Debian] Теперь все готово для настройки SFTP. Этап 1: Создание групп, пользователей, каталогов Для безопасного использования SFTP, лучше всего создать группы и пользователей, которые будут использовать только эту службу. Создадим группу с названием sftpg, при помощи комыды groupadd: sudo groupadd sftpg Далее создадим пользователя seenisftp, и добавим его в группу. sudo useradd -g sftpg seenisftp sudo passwd seenisftp В команде useradd параметр -g указывает группе, какого пользователя нужно добавить. Предположим, что вы хотите использовать каталог /data/ в качестве корневого для sftp, а /data/USERNAME - для каждого пользователя. Поэтому, когда пользователи входят через sftp, они должны будут оказаться в каталоге /data/USERNAME. Также создадим ограничение при котором пользователи смогут читать файлы из этого каталога, но загружать их смогут только в каталог uploads. Cоздадим каталоги и изменим их доступ: sudo mkdir -p /data/seenisftp/upload sudo chown -R root.sftpg /data/seenisftp sudo chown -R seenisftp.sftpg /data/seenisftp/upload Важно: убедитесь, что владелец /data/USERNAME и есть root, это обязательно для изменения корневого каталога в SFTP Этап 2: Настройка sshd_config Далее нужно настроить сервер так, чтобы когда пользователь, из группы sftpg, входил в систему, он попадал в sftp вместо обычной оболочки, в которую попадает через ssh. Добавьте следующий фрагмент кода в файл /etc/ssh/sshd_config: Match Group sftpg ChrootDirectory /data/%u ForceCommand internal-sftp ChrootDirectory позволяет создать необходимый каталог в качестве корневого узла (/ каталог) в дереве каталогов. Вошедший в систему пользователь не сможет увидеть ничего выше этого каталога и это не даст ему получить доступ к файлам других пользователей. %u - это escape код для заполнения его текущим именем пользователяm, во время входа в систему. Этап 3: Перезагрузите службу Чтобы выполнить внесенные в sshd_config изменения, перезапустите службу: sudo systemctl restart sshd Доступ к SFTP через командную строку Linux Заходите в SFTP также как в SSH: sftp seenisftp@merionet.ru Примеры команд SFTP Синтаксис команд SFTP: COMMAND [SOURCE] [DESTINATION] Параметрами могут быть либо локальные, либо удаленные системные пути. GET - загрузка содержимого с удаленного сервера в локальную систему. GET poster.img ~/Pictures PUT - загрузка содержимого из локальной системы в удалённую. PUT ~/Pictures/picture2.jpg uploads/ RM – предназначен для удаления файлов в удалённой системе. RM uploads/picture3.jpg
img
На просторах Интернет можно найти много инструкций по настройке Asterisk с использованием графического интерфейса FreePBX. И они помогают настраивать и управлять АТС в большинстве случаев. Но гораздо больше возможностей дает настройка «чистого» Asterisk. В статье мы сделаем базовую настройку Asterisk через конфигурационные файлы. Предполагается, что у нас уже установлена и первоначально настроена ОС, скачены и установлены модули dahdi, libpri, iax2, необходимые голосовые файлы и кодеки и проинсталлирован Asterisk. Если вы еще не ничего не установили, то посмотрите в нашей статье как установить Asterisk на CentOS 7 А еще вам понадобится установить sngrep для трассировки и отладки SIP-сообщений. Погнали? Теория Итак, приступаем к внедрению Asterisk. Структура используемых Астериском директорий следующая: /usr/lib64/asterisk/modules – тут находятся загружаемые модули; /var/log/asterisk – тут находятся лог-файлы, в том числе и лог звонков (если не настроено другое); /var/spool/asterisk – тут находятся подпапки, в которых находятся бэкапы, записи разговоров, голосовая почта, факсы и так далее; /var/lib/asterisk – тут находятся подпапки, в которых находятся звуковые файлы для музыки на удержании, звуковые файлы для выбранных языков (например для проигрывания голосовых сообщений в IVR), записанные голосовые сообщения для приветствия и так далее. Конфигурационные файлы находятся в папке /etc/asterisk. Для работы каждого модуля Asterisk необходим конфигурационный файл. Эти файлы (с расширением .conf), содержат определения каналов, описывают различные внутренние сервисы, определяют местоположения других модулей, устанавливают связь с диалпланом. Необязательно настраивать все файлы. Требуют настройки только те, которые необходимы для вашей конфигурации. Основные конфигурационные файлы: asterisk.conf – определяет глобальные параметры, директории и опции для запуска Asterisk; cdr.conf – определяет настройки для записи параметров вызовов в файл или базу данных; sip.conf – определяет настройки для использования SIP-протокола (как общие, так и параметры для регистрации провайдеров, внутренних пользователей и так далее); rtp.conf – определяет порты для голоса (RTP); iax.conf – определяет настройки для использования IAX-протокола (как общие, так и параметры для регистрации провайдеров, внутренних пользователей и так далее); extensions.conf – основной файл, в котором описывается весь диалплан, то есть правила обработки всех вызовов; features.conf – описывает дополнительные функции (переадресации, парковка вызова, включение записи по запросу и так далее); logger.conf – определяет тип и детальность сообщений, записываемых в файлы журналов; modules.conf – определяет какие модули будут или наоборот не будут загружаться при запуске Asterisk; musiconhold.conf – используется для конфигурации разных классов музыки, используемых в приложениях музыки во время ожидания, и их местоположений; Напомним, что это только часть конфигурационных файлов. Необходимые файлы можно добавлять в любой момент по мере необходимости. Примеры и содержание таких файлов можно найти в архиве по кнопке ниже: Скачать архив Сразу после установки asterisk, если не была выбрана установка базовой конфигурации, в ней нет ни одного файла. Для подключения к asterisk в режиме командной строки необходимо ввести asterisk –rvvvvv r – подключение к уже запущенному процессу; vvvvv – уровень логирования, то есть вывода информации (от слова verbose - v). Чем больше v выставляем, тем более детальная информация будет выдаваться в командную строку; Создаем и редактируем необходимые файлы Начнем с файла asterisk.conf: [directories](!) – указываем расположение необходимых директорий. Знаком (!) указывается признак шаблона. В шаблоне указываются общие настройки, на которые можно ссылаться дальше. [options] – указываем необходимые опции, одна из необходимых maxcalls указывает на количество одновременных вызовов, разрешенных на Asterisk; transmit_silence_during_record = yes - передавать тишину SLINEAR во время записи канала; languageprefix = yes | no - Должен ли код языка быть последним или первым компонентом имени звукового файла? Если выключен, поиск звуковых файлов ведется в формате // Если включен, поиск ведется в формате //; execincludes = yes | no - Разрешить записи #exec в конфигурационных файлах; hideconnect = yes | no - Показывать сообщение о подключении удаленных консолей; dontwarn = yes | no - Отключить предупреждения (warning messages); debug = no - Отладка: No или значение (1-4); maxcalls = 10 - Максимальное число одновременных вызовов; Приступаем к файлу cdr.conf. Комментарии к опциям в конфиге: [general] enable=yes ; включаем саму возможность логирования звонков unanswered=no ; неотвеченные звонки не логируем safeshutdown=yes ; при выключении сервера будем ждать, пока не допишутся ВСЕ логи [csv] usegmtime=yes ;лог date/time в формате GMT. По умолчанию NO loguniqueid=yes loguserfield=yes Закончили. Теперь файл features.conf: [general] [featuremap] ; тут описываем используемые функции и их параметры blindxfer => ## ; безусловный перевод atxfer => *2 ; условный перевод automon => *1 disconnect => ** parkext => 700 ; парковка parkpos => 710-780 ; диапазон портов для парковки context => parkedcalls ; контекст для обработки запаркованных звонков parkingtime => 180 ; время парковки comebacktoorigin => no ; возвращать звонок на инициатора, когда закончилось время парковки вызова parkedplay => both ; кому играть courtesytone когда вызов снимается с парковки. Опции: callee, caller, both или no(по умолчанию) parkedcalltransfers => caller ; Кто может сделать трансфер припаркованного вызова с помощью DTMF. Опции: callee, caller, both или no(по умолчанию) parkedcallrepark => caller ; Кто может перепарковать, припаркованный вызов с помощью DTMF. Опции: callee, caller, both или no(по умолчанию) parkedcallhangup => no ; Кто может закончить, припаркованный вызов с помощью DTMF Опции: callee, caller, both или no(по умолчанию) parkedcallrecording => no ; Кто может инициировать запись, с помощью DTMF. Опции: callee, caller, both или no(по умолчанию).. parkedmusicclass => default ; Класс музыки ожидания для припаркованного, adsipark => no ; Передавать или нет ADSI инфо о припаркованном вызове тому кто припарковал findslot => first pickupexten => *8 ; перехват звонка [applicationmap] ; тут описываем используемые приложения sendsms => *99,peer/both,Macro,sendsms pitch => *00,self/both,Macro,pitch Теперь конфигурируем RTP в файле rtp.conf [general] rtpstart=36600 rtpend=39999 Музыка на ожидании в здании. Открываем файл musiconhold.conf [default] mode=files directory=/var/lib/asterisk/moh/ Следом открываем файл logger.conf: [general] [logfiles] console => notice,warning,error,dtmf,verbose(5) ; уровень детализации сообщений, выводимых в консоль full => debug,notice,warning,error,verbose(9),dtmf,fax,security ; уровень детализации сообщений, выводимых в лог-файл Для удобства работы рекомендуется ограничивать уровень детализации сообщений, выводимых в консоль, но для вывода в файл выставить максимальный уровень детализации. И напоследок - файл modules.conf. Есть 2 варианта: либо читаем все модули и указываем те, которые не надо читать: [modules] autoload=yes noload => codec_g723-ast110-gcc4-glibc-x86_64-core2-sse4.so Либо указываем конкретные модули, которые необходимо прочитать и запрещаем чтение всех. В этом случае для удобства лучше поделить модули на секции. Ниже приведена часть такого варианта: [modules] autoload = no ; Applications load = app_bridgewait.so load = app_dial.so load = app_playback.so ; Bridging load = bridge_builtin_features.so load = bridge_builtin_interval_features.so load = bridge_holding.so ; Call Detail Records load = cdr_custom.so ; Channel Drivers load = chan_bridge_media.so load = chan_sip.so ; Codecs load = codec_gsm.so load = codec_ulaw.so load = codec_alaw.so load = codec_g722.so ; Formats load = format_gsm.so load = format_pcm.so load = format_wav_gsm.so load = format_wav.so ; Functions load = func_callerid.so load = func_cdr.so load = func_pjsip_endpoint.so ; Core/PBX load = pbx_config.so ; Resources load = res_musiconhold.so load = res_pjproject.so load = res_pjsip_acl.so В данной статье мы используем первый вариант. На этом с настройкой основных файлов закончим. В дальнейшем по мере необходимости в них можно вносить изменения. Все последующие настройки мы будем вносить в файлы sip.conf и extensions.conf. Погнали к созданию и регистрации внутренних абонентов. Создание и регистрация внутренних абонентов В sip.conf указываем сначала общие параметры SIP для Asterisk: [general] bindaddr=0.0.0.0 ; указываем IP-адрес и порт, на котором будет приниматься bindport=5060 ; SIP-трафик language=ru ; используемый язык для голосовых сообщений alwaysauthreject=yes allowguest=no ; запрещаем принимать «гостевые» звонки, то есть вызовы от незарегистрированных пользователей Так же в этой секции можно указать поддерживается ли видео, время регистрации, перечислить локальные сети, указываем внешний IP-адрес в случае использования NAT и так далее. В случае, когда у нас есть разные группы абонентов (например, есть несколько отделов, подразделений либо другие какие-то признаки группировки абонентов или абонентов большое количество), рекомендуется использовать шаблоны, в которые можно выносить обобщенные настройки. Имя шаблона берется в скобки [ ] и следом указывается (!). В шаблоне можно указать контекст для этих абонентов, используемые кодеки, разрешенные/запрещенные сети для регистрации этих абонентов, использование NAT и так далее. Пример шаблона приведен ниже: [office](!) type=friend deny=0.0.0.0/0.0.0.0 permit=192.168.10.0/255.255.255.0 host=dynamic context=from-internal nat=no qualify=yes directmedia=no disallow=all allow=alaw allow=ulaw dtmfmode=info И таких шаблонов можно может быть несколько. Теперь для создания записи для регистрации абонентов нам достаточно указать только отличительные параметры, такие как внутренний номер, имя абонента, пароль для регистрации и так далее. [НОМЕР](ШАБЛОН) callerid=ИМЯ secret=ПАРОЛЬ callgroup=5 ; номер группы вызова pickupgroup=1,2,3,4,5 ; номера групп перехвата вызовов Пример настройки: В результате, по команде sip show peers мы видим зарегистрированных пользователей Абоненты зарегистрировались, но позвонить даже между собой они пока не могут. Для того, чтобы они могли совершать и принимать звонки необходимо настроить маршрутизацию (или диалплан). Делать это мы будем в файле extensions.conf, там тоже есть своя структура. И тут мы снова немного погружаемся в теорию: Диалплан состоит из следующих основных элементов: контексты; добавочные номера; приоритеты; приложения; Контекст – часть (раздел) диалплана, описывающая алгоритм обработки вызова и изолированная от остального диалплана. Содержит дополнительные номера (extension). Дополнительные номера, определенные в одном контексте, полностью изолированы от добавочных номеров в другом контексте, если это не разрешено специально. Так же с помощью контекстов можно ограничивать доступ к различным функциям (например к междугородним или международным звонкам). Имя контекста заключается в квадратные скобки []. Рекомендуется создавать разные контексты для внутренних абонентов и для транков. В начале диалплана находятся два специальных контекста, [general] и [globals] [general] – содержит список общих настроек диалплана; [globals] – содержит глобальные переменные; Эти два контекста являются специальными. Контекст является одним из обязательных параметров как для абонента, так и для транка. Asterisk определяет контекст для обработки по тому принципу откуда пришел вызов, а не куда он пришел, то есть если пришел вызов на мобильный номер от абонента, то применяться будет тот контекст, который прописан у конкретного абонента, а не указанный в транке. Добавочные номера – это широкое понятие, которое определяет уникальные последовательности шагов (каждый шаг включает приложение), которые Asterisk будет применять к вызову по этой линии. В каждом контексте может быть задано столько добавочных номеров, сколько требуется. При вызове конкретного добавочного номера (входящим или внутренним звонком) Asterisk будет выполнять шаги, определенные для этого добавочного номера. Поэтому именно добавочные номера определяют, что происходит со звонками при их обработке соответственно диалплану. Полный добавочный номер состоит из трех компонентов: Имени (или номера). В качестве имени может быть использованы любые комбинации цифр и букв; Приоритета (каждый добавочный номер может включать множество шагов; порядковый номер шага называется его приоритетом); Приложения (или команды), которое выполняет некоторое действие над вызовом; Эти три компонента разделяются запятыми: exten => имя,приоритет,приложение() Есть ещё зарезервированные добавочные номера: s - когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер, они передаются на добавочный номер s. (s - сокращение от start (начало), поскольку именно здесь начнется обработка вызова, если не передана информация о добавочном номере.; i - когда абонент нажимает не ту кнопку (не существующий добавочный номер), вызов направляется на добавочный номер i; t - если абонент слишком долго не нажимает кнопку после запуска приложения WaitExten(), вызовы направляются на добавочный номер t (время ожидания по умолчанию - 10 с); h - экстеншен обрабатываемый при завершении вызова. После того как медиаканал закрылся; Иногда можно встретить использование same вместо exten. Это применяют в основном с автоматическим выставлением приоритета, то есть same => n и означает «тоже самое, продолжение предыдущего» Приоритеты – последовательность выполнения приложений. Каждый приоритет пронумерован последовательно, начиная с 1, и выполняет одно определенное приложение. В Asterisk есть еще приоритет n, что означает «следующий». Каждый раз, когда Asterisk встречает приоритет n, она берет номер предыдущего приоритета и добавляет 1. Это упрощает внесение изменений в диалплан, поскольку теперь не надо изменять номера всех шагов. Приложения – выполняет определенное действие в конкретном дополнительном номере (например воспроизведение звука, прием тонального ввода, вызов канала, разрыв соединения и так далее). Для выполнения некоторых приложений, таких как Answer() и Hangup(), не требуется никаких дополнительных инструкций. Некоторым приложениям необходима дополнительная информация. Эти данные, называемые аргументами, могут передаваться в приложения, чтобы оказывать влияние на то, как они выполняют свои действия. Чтобы передать аргументы в приложение их указывают через запятую в круглых скобках, следующих за именем приложения. Для внесения комментариев в файл extensions.conf используют ; - вы уже могли об этом догадаться, судя по нашим комментариям прямо в конфигах :) Таким образом можно как делать пометки для себя, так и делать невыполнимыми строки конфигурации (например, во время отладки) Теперь давайте вернемся к нашим созданным абонентам. Создадим контекст, который указан у абонентов (context=from-internal) В нем мы прописали что при наборе номера (ИМЯ), с приоритетом 1 выполнить приложение Dial c параметрами ПРОТОКОЛ/НОМЕР. Когда номеров немного, то можно конечно и так описывать. Но более правильно и красиво сделать тоже самое, но с использованием «маски»: То есть при наборе любого номера из диапазона 10хх (шаблон показан нижним подчеркиванием) выполнить вызов с приоритетом 1 через приложение Dial с параметрами ПРОТОКОЛ/НАБРАННЫЙ_НОМЕР, время вызова 60 секунд и можно использовать перевод звонка (transfer). Шаблон номера - это уникальный набор цифр, который определяет использование этого номера. Если набранный номер соответствует этому шаблону, то последующие номера не рассматриваются. Формат заполнения шаблона: X - совпадение любой цифры от 0 - 9; Z - любая цифра от 1 до 9; N - совпадение любой цифры от 2 - 9; [1237-9] - соответствует любым цифрам или буквам и скобках (в этом примере,1,2,3,7,8,9); Перечитываем диалплан в консоли Asterisk командой dialplan reload и видим выполнение вызова. Таким образом мы можем придумать и реализовать практически любой диалплан. Например для запрета вызовов на международную связь достаточно прописать 3 строчки: То есть при наборе 810 будет проиграно сообщение destination-closed (если оно было загружено в Asterisk) и будет отправлен сигнал отбоя. Создание и регистрация транков Ну, начнем с того, что IP-транки, используемые в Asterisk, бывают 2-х видов – SIP и IAX. SIP-транки в основном используются для подключения провайдеров, а IAX-транки для подключения других Asterisk. Транки могут быть с регистрацией (то есть когда провайдер выдает логин, пароль и адрес или домен для регистрации у него) и без регистрации (то есть когда подключение идет по IP-адресу без логина и пароля). В случае с регистрацией в файле sip.conf необходимо сразу после секции [general] указать строку регистрации в формате: register => ЛОГИН:ПАРОЛЬ@SIP-ПРОВАЙДЕР/НОМЕР Тут: SIP-ПРОВАЙДЕР - указывается или IP-адрес провайдера или его домен; ЛОГИН:ПАРОЛЬ - выдаются провайдером для подключения; НОМЕР - указывается городской номер, выданный провайдером для совершения звонков; Рассмотрим создание SIP-транка с регистрацией. Опять же если у нас несколько (до 3-5) таких транков, то можно их описать каждый отдельно. А если из больше или в дальнейшем планируется увеличить их количество, то можно использовать шаблон для подключения к оператору. [voip-provider](!) ; имя шаблона type=peer ; тип подключения context=from-trunk ; используемый контекст для обработки вызовов disallow=all ; выключаем все кодеки allow=alaw ; указываем используемые кодеки allow=ulaw insecure=invite,port ; не запрашивать авторизацию на входящие звонки qualify=yes ; проверка доступности directmedia=no ; запрещаем установление прямых соединений для передач голоса dtmfmode=rfc2833 ; указываем используемый тип DTMF дальше достаточно описать конкретные настройки для конкретного оператора и указать какой шаблон использовать [ОПЕРАТОР-1](voip-provider) defaultuser=ЛОГИН-1 fromuser=ЛОГИН-1 secret=ПАРОЛЬ-1 host=ДОМЕН1- ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ fromdomain= ДОМЕН-1 ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ [ОПЕРАТОР-2](voip-provider) defaultuser=ЛОГИН-2 fromuser=ЛОГИН-2 secret=ПАРОЛЬ-2 host=ДОМЕН-2 ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ fromdomain= ДОМЕН ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ Дальше указываем строки для регистрации у данных операторов: register => ЛОГИН-1:ПАРОЛЬ-1@ДОМЕН-1/НОМЕР-1 register => ЛОГИН-2:ПАРОЛЬ-2@ДОМЕН-2/НОМЕР-2 Перечитываем файл sip.conf и проверяем регистрации: В случае подключения транка без регистрации можно использовать тот же шаблон, а в настройках транка указать изменяемые параметры [AST10SIP](voip-provider) type=friend ; для транка без регистрации указываем friend (то есть мы доверяем этому подключению) port=5060 ; указываем порт для подключения insecure=port,invite host=IP-АДРЕС_ПРОВАЙДЕРА context=from-trunk-sip-AST10SIP ; если обработки вызовов через этот транк используется другой контекст, то указываем его тут. Перечитываем файл sip.conf и проверяем регистрации: Теперь рассмотрим создание IAX-транка. Для настройки IAX-транков используется файл iax.conf, который содержит всю информацию, необходимую Asterisk для создания и управления каналами, работающими по протоколу IAX. Структура его примерно такая же, как и у sip.conf: [general] ; указываем глобальные параметры для протокола IAX bindaddr=0.0.0.0 bindport=4569 ; по-умолчанию IAX-протокол использует порт 4569 можно оставить его, а можно и переопределить language=ru ; указываем строки для регистрации транков register => msk-spb:SuperPASS@10.10.10.10 [msk-spb] username = msk-spb ; логин для регистрации на удаленной стороне type = friend trunk = yes secret = SuperPASS ; пароль для регистрации qualify = yes host = 10.10.10.10 ; IP-адрес удаленной стороны disallow= all context = from-iax ; контекст для обработки вызовов, поступающих через этот транк allow = alaw allow = ulaw Сохраняем файл iax.conf, перечитываем и проверяем регистрацию командой iax2 show peers: Если есть абоненты, работающие по протоколу IAX, то их регистрацию описываем тоже в этом же файле аналогично SIP-регистрации. Итак, сейчас мы имеем зарегистрированных абонентов, которые могут звонить друг другу, и зарегистрированные транки. Внутренних абонентов мы можем группировать по отделам: exten => 500,1,Playback(it-otdel) ; проигрывается сообщение it-otdel exten => 500,1,Dial(SIP/1001,5),Tt ; 5 секунд вызов идет на номер 1001 exten => 500,n,Dial(SIP/1002&SIP/1003) ; потом вызов идет одновременно на 1002 и 1003 Можем настраивать различные функции, запускать различные команды (в том числе и для выполнения через ОС), настраивать запись и прослушивание разговоров и так далее: ; ответить, подождать 2 секунды и положить трубку exten => 060,1,Answer() same => n,Wait(2) same => n,Hangup() ; ответить, проиграть сообщение hello-world и положить трубку exten => 061,1,Answer() same => n,Playback(hello-world) same => n,Hangup() ; записать сообщение в файл somefile.gsm и потом его проиграть exten => 067,1,Record(/tmp/somefile.gsm,3,30) same => n,Playback(/tmp/somefile) Для совершения звонков через созданные и зарегистрированные транки SIP и IAX: Допустим через транк IAX у нас подключен другой Asterisk с внутренней нумерацией, начинающейся с 1, 2, 3. И для вызова этих абонентов мы будем использовать префикс (код выхода на маршрут) 2. Тогда строки настройки будут следующие: exten => _2[1-3].,1,Dial(IAX2/msk-spb/${EXTEN:1},30,r) exten => _2.,2,Hangup() То есть при наборе, начинающемся с 21-23, будет осуществлен вызов через транк msk-spb по протоколу IAX набранного номера, предварительно «отрезав» 1 (первую) набранную цифру. Если в течение 30 секунд не будет получен ответ, то вызов будет прекращен. Для выхода в город мы используем транк с оператором-1 и префикс выхода будем использовать 9 exten => _9849[589]XXXXXXX,1,Dial(SIP/ОПЕРАТОР-1/${EXTEN:1}) ;то есть при наборе, начинающемся с 9, будет осуществлен вызов через транк ОПЕРАТОР-1 по протоколу SIP набранного номера, предварительно «отрезав» 1 (первую) набранную цифру Тут важно понимать, что все, что мы реализовываем для внутренних абонентов, должно быть описано в соответствующем контексте. Теперь перейдем к транкам и входящим звонкам. Соответственно для того, чтобы принимать входящие вызовы, необходимо прописать маршрутизацию уже в контексте транка (context=from-trunk или context = from-iax) Для возможности через транк осуществлять вызов нашего внутреннего абонента (например через транк со встречной АТС) необходимо в контекст транка вставить exten => _10XX,1,Dial(SIP/${EXTEN},60,tTm) Давайте рассмотрим реализацию обработки входящего вызова от оператора (вызов на городской номер) через создание меню IVR и реализуем ещё определение рабочего и нерабочего времени. Схема обработки входящего вызова следующая: Рабочее время у нас определено с 9:00 до 19:00 и с понедельника по пятницу. При поступлении звонка в нерабочее время после сообщения с приветствием (01-hello) проигрывается сообщение с указанием рабочего времени (07-working-hours). При поступлении звонка в рабочее время (проверка осуществляется в строке GoToIfTime(09:00-19:00,mon-fri)) после приветствия осуществляется переход в другой контекст ([working-time]), где предлагается выбрать необходимый пункт меню (0 – вызов секретаря, 1 – вызов на группу тех. поддержки, 2 – переход в другое меню выбора (GoTo(ivr-2,s,1)), в котором по такому же принципу осуществляется выбор. В каждом меню реализован донабор внутренних номеров (exten => _1xхx,1,NoOp), обработка неправильного набора номера (exten => i,1,NoOp), обработка в случае, что если ничего не выбрали (exten => t,1,NoOp), вызов переводится на секретаря. Естественно необходимо загрузить все используемые голосовые файлы в /var/lib/asterisk/sound/ru в случае использования русского языка. Тут давайте немного по-подробнее. Как мы уже указывали выше в системе мы определили какой основной язык у нас будет использоваться для голосовых файлов (в файле sip.conf параметр language = ru). Это значит, что Asterisk будет искать имена файлов, которые мы указываем, например, в меню ivr в папке /var/lib/asterisk/sound/ru (смотрим обозначения директорий при запуске asterisk в начале статьи). Если бы мы использовали в качестве основного языка английский, то папка была бы /var/lib/asterisk/sound/en. В каждой из этих папок находятся голосовые файлы выбранных языков и в выбранных форматах, указанных при компилировании asterisk. Если мы хотим записать свои сообщения (персональные приветствия, необходимые объявления, произносимые в создаваемых меню ivr и так далее), нам необходимо положить эти файлы в папку с соответствующим языком. Сами файлы при этом можно записать любой звукозаписывающей программой (хоть программой Звукозапись, входящей в стандартный дистрибутив любой версии Windows) и сохранить в формате wav (несжатый голос, 8кГц, 16 Бит, Моно) Тут главное не перепутать имена файлов, находящихся в папке с голосовыми сообщениями, с именами, указанными в ivr меню. при этом в ivr меню имена указываются без расширения. Сам листинг приведен ниже. [from-trunk] exten => _X.,1,NoOp(Проверка времени: Если попали в диапазон - переходим в контекст working-time, если нет - продолжаем выполнение) same => n,Answer() same => n,Playback(01-hello) same => n,GoToIfTime(09:00-19:00,mon-fri,*,*?working-time,s,1) same => n,Playback(07-working-hours) same => n,Hangup() [working-time] exten => s,1,Answer() same => n,Background(01-ivr1) same => n,StartMusicOnHold() same => n,WaitExten(5) ; exten => 0,1,NoOp(Если нажали "0" - звоним секретарю) same => n,Playbacr(ostavaites-na-linii) same => n,Dial(SIP/1005,30,mtT) same => n,Hangup() ; exten => 1,1,NoOp(Если нажали "1" - звоним на группу вызова: 1001+1002) same => n,Playback(it-otdel) same => n,Dial(SIP/1001&SIP/1002,30,mtT) same => n,Hangup() ; exten => 2,1,NoOp(Если нажали "2" - перенаправляем на ivr-2) same => n,GoTo(ivr-2,s,1) ; exten => _1xхx,1,NoOp(Прямой набор внутренних номеров) same => n,Playback(ostavaites-na-linii) same => n,Dial(SIP/${EXTEN}15,mtT) same => n,Hangup() ; exten => i,1,NoOp(Обработка ошибочного набора:i=illegal) same => n,Playback(oshibka) same => n,Dial(SIP/1005,30,r) ; exten => t,1,NoOp(В случае, если не дождались нажатия) same => n,Playback(ostavaites-na-linii) same => n,Dial(SIP/1005,30,m) ; [ivr-2] exten => s,1,Background(02-ivr2) same => n,StartMusicOnHold() same => n,WaitExten(5) ; exten => 1,1,NoOp(Если нажали "1" - звоним на 1001) same => n,Dial(SIP/1001,30,mtT) same => n,Hangup() ; exten => 2,1,NoOp(Если нажали "2" - звоним на 1002) same => n,Dial(SIP/1002,30,mtT) same => n,Hangup() ; exten => _1xхx,1,NoOp(Прямой набор внутренних номеров) same => n,Dial(SIP/${EXTEN}15,mtT) same => n,Hangup() ; exten => i,1,NoOp(Обработка ошибочного набора:i=illegal) same => n,Playback(oshibka) same => n,Dial(SIP/1005,30,r) ; После сохранения файла extensions.conf перечитываем диалплан в консоли (dialplan reload) и проверяем. На этом закончим с примерами. Конфигурируя Asterisk через конфигурационные файлы, мы получаем возможность реализовать практически любую логику работы, проводить интеграции со сторонними сервисами, запускать и выполнять скрипты на уровне ОС и так далее.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59