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

Если мы хотим предоставить людям возможность осуществлять звонки через Asterisk и желаем, чтобы Asterisk обеспечивала соединение абонента с внешним ресурсом, нам необходим механизм сопоставления любого телефонного номера, который может быть набран абонентом. Можете себе представить, как утомительно было бы вручную писать диалплан с добавочными номерами для всех возможных вариантов? К счатстью, у Asterisk есть как раз то, что надо для таких случаев: сопоставление с шаблонами. Благодаря возможности сопоставления с шаблонами в диалплане можно создать один добавочный номер, который будет соответствовать множеству разных номеров.

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

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

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

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

X
Соответствует любому одиночному числу от 0 до 9.
Z
Соответствует любому одиночному числу от 1 до 9.
N
Соответствует любому одиночному числу от 2 до 9.
[15-7]
Соответствует любому однозначному числу из заданного диапазона. В данном случае шаблон соответствует одиночной цифре 1, 5, 6 или 7.
. (точка)
Универсальное соответствие; соответствует одному и более символам, любым.

Если не быть осторожным, сопоставления с групповым символом могут привести к тому, что диалплан будет делать совсем не то, что предполагается (например, сопоставление с встроенными добавочными номерами, такими как 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)

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

Поддержите проект, если он помог вам

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