Журнал LinuxFormat - перейти на главную

LXF146:tut7

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

Рулим звонками из Asterisk

Джонатан Робертс покажет, как начать работу с сервером коммуникаций Asterisk и применить его для связи с внешним миром.


Asterisk часто называют программной мини-АТС – то есть системой маршрутизации звонков и подключений в здании или в офисе; но это не совсем справедливо. Разработчики Asterisk предпочитают давать ему описание вроде «сервер коммуникации», так как на нем основывают весь спектр коммуникационных приложений, включая автоматизированные меню, центры обработки вызовов, конференц-мосты и серверы голосовой почты.

Традиционно функции такого рода выполнялись проприетарными телефонными системами, которые бывали запредельно дороги. Asterisk, однако, обеспечивает все эти функции по номинальной стоимости: немного времени на обучение системе, некоторые аппаратные устройства и подключение к Интернет – вот и все, что вам надо.

Гибкости и статусу свободного ПО Asterisk обязан мощью и популярностью, но также получил репутацию, не совсем незаслуженно, трудного в изучении. В Интернет хватает материалов с пояснениями, как его использовать, но многие из них предполагают массу предварительных знаний – даже понять, зачем вам мог бы понадобиться Asterisk, и то нелегко!

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

Вторая половина урока – простой практический проект с Asterisk. Он покажет, как подключить несколько телефонов вместе во внутренней сети и связать эту сеть со внешним миром.


Хорошо говорить

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

Asterisk находится посреди этой связи, действуя как многоязычный секретарь. Благодаря т. н. «каналам», он понимает множество различных протоколов связи, может переводить соединения между ними и даже соединять различные устройства и передатчики вместе.

Asterisk еще и умен (ну, такое можно запрограммировать) и умеет выполнять некие действия в зависимости от заданных критериев. Это достигается за счет собственных сценариев Asterisk, известных как «план набора» [dialplan], где на звонки отвечают, перенаправляют их и подключают к внешним приложениям и источникам данных.

Переключение каналов

Как вы понимаете, обработка соединения всех этих различных протоколов и выяснение, что делать с каждым – процесс сложный. Как Asterisk с этим справляется?

При поступлении звонка на Asterisk, будь то через Интернет с помощью протокола вроде SIP или через стационарный телефон через специализированные карты PCI, он сперва попадает на канал, один для каждого протокола.

Канал начинает с проверки, известно ли ему устройство, которое пытается связаться с ним – если это не так, он мало что сможет сделать! Ему в помощь, все каналы имеют конфигурационные файлы, содержащие необходимые настройки и параметры идентификации для каждого устройства, которое будет использоваться системой.

В конфигурации каналов также содержится информация о том, куда в системе Asterisk направлять звонок от каждого устройства. Эта информация известна как «контекст» и указывает на определенную часть плана набора.

План набора содержится в файле extensions.conf, который сам разделен на секции – по одному для каждого контекста в настройках канала. Как и следовало ожидать, эти разделы тоже известны как контекст.

Каждый контекст содержит ряд «расширений» – команд, связывающих набранный устройством связи номер с выполняемым действием. Действия бывают простые, такие как подключение вызова на внешнюю линию, или составные, для создания более сложных приложений.

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

С учетом этого, перейдем к практическому аспекту урока.


Подключайтесь

Как мы уже говорили во введении, Asterisk чрезвычайно гибок. Это добавляет сложности, но чтобы увеличить ваши шансы на усвоение урока, приведенные ниже инструкции помогут вам копировать наши установки.

На уроке мы используем дистрибутив AsteriskNOW, поскольку он поставляется с готовыми необходимыми пакетами и модулями ядра. Все, что вам нужно сделать – это установить его, и дело в шляпе. К сожалению, на диске этого месяца на него не осталось места, но можно загрузить его копию с http://www.asterisk.org/asterisknow/.

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

Также отметим, что данный урок займется настройкой Asterisk на использование Интернета для выполнения звонков. Начальных вложений тут не требуется, и вы можете настроить систему и протестировать ее, не платя за экзотическое оборудование. Вы также должны будете подписать договор с поставщиком SIP (см.: Что такое SIP?). На уроке будет использован http://sipgate.co.uk, который для нас дармовой по входящим звонкам, дешевый по выходящим и оплачивается «по факту».

Эта последняя часть важна, поскольку означает, что если вы по ошибке откроете свою систему внешнему миру, вы не рискуете получить счет на тысячу фунтов из-за того, что какие-то жулики решили употребить вас.

Наконец, вам нужен телефон SIP, а то и несколько. Вы можете получить аппаратные устройства, но мы на уроке воспользуемся Ekiga от Gnome, так как это бесплатно и доступно в большинстве дистрибутивов Linux.

Возьмите команду

