Skip to content

Instantly share code, notes, and snippets.

Created September 27, 2017 00:30
Show Gist options
  • Save anonymous/e9276ff42623c73e5950786942a24a78 to your computer and use it in GitHub Desktop.
Save anonymous/e9276ff42623c73e5950786942a24a78 to your computer and use it in GitHub Desktop.
Sip телефон asterisk

Sip телефон asterisk



Ссылка на файл: >>>>>> http://file-portal.ru/Sip телефон asterisk/


asterisk ip телефона
Настройка SIP в Asterisk - sip.conf
Авторизация
























После выполнения всех этапов, описанных в главе 3, должна быть получена рабочая система Asterisk. Если что-то не так, не пожалейте времени, вернитесь назад и еще раз просмотрите все шаги, проконсультируйтесь в Википедии, привлеките сообщество и заставьте свою систему работать. К сожалению, пока мы не можем никуда позвонить, потому что еще не создан ни один канал. Чтобы оторвать этот самолет от земли, необходима взлетная полоса. Существуют десятки разных типов каналов и различных способов сконфигурировать каждый из них, но мы просто хотим получить возможность позвонить, поэтому давайте сделаем это и не будем пока вдаваться в тонкости. Мы решили привести здесь рекомендации по конфигурации четырех каналов: Foreign eXchange Office FXO , Foreign eXchange Station FXS , Session Initiation Protocol SIP и Inter-Asterisk eXchange IAX [53]. Были выбраны именно эти типы, потому что, бесспорно, они самые популярные из каналов, используемых в малых системах Asterisk, а одной из принципов данной книги является разумная простота. Рассматривая эти каналы, мы не стремимся к тому, чтобы дать исчерпывающий и всесторонний обзор всех типов линий или топологий, а просто представляем основную информацию, необходимую для разработки телекоммуникационной системы. Подробно конфигурация сценариев и каналов рассматривается в приложении D. Начнем с изучения базовой конфигурации аналоговых интерфейсов, таких как порты FXS и FXO, на примере платы Digium TDM11B которая является аналоговой платой с одним портом FXS и одним портом FXO [54]. Далее мы коснемся нескольких интерфейсов для передачи голоса по IP-протоколу Voice over Internet Protocol, VoIP: Для SIP будут рассмотрены телефонные аппараты Linksys, Polycom, Aastra, Grandstream и Cisco. Приносим извинения, если в этот список не вошла используемая вами модель телефона. Однако важно то, что при всем многообразии предлагаемых этими аппаратами настраиваемых параметров обычно, чтобы устройство заработало, необходимо задать только несколько из них. Это и будет нашей целью, потому что мы считаем, что для первого раза достаточно просто привести устройство в рабочее состояние, а не выполнять полную идеальную настройку. Здесь не будут обсуждаться все функции, которые, возможно, вам хотелось бы использовать такие, как идентификация вызывающего абонента Caller ID или расширенные настройки кодеков и политики безопасности , но с вашего телефона можно будет звонить и принимать звонки, а это должно заставить вас улыбнуться - хорошее состояние духа не помешает, когда мы углубимся в дебри. Проработав эту главу, вы получите базовую систему, состоящую из нескольких полезных интерфейсов. Они обеспечат основу, необходимую для изучения файла extensions. Не имея аналогового оборудования, некоторые примеры будет невозможно реализовать, но все равно у вас будет сконфигурированная система, подходящая для среды, поддерживающей исключительно VoIP. Это хорошее имя для данной офисной АТС по многим причинам, одна из которых - огромное число типов интерфейсов, с которыми может соединяться Asterisk. Asterisk не требует никакого специализированного оборудования - даже звуковой карты, - хотя естественно ожидать, что система телефонной связи должна физически соединяться с телефонной сетью. Существует множество типов канальных плат, которые обеспечивают возможность соединения Asterisk с такими устройствами, как аналоговые телефоны или PSTN-сети, но они не являются обязательным условием функционирования Asterisk. На стороне пользователя или станции системы может использоваться любой программный телефон Windows, Linux и других операционных систем или практически любой физический IP-телефон. То есть вопрос с телефонами системы решен. Что касается линии связи, если нет прямого подключения к центральной АТС, можно передавать звонки по Интернету с помощью провайдера сервиса VoIP. В данной главе будет построена конфигурация Asterisk на платформе, установленной в предыдущей главе. Для первых нескольких разделов, в которых рассматриваются каналы FXO и FXS, предполагается использование комплекта TDM11B производства Digium который поставляется с одним FXO- и одним FXS-интерфейсом. Он обеспечит возможность подключения к аналоговой сети FXO и аналоговому телефону FXS. Обратите внимание, что этот аппаратный интерфейс не является обязательным; если вы хотите настроить конфигурацию для общения только по IP-протоколу, можете пропустить раздел, посвященный конфигурации SIP. Сама по себе выполняемая здесь конфигурация не будет иметь особенного практического значения, но она станет основой для дальнейшей работы. Будут рассмотрены следующие файлы: Здесь будет выполнена низкоуровневая конфигурация аппаратного интерфейса. Будут настроены один канал FXO и один канал FXS. Это сконфигурирует драйвер для ядра Linux. В данном файле будет выполнена настройка взаимодействия Asterisk с оборудованием. Этот файл обеспечивает конфигурацию оборудования, используемого в пользовательском процессе Asterisk, на более высоком уровне. Будут созданы достаточно примитивные диалпланы, но они подтвердят работоспособность системы. Следующие разделы посвящены редактированию нескольких конфигурационных файлов. Чтобы внесенные изменения возымели действие, придется перезагрузить эти файлы. После редактирования файла zaptel. После редактирования файлов iax. Для тестирования вновь определенных устройств необходим диалплан, посредством которого могут устанавливаться соединения. Хотя диал- план Asterisk еще не рассматривался этим мы займемся в следующей главе , для тестирования работы, выполняемой в данной главе, необходимо создать базовый файл extensions. Создайте резервную копию файла-шаблона extensions. Если задать этому параметру значение no, Asterisk после выполнения всех предусмотренных приоритетов будет ожидать ввода. Это значение является предпочтительным, если последним приложением, выполняемым для добавочного номера, является приложение Backg round. Если задано значение yes которое стало значением по умолчанию в версии 1. Чтобы заставить Asterisk ожидать ввода номера после того, как приложение завершит воспроизведение предоставляемых ему голосовых сообщений, используется приложение WaitExten. Не пугайтесь, если вышесказанное не имеет сейчас для вас особого смысла. Просто мы еще не рассматривали диалплан, приложения, приоритеты и добавочные номера все это ожидает нас в следующей главе. Пока что это все, но данный файл будет использоваться по ходу этой главы для построения тестового диалплана, который поможет убедиться в работоспособности всех наших устройств. Также не забудьте выполнить команду dialplan reload из командной строки Asterisk, чтобы внесенные изменения вступили в силу. Проверьте свои изменения, введя в командной строке команду dialplan show:. Теперь давайте подробнее остановимся на тестовом диалплане, о котором мы начали разговор в предыдущем разделе, - он позволит выполнять обратный вызов программного телефона, после того как тот будет настроен, и использовать приложение диалплана Echo для тестирования двусторонней аудиосвязи. Более подробно диалпланы рассматриваются в главе 5, а пока что просто добавим выделенные курсивом строки в существующий файл extensions. Мы будем использовать этот диалплан по ходу данной главы и дополнять его в определенных разделах. После ввода текста в extensions. Каналы FXO и FXS отличаются друг от друга лишь тем, что один из них обеспечивает тональный сигнал готовности линии. FXO-порт не генерирует тонального сигнала, он его принимает. Самый простой пример - тональный сигнал, поставляемый телефонной компанией. FXS- порт обеспечивает и тональный сигнал, и напряжение сигнала вызова звонка , предупреждающего пользователя о входящем вызове. Оба интерфейса обеспечивают двустороннюю связь то есть передачу и прием в обоих направлениях одновременно [55]. Если у вашего сервера Asterisk есть совместимый FXO-порт, в него можно подключить телефонную линию телефонной компании или telco , что позволит Asterisk использовать эту телефонную сеть для отправки и приема телефонных звонков. Кроме того, если ваш сервер Asterisk имеет совместимый FXS-порт, в него можно подключить аналоговый телефон. Таким образом, Asterisk сможет направлять поступающие вызовы в телефон и вы будете способны использовать этот телефон для звонков куда-либо. В конфигурации порты определяются протоколом обмена сигналами, который они используют, а не их физической сущностью. Например, физический FXO-порт будет определен в конфигурации протоколом обмена сигналами FXS, а FXS-порт - протоколом FXO. Это может сбивать с толку до тех пор, пока не станут ясны причины такого явления. Следовательно, плата FXS - это плата, подключаемая к станции station. Таким образом, можно заметить, что, для того чтобы справится со своими задачами, плата FXS должна вести себя как центральная АТС и использовать протокол обмена сигналами FXO. Аналогично, плата FXO подключается к центральной АТС. Это означает, что она должна будет вести себя как станция и использовать протокол обмена сигналами FXS. Модем в компьютере - классический пример устройства FXO. Эти платы являются модемами с драйверами, которые можно использовать в качестве отдельного устройства FXO интерфейс для телефонии не может использоваться как FXS-порт. От поддержки плат XP отказались в пользу плат TDM-серий. Эти платы или их клоны НЕЛЬЗЯ использовать в средах производственной эксплуатации. Будьте благоразумны и не тратьте время на это оборудование. Если обратиться с вопросом об этих платах к сообществу, многие ответы будут недружелюбными. Фото черно-белое, поэтому невозможно различить цвета, но под номером 1 -FXS-модуль зеленого цвета, а под номером 2 - FXO-модуль, оранжево- красный. В нижнем правом углу рисунка можно увидеть разъем Molex, посредством которого плата подключается к блоку питания компьютера. Начнем с конфигурации FXO-канала. Сначала сконфигурируем оборудование Zaptel, а затем - устройства Zapata. Зададим очень простой диалплан и покажем, как тестировать канал. Подключение FXS-порта зеленый модуль к PSTN может привести к выходу из строя модуля и платы из-за подачи напряжения в систему, которая предназначена для его производства, а не потребления! Плата TDMP с модулем FXS 1 по горизонтали и модулем FXO 2 по горизонтали. Если на плате TDMP есть модули FXS, убедитесь, что вы не забыли подключить питание к разъему Molex, который используется для обеспечения напряжения, необходимого для возбуждения генератора звонка в FXS-портах. Разъем Molex не нужен, если имеются только FXO-модули. Для конфигурации оборудования используется файл zaptel. Приведенная минимальная конфигурация определяет FXO-порт, использующий протокол обмена сигналами FXS:. В первой строке, кроме указания используемого протокола обмена сигналами FXO или FXS , для канала 2 задается один из следующих протоколов:. Разница между loop start кольцевая сигнализация и ground start сигнализация с заземлением в том, как оборудование запрашивает тональный сигнал: Хотя в новых системах их уже практически нет, аналоговые линии с сигнализацией с заземлением по-прежнему применяются во многих областях [56]. Сигнализация с заземлением на самом деле довольно странная штука, потому что в Asterisk нет ее аналоговой формы. Фактически передается не напряжение заземления, а сигнальный бит, предусмотренный для аналоговых сетей, присутствующих на стороне T1. Если вы чего-то здесь не понимаете, не отчаивайтесь; скорее всего, вам никогда не придется использовать сигнализацию с заземлением. Kewlstart, в сущности, - это то же самое, что и кольцевая сигнализация, за исключением того что он обладает более развернутой логикой и, таким образом, может определять отсоединение удаленного конца [57]. Kewlstart является предпочтительным протоколом обмена сигналами для аналоговых линий в Asterisk. Чтобы определить другой метод обмена сигналами, не kewlstart, замените ks в выражении для fxsks на ls или gs для кольцевой сигнализации или сигнализации с заземлением соответственно. Параметр загрузки зоны loadzone задает набор сигналов которые указаны в файле zonedata. Если применить загруженную тоновую зону к Zap-каналу, этот канал будет воспроизводить сигналы заданной страны. Для разных каналов можно задать различные наборы сигналов. Если для канала зона не задана, используется параметр зоны по умолчанию defaultzone. Команда modprobe применяется для загрузки модулей, используемых ядром Linux. Например, чтобы загрузить драйвер wctdm, нужно выполнить команду. Если при загрузке драйверов не выводится никаких сообщений, значит, драйверы загружены успешно [58]. Убедиться в том, что оборудование и порты были загружены и сконфигурированы правильно, можно с помощью программы ztcfg:. На экран будут выведены сконфигурированные каналы и используемый метод обмена сигналами. Например, для TDMP с одним модулем FXO будет получен такой вывод:. Если получено сообщение о следующей ошибке, для канала неправильно сконфигурирован используемый метод обмена сигналами или отсутствует оборудование по этому адресу:. Did you forget that FXS interfaces are configured with FXO signaling and that FXO interfaces use FXS signaling? Вы забыли, что FXS-интерфейсы конфигурируются на использование протокола обмена сигналами FXO и FXO-интерфейсы используют протокол FXS? Чтобы выгрузить драйверы из памяти, используйте команду удаления модуля rmmod: Программа zttool является инструментом диагностики, используемым для определения статуса оборудования. Выполнив ее, мы получаем список всех установленных аппаратных средств. В этом списке можно выбирать то или иное устройство и просматривать информацию о его текущем статусе. Статус OK означает, что устройство загружено успешно:. Asterisk использует файл zapata. Во время конфигурации zaptel. Необязательно, чтобы оборудование использовалось Asterisk; его с таким же успехом могло бы применять другое ПО, взаимодействующее с модулями Zaptel. Раздел [trunkgroups] описывает соединения, в которых множество физических линий используются как одно логическое соединение с телефонной сетью они не обсуждаются в данной книге. Если вам необходим этот тип функциональности, в вашем распоряжении есть файл zapata. Раздел [channels] определяет метод обмена сигналами для аппаратных каналов и их параметры. Если параметр задан, он наследуется далее по всему файлу. Каждое описание канала наследует все параметры, определенные в файле выше. При этом текущий вызов будет отложен. После этого можно позвонить третьей стороне и подключить ее к разговору, еще раз нажав переключатель. По умолчанию возможность вызова с подключением третьего абонента деактивирована. В этом режиме Asterisk посылает тональный сигнал в линию в начале вызова, чтобы измерить эхо, и таким образом, на его изучение уходит меньше времени. При поступлении вызова на интерфейс FXO вы захотите выполнять некоторые действия. Действия, которые будут осуществляться, задаются в блоке инструкций под названием context. Команды, выполняемые в этом контексте, определены в файле extensions. Приведенный ниже простейший диалплан использует приложение Echo для проверки работы двунаправленной связи в канале:. Теперь, когда канал FXO сконфигурирован, протестируем его. Запустите приложение zttool и подключите линию PSTN к FXO-порту на плате TDMP. Как только телефонная линия будет подключена к FXO-порту, красный световой индикатор погаснет. Теперь наберите номер PSTN с другого внешнего телефона например, мобильного. Asterisk ответит на вызов и выполнит приложение Echo. Если вы услышали в трубке свой голос, значит, FXO-канал установлен и сконфигурирован успешно. Ниже представлена минимальная конфигурация для канала FXS платы TDMP. Из наших предыдущих обсуждений вы должны помнить, что для каналов FXO и FXS используются противоположные типы протоколов обмена сигналами, поэтому для канала FXS мы зададим протокол FXO. В приведенном ниже примере канал 1 конфигурируется на использование протокола FXO с протоколом обмена сигналами kewlstart:. Контекстом FXS-порта является phones, протокол обмена сигналами - fxoks kewlstart , номер канала - 1. Каналы FXS можно сконфигурировать на выполнение одного из двух различных действий при снятии трубки телефона. Наиболее часто используемым и обычно предпочтительным вариантом для Asterisk является воспроизведение тонального сигнала готовности линии и ожидание ввода пользователя. Альтернатива для Asterisk - вместо воспроизведения тонового сигнала автоматическое выполнение набора инструкций, заданных в диалплане. Инструкции, которые должны выполняться для канала, находятся в заданном для него контексте и будут соответствовать добавочному номеру s обе эти темы будут обсуждаться подробнее в следующей главе. Мы воспользуемся простейшим диалпланом, сконфигурированным ранее в данной главе для тестирования FXS-порта с помощью приложения Echo. Соответствующий раздел, который уже должен присутствовать в диалплане, выглядит следующим образом:. Протокол Session Initiation Protocol SIP [60] , обычно применяемый в VoIP-телефонах как аппаратных, так и программных , отвечает за установку и разъединение соединения, а также за любые изменения, происходящие во время соединения, такие как переадресации. Назначение SIP - помочь двум конечным точкам поговорить друг с другом по возможности напрямую. Протокол SIP - это просто протокол обмена сигналами, то есть его задачей является лишь обеспечить возможность двум конечным точкам говорить друг с другом, но не работа с носителем вызова голосом. Передача голоса осуществляется с помощью другого протокола - Real-Time Transport Protocol транспортный протокол реального времени - RTP; RFC - для передачи медиа-данных непосредственно между двумя конечными точками. Также он может использоваться в случае воспроизведения музыки или голосовых сообщений офисной АТС. В мире SIP конечные точки называются агентами пользователя, которые могут быть двух типов: Клиент - это конечная точка, формирующая запрос, а сервер обрабатывает этот запрос и формирует ответ. Когда конечная точка желает выполнить вызов другой конечной точки например, наш программный телефон звонит на другой программный телефон , она формирует запрос и отправляет его на прокси-сервер SIP [61]. Прокси-сервер принимает запрос, определяет его место назначения и направляет его туда. Если два агента пользователя успешно договорились и установили вызов, переносимый сигнал передается по RTP-протоколу и пересылается непосредственно от одного агента пользователя другому. SIP-прокси не обрабатывают медиа-данные; они просто работают с SIP-пакетами. С другой стороны, Asterisk называют Back-To-Back User Agent B2BUA. Это означает, что Asterisk действует как агент пользователя или в роли сервера принимающий , или в роли клиента посылающий. Итак, когда программный телефон звонит на добавочный номер, соединение устанавливается непосредственно между программным телефоном и Asterisk. Если логика, реализованная в Asterisk, определяет, что вызов адресован другому агенту пользователя, Asterisk действует как клиент и устанавливает другое соединение известное как канал с другим телефоном. При этом медиа-информация передается от телефона к телефону прямо через Asterisk [62]. С точки зрения телефонов они взаимодействуют непосредственно с Asterisk. Конфигурация SIP-телефона для работы с Asterisk не требует много усилий и времени. Однако здесь можно легко запутаться из-за обилия опций как в Asterisk, так и в конфигурации конкретного телефонного аппарата или программного телефона. Добавьте к этому тот факт, что одни и те же вещи могут называться по-разному, - вот и прекрасный повод для того, чтобы впасть в отчаяние. Поэтому мы собираемся рассмотреть лишь самые основные вопросы. У тех, кто последует нашим советам, должно получиться заставить работать рассматриваемые здесь аппараты а также уверенно справиться с неупомянутыми здесь телефонами. Мы не говорим, что это лучший или даже верный путь, но это самый простой путь. Намного проще взять уже работоспособную базу и настраивать ее, добиваясь необходимого решения. Точно так же, как мы делали это для файла extensions. Даже несмотря на то что это SIP-устройство названо и, вероятно, ему будет присвоен именно этот добавочный номер, следует отметить, что имя устройства может быть произвольным. Главное, чтобы присваиваемое имя было уникальным идентификатором устройства, который станет частью мандата при выполнении вызова по каналу SIP. Поскольку мы хотим как направлять вызовы в программный телефон, так и обеспечить клиенту возможность размещать вызовы, параметр type тип был определен как friend друг. Существует еще два параметра: С точки зрения Asterisk user задается для входящих вызовов, а peer - для исходящих звонков через приложение Dial. Если есть сомнения, задавайте тип friend. Опция host хост используется для определения местонахождения клиента в сети, когда Asterisk необходимо направить ему вызов. Если для опции host задано значение dynamic и клиент сконфигурирован для автоматической регистрации, Asterisk получит от конечной точки то есть от телефонного аппарата или программного телефона пакет REGISTER, из которого Asterisk сможет узнать, какой IP-адрес использует равноправный SIP-участник. Если вы не доверяете своей сети, вероятно, следует задать пароль. Для этого в описание устройства добавляется следующая строка. Это один из тех параметров, которые не являются обязательными, но желательны:. В меню конфигурации телефона которые могут быть предоставлены через графический веб-интерфейс пользователя, меню самого телефона или, возможно, посредством использования конфигурационных файлов, хранящихся на сервере уникальный идентификатор в данном случае является составной частью мандатов, используемых для процесса аутентификации. Естественно, чтобы соединение было успешным, идентификатор в Asterisk должен совпадать с идентификатором телефонного аппарата. Забавно, что формального названия для этого идентификатора не существует. Мы решили называть его просто уникальным идентификатором. В SIP RFC http: Эта формулировка соответствует нашему применению [ ] в качестве идентификатора аппарата в файле Asterisk sip. Вероятно, вам привычнее было бы видеть поля user name, auth name, authentication name и т. Здесь необходимо помнить, что на стороне Asterisk все сконфигурировано просто и правильно и поэтому можно экспериментировать с настройками телефона, пока не будет найдена работоспособная комбинация. Такой вариант намного лучше, потому что обычно новые пользователи проходят через невероятные мучения, меняя настройки и там и тут, и не могут зарегистрировать телефон. Поверьте, то, что написано здесь, будет работать. Приведите свой телефон в рабочее состояние то есть чтобы он мог принимать и делать вызовы и только после этого начинайте экспериментировать с разными настройками. Мы видели слишком много страданий включая собственные и хотим положить им конец. Стандартный файл сводится всего лишь к следующим нескольким строкам, незакомментированным по умолчанию: В разделе [general] находятся опции, которые будут применяться ко всем клиентам и каналам SIP. Некоторые настройки задаются только в разделе [general], другие могут задаваться в разделе [general] как применяемые по умолчанию для всех условных инструкций и могут быть переопределены в другом месте. Эти опции перечислены в столбцах [users] и [peers] под заголовком [authentication]. Как правило, закомментированные опции являются используемыми Asterisk по умолчанию или значение по умолчанию указано в описании опции. Также можно проверить текущее состояние SIP-канала в Asterisk с помощью CLI-команды sip show settings. Если Asterisk и программный телефон выполняются в одной системе то есть программный телефон X-Lite и Asterisk выполняются на портативном или настольном компьютере , придется изменить SIP-порт, который слушает клиент. Его надо будет заменить с на или любой другой свободный порт , чтобы Asterisk и программный телефон не мешали друг другу. Перед тем как углубиться в описание следующих файлов, осталось определить еще несколько параметров на сервере. Выполнение соответствующих сервисов в собственной сети обеспечит возможность автоматической настройки аппаратов Polycom при их подключении. Работыздесь немного, и, поверьте, результат того стоит. Когда вы возьмете новенький телефон Polycom, подключите его в свою сеть, посмотрите, как он сам себя настроит и успешно зарегистрируется на сервере Asterisk, вы испытаете наслаждение, которое доступно только истинным компьютерщикам 1. На самом деле все не так сложно. На наш взгляд, можно запутаться только в доступных вам способах, потому что их выбор действительно огромен. Обычно DHCP-сервер используется для конфигурации основных настроек протокола IP для устройства IP-адрес, шлюз по умолчанию и DNS , но протокол DHCP Dynamic Host Configuration Protocol - протокол динамической конфигурации хоста на самом деле может передавать множество других параметров. В нашем случае мы хотим, чтобы он передал в телефонные аппараты некоторую информацию с указанием, откуда они могут загрузить конфигурационные файлы. Вот пример настроек DHCP-сервера Linux, которые обеспечат то, что нам требуется:. Помните, здесь предполагается, что все устройства данной сети относятся к телефонной системе при такой настройке IP-адрес предоставляется любому запрашивающему его устройству. Для более сложного окружения придется сконфигурировать демон DHCP для обработки различных обслуживаемых им устройств. Например, можно придумать диапазон IP-адресов, которые будут использоваться только для телефонов Polycom в локальной телефонной сети. Поскольку уникальный идентификатор организации Organizationally Unique Identifier, OUI всех IP-телефонов Polycom для настольных компьютеров - В DHCP-средах Microsoft имя tftp-сервера называют именем хоста сервера загрузки Boot server host name. Оно определено как опция DHCP-протокол намного более гибок, чем часто кажется на первый взгляд, потому что в большинстве сред он не используется для выполнения сложных задач подготовки к работе. Приложив немного усилий и внимания, можно разработать такую среду DHCP, которая будет обслуживать и телефонные устройства, и устройства работы с данными и существенно упростит работу по администрированию при введении новых устройств. В настоящее время мы предпочитаем использовать для конфигурации аппаратов Polycom протокол FTP File Transfer Protocol - протокол передачи файлов 1. Мы бы рекомендовали выбрать его, а не TFTP и для устройств, которые могут работать с обоими протоколами. В системе CentOS при выполнении следующей команды будет установлен VSFTPD, Very Secure FTP Daemon очень безопасный демон FTP:. Затем для обеспечения защиты необходимо предотвратить анонимные входы в систему. Перезапустите сервер с помощью команды service vsftpd restart. Чтобы гарантировать запуск демона после каждой перезагрузки, выполняем команду chkconfig vsftpd on. Теперь необходимо создать пользовательскую учетную запись и группу, которые будут использоваться для телефонных аппаратов. В данном случае мы создадим учетную запись для аппаратов Polycom. Задаем пароль PlcmSpIp стандартный пароль FTP для аппаратов Polycom. Его можно изменить, но после этого придется вручную настраивать каждый аппарат, чтобы сообщить ему его нестандартные учетные данные [63]. Вот примерно то, что должно быть сделано, чтобы подготовить операционную систему к предоставлению необходимых сервисов телефонам. В следующих нескольких разделах даются рекомендации для различных популярных SIP-телефонов. Выберите самый подходящий раздел исходя из того, какой телефон вы собираетесь использовать неважно, будет ли это аппаратный или программный телефон. Вы заметите, что всем этим телефонам мы присвоили один и тот же уникальный идентификатор. Если планируется установка нескольких телефонов, каждому из них должно быть дано уникальное имя. И не забудьте внести описания этих устройств в файл sip. Программный телефон X-Lite компании CounterPath стал очень популярным в сообществе разработчиков Asterisk. Он прост, функционален, приятен на вид и, что самое главное, распространяется бесплатно. В этом разделе мы займемся конфигурацией программного телефона X- Lite для подключения к Asterisk. IP-адрес этого телефона - Доступен X-Lite для Microsoft Windows, Mac и Linux. Копию X-Lite можно скачать по адресу http: Теперь давайте сконфигурируем программный телефон для установления соединения с сервером Asterisk. Чтобы сконфигурировать X-Lite, нажмите кнопку Settings Настройки , которая показана на рис. При этом на экран будет выведена стандартная конфигурация программного телефона. Измените настройки, как показано на рис. Если система Asterisk не запущена, запустите ее сейчас информацию по установке и запуску Asterisk можно найти в главе 3. Если Asterisk выполняется в фоновом режиме, вызвать ее CLI можно, выполнив следующую команду:. Если Asterisk уже была запущена до изменения sip. В клиенте программного телефона X-Lite закройте окно Settings Настройки , щелкая по кнопке BACK НАЗАД до тех пор, пока не будут закрыты все окна. Вы должны увидеть, что X-Lite пытается зарегистрироваться в Asterisk, и в случае успеха в CLI Asterisk будет выведено следующее:. Более подробная информация, представленная ниже, может быть получена с помощью команды sip show peer Многие считают, что конфигурировать телефоны Polycom сложно. Насколько нам известно, такие выводы делаются по двум причинам: Что касается пункта 1, мы согласны. Веб-интерфейс телефонов Polycom является одним из самых неприятных веб-интерфейсов из всех, когда- либо созданных для IP-телефонов. Мы его не используем и вам не советуем [64]. Итак, нам остается только кое-какая конфигурация с использованием сервера. К счастью, в этом отношении IP-телефоны Polycom просто великолепны, настолько, что им даже можно простить веб-интерфейс. Конфигурации телефонов хранятся в файлах на сервере. Каждый телефон находит сервер, загружает с него соответствующие файлы и применяет их к себе. Если вы не можете управлять используемым DHCP-сервером, вам придется вручную вводить в телефон информацию о FTP-сервере. Для этого необходимо перезагрузить телефон, нажать кнопку setup настройка до того, как телефон начнет процесс загрузки, и задать адрес FTP-сервера в небольшом меню загрузки, предлагаемом этим типом телефонов. Телефоны Polycom могут загружать свою конфигурацию по одному из трех протоколов: TFTP, HTTP и FTP. Сразу же хотим попросить избегать TFTP. Он не обеспечивает необходимой безопасности, и телефон не может использовать информацию о дате для определения того, какие версии файлов являются самыми последними. Этот протокол работает, но есть лучшие способы, и мы здесь не собираемся обсуждать TFTP. Телефоны Polycom могут извлекать свои данные конфигурации и с помощью HTTP, но он не получил широкого распространения, и мы также не собираемся останавливаться на нем. В настоящее время FTP является предпочтительным методом получения телефонами Polycom своей конфигурации. Он прекрасно работает, его довольно просто конфигурировать, и он получил хорошую поддержку сообщества. В настоящее время FTP - наш любимый способ конфигурации телефонов Polycom. В системе CentOS при выполнении следующей команды будет установлен VSFTPD, Very Secure FTP Daemon:. Теперь необходимо создать пользовательскую учетную запись и группу, которые будут использоваться для телефонных аппаратов Polycom:. Его можно изменить, но после этого придется вручную настраивать каждый аппарат, чтобы сообщить ему его нестандартные учетные данные [65]. Хотя кажется, что разных файлов, которые необходимы для подготовки к работе телефона Polycom, так много, разобраться с ними довольно просто. Лучше всего охарактеризовать этот файл как BIOS и операционную систему телефона. Вероятно, можно дать и более формальное определение, но зачем усложнять? Этот файл будет называться bootrom. Поскольку телефоны Polycom могут поддерживать другие протоколы VoIP например, поддерживается MGCP Media Gateway Control Protocol - протокол контроля медиа-шлюзов , протокол, который будет использовать данный телефон, является частью образа приложения, загружаемого и выполняемого телефоном. Если в телефоне уже имеется соответствующий образ, этот файл на FTP-сер- вере фактически не нужен; однако обычно он доступен, чтобы обеспечить телефонам возможность получить последнюю версию протокола. К вам могут попасть телефоны, использующие не последнюю версию, поэтому наличие образа с текущей версией протокола гарантирует, что все телефоны будут отвечать самым последним требованиям. Обычно в системе имеется только одна версия этого файла, но ему может быть присвоено любое имя, поэтому его версий может быть столько, сколько потребуется. Например, если в организации в ходу два языка, некоторые пользователи могут предпочесть использовать в своих телефонах французский, другие - английский. В этом случае для каждого варианта пришлось бы создать два файла: Этот файл можно назвать как угодно, но лучше выбирать имя, имеющее смысл, чтобы в будущем администраторы могли понять, почему были приняты именно такие проектные решения. Основной конфигурационный файл для каждого телефона. Это очень простой и небольшой файл. Его имя соответствует MAC-адресу телефона то есть у каждого телефона должна быть собственная копия этого файла. Из этого файла телефон получает информацию о том, какие еще файлы необходимо загрузить, чтобы выполнить свою конфигурацию. Этот конфигурационный файл все телефоны читают первым. В нем находится ссылка на образ приложения, который будет использовать данный телефон в настоящее время названный sip. Основной конфигурационный файл телефона может выглядеть так:. Обратите внимание на имя файла приложения, которое должен будет использовать данный телефон, и конфигурационные файлы, которые он будет пытаться найти и применить. Специальный конфигурационный файл телефона. Мы рекомендуем присваивать файлам phone1. Как лучше всего называть их? Ответим вопросом на вопрос. Скажем, имеется таких телефонов. Настройки, заданные непосредственно в телефоне, будут храниться в файловой системе телефона и могут иметь приоритет перед параметрами конфигурационных файлов. Если возникают проблемы с внесением изменений в телефон, попытайтесь переформатировать его. Это заставит его принять параметры, содержащиеся в конфигурационных файлах. Почтенный старец C - сейчас уже часть истории VoIP. Это один из первых SIP-телефонов, к которому действительно можно было относиться серьезно. Единственное, на что можно пожаловаться, - его цена. Если вы можете достать один из них, вы получите превосходный SIP- телефон. Если покупаете новый, будьте готовы выложить кругленькую сумму. Один из аспектов несоответствия этого телефона духу времени - возможность удаленной подготовки к работе только посредством TFTP. TFTP потерял доверие сетевых специалистов из-за отсутствия поддержки аутентификации и шифрования, но поскольку это единственный способ удаленно настроить данный телефон, нам придется использовать демон tftp-сервера. Установить tftp-сервер можно с помощью следующей команды:. Телефоны Cisco по умолчанию загружаются с собственным протоколом связи, SCCP или Skinny. Мы покажем, как конфигурировать телефон, но из-за узкоспециализированности " Cisco и ее телефонов вам понадобится получить встроенные программы SIP у своего провайдера услуг связи. Также для Asterisk существует две реализации: Пароль, используемый для доступа к телефону через консоль или по протоколу telnet, не более 31 символа. Затем в файле SIPDefault. Нам нужен один дополнительный файл, OS79XX. В нем есть лишь одна строка - версия файлов. Чтобы наш Cisco использовал эти файлы, мы должны указать ему, откуда он может взять свою конфигурацию. Этот адрес использовался для нашего Asterisk-серве- ра, и опять мы предполагаем, что TFTP-сервер установлен на одном сервере с Asterisk. Для этого нажмите кнопку settings настройки на моделях G телефонов Cisco она выглядит как квадратик с галочкой внутри; G означает Global. Затем понадобится разблокировать настройки, нажав кнопку 9. Пароль по умолчанию - cisco. Как только телефон будет разблокирован, нажмите кнопку 3 номеронабирателя, чтобы войти в раздел Network Configuration Настройки сети. С помощью прокрутки перейдите вниз к опции 32, Alternate TFTP Альтернативный TFTP , и задайте для нее значение YES. Затем поднимитесь к опции 7 и введите IP-адрес TFTP-сервера, с которого вы хотите загружаться. Подтвердите настройки и выйдите из меню, пока телефон перезагружается. Понаблюдать за тем, как телефон извлекает конфигурацию с TFTP- сервера, можно с помощью команды tshark yum install ethereal. Задайте фильтрацию по порту 69 следующим образом: С момента приобретения Sipura Technologies компания Linksys выпускает недорогие VoIP-телефоны и аналоговые терминальные адаптеры ATA. Linksys многое позаимствовала у Cisco. Почитайте книгу Клейтона М. Продукты Linksys и Sipura снискали славу за свое превосходное качество, особенно с учетом цены, но они известны также тем, что их ужасно сложно настраивать. Это, главным образом, объясняется тем, что их GUI конфигурации предлагает сотни настраиваемых параметров. Но нас это не волнует. Вот то, что необходимо знать, чтобы настроить SPA и, надеемся, большинство VoIP-устройств Linksys для работы с системой Asterisk. Прежде всего необходимо получить IP-адрес телефона, чтобы можно было войти в его GUI. На самом телефоне найдите кнопку со значком,. Это кнопка Settings Настройки - рис. Чтобы получить IP-адрес телефона, нажмите кнопку Settings Настройки , а затем - кнопку 9 или используйте кнопку со стрелками и с помощью прокрутки перейдите к пункту Network Сеть. После этого нажмите кнопку select выбрать под жидкокристаллическим дисплеем располагается ряд из 4 кнопок, select - крайняя слева. Во втором поле должен быть указан IP-адрес телефона. Теперь откройте броузер, введите IP-адрес в адресную строку, нажмите кнопку Enter Ввод - и вы увидите окно Info Информация телефона. В верхнем правом углу экрана выберите ссылку Admin Login Вход под учетной записью администратора. При этом появится несколько новых вкладок, таких как Regional Региональные , Phone Телефон , Ext 1, Ext 2 и User Пользователь. Выберите вкладку Ext 1, с помощью которой мы выполним настройку первой линии. Выберите в меню следующие опции:. Теперь ваш телефон должен быть зарегистрирован в Asterisk. Вы узнаете об этом по кнопке-индикатору, расположенному рядом с жидкокристаллическим дисплеем, - он изменит цвет с оранжевого на зеленый. Чтобы ваш телефон мог звонить на другие телефоны или, для многоканального телефона, звонить самому себе , необходимо внести изменения в файл extensions. Если имеется два телефона или сконфигурировано несколько линий, можно продублировать предыдущие настройки, заменив на другой добавочный номер. С появлением интернет-телефонии по всему миру возникло множество телефонных компаний, использующих интернет-технологии! Поэтому выбор у нас огромен. Многие из этих поставщиков сервисов обеспечивают возможность подключения частной Asterisk-системы к их сетям [66] , а некоторые даже используют Asterisk сами! Следующая конфигурация должна обеспечить подключение к поставщику сервисов интернет-телефонии Internet Telephony Service Provider, ITSP [67] , хотя невозможно предугадать, какую конфигурацию потребует конкретный поставщик. В идеале поставщик сам предоставит вам настройки, которые необходимы для подключения вашей системы. Однако не все поддерживают Asterisk, поэтому мы собираемся предложить универсальную конфигурацию, на выполнение которой уйдет лишь несколько минут и которая должна помочь вам:. Если межсетевой экран ip-таблиц используется на одном компьютере с сервером Asterisk, выполнив следующие команды, можно открыть порт для обмена сигналами по протоколу SIP и порты от до для RTP-трафика. Также диапазон RTP-портов можно сузить в файле rtp. Помните, что это откроет порты и от до для всего UDP-трафика из любого источника. Большинство приведенных настроек должны быть вам знакомы, но если нет, далее дается их краткое описание. Задавая тип peer, мы указываем Asterisk, что при получении сообщения INVITE Приглашение когда поставщик присылает вызов нужно сравнивать не имя [мой поставщик сервисов], а IP-адрес, указанный в этом сообщении. Параметр host - это IP-адрес, на который мы будем направлять наши вызовы, и этот IP-адрес будет сопоставляться при получении вызова от поставщика. Параметр fromuser от пользователя влияет на то, как структурировано наше сообщение INVITE при отправке вызова поставщику сервисов. Некоторые поставщики услуг для отправки своих вызовов могут использовать вместо протокола Session Initiation Protocol множество IP-адресов, требуя от вас создания отдельной учетной записи типа peer для каждого IP-адреса. Если известны не все IP-адреса, вероятно, придется сравнивать имена пользователей. В этом случае потребуется лишь немного изменить формат описания поставщика сервисов. Также мы изменили тип peer равноправный на friend дружественный , что с точки зрения Asterisk создает типы и user пользователь , и peer, где тип user будет сравниваться раньше peer: Обратите внимание, что удалены параметры deny отклонить и permit разрешить , поскольку IP-адреса, с которых будут поступать вызовы, могут быть неизвестны. Если вдруг эти адреса известны и вы по-прежнему хотите сравнивать их, параметры deny и permit для IP-адресов можно восстановить. Если имя пользователя задано в параметре fromuser, при отправке вызова поставщику меняются поля From: Этого может требовать сам поставщик, если он использует эти поля в процедуре аутентификации. То, где Asterisk меняет заголовок, можно увидеть в следующих двух фрагментах кода. INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY Supported: Параметры deny и permit используются для отклонения всех входящих вызовов к этому участнику сети от всех IP-адресов, кроме заданного параметром permit. Это просто мера безопасности, которая обеспечивает поступление к данному участнику сети трафика только с ожидаемого IP-адреса. По сути, это означает, что в строке Contact Контакт поле сообщения INVITE, которое вы проверяете при приеме вызова от своего поставщика может быть совсем не тот IP-адрес, по которому находится участник сети. Это выражение указывает Asterisk игнорировать данное несоответствие и принимать приглашение в любом случае. Теперь в разделе [general] файла sip. Так Asterisk говорит поставщику сервисов: Если ты получил вызов ко мне, пошли его на IP-адрес Параметр register имеет следующий вид:. Ш Теперь осталось только сконфигурировать простой диалплан для обработки входящих вызовов и отправки вызовов через поставщика сервисов. Строки, выделенные курсивом, - это новые части, добавленные в диалплан. Все остальное взято без изменений из предыдущего раздела [68]. Может настать время, когда у вас появится два сервера Asterisk и вам захочется передавать вызовы между ними. К счастью, здесь нет особых сложностей, хотя имеются некоторые странности, с которыми придется справляться, но с точки зрения конфигурации на самом деле это совсем не так уж трудно. Если ip-таблицы используются на одном компьютере с сервером Asterisk, с помощью следующих команд можно открыть порт для обмена сигналами по протоколу SIP и порты от до для RTP-трафика. Наша топология будет состоять из SIP-телефона Элис Alice , зарегистрированного в Asterisk A Торонто Toronto , и SIP-телефона Боб Bob , зарегистрированного в Asterisk B Осака Osaka. К концу данного раздела вы сможете с помощью пары серверов Asterisk производить звонки от Элис к Бобу и наоборот - рис. Это типовой сценарий, когда имеется два физических местоположения, например ком-. У нас есть пара серверов Asterisk, назовем их Торонто и Осака, и мы собираемся зарегистрировать их друг на друге. В этом сценарии будем использовать самый элементарный файл sip. Как и в случае с рассматриваемой ранее в данной главе конфигурацией SIP-телефона, это не лучший способ, но он работает. Многие из приведенных опций могут быть вам знакомы, но давайте на всякий случай остановимся на них подробнее. Вторая строка файла указывает серверу Asterisk зарегистрироваться на другом сервере. Таким образом мы сообщаем удаленному серверу. Asterisk, куда направлять вызовы, когда он пожелает обратиться к нашему локальному серверу Asterisk. Помните, мы предупреждали о небольших странностях в конфигурации? Видите в конце строки регистрации слэш и имя удаленного сервера Asterisk? Так удаленный сервер Asterisk получает информацию о том, какое краткое имя использовать при вызове. Если не добавить этого, при попытке дальнего конца сделать вызов в окне командной строки Asterisk появится следующее сообщение:. Таким образом, добавляя слэш и имя, мы сообщаем противоположному концу, что должно быть указано в качестве краткого имени пользователя в поле Proxy Authorization Авторизация прокси SIP-сообщения INVITE. Весь остальной файл занимает блок авторизации, используемый для управления входящими и исходящими вызовами другого сервера Asterisk. Сервер Торонто использует блок авторизации [osaka], и сервер Осака использует блок [toronto]. Определен тип friend, что позволяет принимать и направлять вызовы к другому серверу Asterisk. Параметр secret секрет - это пароль, который должна использовать другая система при аутентификации. Параметр context контекст указывает, в какой части диалплана extensions. Для параметра host задано значение dynamic динамический , это указывает серверу Asterisk на то, что противоположный конец сообщит свой IP-адрес, на который следует направлять адресованные ему звонки, при регистрации. Наконец, с помощью параметров disallow запретить и allow разрешить можно определять, какие кодеки будут использоваться при общении с противоположным концом. После сохранения файла и перезагрузки SIP-канала на обоих серверах Asterisk выполнение команды sip reload из консоли Asterisk в окне командной строки должно быть выведено примерно следующее сообщение, что свидетельствует об успешной регистрации удаленного сервера:. Убедиться в успешности собственной регистрации можно, выполнив команду sip show registry из консоли Asterisk: Теперь, когда оба сервера Asterisk довольны друг другом, займемся конфигурацией пары SIP-телефонов, чтобы иметь возможность позвонить. Ниже представлена конфигурация SIP-телефона в файле sip. Эти строки должны быть добавлены в конце файла sip. Теперь для сервера Торонто должен быть зарегистрирован добавочный номер , а для сервера Осака - Убедиться в этом можно с помощью команды sip show peers. Далее мы собираемся сконфигурировать логику диплплана, что позволит производить звонки с одного добавочного номера на другой. Теперь можно сконфигурировать простой диалплан для каждого сервера, который позволит выполнять звонки между зарегистрированными телефонами: Теперь давайте на базе этой конфигурации создадим диалплан. Диалпланы обоих серверов будут очень похожи, но для ясности здесь приведены оба. Новые строки, добавленные в существовавший до этого файл, выделены курсивом:. После того как файл extensions. Удостовериться в том, что диалплан загружен, поможет команда dialplan show. Протокол IAX2 создан для обеспечения удобства работы с сетями, имеющими необычную конфигурацию, особенно с использованием технологии NAT Network Address Translation - трансляция сетевых адресов. Это является его основным преимуществом и делает IAX2 превосходным протоколом для программных телефонов, выступающих в роли клиентов, поскольку они часто используются на портативных компьютерах, которые подключаются к различным сетям, зачастую без возможности управления самой сетью например, при подключении к сети в разных гостиницах. Протокол Inter-Asterisk eXchange IAX обычно используется для связи сервер-сервер; по сравнению с SIP его поддерживает большее число аппаратных телефонов. Есть и программные телефоны, поддерживающие протокол IAX, и работа по обеспечению поддержки аппаратных телефонов во встроенном ПО продолжается по нескольким направлениям. Основное различие между протоколами IAX и SIP - способ передачи медиа-данных между конечными точками. При использовании протокола SIP для передачи трафика RTP голоса используются порты, отличные от тех, что работают с методами обмена сигналами. Например, Asterisk получает сигналы SIP через порт , а трафик RTP голос проходит через порты от до по умолчанию. IAX-протокол отличается тем, что и обмен сигналами, и трафик медиа-данных выполняется через один порт: Следствие такого подхода - протокол IAX лучше подходит для топологий с использованием NAT. Существует множество программных телефонов на базе IAX, но не так много аппаратных. Наиболее очевидная причина этому - IAX2 до сих пор не стандартизован IETF Internet Engineering Task Force - Комитет по стандартизации интернет-протоколов , хотя многие уже перешли на него и пользуются предоставляемыми им преимуществами. Превосходный программный телефон на базе IAX2 - idefisk. Он доступен бесплатно для скачивания по адресу http: Пожалуйста, обратите внимание, что пробел не входит в список допустимых символов. Не используйте пробелы в именах контекстов, потому что результат вам не понравится! Авторы данной книги добились замечательных результатов с этим программным телефоном, и, поскольку он выполняется в Microsoft Windows, Mac OS X и Linux, он является отличным примером для применения межплатформенных программных телефонов. Здесь будет продемонстрирована версия 1. Как всегда, постараемся наладить все быстро с минимальной настройкой конфигурационного файла, чтобы максимально сократить проблемы, которые могут возникнуть при конфигурации устройств. Как это было с файлом sip. Да, действительно, это все, что необходимо для настройки программного телефона. Это не самая безопасная или функциональная конфигурация даже не использует ся пароль , но она будет работать. В разделе [general] файла iax. Она используется для того, чтобы предотвратить задержку в системе, когда участник сети не отвечает ACK на пакет NEW запрос на установление нового соединения в течение мс. Вместо значения yes здесь можно задать время в миллисекундах ожидания ACK на пакет NEW. Управлять опцией autokill автоуничтожение для каждого отдельного равноправного участника сети можно, определяя параметр qualify качество для тех участников, о возможном недостаточном качестве используемых сетевых соединений которых известно заранее. Весь остальной файл - описание программного телефона. Мы определяем для него тип friend, указывая Asterisk на то, что будем производить звонки на это устройство, а также принимать звонки с него. Можно было бы дать отдельные описания для peer и user:. Подтверждаем существование нового равноправного участника сети, выполнив команду iax2 show peers. Окно Account Options Опции учетной записи программного телефона idefisk. После установки программного телефона idefisk откройте клиентское приложение. На экран будет выведено окно, представленное на рис. После запуска программного телефона, чтобы можно было выполнять с него звонки, его необходимо настроить. Также, чтобы можно было принимать звонки, этот телефон должен быть зарегистрирован в Asterisk. Для этого щелкните правой кнопкой мыши по иконке в верхнем левом углу экрана. Выберите в нем пункт Account Options Опции учетной записи , что обеспечит открытие окна, показанного на рис. Начните с создания новой учетной записи для программного телефона, щелкнув по кнопке New Новая и введя соответствующую информацию. В поле Host Хост должен быть указан IP-адрес или доменное имя вашей системы Asterisk, при этом имя пользователя должно совпадать с именем, указанным в квадратных скобках [] в файле iax. Поле Password Пароль оставляем незаполненным, потому что мы не задавали параметр secret в файле iax. Чтобы idefisk зарегистрировал эту учетную запись при запуске, поставьте флажок Register on startup Зарегистрировать при запуске. Введя все необходимые данные, щелкните по кнопке OK, чтобы сохранить новую учетную запись. Если был установлен флажок Register on startup Зарегистрировать при запуске , телефон попытается зарегистрироваться в Asterisk. В консоли Asterisk будет выведена информация о том, что телефон зарегистрирован:. Осталось только подтвердить возможность выполнения вызовов с помощью нашего телефона, задав простой диалплан в файле extensions. Если добавочный номер задан для SIP-телефона, что мы делали в предыдущих разделах, обеспечим, чтобы данная конфигурация не перекрывала его, и используем добавочный номер если вы сконфигурировали несколько добавочных номеров для SIP, просто задайте здесь для программного телефона IAX2 уникальный добавочный номер: Некоторые поставщики сервисов интернет-телефонии ITSP предоставляют возможность начинать и завершать соединения с помощью протокола IAX2. Кроме сведения до минимума количества портов, которые необходимо открыть в межсетевом экране для IAX2 требуется лишь один порт, через который ведется и обмен сигналами, и передача медиа-данных , способность объединения каналов этого протокола привлекательна как для поставщиков сервисов, так и для их клиентов из- за сохранения полосы пропускания, которое возможно при выполнении множества одновременных соединений между конечными точками. Если ITSP предлагает завершение соединения с использованием IAX2, очень высока вероятность, что он использует Asterisk; таким образом, конфигурация для подключения к этому поставщику сервисов, скорее всего, будет аналогична той, которую мы приводим здесь. Следующая конфигурация - это шаблон для подключения к поставщику сервисов IAX Чтобы принимать входящие вызовы по прямому номеру номеру прямого набора внутренних абонентов - Direct Inward Dialing, DID , присвоенному вам поставщиком сервисов, необходимо откорректировать файл extensions. Возможно, вы хотите направлять звонки на автоответчик или просто на телефон у себя на столе. В любом случае звонки от поставщика услуг можно принимать и сопоставлять с входящим DID с помощью следующей реализованной в диалплане логики: Часто желательно объединить два физических сервера Asterisk по протоколу IAX, чтобы иметь возможность обмениваться вызовами между двумя физическими местоположениями расстояние между этими точками можем быть ничтожно мало, а может измеряться и километрами. Одно из преимуществ использования протокола IAX для этого - его способность, называемая объединением каналов, в которой используется метод отправки голосовых данных множества звонков под одним заголовком. Для одного или двух одновременных вызовов эффект от этой возможности невелик, но если между двумя точками выполняются десятки или сотни звонков, выигрыш в пропускной способности за счет использования объединения каналов может быть огромным. Если ip-таблицы используются на одном компьютере с сервером Asterisk, можно выполнить следующие команды для открытия порта для протокола IAX2. Системе понадобится интерфейс синхронизации - или аппаратный, производства Digium, или программный, использующий ядро драйвера ztdummy. Для этого в системе должен быть установлен и запущен драйвер Zaptel. Подробно об установке Zaptel рассказывается в главе 3. Мы будем использовать простую схему из двух серверов Asterisk, зарегистрированных непосредственно друг на друге, и отдельных телефонов, зарегистрированных на каждом из серверов Asterisk. Будем называть серверы Asterisk Торонто и Осака см. Телефон Боба будет зарегистрирован и подключен к Торонто, а телефон Элис - к серверу Осака. Прежде всего создадим новый файл канала iax. Для этого переименуем текущий файл шаблона в iax. Это спасает от возникновения множества подвешенных каналов, просто ожидающих подтверждения приема, которое, возможно, никогда не будет получено. Строка register используется для указания удаленному серверу Asterisk нашего местоположения, чтобы, когда сервер по адресу Имя пользователя Toronto и пароль welcome посылаются на сервер Осака, который проверяет нашу регистрацию. Если аутентификация пройдена успешно, он записывает в память местоположение нашего сервера Asterisk и будет использовать эту информацию при отправке нам вызовов. Описание [Osaka] используется для управления аутентификацией удаленного сервера и доставки на него нашего диалплана. Osaka - это имя пользователя, используемое для аутентификации при поступлении вызовов. Для параметра type задано значение friend, потому что мы хотим иметь возможность отправлять вызовы на сервер Осака и принимать от него вызовы. Для параметра host задано значение dynamic, что указывает Asterisk направлять вызовы на IP-адрес, полученный при регистрации противоположной конечной точки. В начале данного раздела был упомянут потенциальный выигрыш в пропускной способности при использовании возможности объединения каналов, предоставляемой IAX2. Если интерфейс синхронизации то есть dummy установлен и запущен, можно использовать преимущества объединения каналов IAX2. Параметр secret ясен - это пароль, используемый для аутентификации. Наконец, параметр deny запрещает все IP-адреса, кроме явно разрешенного Конфигурация, которая будет использоваться здесь, практически аналогична, за исключением незначительных изменений, связанных с необходимостью обеспечения уникальности участников сети. Если вы уже настроили программный телефон SIP, можете также использовать его в качестве одного или обоих равноправных участников сети. Не забывайте, что Asterisk - приложение, работающее с множеством протоколов, и вызов к Asterisk может быть послан с SIP-теле- фона, передан по магистральному каналу IAX2 и затем направлен на другой SIP-телефон или H. Далее сконфигурируем программный телефон IAX2 для регистрации в Asterisk. Если телефон успешно зарегистрирован, в командной строке будет выведено примерно следующее сообщение:. Чтобы обеспечить возможность установления соединения между двумя серверами Asterisk по магистральному каналу IAX2, необходимо сконфигурировать простой диалплан. Представленный диалплан будет направлять вызовы на все добавочные номера в диапазоне от до на сервер Осака и вызовы на все добавочные номера в диапазоне от до на сервер Торонто. В данном примере предполагается, что сконфигурирована пара программных телефонов IAX2, но если в вашем распоряжении имеется SIP-телефон или. Просто помните, что в этом случае понадобится изменить приложение Dial так, чтобы вызовы направлялись на SIP-телефон по SIP-протоколу, а не IAX2 то есть строку. С конфигурационными файлами Asterisk связан один очень малоизвестный факт, но он настолько замечательный, что заслуживает отдельного небольшого раздела. Скажем, имеется 20 SIP-телефонов, практически идентичных с точки зрения конфигурации. Согласно документации они должны описываться путем задания параметров для каждого телефона в отдельности. Фрагмент подобного файла sip. Слишком много ввода текста, копирования и вставки, правда? А что если требуется изменить имя контекста для телефонов. Не очень удобно, не так ли? Давайте создадим таких же участников сети типа friend, как делали выше, только на этот раз используя шаблон:. Это одна из самых малоизвестных возможностей создания конфигурационного файла. Очень немногие пользуются этой возможностью, но лишь потому, что мало кто знает о ней. Итак, пришло время перемен. С этого момента мы хотим видеть, что шаблонами пользуются все; и да, мы будем проверять. В Asterisk предлагается несколько методов отладки. Подключившись к консоли, можно управлять отладкой и уровнем детальности сообщений, а также трассировкой пакетов протокола. В данном разделе рассмотрим доступные варианты. Чтобы подключиться к консоли Asterisk, можно или запустить сервер непосредственно из консоли в этом случае невозможно будет выйти из консоли, не завершив работу Asterisk , или запустить Asterisk как демон и затем подключиться к удаленной консоли. Чтобы запустить процесс Asterisk непосредственно из консоли, используйте флаг консоли: Чтобы подключиться к удаленной консоли, сначала запустите демон, а затем выполните подключение, используя флаг -r:. Если какой-то модуль не загружается или Asterisk не загружается из- за какого-то модуля, запустите Asterisk с флагом -c, чтобы отслеживать статус загружаемых модулей. Asterisk может выводить отладочную информацию в форме сообщений WARNING предупреждение , NOTICE извещение и ERROR ошибка. Эти сообщения предоставляют информацию о системе, такую как регистрационные данные, статус, последовательность вызовов и другие полезные сведения. Обратите внимание, что сообщения WARNING и NOTICE не являются сообщениями об ошибках; а вот к сообщениям ERROR необходимо относиться внимательно. Уровень детальности сообщений можно задать с помощью команды set verbose и числового значения. Диапазон допустимых значений - от 3 до Например, чтобы задать самый высокий уровень детальности, используется команда. Также можно активировать вывод основных сообщений отладки с помощью команды set debug и числового значения. Чтобы активировать вывод сообщений DEBUG отладка в консоли, возможно, понадобится в файле logger. Эти настройки элементарны, но благодаря им мы имеем функциональные каналы, с которыми можно работать. Мы будем использовать их в следующих главах, пока не научимся создавать более функциональные диалпланы. Все должно быть сделано настолько просто, насколько это возможно, но не проще. Диалплан, поистине, - сердце любой системы Asterisk, поскольку он определяет, как Asterisk обрабатывает входящие и исходящие вызовы. По сути, он состоит из списка инструкций или шагов, которым будет следовать Asterisk. В отличие от традиционных систем телефонной связи, диалплан Asterisk является полностью настраиваемым. Чтобы добиться успеха в построении собственной системы Asterisk, необходимо понять концепцию диалплана. Если вы пытались прочитать некоторые примеры диалпланов и сочли их невыполнимыми или пробовали написать диалплан Asterisk и не достигли успеха, не отчаивайтесь, помощь близка. Данная глава шаг за шагом объяснит, как работает диалплан. Прочитав ее, вы приобретете навыки, необходимые для создания собственного диалплана. Все примеры дополняют друг друга, поэтому можно свободно вернуться назад и перечитать раздел, если что-то непонятно. Однако, пожалуйста, обратите внимание, что данная глава ни в коем случае не является исчерпывающим обзором всех возможностей диалплана; наша цель - рассмотреть только основы. Более глубокие аспекты настройки диал- плана будут затронуты в последующих главах. Диалплан состоит из четырех основных элементов: В следующих нескольких разделах будут рассмотрены все эти части и то, как они работают вместе. После объяснения роли каждого из этих элементов в диалпла- не перейдем к процессу поэтапного создания базового функционального диалплана. Если при установке Asterisk были установлены и образцы конфигурационных файлов, скорее всего, у вас имеется файл extensions. Но мы предлагаем начинать не с файла-образца, а создать собственный файл extensions. Это будет крайне полезно, поскольку обеспечит лучшее понимание основных элементов и принципов диалплана. Но надо сказать, что образец файла extensions. Мы предлагаем переименовать его и назвать, например, extensions. Таким образом оригинальный файл будет сохранен, и к нему можно будет обратиться в будущем. Диалпланы разбиты на разделы, называемые контекстами. Контексты - это именованные группы добавочных номеров, которые выполняют несколько функций. Контексты изолируют разные части диалплана, предотвращая возможность их взаимодействия. Добавочный номер, определенный в одном контексте, полностью изолирован от добавочных номеров другого контекста, если только взаимодействие не разрешено специально. То, как разрешить взаимодействие контекстов, будет рассмотрено ближе к концу данной главы. В качестве простого примера возьмем две компании, совместно использующие один сервер Asterisk. Если разместить голосовое меню каждой компании в собственном контексте, они будут эффективно отделены друг от друга. Это позволяет независимо определять действия, выполняемые, скажем, при наборе номера 0: Эти примеры предполагают, конечно же, что мы задали для Asterisk перенаправление вызовов на секретарей при нажатии кнопки 0 вызывающими абонентами. Контексты различаются по именам. Имена контекстов заключаются в квадратные скобки [ ]. Допустимыми символами для образования имени являются буквы от A до Z верхнего и нижнего регистра , цифры от 0 до 9, дефис и символ подчеркивания 1. Например, контекст для входящих вызовов выглядит так: Все инструкции, размещаемые после описания контекста и до описания следующего контекста, являются частью данного контекста. В начале диалплана находятся два специальных контекста, [general] и [globals]. Пока что достаточно знать, что эти два контекста являются специальными. Созданные вами контексты можно называть как угодно, только не используйте имена [general] и [globals]. При описании канала а именно так выполняется подключение элементов к системе одним из параметров этого описания является контекст. Иначе говоря, контекст - это точка диалплана, с которой будет начинаться обработка соединений, выполняемых через этот канал. Другое важное применение контекстов возможно, самое важное - обеспечение безопасности. Правильно применяя контексты, определенным абонентам можно предоставить доступ к функциям таким, как междугородная связь , которые недоступны для других. Если ди- алплан разработан неаккуратно, пользователи по вашей оплошности могут получить возможность мошенничать в вашей системе. Пожалуйста, помните об этом при построении системы Asterisk. Вам чрезвычайно важно прочитать и понять этот файл. Если проигнорировать меры предосторожности, описанные там, все может закончиться тем, что кто угодно сможет делать междугородные и платные звонки за ваш счет! Если не отнестись к безопасности своей системы Asterisk серьезно, может дойти до того, что вам придется за это дорого расплатиться в буквальном смысле этого слова! Пожалуйста, выделите время и силы на то, чтобы защитить свою систему от мошенничества с оплатой. Однако в Asterisk это намного более широкое понятие, поскольку оно определяет уникальные последовательности шагов каждый шаг включает приложение , которые Asterisk будет применять к вызову по этой линии. В каждом контексте может быть задано столько добавочных номеров, сколько требуется. При вызове конкретного добавочного номера входящим или внутренним звонком Asterisk будет выполнять шаги, определенные для этого добавочного номера. Поэтому именно добавочные номера определяют, что происходит со звонками при их обработке соответственно диалпла- ну. Хотя, конечно, добавочные номера могут использоваться в их традиционном значении то есть вызов добавочного номера заставит зазвонить SIP-телефон на столе Джона , но в диалплане Asterisk они могут означать намного большее. Далее указывается имя или номер. В традиционных системах телефонной связи под добавочными номерами мы понимаем цифры, которые надо набрать, чтобы другой телефон зазвонил. В Asterisk это понятие намного шире; например, в качестве имени добавочного номера может использоваться любая комбинация цифр и букв. В данной главе и далее будут использоваться как цифровые, так и буквенно-цифровые добавочные номера. Присвоение имен добавочным номерам может показаться революционной идеей, но если вспомнить, что многие транспортные протоколы VoIP поддерживают или даже активно поощряют вызовы по имени или адресу электронной почты, а не просто по номеру, это действительно имеет смысл. Это одно из свойств, делающих Asterisk такой гибкой и мощной системой. Теперь пойдем дальше и рассмотрим, что такое приоритеты и приложения. Каждый добавочный номер может включать множество шагов, называемых приоритетами. Каждый приоритет пронумерован последовательно, начиная с 1, и выполняет одно определенное приложение. Например, следующий добавочный номер отвечает на звонок в приоритете под номером 1 и затем выполняет разъединение в приоритете под номером Не переживайте, если вы не понимаете, что такое Answer и Hangup , мы очень скоро их рассмотрим. Здесь главное - запомнить, что для отдельного добавочного номера Asterisk выполняет приоритеты по порядку. В более старых версиях Asterisk нумерация приоритетов вызывала множество проблем. Представьте, что в добавочном номере 15 приоритетов и требуется добавить что-то в шаге 2. Номера всех последующих приоритетов пришлось бы менять вручную. Asterisk не обрабатывает пропущенные шаги или неправильно пронумерованные приоритеты, и отладка ошибок такого типа превращалась в бесцельную и досадную трату времени. Начиная с версии 1. Каждый раз, когда Asterisk встречает приоритет n, она берет номер предыдущего приоритета и добавляет 1. Это упрощает внесение изменений в диалплан, поскольку теперь не надо изменять номера всех шагов. Например, диалплан может быть таким:. Asterisk будет самостоятельно вычислять номер следующего приоритета при каждой встрече с приоритетом n [69]. Однако следует отметить, что приоритет под номером 1 должен быть задан обязательно. Если случайно для идущего первым приоритета задать n вместо 1, добавочный номер будет недоступен. Это обеспечивает возможность ссылаться на приоритет не по номеру, который может быть неизвестен, потому что теперь в диалпланах, как правило, используются ненумерованные приоритеты. Чтобы присвоить приоритету текстовую метку, просто добавляем ее в круглых скобках после приоритета: Очень распространенной ошибкой является использование запятой между символами n и , как в данном примере:. В следующей главе мы рассмотрим, как переходить с одного приоритета на другой, используя логику диалплана. Вы будете встречать множество меток приоритетов и станете очень часто использовать их в своих диалпланах. Приложения - это рабочие лошадки диалплана. Каждое приложение выполняет определенное действие над данным каналом, например воспроизведение звука, прием тонального ввода, вызов канала, разрыв соединения и т. В предыдущем примере было представлено два простых приложения: Сейчас мы подробнее рассмотрим, как они работают. Для выполнения некоторых приложений, таких как Answer и Hangup , не требуется никаких дополнительных инструкций. Некоторым приложениям необходима дополнительная информация. Эти данные, называемые аргументами, могут передаваться в приложения, чтобы оказывать влияние на то, как они выполняют свои действия. Чтобы передать аргументы в приложение, разместите их через запятую в круглых скобках, следующих за именем приложения. Иногда вместо запятой в качестве разделителя между аргументами можно увидеть символ вертикальной черты. Допускается использование любого из этих символов. В примерах данной книги для разделения аргументов приложения будет применяться запятая, поскольку авторы предпочитают такой синтаксис. Однако при синтаксическом разборе диалплана Asterisk преобразует все запятые в аргументах приложений в символы вертикальной черты. Когда мы создадим наш первый диалплан в следующем разделе, вы научитесь использовать приложения и связанные с ними аргументы. Теперь мы готовы создать наш первый диалплан. Давайте начнем с очень простого примера. Asterisk должна будет ответить на звонок, воспроизвести звуковой файл и разорвать соединение. Используем этот простой пример, чтобы обозначить наиболее важные концепции диал- плана. Предложенные в данной главе примеры разработаны исходя из предположения, что был создан и сконфигурирован соответственно описанию в предыдущей главе по крайней мере один канал Zap, SIP или IAX2 - неважно и что все вызовы, поступающие на этот канал, направляются в контекст диалплана [incoming]. Если к какому-то из предыдущих примеров вы подошли творчески, вероятно, вам придется вносить некоторые поправки, чтобы обеспечить соответствие имен каналов. В наших каналах мы применяем определенную технологию, и поэтому, прежде чем приступить к настройке диалплана, придется остановиться еще на одном вопросе. Необходимо рассмотреть добавочный номер s. Когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер например, вызов FXO-линии , они передаются на добавочный номер s. Поскольку это именно то, что требуется для нашего диалплана, перейдем к делу. Для каждого вызова будет выполняться три действия ответ на него, воспроизведение звукового файла и разъединение , поэтому добавочному номеру s понадобится три приоритета. Поместим три приоритета в контекст [incoming], поскольку было принято решение о том, что все входящие вызовы должны обрабатываться в этом контексте [70]. Обратите внимание, что можно было бы пронумеровать каждый приоритет, как показано ниже, но теперь так делать не рекомендуется, поскольку это сильно усложняет внесение изменений в диалплан впоследствии:. Прежде чем мы будем отвечать на звонок, воспроизводить звуковой файл и затем выполнять разъединение вызова, нам нужно научиться это делать. Приложение Answer Ответ используется для ответа каналу, по которому выполняется звонок. Оно выполняет исходную настройку для канала, получающего входящий вызов. Некоторые приложения не требуют обязательного ответа каналу, но соответствующий ответ на звонок перед тем, как выполнять какие-либо действия над каналом, является очень хорошей практикой. Как упоминалось ранее, Answer не принимает аргументов. Приложение Playback Воспроизведение воспроизводит в канале предварительно записанный звуковой файл. При использовании приложения Playback ввод, поступающий от пользователя, просто игнорируется. При компиляции Asterisk можно выбрать для установки различные наборы образцов звуков, записанных на разных языках и в разных форматах файлов. Во многих примерах данной книги будут использоваться эти файлы, а также несколько файлов из Extra Sound Package, поэтому, пожалуйста, потратьте немного времени и установите этот пакет см. Также, посетив сайт http: Чтобы использовать Playback , задайте в качестве аргумента имя файла без расширения. Например, Playback filename обеспечит воспроизведение звукового файла filename. Обратите внимание, что по желанию можно указать полный путь к файлу, как это сделано в данном примере:. Также можно использовать относительные пути из папки для звуковых файлов Asterisk: Этот пример обеспечит воспроизведение filename. Заметьте, что, если в указанной папке содержится несколько файлов под одним именем, но с разными расширениями файлов, Asterisk автоматически воспроизводит лучший из них [71]. Приложение Hangup Разъединить выполняет именно то, что подразумевается под его именем: Это приложение должно применяться в конце контекста для завершения текущего вызова, что защитит от несанкционированного использования диалплана абонентами. Приложение Hangup не принимает аргументов. Теперь, когда добавочный номер готов, сведем все вместе и создадим наш первый диалплан. В первом приоритете нашего добавочного номера мы будем отвечать на звонок, во втором - воспроизводить звуковой файл hello-world. Вот как выглядит диал- план:. Если у вас уже имеется один или несколько сконфигурированных каналов - вперед [72]! Просто создайте файл extensions. Если ничего не получается, проверьте, нет ли в консоли Asterisk сообщений об ошибках, и убедитесь, что для ваших каналов задан контекст [incoming]. Даже несмотря на то что этот пример очень мал и прост, он раскрывает основные принципы контекстов, добавочных номеров, приоритетов и приложений. Если все получилось и этот диалплан заработал, значит, вы разобрались с основами, на базе которых создаются все диалпланы. Теперь давайте дополнять наш пример. В конце концов, в телефонной системе, просто воспроизводящей звуковой файл и затем разъединяющей канал, очень немного пользы! Созданный в предыдущем разделе диалплан был статическим; он всегда выполняет одни и те же действия для всех вызовов. Теперь мы собираемся добавить некоторую логику в диалплан, чтобы он осуществлял разные действия на основании ввода пользователя. Для этого необходимо рассмотреть еще некоторые приложения. Один из самых важных ключей к построению интерактивных диал- планов Asterisk - приложение BackgroundQ [73] Фон. Как и Playback , это приложение воспроизводит записанный звуковой файл. Однако, в отличие от Playback , если пользователь нажимает кнопку или последовательность кнопок на клавиатуре телефона, оно прерывает воспроизведение и переходит к добавочному номеру соответственно нажатым цифрам. Например, если абонент нажмет кнопку 5, Asterisk прекратит воспроизводить звуковое сообщение и передаст управление вызовом первому приоритету добавочного номера 5. Чаще всего приложение Background используется для создания голосовых меню которые часто называют автоответчиками или интерактивными секретарями. Многие компании используют голосовые меню для направления абонентов на соответствующий добавочный номер, таким образом освобождая своих секретарей от необходимости отвечать на все звонки. В более ранних версиях Asterisk, если приложение Background завершало воспроизведение звукового сообщения и в текущем добавочном номере больше не было приоритетов, Asterisk ничего не делала и ожидала ввода абонента. Такое поведение больше не является для Asterisk принятым по умолчанию. Если требуется, чтобы Asterisk ожидала ввода абонента после завершения воспроизведения звукового сообщения, можно вызвать приложение WaitExten Ожидание добавочного номера. Приложение WaitExten ожидает от абонента набора телефонного номера и часто вызывается сразу после приложения Background , как в данном фрагменте диалплана:. Если требуется, чтобы приложение WaitExten ожидало ответа в течение определенного времени вместо использования времени ожидания по умолчанию , просто укажите число, соответствующее необходимому количеству секунд, в качестве первого аргумента в WaitExten:. И Background , и WaitExten позволяют абоненту производить набор номера. После этого Asterisk пытается найти в текущем контексте добавочный номер, соответствующий введенным абонентом цифрам. Если Asterisk находит однозначное соответствие, она направляет вызов на этот добавочный номер. Продемонстрируем это, добавив несколько строк в наш пример:. Если нажать одну из этих цифр, Asterisk воспроизведет ее для вас. Также вы обнаружите, что, если ввести другую цифру например, 5 , Asterisk не обеспечит ожидаемого результата. Также возможна ситуация, когда Asterisk обнаружит неоднозначное соответствие. Это можно легко продемонстрировать, введя в предыдущий пример добавочный номер под именем Почему Asterisk сразу же не воспроизводит этот номер? Потому, что цифра 1 неоднозначна; Asterisk не понимает, какой добавочный номер вызывается, 1 или Он ожидает несколько секунд ввода другой цифры например, 2 для вызова добавочного номера Если набора никаких других цифр не последовало, по завершении времени ожидания Asterisk направляет вызов на добавочный номер 1. Задавать собственные значения времени ожидания мы научимся в главе 6. Прежде чем двигаться дальше, посмотрим, что было сделано на данный момент. Вызвав наш диалплан, абоненты услышат приветствие. Если они нажмут 1, то услышат номер 1, если 2 - то номер 2 и т. Для начала это неплохо, но давайте это все немного усовершенствуем. С помощью приложения Goto Перейти к заставим диалплан повторять приветствие после воспроизведения номера. Как следует из его имени, приложение Goto используется для перенаправления вызова в другую часть диалплана. Синтаксис Goto требует передачи в него в качестве аргументов целевого контекста, добавочного номера и приоритета:. Две новые строки выделенные курсивом обеспечат возвращение управления над вызовом добавочному номеру после воспроизведения выбранного номера. Если вы внимательно посмотрите на приложение Goto , то поймете, что в него на самом деле можно передавать один, два или три аргумента. Если передается только один аргумент, Asterisk предположит, что это основной приоритет текущего добавочного номера. Если передано два аргумента, Asterisk будет трактовать их как добавочный номер и приоритет, к которым надо перейти в текущем контексте. В данном примере были переданы все три аргумента для наглядности, но, если бы мы задали только добавочный номер и приоритет, результат был бы аналогичным. Теперь, когда создание нашего первого голосового меню уже близится к завершению, введем специальные добавочные номера. Во-первых, нам необходим добавочный номер для недействительных вводов; когда абонент нажимает не ту кнопку например, 9 для предыдущего примера , вызов направляется на добавочный номер i. Во-вторых, необходим добавочный номер для обработки ситуаций, когда абонент не производит ввод вовремя время ожидания по умолчанию - 10 с. Если абонент слишком долго не нажимает кнопку после запуска приложения WaitExten , вызовы направляются на добавочный номер t. Вот как будет выглядеть диалплан после введения этих двух добавочных номеров: Использование добавочных номеров i и t делает диалплан несколько более надежным и практичным. Но надо сказать, он по-прежнему довольно примитивен, потому что внешние абоненты не имеют возможности соединения с реальным живым человеком. Для этого нам придется ознакомиться с еще одним приложением - Dial Звонить. Одно из самых ценных свойств Asterisk - это возможность установления соединения между разными абонентами. Это особенно полезно, когда абоненты используют разные методы связи. Например, абонент А может звонить по традиционной аналоговой телефонной линии, тогда как пользователь В может сидеть в кафе в другой части света и говорить по IP-телефону. К счастью, большую часть тяжелой работы по установлению соединения и выполнению преобразований между разными сетями Asterisk берет на себя. От вас требуется лишь научиться использовать приложение Dial. Синтаксис Dial немного сложнее, чем синтаксис приложений, которые применялись до сих пор, но не пугайтесь. Dial принимает четыре аргумента. Первый - получатель вызова. Он состоит в самой простой форме из названия технологии или транспортного протокола , с помощью которой выполняется вызов, символа слэш и имени удаленной конечной точки или ресурса. Технология - Zap, ресурс - 1. Аналогично, для вызова устройства SIP описанного в sip. Если приложение не может связаться ни с одним вызываемым абонентом, Asterisk задаст переменной DIALSTATUS статус звонка значение, соответствующее ситуации невозможности дозвониться на вызываемые номера, и продолжит выполнение следующего приоритета добавочного номера 1. Приложение Dial также позволяет устанавливать связь с удаленной конечной точкой VoIP, которая не была предварительно описана в конфигурационных файлах канала. Вот полный синтаксис такого типа соединения:. В качестве примера можно позвонить на демонстрационный сервер Digium, который использует протокол IAX2, по следующему добавочному номеру:. Если время ожидания задано, Dial будет пытаться дозвониться по заданным номерам в течение этого количества секунд, а потом перейдет к следующему приоритету добавочного номера. Если время ожидания не задано, Dial будет дозваниваться на вызываемые каналы до тех пор, пока кто-нибудь не ответит или пока вызывающий абонент не повесит трубку. Введем для нашего добавочного номера время ожидания 10 с:. Если вызываемый номер просто не отвечает, занят или недоступен по какой-то другой причине, Asterisk задаст переменную DIALSTATUS и перейдет к следующему приоритету добавочного номера. Как видите, этот пример будет воспроизводить звуковой файл vm- nobodyavail. Третий аргумент Dial - строка опций. Она может содержать один или более символов, влияющих на поведение приложения Dial. Список возможных опций слишком велик, чтобы приводить его здесь; рассмотрим лишь самую популярную из них - опцию m. Если указать m в качестве третьего аргумента, вызывающая сторона, пока выполняется дозвон до вызываемого абонента, будет слышать во время ожидания вместо гудков музыку конечно, если эта музыка сконфигурирована правильно. Чтобы добавить опцию m в наш последний пример, просто изменим первую строку:. Теперь, когда мы научились использовать приложение Dial , добавочные номера 1 и 2 в диалплане стали бесполезными. Давайте заменим их новыми добавочными номерами, которые позволят внешним абонентам дозваниваться до Джона John и Джейн Jane:. Четвертый и последний аргумент приложения Dial - URL. Если вызываемый канал поддерживает прием URL в момент вызова, заданный URL будет передан например, если используется IP-телефон, поддерживающий прием URL, этот URL появится на дисплее телефона; аналогично, если используется программный телефон, URL может быть выведен на экран монитора. Этот аргумент применяется очень редко. Обратите внимание, что второй, третий и четвертый аргументы могут быть опущены. Например, если требуется определить опцию, но при этом вы не собираетесь задавать время ожидания, просто оставьте пропуск на месте аргумента времени ожидания, как в данном примере:. До сих пор в наших примерах мы ограничивались одним контекстом, но, вероятно, справедливо предполагать, что в диалпланах практически всех установок Asterisk будет не один контекст, а больше. Как упоминалось в начале данной главы, одна из важных функций контекстов - разделение прав доступа таких, как осуществление междугородних вызовов или звонков на определенные добавочные номера для разных классов абонентов. В следующем примере наш диалплан будет дополнен созданием двух внутренних добавочных номеров, для которых будет настроена возможность звонить друг другу. Для этого создадим новый контекст, [employees] служащие. Это было сделано, чтобы показать пример использования других типов каналов. Добавочные номера и выбраны для примера произвольно, для своих добавочных номеров вы можете использовать любые другие цифры. Также необходимо помнить, что вы не ограничены трехзначными добавочными номерами; номер может включать столько угодно цифр. Скажем так, почти сколько угодно. Добавочные номера не должны быть длиннее 80 символов, и нельзя использовать добавочные номера длиной в один символ для собственных нужд, поскольку они зарезервированы. Не забывайте, что могут применяться и имена, как в данном примере: Конечно, не помешало бы добавить именные добавочные номера, если предполагается, что пользователи могут получать звонки по VoIP-про- токолу, такому как SIP, который поддерживает вызов по имени. Теперь, когда наши внутренние абоненты могут звонить друг другу, мы значительно продвинулись на пути к созданию полного диалплана. Далее будет показано, как можно сделать диалплан более масштабируемым и пригодным к внесению изменений в будущем. Переменные, используемые в диалплане Asterisk, способствуют сокращению объема вводимого текста, делают код более понятным или вводят дополнительную логику. Тем, кто имеет опыт разработки программного обеспечения, вероятно, понятие переменной уже знакомо. Если нет, не стоит беспокоиться; мы объясним, что такое переменные и как они используются. Переменные можно рассматривать как контейнер, в котором в данный момент времени может храниться одно значение. Существует два способа использования переменной. Чтобы сослаться на имя переменной, просто вводится ее имя, например JOHN. Если, с другой стороны, требуется сослаться на ее значение, необходимо ввести знак доллара, открывающую фигурную скобку, имя переменной и закрывающую фигурную скобку. Вот как используется переменная в приложении Dial:. Обратите внимание, что имена переменных чувствительны к регистру. JOHN и John - это разные переменные. Для удобства чтения все имена переменных в примерах будут записываться в верхнем регистре. Также следует помнить, что все переменные, заданные Asterisk, тоже будут записаны прописными буквами. Некоторые переменные, такие как CHANNEL или EXTEN, зарезервированы Asterisk. Не надо пытаться задавать их. В диалплане используется три типа переменных: Кратко рассмотрим каждый из этих типов. Как следует из их названия, глобальные переменные применяются ко всем добавочным номерам во всех контекстах. Глобальные переменные полезны тем, что могут использоваться в любом месте диалплана, повышая читабельность и обслуживаемость кода. Это был бы, мягко выражаясь, долгий и чреватый ошибками процесс. Глобальные переменные объявляются в контексте [globals] в начале файла extensions. Их можно также задать программно с помощью функции диалплана GLOBALQ [74]. Вот пример использования обоих методов задания переменных в диалплане. Эта переменная задается в момент, когда Asterisk выполняет синтаксический разбор диал- плана. Второй пример представляет, как можно задать глобальную переменную в процессе выполнения диалплана. Переменная канала - это переменная, связанная только с конкретным вызовом. В отличие от глобальных переменных, переменные каналов определяются только на время текущего вызова и доступны лишь для каналов, участвующих в нем. Для использования в диалплане предопределено множество переменных каналов. Они описаны в файле channelvariables. Переменные каналов задаются с помощью приложения Set:. Переменные среды - это средство организации доступа к переменным среды UNIX из Asterisk. Для их использования служит функция диалплана ENV. Ее синтаксис выглядит следующим образом: Переменные среды используются в диалпланах Asterisk не часто, но они доступны на случай необходимости. Теперь, ознакомившись с переменными, применим их в нашем диалплане. Добавим глобальные переменные для двух людей, Джона и Джейн:. Если мы хотим предоставить людям возможность осуществлять звонки через Asterisk и желаем, чтобы Asterisk обеспечивала соединение абонента с внешним ресурсом, нам необходим механизм сопоставления любого телефонного номера, который может быть набран абонентом. Можете себе представить, как утомительно было бы вручную писать диалплан с добавочными номерами для всех возможных вариантов? К счастью, у Asterisk есть как раз то, что надо для таких случаев: Благодаря возможности сопоставления с шаблонами в диалплане можно создать один добавочный номер, который будет соответствовать множеству разных номеров. Используемые в шаблонах буквы и символы представляют определенные группы символов. Он указывает Asterisk, что выполняется сопоставление с шаблоном, а не с явно заданным добавочным номером. Безусловно, это означает, что имена добавочных номеров нельзя начинать с символа подчеркивания. Если не поставить символ подчеркивания в начале шаблона, Asterisk посчитает, что это просто именованный добавочный номер, и не будет выполнять сопоставления с шаблоном. Это одна из самых распространенных ошибок среди новичков в Asterisk. Соответствует любому однозначному числу из заданного диапазона. В данном случае шаблон соответствует одиночной цифре 1, 5, 6 или 7. Универсальное соответствие должно использоваться в шаблоне только после того, как сопоставлено максимально возможное количество цифр. Например, следующий шаблон, наверное, не должен применяться никогда:. На самом деле Asterisk предупредит в случае попытки его применения. Лучше по возможности используйте такой шаблон:. Чтобы использовать сопоставление с шаблонами в своем диалплане, просто вставьте шаблон на место добавочного номера или его имени:. То есть, если бы абонент набрал любой трехзначный добавочный номер в диапазоне от до в данном контексте, он бы услышал звуковой файл auth-thankyou. Еще одна важная деталь, которую необходимо знать о сопоставлении с шаблонами: Скажем, задано два следующих шаблона и абонент набирает В данном случае был бы выбран второй добавочный номер, потому что он более точно соответствует набранному номеру. Прежде чем продолжить, рассмотрим еще несколько примеров сопоставления с шаблонами. В каждом из них проверьте, сможете ли вы сказать, чему соответствует шаблон, до того, как прочитаете объяснения. Этот шаблон соответствует любому семизначному номеру, начинающемуся с двойки и выше, то есть любому локальному семизначному номеру по североамериканскому плану нумерации. В зонах, где используются значные номера, этот шаблон выглядел бы так:. Североамериканскийплан нумерации North AmericanNumbering Plan, NANP - это общая схема телефонной нумерации, используемая 19 странами в Северной Америке и Канаде. Код страны для стран NANP - 1. В США и Канаде нормы и правила электросвязи довольно похожи и удобны , поэтому на большинство междугородних номеров можно звонить, используя код страны 1, по разумной цене. Однако многие даже не догадываются, что NANP используют 19 стран, подчас с очень разными правилами электросвязи. Более подробную информацию об этом можно найти по адресу http: Очень популярно мошенничество с использованием NANP, когда наивных американцев обманным путем заставляют звонить в страны Карибского бассейна по номерам, звонок по которым оплачивается поминутно, как междугородний; абоненты верят, что, если набрать 1-NPA-NXX-XXXX, звонок будет оплачиваться по стандартным национальным тарифам на междугородние звонки. Поскольку в данном государстве могут действовать правила, допускающие такого рода мошенничество, абоненту в итоге приходится оплачивать телефонные счета. Единственный способ предотвратить такого рода деятельность - блокировать определенные междугородние коды например, и снимать ограничения только в случае необходимости. Обратите внимание, что ни один из данных шаблонов не станет обрабатывать междугородние звонки. Скоро мы рассмотрим этот вопрос. Данный шаблон немного сложнее. Он соответствует 1, за которой следует код города от до , а затем - любой семизначный номер. В зоне действия NANP этот шаблон будет использоваться для сопоставления с любым междугородним номером [75]. Теперь еще более хитрый пример: Если, увидев этот шаблон, вы лишь почесали затылок, посмотрите на него еще раз. Заметили точку в конце? Этот шаблон соответствует любому номеру, начинающемуся с и имеющему по крайней мере еще одну цифру. В NANP это соответствует международному телефонному номеру. Мы будем использовать эти шаблоны в следующем разделе для добавления в наш диалплан возможностей выполнения исходящих звонков. Мы знаем, о чем вы думаете Вы сидите и задаете себе вопрос: Чтобы протестировать ее, можно использовать приложение SayDigits:. В этом примере приложение SayDigits будет воспроизводить для вас набранный вами трехзначный добавочный номер. В этом примере приложение SayDigits начнет воспроизведение со второй цифры, таким образом, будут воспроизведены только две последние цифры набранного добавочного номера. Пусть задана строка набора:. Это очень мощная структура, но большинство из приведенных ее вариантов используются редко. Теперь, когда мы ознакомились с шаблонами, можно переходить к тому, как обеспечить абонентам возможность осуществлять исходящие звонки. Первое, что мы сделаем, - добавим переменную в контекст [globals], чтобы определить, какой канал будет использоваться для исходящих вызовов:. Далее добавим в диалплан контекст для исходящих вызовов. Возможно, сейчас вы задаетесь вопросом: Сначала создадим контекст для локальных вызовов. Не будем отступать от традиций и первой цифрой в наших шаблонах поставим 9, чтобы пользователи для звонка на внешний номер набирали 9: Обратите внимание, что цифра 9 на самом деле не обеспечивает выхода на внешнюю линию, как это происходит во многих традиционных системах офисных АТС. После набора цифры 9 в аналоговой линии сразу же пропадет тональный сигнал готовности линии. Если вам хочется, чтобы зуммер продолжался даже после набора цифры 9, добавьте следующую строку сразу после описания контекста: Согласно данной директиве Asterisk будет продолжать давать тональный сигнал в аналоговую линию даже после набора указанного шаблона. Это не будет работать с телефонами VoIP, поскольку обычно они не передают отдельные цифры номера в систему во время их ввода; они отправляют Asterisk весь номер сразу. К счастью, большинство популярных VoIP-телефо- нов можно настроить на имитацию такой функциональности. Повторим, что было сделано. Мы добавили глобальную переменную OUTBOUNDTRUNK, которая просто определяет канал, используемый для исходящих вызовов 1. Также был введен контекст для локальных исходя-Это обеспечивает то преимущество, что, если однажды будет принято решение передавать вызовы по какому-то другому каналу, надо будет отредактировать имя канала, заданное как значение переменной OUTBOUNDTRUNK только в контексте [globals], а не менять вручную все ссылки на этот канал по всему диалплану. Если удается дозвониться, абонент соединяется с исходящим каналом. Прежде чем двигаться дальше, убедимся, что наш диалплан позволяет выполнять исходящие звонки на номера экстренного вызова:. Опять же, в данном примере предполагается, что мы находимся в США или Канаде. Если вы проживаете в другой стране, замените, пожалуйста, номером экстренных служб, используемым в вашем регионе. Это то, о чем ни в коем случае нельзя забывать при создании своего ди- алплана! Теперь, когда у нас есть два новых контекста, как предоставить возможность внутренним абонентам их использовать? Необходим какой-то способ использовать функциональность одного контекста из другого. Asterisk предоставляет возможность использовать добавочные номера из одного контекста в другом контексте с помощью директивы include включить. Так можно управлять доступом к различным разделам диалплана. Мы будем применять функциональность включения, чтобы дать возможность пользователям из контекста [employees] делать исходящие звонки. Но сначала давайте рассмотрим синтаксис. Выражение include имеет следующий вид, где контекст - имя удаленного контекста, который требуется включить в текущий: При включении контекстов друг в друга необходимо внимательно продумать порядок их включения. Asterisk сначала будет пытаться найти. В случае неудачи она будет рассматривать контекст, включенный первым в том числе все включенные в него контексты , а затем будет переходить от одного контекста к другому в порядке их включения. На данный момент в нашем диалплане есть два контекста для исходящих вызовов, но абоненты из контекста [employees] не могут их использовать. Исправим это, включив оба исходящих контекста в контекст [employees], как показано в примере: Эти два выражения include обеспечивают абонентам из контекста [employees] возможность осуществлять исходящие вызовы. Также нужно заметить следующее: Если вдруг это стало бы возможным, люди могли бы дозваниваться в вашу систему, а затем делать исходящие платные звонки за ваш счет! И вот он готов - базовый, но вполне функциональный диалплан. Это не совсем полный набор возможных свойств, но основные из них были рассмотрены. В следующих главах наш базовый диалплан будет дополнен новыми функциями. Если какие-то части данного диалплана вызывают у вас вопросы, вероятно, вам следует вернуться немного назад и перечитать раздел или два, прежде чем переходить к следующей главе. Крайне важно понимать все эти основные принципы и их применение, потому что они являются основой для изучения следующих глав. Чтобы получить список всех направлений, в которых технологии не смогли улучшить качество жизни, пожалуйста, нажмите три. Основные принципы диалплана рассмотрены, но многое впереди. Если вы еще не до конца разобрались с предыдущей главой, пожалуйста, вернитесь назад и перечитайте ее. Мы собираемся переходить к более сложным вопросам. Поскольку мы начинаем погружение в более глубокие аспекты диал- плана, пришло время представить несколько инструментов, которые могут значительно увеличить его мощь. Эти структуры невероятно усложнят логику диалплана, обеспечив ему возможность принимать решения на основании различных задаваемых критериев. Итак, собрались с мыслями - и начнем. Выражения - это сочетания переменных, операторов и значений, объединяемые для получения результата. Выражение может тестировать значения, изменять строки или выполнять вычисления. Допустим, имеется переменная COUNT. Возьмем два возможных выражения, составленных с использованием этой переменной: Каждое из этих выражений имеет конкретный результат или значение, зависящие от значения данной переменной. Когда Asterisk встречает в диалплане выражение, она заменяет его результирующим значением. Важно отметить, что это происходит после подстановки переменных. Чтобы продемонстрировать это, посмотрим на следующий фрагмент кода В первом приоритете переменной COUNT присваивается значение 3. Во втором приоритете участвует только одно приложение, Set , но фактически выполняется три действия:. Выражение, в сущности, превращается в следующее:. Приложение Set присваивает значение 4 переменной NEWCOUNT. Код диалплана Asterisk записывается на специальном языке сценариев. Это означает, что язык диалплана Asterisk, как любой язык программирования, распознает символы, называемые операторами, которые позволяют оперировать переменными. Рассмотрим типы операторов, используемые в Asterisk: Эти операторы оценивают истинность выражения. С точки зрения вычислений это, по сути, означает, является ли выражение чем-то или оно является ничем отличный от нуля или нуль, истина или ложь, включен или выключен и т. К логическим операторам относятся:. Помните, что при ссылке на переменную используется просто ее имя, но при ссылке на значение переменной ее имя должно быть заключено в квадратные скобки и перед ними должен стоять знак доллара. Этот оператор называемый оператором ИЛИ в случае истинности выражения expr1 не пустая строка и не нуль возвращает результат его вычисления. В противном случае он возвращает результат вычисления выражения expr2. Это оператор называемый оператором И возвращает результат вычисления expr1, если оба выражения истинны то есть если ни одно из выражений не дает в результате пустой строки или нуля. В противном случае возвращается нуль. Эти операторы возвращают результаты сравнения целых чисел, если оба аргумента являются целыми числами; в противном случае возвращаются результаты сравнения строк. В результате сравнения получаем 1, если заданное отношение выполняется, или 0, если отношение не выполняется. Сравнение строк выполняется соответственно текущим локальным настройкам операционной системы. Вам потребуется один из следующих операторов: Эти операторы возвращают результаты сложения или вычитания целочисленных аргументов. Эти операторы возвращают результаты умножения, целочисленного деления или остаток от деления целочисленных аргументов соответственно. Этот оператор сравнивает выражение expr1 с expr2, где последнее должно быть регулярным выражением 1. Регулярное выражение привязывается к началу строки посредством явного задания 2. Больше информации о регулярных выражениях можно найти в полном справочнике Джеффри Е. Она изменит вашу жизнь! Если соответствия не выявлено и шаблон не содержит подстроку регулярного выражения, возвращается нулевая строка; в противном случае, возвращается 0. Синтаксический анализатор Asterisk версии 1. Соответственно, следующая запись не обеспечивала бы желаемого результата:. Чтобы исправить это, надо поставить пробелы перед оператором и после него:. Однако ради удобства чтения по-прежнему рекомендуется отделять операторы пробелами. Чтобы добавить текст в начало или конец переменной, просто поместите его в выражении рядом:. Функции диалплана делают выражения более мощными; их можно рассматривать как интеллектуальные переменные. Функций диалпла- на позволяют вычислять длины строк, даты и время, контрольные суммы MD5 и т. Как вы, вероятно, уже заметили, необходимо быть очень внимательным с открывающими и закрывающими скобками. В примере выше парные открывающие и закрывающие круглые и фигурные скобки обозначены одинаковыми числами. Часто функции используются в сочетании с приложением Set для получения или задания значения переменной. В качестве простого примера рассмотрим функцию LEN. Эта функция вычисляет длину строки, заданной в качестве ее аргумента. Вычислим длину строки переменной и воспроизведем это значение для абонента: Приведенный пример определит, что строка example содержит семь символов, задаст это значение как длину переменной и воспроизведет это число пользователю с помощью приложения SayNumber. Рассмотрим еще один простой пример. Если бы мы захотели задать время ожидания для одного из каналов, то могли бы использовать функцию TIMEOUT. Функция TIMEOUT принимает один из трех аргументов: Чтобы задать максимальный промежуток времени между вводом цифр с помощью функции TIMEOUT , можно воспользоваться приложением Set:. Полный список доступных функций можно получить, введя команду core show functions в интерфейсе командной строки Asterisk. Также они представлены в приложении F. После краткого ознакомления с выражениями и функциями пришло время использовать их на практике. Применение выражений и функций позволяет усложнить логику диалплана. Возможность принятия решений в диалплане обеспечивается выполнением переходов по условию. Остановимся на этом подробнее. Ключ к выполнению переходов по условию - приложение GotoIf. GotoIf вычисляет выражение и отправляет абонента в соответствующее место назначения в зависимости от истинности или ложности выражения. Если выражение ложно возвращает значение false , абонент направляется по второму адресу. Итак, что обеспечивает возвращение значения true или false? Пустая строка и номер 0 обеспечивают false, все остальное - true. В качестве места назначения может быть задано следующее:. Любое из мест назначения может быть опущено, но не оба одновременно. Если согласно вычислениям переход должен осуществляться по месту назначения, которое не задано, Asterisk просто переходит к следующему приоритету текущего добавочного номера. Вы заметите, что за каждым приложением Playback следует приложение Hangup. Все чаще можно увидеть добавочные номера, разбитые на несколько компонентов разделенных между собой командой Hangup , каждый из которых представляет собой этапы, выполняемые следом за GotoIf. Обычно при такой схеме, когда требуется оградить Asterisk от выполнения следующего приоритета после выполнения перехода, вероятно, лучше в качестве места назначения использовать другие добавочные номера, а не метки приоритетов. Во всяком случае, это делает диал- план несколько понятнее. Предыдущий фрагмент диалплана можно было бы переписать следующим образом: Поскольку это именно то, что требуется, указывать метку необязательно. На самом деле мы не рекомендуем этого делать, потому что такая запись сложна для понимания. Но подобные диалпланы встречаются, поэтому надо просто знать, что данный синтаксис тоже является абсолютно правильным. При изменении значения, присваиваемого TEST в первой строке, сервер Asterisk должен воспроизводить разные приветствия. Рассмотрим другой пример выполнения переходов по условию. На этот раз будем использовать оба приложения, и Goto , и GotoIf. Выполним счет в обратном направлении от 10 и повесим трубку: В первом приоритете переменной COUNT присваивается значение Далее COUNT сравнивается с 0. Если ее значение больше нуля, мы переходим к следующему приоритету. Не забываем, что, если место назначения в приложении GotoIf опущено, управление передается вниз следующему приоритету. С этого момента воспроизводится номер, из COUNT вычитается 1 и управление опять возвращается к приоритету start начало. Если значение COUNT меньше или равно 0, управление передается приоритету goodbye до свидания и вызов завершается. Если номер Caller ID ID звонящего входящего вызова совпадает с номером телефона бывшей девушки абонента, Asterisk выдает сообщение, отличающееся от того, которым он обычно встречает звонки от других абонентов. Несмотря на простоту и примитивность, это хороший пример для изучения переходов по условию в диалплане Asterisk. В этом примере используется функция CALLERID, которая позволяет извлекать информацию о Caller ID ID звонящего входящего вызова. Пусть для данного случая номер телефона жертвы будет В приоритете 1 вызывается приложение GotoIf. Оно указывает Asterisk перейти к метке приоритета reject отклонить , если номер Caller ID ID звонящего соответствует , а в противном случае перейти к метке приоритета allow можно было бы опустить имя метки, позволяя GotoIf просто передать управление далее. Если номер Caller ID ID звонящего совпадает с указанным, управление вызовом передается приоритету reject, который воспроизводит нежелательному абоненту неприветливое сообщение. Другой вариант использования переходов по условию в диалплане - приложение GotoIfTime. GotoIf для принятия решения производит вычисление выражения, тогда как GotoIfTime выбирает, в какую ветвь диалплана выполнить переход, на основании текущего системного времени. Самое очевидное применение этого приложения - предоставление абонентам разных приветствий до начала рабочего времени и после его окончания. Рассмотрим каждый аргумент более подробно:.


Купили квартиру с долгом что делать
Как увеличить память fly
Активные методы обучения виды
База знаний
План рассказа об одном из защитников отечества
Бабки рука пизде
Мелисса отвар свойства
Глава 4 Исходная конфигурация Asterisk
Стихи майл ру
Дошкольное воспитание журнал архив статей
IP телефоны
Под какие дни сбываются сны
Саб своими руками в машину
Приказ о назначении в доу
Конфигурация SIP-телефонов
Выдвижные гладильные доски своими руками
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment