Чтение онлайн

ЖАНРЫ

Asterisk™: будущее телефонии Второе издание
Шрифт:

Синтаксис сопоставления с шаблонами

Используемые в шаблонах буквы и символы представляют определенные группы символов. Шаблоны всегда начинаются с символа подчеркивания (_). Он указывает Asterisk, что выполняется сопоставление с шаблоном, а не с явно заданным добавочным номером. (Безусловно, это означает, что имена добавочных номеров нельзя начинать с символа подчеркивания.)

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

После подчерка может использоваться один или более символов из перечисленных ниже.

X

Соответствует

любому одиночному числу от 0 до 9.

Z

Соответствует любому одиночному числу от 1 до 9.

N

Соответствует любому одиночному числу от 2 до 9.

[15-7]

Соответствует любому однозначному числу из заданного диапазона. В данном случае шаблон соответствует одиночной цифре 1, 5, 6 или 7.

. (точка)

Универсальное соответствие; соответствует одному или более символам, любым.

1 Если не быть осторожным, сопоставления с групповым символом могут привести к тому, что диалплан будет делать совсем i не то, что предполагается (например, сопоставление с встроен ными добавочными номерами, такими как i или h). Универсальное соответствие должно использоваться в шаблоне только после того, как сопоставлено максимально возможное количество цифр. Например, следующий шаблон, наверное, не должен применяться никогда:

На самом деле Asterisk предупредит в случае попытки его применения. Лучше по возможности используйте такой шаблон:

_X.

! (восклицательный знак)

Универсальное соответствие; соответствует нулю или более символам, любым.

Чтобы использовать сопоставление с шаблонами в своем диалплане, просто вставьте шаблон на место добавочного номера (или его имени):

exten => _NXX,1,Playback(auth-thankyou) В этом примере шаблон соответствует трехзначному добавочному номеру в диапазоне от 200 до 999 (N соответствует любой цифре от 2 до 9, а каждый X - от 0 до 9). То есть, если бы абонент набрал любой трехзначный добавочный номер в диапазоне от 200 до 999 в данном контексте, он бы услышал звуковой файл auth-thankyou.gsm. Еще одна важная деталь, которую необходимо знать о сопоставлении с шаблонами: если Asterisk находит более одного шаблона, соответствующего набранному добавочному номеру, она будет использовать наиболее точный из них (слева направо). Скажем, задано два следующих шаблона и абонент набирает 555-1212:

exten => _555XXXX,1,Playback(digits/1) exten => _55512XX,1,Playback(digits/2)

В данном случае был бы выбран второй добавочный номер, потому что он более точно соответствует набранному номеру.

Примеры сопоставления с шаблонами

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

_NXXXXXX

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

_NXXNXXXXXX

NANP и мошенничество с оплатой звонков

Североамериканскийплан нумерации (North AmericanNumbering Plan, NANP) - это общая схема телефонной нумерации, используемая 19 странами в Северной Америке и Канаде. Код страны для стран NANP - 1.

В США и Канаде нормы и правила электросвязи довольно похожи (и удобны), поэтому на большинство междугородних номеров можно звонить, используя код страны 1, по разумной цене.

Однако многие даже не догадываются, что NANP используют 19 стран, подчас с очень разными правилами электросвязи. (Более подробную информацию об

этом можно найти по адресу http://www.nanpa.com.)

Очень популярно мошенничество с использованием NANP, когда наивных американцев обманным путем заставляют звонить в страны Карибского бассейна по номерам, звонок по которым оплачивается поминутно, как междугородний; абоненты верят, что, если набрать 1-NPA-NXX-XXXX, звонок будет оплачиваться по стандартным национальным тарифам на междугородние звонки. Поскольку в данном государстве могут действовать правила, допускающие такого рода мошенничество, абоненту в итоге приходится оплачивать телефонные счета.

Единственный способ предотвратить такого рода деятельность - блокировать определенные междугородние коды (например, 809) и снимать ограничения только в случае необходимости.

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

_1NXXNXXXXXX

Данный шаблон немного сложнее. Он соответствует 1, за которой следует код города от 200 до 999, а затем - любой семизначный номер. В зоне действия NANP этот шаблон будет использоваться для сопоставления с любым междугородним номером [75] . Теперь еще более хитрый пример: _011.

75

Те, кто вырос в Северной Америке, возможно, думают, что 1, которую они набирают при звонках по межгороду, - это «международный код». Это неправильно. 1 - это международный код страны для всех стран, использующих NANP. Помните это, если вам когда-нибудь придется давать свой номер телефона кому-то из другой страны. Они могут не знать кода вашей страны и, таким образом, не смогут дозвониться вам, имея только код города и номер телефона. Полный номер телефона с кодом страны записывается так: +1 NPA NXX XXXX (где NPA - код города) - например +1 416 555 1212.

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

Использование переменной канала ${EXTEN}

Мы знаем, о чем вы думаете... Вы сидите и задаете себе вопрос: «Так что же делать, если я хочу использовать сопоставление с шаблонами, но мне надо знать, какие цифры набираются?» К счастью, у Asterisk есть ответ. При каждом звонке на добавочный номер Asterisk сохраняет набранный номер в переменной канала ${EXTEN}. Чтобы протестировать ее, можно использовать приложение SayDigits:

exten => _XXX,1,SayDigits(${EXTEN})

В этом примере приложение SayDigits будет воспроизводить для вас набранный вами трехзначный добавочный номер.

Часто переменную ${EXTEN} удобно использовать для удаления определенного количества цифр в начале добавочного номера. Это осуществляется с помощью синтаксиса ${EXTEN:x}, где x - разряд, с которого должна начинаться возвращаемая строка, считая слева направо. Например, если значение EXTEN - 95551212, ${EXTEN:1} равно 5551212. Рассмотрим другой пример:

exten => _XXX,1,SayDigits(${EXTEN:1})

В этом примере приложение SayDigits начнет воспроизведение со второй цифры, таким образом, будут воспроизведены только две последние цифры набранного добавочного номера.

Более сложные операции с номерами

Полный синтаксис переменной ${EXTEN} - ${EXTEN: x: у}, где x - начальное положение, а у - количество цифр, которое должно быть возвращено. Пусть задана строка набора:

94169671111

Используя конструкцию ${EXTEN:x:y}, можно извлечь следующие цифровые строки:

Поделиться с друзьями: