Вход/Регистрация
Asterisk™: будущее телефонии Второе издание
вернуться

Меггелен Джим Ван

Шрифт:

Теперь скорректируем это так, чтобы, если Джон занят (в другом звонке), абонент перенаправлялся на голосовую почту, где слышал бы сообщение о занятости. Для этого воспользуемся переменной ${DIALSTATUS}, в которой содержится одно из значений статуса (список всех возможных значений можно получить в консоли Asterisk с помощью команды core show application dial):

exten => 101,1,Dial(${JOHN},10)

exten => 101,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => 101,n(unavail),Voicemail(101@default,u) exten => 101,n,Hangup

exten => 101,n(busy),VoiceMail(101@default,b) exten => 101,n,Hangup

Теперь абоненты будут получать сообщение голосовой почты Джона (с соответствующим приветствием), если Джон занят или недоступен. Однако осталась небольшая проблема - Джон не имеет возможности извлекать свои сообщения. Исправим это.

Организация доступа к голосовой почте

Пользователи могут извлекать свои сообщения голосовой почты, менять опции и записывать приветствия голосовой почты с помощью приложения VoiceMailMain. В своей типовой форме приложение VoiceMailMain вызывается без аргументов. Добавим в контекст [internal] диалплана добавочный номер 700, чтобы внутренние пользователи могли выполнять звонки для доступа к своим сообщениям голосовой почты: exten => 700,1,VoiceMailMain

Создание телефонного справочника для набора номера по имени

Осталась последняя заслуживающая внимания функция системы голосовой почты Asterisk - телефонный справочник для набора номера по имени. Создается он с помощью приложения Directory. Это приложение, используя имена, заданные в описаниях почтовых ящиков в файле voicemail.conf, предоставляет абоненту телефонный справочник абонентов АТС для набора номеров по имени.

Directory принимает три аргумента: контекст голосовой почты, из которого считываются имена, контекст диалплана, в котором вызывается пользователь (необязательный), и строку опций (также необязательный). По умолчанию Directory ведет поиск пользователя по фамилии. Если передается опция f, поиск осуществляется по имени. Добавим два справочника для набора номера по имени в контекст [incoming] нашего образца диалплана, чтобы абоненты могли выполнять поиск или по имени, или по фамилии:

exten => 8,1,Directory(default,incoming,f) exten => 9,1,Directory(default,incoming)

Если абоненты нажмут кнопку 8, они получат справочник, составленный по именам. Если они наберут 9, то получат справочник, составленный по фамилиям.

Макрос

Макросы [76]– очень полезная структура, разработанная во избежание повторов в диалплане. Также они облегчают задачу по внесению изменений в диалплан. Чтобы проиллюстрировать это, снова вернемся к нашему примеру диалплана. Если вы помните, при внесении изменений для голосовой почты мы остановились на следующем варианте добавочного номера для Джона: exten => 101,1,Dial(${J0HN},10)

76

Макрос похож на подпрограмму диалплана общего назначения, но ему свойственна проблема переполнения стека, поэтому не следует создавать в макросах вызовы с более чем пятикратной глубиной вложенности. На момент написания данной книги мы не располагаем информацией о том, будет ли приложение Macro доработано для версии 1.4 или переписано для будущих версий. Если планируется выполнять множество вложенных макросов (и вызывать в их рамках сложные функции), есть вероятность возникновения нестабильности. Проблему выявит всего лишь один тестовый звонок, поэтому, если диалплан проходит тестирование, он готов к работе. Также рекомендуется обратить внимание на приложения Gosub и Return, поскольку зачастую функциональность, реализуемая с помощью Macro, на самом деле может быть получена без его использования. Также, будьте добры, отметьте, что мы не предлагаем не использовать Macro. Это фантастический инструмент, обладающий замечательными рабочими характеристиками; ему просто свойственны некоторые проблемы с вложенностью.

exten => 101,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail) exten => 101,n(unavail),Voicemail(101@default,u) exten => 101,n,Hangup

exten => 101,n(busy),VoiceMail(101@default,b) exten => 101,n,Hangup

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

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

Те, кто хорошо знаком с программированием, заметят, что макросы подобны подпрограммам, которые есть во многих современных языках программирования. Если вы не знакомы с программированием, не волнуйтесь, мы подробно и последовательно ознакомим вас с созданием макроса.

Лучший способ оценить макрос - увидеть его в деле, так что прямо сейчас и приступим.

Описание макроса

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

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

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

[macro-voicemail]

exten => s,1,Dial(${JOHN},10)

exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)

exten => s,n(unavail),Voicemail(101@default,u)

  • Читать дальше
  • 1
  • ...
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: