Джим Меггелен - Asterisk™: будущее телефонии Второе издание Страница 34
- Категория: Компьютеры и Интернет / Программное обеспечение
- Автор: Джим Меггелен
- Год выпуска: неизвестен
- ISBN: нет данных
- Издательство: неизвестно
- Страниц: 136
- Добавлено: 2019-06-19 14:52:37
Джим Меггелен - Asterisk™: будущее телефонии Второе издание краткое содержание
Прочтите описание перед тем, как прочитать онлайн книгу «Джим Меггелен - Asterisk™: будущее телефонии Второе издание» бесплатно полную версию:Джим Меггелен - Asterisk™: будущее телефонии Второе издание читать онлайн бесплатно
Синтаксис добавочного номера - это слово exten, за которым следует стрелка, образованная знаками равенства и «больше чем»:
exten =>
Далее указывается имя (или номер). В традиционных системах телефонной связи под добавочными номерами мы понимаем цифры, которые надо набрать, чтобы другой телефон зазвонил. В Asterisk это понятие намного шире; например, в качестве имени добавочного номера может использоваться любая комбинация цифр и букв. В данной главе и далее будут использоваться как цифровые, так и буквенно-цифровые добавочные номера.
Присвоение имен добавочным номерам может показаться революционной идеей, но если вспомнить, что многие транспортные протоколы VoIP поддерживают (или даже активно поощряют) вызовы по имени или адресу электронной почты, а не просто по номеру, это действительно имеет смысл. Это одно из свойств, делающих Asterisk такой гибкой и мощной системой.
Полный добавочный номер состоит из трех компонентов:
• Имени (или номера).
• Приоритета (каждый добавочный номер может включать множество шагов; порядковый номер шага называется его приоритетом).
• Приложения (или команды), которое выполняет некоторое действие
над вызовом. Эти три компонента разделяются запятыми:
exten => имя,приоритет,приложение() Вот пример того, как может выглядеть настоящий добавочный номер:
exten => 123,1,Answer() В этом примере имя добавочного номера - 123, приоритет - 1, а приложение - Answer(). Теперь пойдем дальше и рассмотрим, что такое приоритеты и приложения.
Приоритеты
Каждый добавочный номер может включать множество шагов, называемых приоритетами. Каждый приоритет пронумерован последовательно, начиная с 1, и выполняет одно определенное приложение. Например, следующий добавочный номер отвечает на звонок (в приоритете под номером 1) и затем выполняет разъединение (в приоритете под номером 2):
exten => 123,1,Answer() exten => 123,2,Hangup()
Не переживайте, если вы не понимаете, что такое Answer() и Hangup(), мы очень скоро их рассмотрим. Здесь главное - запомнить, что для отдельного добавочного номера Asterisk выполняет приоритеты по порядку.
Ненумерованные приоритеты
В более старых версиях Asterisk нумерация приоритетов вызывала множество проблем. Представьте, что в добавочном номере 15 приоритетов и требуется добавить что-то в шаге 2. Номера всех последующих приоритетов пришлось бы менять вручную. Asterisk не обрабатывает пропущенные шаги или неправильно пронумерованные приоритеты, и отладка ошибок такого типа превращалась в бесцельную и досадную трату времени.
Начиная с версии 1.2 Asterisk решила эту проблему. Был введен приоритет n, что означает «следующий». Каждый раз, когда Asterisk встречает приоритет n, она берет номер предыдущего приоритета и добавляет 1. Это упрощает внесение изменений в диалплан, поскольку теперь не надо изменять номера всех шагов. Например, диалплан может быть таким:
exten => 123,1 Answer() exten => 123,n выполнить что-то exten => 123,n выполнить что-то еще exten => 123,n выполнить последнее exten => 123,n Hangup()Asterisk будет самостоятельно вычислять номер следующего приоритета при каждой встрече с приоритетом n[69]. Однако следует отметить, что приоритет под номером 1 должен быть задан обязательно. Если случайно для идущего первым приоритета задать n вместо 1, добавочный номер будет недоступен.
Метки приоритетов
Начиная с версии 1.2 в Asterisk стало общепринятой практикой присваивать приоритетам текстовые метки. Это обеспечивает возможность ссылаться на приоритет не по номеру, который может быть неизвестен, потому что теперь в диалпланах, как правило, используются ненумерованные приоритеты. Чтобы присвоить приоритету текстовую метку, просто добавляем ее в круглых скобках после приоритета: exten => 123,г\(метка)1приложение()
Очень распространенной ошибкой является использование запятой между символами n и (, как в данном примере:
exten => 123,n,(метка),приложение() ;<-- ЭТО НЕ БУДЕТ РАБОТАТЬ Это приведет к нарушению данной части диалплана, будет выдано сообщение об ошибке, из-за того что приложение не найдено.
В следующей главе мы рассмотрим, как переходить с одного приоритета на другой, используя логику диалплана. Вы будете встречать множество меток приоритетов и станете очень часто использовать их в своих диалпланах.
Приложения
Приложения - это рабочие лошадки диалплана. Каждое приложение выполняет определенное действие над данным каналом, например воспроизведение звука, прием тонального ввода, вызов канала, разрыв соединения и т. д. В предыдущем примере было представлено два простых приложения: Answer() и Hangup(). Сейчас мы подробнее рассмотрим, как они работают.
Для выполнения некоторых приложений, таких как Answer() и Hangup(), не требуется никаких дополнительных инструкций. Некоторым приложениям необходима дополнительная информация. Эти данные, называемые аргументами, могут передаваться в приложения, чтобы оказывать влияние на то, как они выполняют свои действия. Чтобы передать аргументы в приложение, разместите их через запятую в круглых скобках, следующих за именем приложения.
Иногда вместо запятой в качестве разделителя между аргументами можно увидеть символ вертикальной черты (|). Допускается использование любого из этих символов. В примерах данной книги для разделения аргументов приложения будет применяться запятая, поскольку авторы предпочитают такой синтаксис. Однако при синтаксическом разборе диалплана Asterisk преобразует все запятые в аргументах приложений в символы вертикальной черты.
Когда мы создадим наш первый диалплан в следующем разделе, вы научитесь использовать приложения и связанные с ними аргументы.
Простой диалплан
Теперь мы готовы создать наш первый диалплан. Давайте начнем с очень простого примера. Asterisk должна будет ответить на звонок, воспроизвести звуковой файл и разорвать соединение. Используем этот простой пример, чтобы обозначить наиболее важные концепции диал- плана.
Предложенные в данной главе примеры разработаны исходя из предположения, что был создан и сконфигурирован (соответственно описанию в предыдущей главе) по крайней мере один канал (Zap, SIP или IAX2 - неважно) и что все вызовы, поступающие на этот канал, направляются в контекст диалплана [incoming]. Если к какому-то из предыдущих примеров вы подошли творчески, вероятно, вам придется вносить некоторые поправки, чтобы обеспечить соответствие имен каналов.
Добавочный номер s
В наших каналах мы применяем определенную технологию, и поэтому, прежде чем приступить к настройке диалплана, придется остановиться еще на одном вопросе. Необходимо рассмотреть добавочный номер s. Когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер (например, вызов FXO-линии), они передаются на добавочный номер s. (s - сокращение от start (начало), поскольку именно здесь начнется обработка вызова, если с ним не передана информация о добавочном номере.)
Поскольку это именно то, что требуется для нашего диалплана, перейдем к делу. Для каждого вызова будет выполняться три действия (ответ на него, воспроизведение звукового файла и разъединение), поэтому добавочному номеру s понадобится три приоритета. Поместим три приоритета в контекст [incoming], поскольку было принято решение о том, что все входящие вызовы должны обрабатываться в этом контексте[70].
[incoming]
exten => s,1,приложение() exten => s,n,приложение() exten => s,n,приложение()
Теперь осталось только вставить приложения - и наш первый диал- план готов.
Обратите внимание, что можно было бы пронумеровать каждый приоритет, как показано ниже, но теперь так делать не рекомендуется, поскольку это сильно усложняет внесение изменений в диалплан впоследствии:
[incoming]
exten => s,1,приложение() exten => s,2,приложение() exten => s,3,приложение()
Приложения Answer(), Playback() и Hangup()
Прежде чем мы будем отвечать на звонок, воспроизводить звуковой файл и затем выполнять разъединение вызова, нам нужно научиться это делать. Приложение Answer() (Ответ) используется для ответа каналу, по которому выполняется звонок. Оно выполняет исходную настройку для канала, получающего входящий вызов. (Некоторые приложения не требуют обязательного ответа каналу, но соответствующий ответ на звонок перед тем, как выполнять какие-либо действия над каналом, является очень хорошей практикой.) Как упоминалось ранее, Answer() не принимает аргументов.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.