Настроив себе среду, перезагрузитесь и войдите от имени root, назвав пароль, заданный во время установки. Затем перейдите в каталог /etc/asterisk, где хранятся все файлы конфигурации, по команде cd /etc/asterisk.

Файлы, достойные особого внимания – sip.conf, с настройками для канала SIP, и extensions.conf, где содержится план набора. По умолчанию, каждый заполнен примерами с комментариями и сперва может запугать. Эти закомментированные примеры – бесценные ресурсы при создании более сложных установок, но пока они скорее являются препятствием. Переместите их в место хранения резервных копий, чтобы вы могли начать с нуля:

mv sip.conf sip.conf.sample
mv extensions.conf extensions.conf.sample

Кроме редактирования этих файлов, на нашем уроке мы также воспользуемся встроенными в Asterisk командами (CLI Asterisk). Вы ускорите свою работу, если запустите его в отдельном виртуальном терминале (VT); для этого переключитесь во второй терминал клавишами Ctrl+F2, снова войдите от имени root и загрузите CLI Asterisk с asterisk -r.

Это важный инструмент: он позволяет менять настройки без перезагрузки и выводить все, что генерирует Asterisk, значительно облегчая диагностику любых проблем. Мы займемся этим позже, а пока вернемся в первый VT (Ctrl+F1).

Добавление устройства

Начнем с регистрации нового устройства в Asterisk. Тогда Asterisk будет знать о его существовании и используемом им протоколе и какой контекст в плане набора вызовов от него должен быть передан. Так как мы применяем устройства SIP, откройте sip.conf в вашем любимом редакторе или скомандуйте nano sip.conf, если вы не уверены в выборе.

Вы увидите пустой файл, который нужно будет заполнить данными вашего первого телефона:

[general]
 
[1000]
type = friend
context = internal
host = dynamic
secret = super_secret_password
port = 5061

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

Определение, используемое здесь – это очень простой пример, но практически в каждом SIP-устройстве возникнет множество вариантов, поэтому стоит разобраться в том, что они означают:

  • [1000] Имя устройства; оно отмечает начало определения устройства. Устройство, запрашивающее новое соединение SIP, содержит поле «Имя пользователя»; Asterisk сравнивает его с именами в sip.conf и, найдя соответствие, проверяет с контекстом для доступа к плану набора. Устройства можно называть как угодно, но есть смысл дать какое-нибудь значимое имя – скажем, внутренний номер телефона.
  • Type=friend Это просто означает, что данное устройство может и звонить, и принимать звонки. Другие варианты настроек включают user, который может только звонить, и peer, которые могут только принимать звонки.
  • context = internal Связывает определение с подходящей частью плана набора. Опять же, называйте его как хотите, но полезно сделать его значимым.
  • host = dynamic Этот раздел сообщает Asterisk, где искать устройства в сети. Если у устройства статический IP-адрес, его можно указать здесь, но в противном случае установите его как динамический.
  • secret = super_secret_password Указывается пароль для данного устройства.
  • port = 5061 Если вы работаете в Asterisk на той же машине, что и ваш программный телефон [softphone], или в виртуальной машине в режиме моста, их порты могут конфликтовать. Этот параметр велит Asterisk обращаться к другому порту, чтобы избежать конфликтов.

Сделав эти изменения настроек, сохраните их и выйдите из файла, а затем вернитесь к CLI Asterisk. Нужно запустить sip reload, чтобы приказать Asterisk перезагрузить SIP-конфигурацию и учесть сделанные изменения.

Далее, настроим Ekiga и проверим, что он может связаться с Asterisk.

Вернемся в первый терминал и запустим Ifconfig для выявления IP-адреса Asterisk (inet addr) – запишите его для себя.

Теперь запустите Ekiga и добавьте новую учетную запись SIP, перейдя в Редактировать > Учетные записи, а затем Учетные записи > Добавить учетную запись SIP.

Есть несколько опций, обязательных для заполнения:

  1. Name – может быть каким угодно
  2. Registrar – IP-адрес, который вы только что получили
  3. User and Authentification User – те же, что и имя устройства в sip.conf
  4. Password – тот же, что и secret в sip.conf
  5. Enable – отметить учетную запись.

Кроме того, если вы указали порт в sip.conf, придется изменить настройки порта для Ekiga, чтобы они были одинаковыми. Это нужно изменить через gconf editor (пакеты, доступные для большинства дистрибутивов), где настройки находятся в Приложения > Ekiga.

После нажатия кнопки ОК вы можете выяснить, была ли регистрация успешной, скомандовав sip show peers в CLI Asterisk.

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

Алло, мир! Примите вызов

Откройте exentions.conf и создайте такой файл:

