По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
В данной статье будет рассмотрена настройка Voicemail (голосовой почты) на FreePBX 13.
Для начала необходимо создать или выбрать уже имеющийся экстеншен (Applications – Extensions – Quick Create Extensions). Далее в настройках экстеншена во второй вкладке (Voicemail) необходимо активировать ящик голосовой почты
После того как включили голосовую почту для экстеншена (Enabled - Yes) и выбрали пароль – необходимо нажать Submit и затем Apply Config. Следующий шаг – активация ящика. Самый простой способ – зарегистрировать экстеншен на телефонесофтфоне и набрать на телефоне *97.
Затем, для дальнейшей настройки VM нужно пройти по следующему пути: Settings – Voicemail Admin. Там выбирается экстеншен и открываются следующие опции:
Здесь так же можно поменять пароль на ящике, указать адрес электронной почты и выбрать опции (данные настройки так же доступны в поле редактирования экстеншена):
Email Attachment – сообщения голосовой почты будут вложены в письме на указанный адрес
Play CID – проигрывание номера человека, оставившего сообщение.
Play Envelope – проигрывание даты получения сообщения
Delete Voicemail – удаление голосовых сообщений с сервера. Если опция Email Attachment будет выключена при включенной функции удаления, то сообщения не будут получены вообще.
Во второй вкладке можно увидеть статистику по ящику голосовой почты:
Далее будет рассмотрена возможность поменять базовое приветствие на свой записанный аудио-ролик:
Записанный ролик необходимо переименовать в unavail.wav и поместить по следующему пути
/var/spool/asterisk/voicemail/default/@extension_number@
После этого в случае недоступности экстеншена вызов будет уходить на ящик голосовой почты, и предварительно будет проигрываться записанное сообщение.
Так же можно сразу направлять вызов на ящик голосовой почты, если это необходимо для каких-то специфических целей – например, для организации отдельного номера для жалоб и предложений.
Иногда нам хочется, чтобы интерфейс роутера участвовал в процессе маршрутизации EIGRP, но без отправки Hello сообщений EIGRP с этого интерфейса. Именно об этом мы и поговорим в этой статье.
Ранее мы говорили о команде Network net-id wildcard-mask, вводимой в режиме конфигурации роутера EIGRP. Эта команда вызывает два основных действия:
Отправляет EIGRP Hello multicast сообщения с любого интерфейса, чей IP-адрес попадает в сетевое адресное пространство, указанное командой network.
Объявляет подсеть любого интерфейса, IP-адрес которого попадает в сетевое адресное пространство, заданное командой network.
Предыдущие статьи из цикла про EIGRP:
Часть 1. Понимание EIGRP: обзор, базовая конфигурация и проверка
Часть 2. Про соседство и метрики EIGRP
Часть 2.2. Установка K-значений в EIGRP
Часть 3. Конвергенция EIGRP – настройка таймеров
Следующие статьи из цикла:
Часть 5. Настройка статического соседства в EIGRP
Часть 6. EIGRP: идентификатор роутера и требования к соседству
Однако в некоторых случаях нам нет необходимости в том, чтобы команда network выполняла перовое действие, указанное выше. Например, если интерфейс подключается к хостам в локальной сети, а не к другим EIGRP-спикер роутерам. В этом случае нет необходимости отправлять Hello сообщения с этого интерфейса. К счастью, мы можем выборочно отключать отправку приветствий с интерфейса, все еще объявляя подсеть этого интерфейса нашим соседям EIGRP. Это стало возможным благодаря функции пассивного интерфейса.
Рассмотрим топологию ниже:
Обратите внимание, что каждый роутер имеет интерфейс, указывающий на сегмент локальной сети (то есть интерфейс, подключенный к коммутатору). Мы действительно хотим, чтобы подсети этих интерфейсов объявлялись через EIGRP, но нам не надо отправлять Hello сообщения c этого интерфейса (поскольку они не подключаются ни к каким другим EIGRP - спикер роутерам). Это делает эти интерфейсы (то есть интерфейс Gig0/3 на роутерах OFF1, OFF2 и OFF3) отличными кандидатами на роль пассивных интерфейсов. В следующем примере показано, как использовать команду passive-interface interface_id.
OFF1# configurationterminal
Enter configuration commands, one per line. End with CNTL/Z.
OFF1(config)#router eigrp 1
OFF1(config-router)#passive-interface gig0/3
OFF1(config-router)#end
OFF1#
OFF2# configurationterminal
Enter configuration commands, one per line. End with CNTL/Z.
OFF2 (config)#router eigrp 1
OFF2 (config-router)#passive-interface gig0/3
OFF2 (config-router)#end
OFF2#
OFF3# configurationterminal
Enter configuration commands, one per line. End with CNTL/Z.
OFF3 (config)#router eigrp 1
OFF3 (config-router)#passive-interface default
OFF3 (config-router)#no passive-interface gig0/1
OFF3 (config-router)#no passive-interface gig0/2
OFF3 (config-router)#end
OFF3#
В приведенном примере команда passive-interface gig0/3 была введена на роутерах OFF1 и OFF2, чтобы сообщить, что эти роутеры должны блокировать отправку Hello сообщений со своих интерфейсов Gig0/3 (то есть интерфейсов, соединяющихся с сегментами локальной сети). Однако конфигурация на роутере OFF3 использует несколько иной подход. Вместо указания интерфейсов, которые должны быть пассивными, дается команда passive-interface default, которая делает все интерфейсы пассивными. Затем были даны команды no passive-interface gig 0/1 и no passive-interface gig 0/2, чтобы выборочно сообщить, что эти интерфейсы не должны быть пассивными (так как эти интерфейсы используются для подключения к соседям EIGRP). Этот подход может быть полезен на роутерах с несколькими интерфейсами LAN и только несколькими интерфейсами, соединяющимися с соседями EIGRP.
Как только мы выполняем команду passive-interface interface_id для определенного интерфейса, этот интерфейс больше не появляется в выходных данных команды show ip eigrp interfaces, как показано в примере ниже. Обратите внимание, что интерфейс Gig0/3, который был настроен как пассивный интерфейс, не отображается в списке. Однако EIGRP все еще объявляет подсеть, к которой принадлежит интерфейс Gig0/3.
Мы можем определить, какие интерфейсы на роутере действуют в качестве пассивных интерфейсов, выполнив команду show ip protocols. В отображаемых данных этой команды, как видно в примере ниже, обратите внимание, что интерфейс Gig0/3 на роутере OFF2 является пассивным интерфейсом, в то время как его подсеть (198.51.100.0/24) объявляется EIGRP.
Следом вас ждет статья про настройку статического соседства в EIGRP
Перечисления, или перечисляемые типы данных, - это список постоянных значений с именами, которые удобны для разработчиков. В программировании они нужны для того, чтобы определить набор предопределенных значений, которые может принимать переменная.
Определение списка значений
Перечисления – это список значений, где каждое значение уникально. В перечислении не может быть двух значений с идентичными именами. Это весьма полезно, если нужно определить все возможные варианты значений, которые может обрабатывать функция.
Например, у вас есть перечисление под названием «Fruits». В нем хранится список фруктов, которые понятны для приложения. Именно в этом и есть ключевое отличие перечисления от использования строки для того, чтобы представить эту переменную, – строка может иметь бесконечное число возможных значений, а это перечисление – только три.
Это перечисление вы можете использовать в своем коде, например, для того, чтобы проверить, соответствует ли тип пользовательского ввода элементу Apple, или для передать его оператору switch/case в качестве аргумента для того, чтобы выполнить определенные действия для каждого типа возможного значения.
С точки зрения внутренней структуры перечисления сами по себе являются значениями. Это, конечно, зависит от реализации языка, но, например, в C# перечисления по умолчанию являются целыми значениями. Значения по умолчанию начинаются с 0, 1, 2, 3 и т.д., но их можно изменить вручную. Можно установить определенное значение для каждого элемента перечисления. Например, это могут быть коды состояния HTTP:
Они могут преобразовываться из значения в перечисление и наоборот с помощью простого приведения типов:
Перечисления не просто полезны для определения набора элементов, но они также неплохо помогают разработчикам. Даже если вы конвертируете данные в строковый или целочисленный тип перед тем, как отправить их в API, использования перечислений в вашей кодовой базе в любом случае обеспечит большую гибкость и приведет ваш код в порядок.
К тому же, наличие выпадающих списков с автозаполнением со списком возможных значений может помочь не только вам, но и любому, кто будет работать с вашей кодовой базой в дальнейшем. Никто не хочет сопровождать программный код, который в качестве аргументов принимает строки и выполняет случайные действия, основываясь на входных данных. Использование перечислений, напротив, строго определяет то, как себя будет вести приложение.
Недостатки использования перечислений
Основной недостаток перечислений заключается в том, что, как только они перестают находиться в вашей кодовой базе, они теряют свое особое значение. Например, у вас есть API, в котором вы сохраняете и отправляете данные. Для начала вам необходимо сериализовать перечисление, которое, скорее всего, по умолчанию принимает базовые значения 0, 1, 2 и т.д. Некоторые языки программирования поддерживают перечисления с базовыми строковыми значениями или настраивают правила сериализации перечислений так, чтобы сгладить эту проблему.
Проблемой может стать и изменение перечислений. Как только вы начинаете использовать перечисление, вы не можете больше менять порядок элементов. У вас есть право только добавить элементы в конец списка. В противном случае хранящиеся данные, которые используют старую версию перечисления, перестанут быть актуальными и будут искажены.
Перечисления как флаги
Еще одно популярное направление использования перечислений – это определение битовых флагов. Это достаточно продвинутая концепция, но по сути речь идет о том, что каждое значение перечисления – это логическое значение. Все эти перечисления можно хранить вместе в одном целом числе и использовать для выполнения быстрого поиска логических данных.
Это действительно работает, потому что каждое значение перечисления соответствует разным битам базового числа. Для двоичного представления значения перечисления будут следующие: 0, 1, 2, 4, 8, 16 и т.д. И вы можете соединить их вместе, чтобы получить список логических значений.
Почему именно такой вариант, а не несколько логических значений? Что ж, во-первых, это экономит место, а это в некоторых ситуациях (когда у вас их много) может быть очень на руку. Но, что еще важнее, при таком подходе можно очень быстро получить доступ к каждому значению, особенно если вам нужно получить доступ к нескольким значениям. Например, вы хотите проверить, выходной сегодня или нет. Вы можете проверить суббота сегодня или воскресенье (
Saturday | Sunday
), и все это из того же байта, что был загружен в память. Центральному процессору необходимо извлечь лишь один элемент, чтобы получить список всех флагов.