По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Коммуникационная платформа Elastix обладает богатым функционалом и привлекательным интерфейсом. В сегодняшней статье мы пошагово разберем процесс настройки внутренних номеров (Extensions) на Elastix версии 4.0 и зарегистрируем программный «open – source» телефон MicroSIP Настройка на Elastix Переходим в web – интерфейс Elastix. Для этого введите IP – адрес АТС в браузере. Откроется окно авторизации. Введите логин и пароль администратора и нажмите Submit: Попадаем в интерфейс администратора IP – АТС. В левом меню навигации переходим в раздел PBX → PBX Configuration, где выбираем раздел настройке Extension, как показано на рисунке ниже (выделено красным): Мы будем подключать софтфон по протоколу SIP, поэтому, выбираем Generic SIP Device и нажимаем Submit: Для работы телефона достаточно создать только 3 реквизита, а именно: User Extension - внутренний номер абонента Display Name - отображаемое имя для абонента secret - пароль. Создается автоматически После заполнения данных полей, нажмите Submit, а затем Apply Config. Этого достаточно для работы софтфона, и если вы хотите сразу перейти к настройке самого программного телефона, нажмите на ссылку ниже, а мы пока рассмотрим все возможные опции в разделе Extensions: Настройка MicroSIP Разберем каждую опцию подробно. Начнем с раздела опций внутреннего номера (Extension Options): CID Num Alias - CallerID, который будет отражаться на телефонах вызываемых абонентов, в качестве определяемого номера. Эта опция может быть полезна в следующей ситуации: например, существует общий номер для сотрудников бухгалтерии (ринг группа). При звонках со своих внутренних номеров на другие экстеншены, у вызываемого абонента будет отражаться привычный номер ринг – группы, на который он обычно звонит для связи с Бухгалтерией. SIP Alias - используется при прямых SIP – звонках. Например, staff@merionet.ru. Outbound CID - исходящий CallerID (как правило, при внешних звонка через транк, провайдер так или иначе будет перекрывать CID). Asterisk Dial Options - перечень опций, передаваемых через команду Dial(). В нашем примере мы имеем значение tr. Здесь «t» означает возможность трансфера звонка вызываемым абонентом, а опция «r», генерирует гудок вызывающему абоненту при звонке. Ring Time - время звонка в секундах, перед отправкой вызова на голосовую почту. Call Forward Ring Time - время звонка в секундах, перед отправкой вызова на указанное направление недоступностей вида «не ответ» или «недоступность». Outbound Concurrency Limit - максимальное количество одновременных исходящих от пользователя вызовов. Call Waiting - данная опция позволяет получать параллельный во время разговора вызов по тому же каналу. Internal Auto Answer - если данное значение выставлено на Intercom, то будет происходить автоматический ответ на входящий вызов. Call Waiting - при включении данной опции, звонящему, будет предложено проговорить свое имя, после чего, звонок продолжится. Вызываемый абонент возьмет трубку и ему будет озвучено имя звонящего, и так же система спросит, ответить ли на этот звонок или нет. Pinless Dialing - если на исходящих маршрутах существует пин – код, то при включении этой опции, пользователю не потребуется его вводить. Emergency CID - при звонках через маршрут, который обозначен как «Аварийный» (Emergency Route), данный CallerID будет передаваться в сторону SIP – провайдеру превалируя над всеми правилами по изменению CID. Queue State Detection - если данный внутренний номер состоит в одной из очередей, то при опциях Use State и Ignore State (использовать или игнорировать состояние соответственно), данный номер будет вызваниваться в зависимости от состояния доступности, или нет. Перейдем к небольшому разделу Assigned DID/CID: DID Description - описание для DID (Direct Inward Dialing). По факту, DID это набранный внешним абонентом номер, при вызове которого звонок будет маршрутизирован на конкретный внутренний номер. Например, вы можете написать «Support» Add Inbound DID - входящий DID для этого внутреннего номера. При звонках на него вызов пробросится сразу на экстеншен. Add Inbound CID - CallerID, вызовы с которого, будут маршрутизироваться на внутренний номер . Теперь рассмотрим служебные опции настройки подключаемого устройства: dtmfmode - метод передачи DTMF сигналов. Как правило, это RFC 2833 canreinvite - при включении данной опции будут поддерживаться re-invite по протоколу SIP context - контекст обработки вызова. Советуем здесь оставить from-internal, если вы не создаете кастомные контексты. host - здесь можно указать IP – адрес, с которого будет подключаться устройство. Советуем оставить dynamic. - метод передачи DTMF сигналов. Как правило, это RFC 2833 trustrpid - доверять ли идентификатору RPID (Remote-Party-ID) sendrpid - должен ли Asterisk отправлять RPID на это устройство type - выберите тип устройства. Как правило, для конечных телефонных аппаратов используется friend nat - выберите опцию трансляции сетевых адресов. Рекомендуем оставить RFC 3581 port - оставьте стандартный SIP – порт 5060 qualify - при включенной данной опции, Asterisk посылает сообщения, в которых опрашивает состояние устройства qualifyfreq - частоты отправки сообщений qualify. Указывается в секундах. transport - транспортный протокол для передачи данных. avpf - видео/аудио профиль для передачи данных WebRTC icesupport - включить или выключить поддержку ICE (Interactive Connectivity Establishment), который позволяет корректную работу пользователей, находящихся за фаерволом. dtlsenable - использовать ли для этого устройства безопасный транспортный протокол DTLS (Datagram Transport Layer Security) dtlsverify - совершать ли проверку сертификата DTLS у данного устройства dtlssetup - на каких направлениях вызова использовать DTLS – входящих, исходящих или сразу обоих. encryption - использовать ли шифрование по протокол SRTP dial - как вызвать это устройство. В нашей примере, это SIP/111, то есть набор через SIP канал номера 111. mailbox - ящик голосовой почты для устройства deny - подсеть, с которой запрещен доступ к данному устройству permit - подсеть, с которой разрешен доступ к данному устройству Теперь давайте рассмотрим раздел Recording Optoins: Inbound External Calls - записывать ли входящие из города на этот внутренний номер Outbound External Calls - записывать ли исходящие в города с этого внутреннего номера Inbound Internal Calls - записывать ли входящие с других внутренних номеров на этот номер Outbound Internal Calls - записывать ли исходящие звонки с этого внутреннего номера на другие внутренние номера On Demand Recording - разрешить ли запись по требованию на этом телефоне. Запись сохраняется, если пользователь произведет набор сервисного кода *1 Record Priority Policy - приоритет записи разговоров. Например, если произошел разговор между двумя внутренними телефонными аппаратами, и у одного из них параметр, равен 20, а у другого 10, тот, у которого параметр выше сможет сохранить запись разговора, а тот, у которого ниже – нет. Теперь разберемся с голосовой почтой: Status - включить или выключить голосовую почту. Voicemail Password - пароль доступа к голосовой почте. Пароль должен содержать только цифры Email Address - адрес электронной почты, куда будут отправляться голосовые сообщения. Email Attachment - отправлять ли аудио голосовой почты в формате вложения в электронном письме Play CID -озвучивать ли абоненту, который собирается прослушать голосовую почту, номер звонящего. Play Envelope - озвучивать ли абоненту при прослушивании голосовой почты дату и время звонка Delete Voicemail - удалять ли звуковой файл с сервера после отправки его по электронной почте. И наконец, разберем важный пункт, который называется Optional Destinations, который отвечает за маршрутизацию вызова при таких обстоятельствах как «не ответ», «занято» и «недоступен»: No Answer - куда отправлять вызов, если абонент не ответил на звонок Busy - куда отправлять вызов, если абонент занят разговором Not Reachable - куда отправлять вызов, если телефонный аппарат абонента недоступен Настройка MicroSIP Итак, после того, как мы создали учетную запись для внутреннего номера, перейдем к настройке программного телефона. Переходим по пути Меню → Добавить аккаунт SIP сервер - IP – адрес Elastix Пользователь - внутренний номер созданного абонента Домен - так же указываем IP Эластикса Логин - еще раз указываем внутренний номер абонента Пароль - копируем пароль из поля secret Нажимаем «Сохранить». Как видим, наш софтфон зарегистрировался и находится в статусе «Онлайн»:
img
Многим приложениям нужно обмениваться данными между клиентом и сервером. Долгое время эталонным форматом данных для обмена информацией между двумя объектами считался XML. Затем, в начале 2000-х, появился альтернативный формат JSON. В данной статье вы узнаете все о JSON. Мы рассмотрим, что это, и как им пользоваться, а также разберем ряд популярных заблуждений. Что такое JSON? JSON (JavaScript Object Notation, нотация объектов JavaScript) - это текстовый формат обмена данными. Он представлен наборами пар "ключ-значение", причем ключ - это всегда строка, а значение может задаваться одним из следующих типов: число; строка; логическое значение; массив; объект; нулевое значение null. Несколько важных правил: В формате данных JSON ключи прописываются в двойных кавычках. Ключ и значение разделяются двоеточием (:). Может быть несколько пар "ключ-значение". Каждая пара отделяется запятой (,). В данных JSON недопустимы комментарии (// или /* */). (Но при желании это ограничение можно обойти) Ниже приведен пример простых данных в JSON: { "name": "Alex C", "age": 2, "city": "Houston" } Допустимые данные в JSON возможны в 2 разных форматах: Набор пар «ключ-значение» в фигурных скобках {...}. Это показано в примере выше. Упорядоченные списки пар «ключ-значение», разделенных запятой (,) и заключенных в квадратные скобки [...]. См. пример ниже: [ { "name": "Alex C", "age": 2, "city": "Houston" }, { "name": "John G", "age": 40, "city": "Washington" }, { "name": "Bala T", "age": 22, "city": "Bangalore" } ] Предположим, вы уже писали что-то на JavaScript. Тогда у вы можете ошибочно предположить, что формат JSON и объекты JavaScript (и массивы объектов) очень похожи. Но это не так. Чуть позже мы подробно об этом поговорим. Структура JSON разработана на основе синтаксиса объектов JavaScript, и это единственное, что объединяет JSON и объекты JavaScript. Формат JSON не зависит от языка программирования. Мы можем использовать JSON в Python, Java, PHP и многих других языках. Примеры формата данных JSON Сохранять данные JSON можно в файле с расширением .json. Давайте создадим файл employee.json с атрибутами сотрудника. Они представлены в виде ключей и значений. { "name": "Aleix Melon", "id": "E00245", "role": ["Dev", "DBA"], "age": 23, "doj": "11-12-2019", "married": false, "address": { "street": "32, Laham St.", "city": "Innsbruck", "country": "Austria" }, "referred-by": "E0012" } В примере выше присутствуют следующие атрибуты сотрудника: name – имя сотрудника. Значение в строковом формате (String). Оно указано в двойных кавычках. id – уникальный идентификатор сотрудника. Опять же, в строковом формате. role – роли, которые сотрудник выполняет в организации. Таких ролей может быть несколько, поэтому лучше перечислять эти данные в формате массива (Array). age – текущий возраст сотрудника. Это числовое значение (Number). doj – дата найма сотрудника. Поскольку это дата, ее добавляют в двойных кавычках и обрабатывают как строку. married – замужем/женат ли сотрудник? Ответом может быть да/нет (то есть true или false), так что это логический формат (Boolean). address – адрес сотрудника. Может состоять из нескольких частей: улица, город, страна, индекс и т.д. Такое поле лучше представлять в виде объекта (Object с парами «ключ-значение»). referred-by – идентификатор сотрудника, который порекомендовал этого человека на должность в организацию. Если сотрудник пришел по рекомендации, то атрибут имеет значение. В остальных случаях поле остается пустым, т.е. null. Теперь давайте создадим набор данных по сотрудникам в формате JSON. Если мы хотим добавить несколько записей о разных сотрудниках, то необходимо прописать их в квадратных скобках [...]. [ { "name": "Aleix Melon", "id": "E00245", "role": ["Dev", "DBA"], "age": 23, "doj": "11-12-2019", "married": false, "address": { "street": "32, Laham St.", "city": "Innsbruck", "country": "Austria" }, "referred-by": "E0012" }, { "name": "Bob Washington", "id": "E01245", "role": ["HR"], "age": 43, "doj": "10-06-2010", "married": true, "address": { "street": "45, Abraham Lane.", "city": "Washington", "country": "USA" }, "referred-by": null } ] Обратите внимание на значение атрибута referred-by для сотрудника Боба Вашингтона (Bob Washington). Оно пустое. То есть никто из сотрудников не давал ему рекомендаций. Как использовать данные JSON в качестве значения строки Мы узнали, как форматировать данные внутри файла JSON. Еще можно использовать данные JSON в качестве строковых значений и присваивать их переменной. Поскольку JSON считается текстовым форматом, в большинстве языков программирования его можно обрабатывать как строку. Давайте рассмотрим пример, как это делается JavaScript. Вы можете добавить данные JSON в одну строку. Перечисление делается через одинарные кавычки '...'. const user = '{"name": "Alex C", "age": 2, "city": "Houston"}'; Если вы хотите сохранить форматирование, то данные JSON лучше создавать с помощью шаблонных литералов (template literals). const user = `{ "name": "Alex C", "age": 2, "city": "Houston" }`; Кроме того, это очень удобное решение, если нужно создать данные JSON с динамическими значениями. const age = 2; const user = `{ "name": "Alex C", "age": ${age}, "city": "Houston" }`; console.log(user); // Output { "name": "Alex C", "age": 2, "city": "Houston" } Объекты JavaScript и JSON – это НЕ одно и то же Формат данных JSON создавался на базе объектной структуры JavaScript. Но все сходства на этом заканчиваются. Объекты в JavaScript: у объектов JavaScript могут быть методы, а у JSON – нет; ключи можно добавлять без кавычек; разрешены комментарии; отдельные сущности Как преобразовать JSON в объект JavaScript и наоборот В JavaScript есть 2 встроенных метода по преобразованию данных JSON в объекты JavaScript и наоборот. Как преобразовать данные JSON в объект JavaScript Для преобразования данных JSON в объект JavaScript используется метод JSON.parse(). Он проводит синтаксический разбор (парсинг) допустимой строки JSON в объект JavaScript. const userJSONData = `{ "name": "Alex C", "age": 2, "city": "Houston" }`; const userObj = JSON.parse(userJSONData); console.log(userObj); Вывод: Как преобразовать объект JavaScript в данные JSON Для преобразования объекта JavaScript в данные JSON используется метод JSON.stringify(). const userObj = { name: 'Alex C', age: 2, city: 'Houston' } const userJSONData = JSON.stringify(userObj); console.log(userJSONData); Вывод: Должно быть, вы обратили внимание на слово JSON, которое используется для вызова методов parse() и stringify(). Это встроенный объект JavaScript, который, хоть и называется JSON (хотя с тем же успехом он мог бы называться JSONUtil), но не имеет никакого отношения к формату JSON. Так что, пожалуйста, помните об этом. Как обрабатывать ошибки "Unexpected token u in JSON at position 1" и другие? При обработке JSON могут возникать ошибки. Это нормально. Например, при разборе данных JSON в объект JavaScript вдруг появляется следующее сообщение: Если возникает такая ошибка, обязательно проверьте корректность ваших данных в JSON. Чаще всего причина синтаксического сбоя кроется в небольшой ошибке, которую вы случайно сделали в исходных данных JSON. Проверить правильность данных и форматов JSON можно с помощью JSON Linter.
img
Маленькая, но полезная заметка. Однажда, в один прекрасный день у нас перестала работать подмапленная в web - доступ директория (смонтирована она была через /etc/fstab). Браузер возвращал 403 Forbidden Error. Не долго думая, смотрим, что происходит в логах при обращении к web. В режиме реального времени можно посмотреть командой: tail -f /var/log/httpd/error_log Итак, у нас там было следующее: AH01276: Cannot serve directory /var/www/html/merion_directory/: No matching DirectoryIndex (index.html,index.php) found, and server-generated directory index forbidden by Options directive Хм. Дело в том, что у нас там просто выводится список папок, по файлам. Следовательно, сервак просто не может отрисовать эту структуру. Погнали исправлять Воркэраунд Лезем в конфигурационный файл нашего Apache: vim /etc/httpd/conf/httpd.conf И в общей области, где идут настройки директорий добавляем следующее: <Directory "/var/www/html/merion_directory"> Options Indexes FollowSymLinks </Directory> Где merion_directory - ваша директория в корне веб - сервера /var/www/html/, при обращении к которой вы получаете 403. Конфигурация проста - мы просто говорим апачу, что у нас там каталог файлов и его нужно "отрисовать" даже несмотря на то, что у нас там нет никаких index.html или index.php. По окончанию настройки ребуетаем Apache: service httpd restart Или через systemctl. Ребутаем браузер (Ctrl + F5). Профит!
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59