[globals]
[general]
autofallthrough=yes
[internal]
exten => 500,1,Answer()
exten => 500,n,Wait(1)
exten => 500,n,Playback(hello-world)
exten => 500,n,Hangup()

Сохраните файл, а затем в CLI Asterisk запустите команду dialplan reload.

Как и прежде, рассмотрим содержимое этого файла. Пока не стоит беспокоиться о [globals] или [general] – их можно исследовать потом.

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

Каждая строка в контексте известна как расширение, и объявляется в шаблоне exten =>. Каждое расширение состоит из трех разделенных запятыми компонентов: названия или номера расширения, приоритета и действия, которое будет проводиться (иногда называется «Приложение»).

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

Приоритет существует потому, что каждое расширение может быть сделано за определенное число шагов. Asterisk всегда начинает с приоритета 1 и идет оттуда. Вы заметили, что после 1 в примере используется n вместо номера: это означает «следующий» и велит Asterisk автоматически рассчитать приоритетные расширения на основе предыдущего. И если вы позже добавите или удалите расширения, вам не придется менять все номера! Приоритет 1, однако, всегда должен быть.

Наконец, есть приложение. Оно поясняет Asterisk, что делать на каждом шаге вызова. В нашем примере мы поручили Asterisk ответить на вызов, затем подождать секунду до воспроизведения содержимого файла hello-world. Наконец, он заканчивает разговор. Параметры могут быть переданы приложениям через помещение их в скобках: в случае команды ожидания, мы велим ждать одну секунду.

Существует много других приложений, но это все, что нам понадобится для урока.

А сейчас перейдите на Ekiga и поппробуйте позвонить 500@ASTERISKIP (где ASTERISKIP – IP-адрес, полученный ранее). Все звонки из Ekiga должны иметь форму number@registrar, registrar задается именем домена либо IP. Если все прошло хорошо, вы должны услышать компьютерный голос, произносящий два известные слова: hello, world.


Связь с внешним миром

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

Во-первых, нужно зарегистрировать Asterisk в качестве клиента (устройства) на серверах sipgate.co.uk. После этого, когда кто-то звонит на ваш номер с sipgate.co.uk, звонок перенаправится на вашу систему Asterisk, и в дело вступят настройки канала и плана набора.

Чтобы зарегистрировать станцию Asterisk на sipgate.co.uk, добавьте следующуюстроку в ваш файл sip.conf в разделе [general]:

register => SIPID:SIPPASS@sipgate.co.uk/SIPID

Здесь SIPID и SIPPASS – значения, выданные вам на вашей странице настроек Overview на sipgate.co.uk. Второе упоминание SIPID в этой строке используется согласно соответствующему расширению в плане набора. Обычно это значение может быть любым, но похоже, что с sipgate.co.uk оно работает, только если соответствует вашему SIPID.

Далее, измените файл extensions.conf, создав новый контекст под названием incoming calls, и добавьте расширение:

exten => SIPID,1,Dial(SIP/1000)

Параметры, переданные в приложение Dial, означают, что нужно использовать SIP-канал для вызова устройства под названием 1000.

Наконец, перейдите в Asterisk CLI и перезагрузите план набора и конфигурации SIP. Вы можете проверить, что успешно зарегистрированы на sipgate.co.uk, командой sip show registry в CLI Asterisk. Если вы видите запись для sipgate.co.uk, то обнаружите, что после набора номеров из sipgate.co.uk начинает звонить ваш софтфон Ekiga.

Позвони мне, позвони

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

Как вы могли ожидать, вот все, что нужно для финальных изменений в файле sip.conf и вашем плане набора (ниже показаны только дополнения):

extensions.conf:
[internal]
exten => _9.,1,Dial(SIP/${EXTEN:1}@sipgate-out)
exten => _9.,n,Hangup
sip.conf:
[sipgate-out]
type = peer
secret = SIPPASS
username = SIPID
host = sipgate.co.uk
fromuser = SIPID
fromdomain = sipgate.co.uk
canreinvite = no
insecure = invite
qualify = yes
nat = yes
context = from-sipgate

Единственной новой информацией здесь являются использованные расширения. _9. похоже на регулярное выражение: оно означает любое количество, любой длины, начиная с девяти. В приложении набора, $ {EXTEN: 1} – переменная, которая заменяется на все, кроме первой цифры набранного номера.

Новые части в sip.conf часто зависят от провайдера. Это рабочая конфигурация для sipgate.co.uk, а более подробную информацию см. в следующем окне для чтения.

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

Куда дальше?

Теперь, добившись работы базовой системы Asterisk и получив представление о том, как она работает, почему бы не пойти дальше? Проверьте некоторые наши предложения во врезке, а затем изучите дальше раздел чтения для помощи.

Персональные инструменты
купить
подписаться
Яндекс.Метрика