Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

extensions.conf: exten => regexp

2

Умеет ли Asterisk парсить регулярные выражения в экстенах диалплана, т.е. сработает ли следующее:

exten => _8924[5-6]{1}44XXXX

где почитать про возможные выражения, а то всё сводится к X да N.

удалить закрыть спам изменить тег редактировать

спросил 2012-07-16 17:48:46 +0400

thunderamur Gravatar thunderamur
444 ● 70 ● 12 ● 39

обновил 2012-07-16 18:12:54 +0400

alexcr Gravatar alexcr
3124 ● 10 ● 9 ● 51
http://asterisk-service.c...

6 Ответов

1

итак.

exten => _8924[5-6]{1}44XXXX

равносильно одному!!! правилу

exten => _8924[5-6]44XXXX,1,Noop

а в чем у вас проблема то?

ссылка удалить спам редактировать

ответил 2012-07-16 20:34:30 +0400

meral Gravatar meral flag of Ukraine
23347 ● 24 ● 20 ● 177
http://pro-sip.net/
2

Астериск не умеет работать с регэкспами в качестве шаблона номера, это слишком ресурсоемко. Прочитать можно тут

http://voip.rus.net/tiki-index.php?page=Asterisk%20config%20extensions.conf

ссылка удалить спам редактировать

ответил 2012-07-16 18:09:27 +0400

switch Gravatar switch
8334 ● 11 ● 7 ● 92
http://lynks.ru/

Comments

1

На самом деле, тут - http://voip.rus.net/tiki-index.php?page=Asterisk+Dialplan+Patterns :-)

litnimax ( 2012-07-16 18:46:25 +0400 )редактировать

ну вообщето вроде гдето был експеременатльный модуль который полные регекспы умеет. только он кажися на лиспе был.

meral ( 2012-07-16 20:32:50 +0400 )редактировать
2

Сделайте через regexp и goto, выставляя флаг а уже потом на основе этих флагов роутинг делайте.

http://www.voip-info.org/wiki/view/Asterisk+func+regex

или вообще все в (Fast)AGI вытащить.

ссылка удалить спам редактировать

ответил 2012-07-16 19:03:54 +0400

komrad123 Gravatar komrad123
3810 ● 5 ● 3 ● 44

Comments

В FastAGI это уж излишество просто так вот брать и писать :-) Прям вся архитектура меняется :-)

litnimax ( 2012-07-16 19:16:43 +0400 )редактировать
0

Вот еще решение, с использованием Lua, на котором написан макрос, реализующий поиск по regexp'ам, но не перловым (PCRE), а Lua'вским (LPEG).

Вот диалплан:

exten => _X.,1,Macro(regexp,^%d%d%d$) exten => _X.,2,Verbose(We passwd regexp, let's do smth) 

Можно каскадировать макросы друг за другом.

Вот кусок из extensions.lua:

-- Verbose levels DEBUG = 10 VERBOSE = 3 extensions = {} extensions['macro-regexp'] = {} extensions['macro-regexp']['s'] = function() local pattern = channel.arg1:get() local called = channel["CALLERID(dnid)"]:get() if not called:match(pattern) then app.verbose(DEBUG, string.format("False, number %q does not match pattern %q, hanging up", called, pattern)) app.hangup() else app.verbose(DEBUG, string.format("True, number %q matches pattern %q, hanging up", called, pattern)) end end 

Ну и логи:

 == Using SIP RTP CoS mark 5 -- Executing [111@users:1] Macro("SIP/101-00000042", "regexp,^%d%d%d$") in new stack -- Executing [s@macro-regexp:1] verbose("SIP/101-00000042", "10,True, number "111" matches pattern "^%d%d%d$", hanging up") > True, number "111" matches pattern "^%d%d%d$", hanging up -- Executing [111@users:2] Verbose("SIP/101-00000042", "We passed regexp, let's do smth") in new stack [Jul 16 22:49:41] WARNING[5845]: app_verbose.c:101 verbose_exec: 'We passed regexp' is not a verboser number let's do smth -- Auto fallthrough, channel 'SIP/101-00000042' status is 'UNKNOWN' == Using SIP RTP CoS mark 5 -- Executing [1111@users:1] Macro("SIP/101-00000043", "regexp,^%d%d%d$") in new stack -- Executing [s@macro-regexp:1] verbose("SIP/101-00000043", "10,False, number "1111" does not match pattern "^%d%d%d$", hanging up") > False, number "1111" does not match pattern "^%d%d%d$", hanging up -- Executing [s@macro-regexp:1] hangup("SIP/101-00000043", "") == Spawn extension (macro-regexp, s, 1) exited non-zero on 'SIP/101-00000043' in macro 'regexp' == Spawn extension (users, 1111, 1) exited non-zero on 'SIP/101-00000043' *CLI> 

:-)

Ну IMHO более правильно использовать функцию REGEX :-)

ссылка удалить спам редактировать

ответил 2012-07-16 22:57:22 +0400

litnimax Gravatar litnimax
1453 ● 11 ● 8 ● 29
http://www.pbxware.ru/
0

===== UPD =====

умеет, просто тут попроще чем в обычных регулярках

X - 0-9 Z - 1-9 N - 2-9 

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

[35-79] == 3,5,6,7,9 

Указывать можно по одной цифре, т.е. [3-8]{2} не верно, правильно [3-8][3-8]

Вот пример:

exten => _89[0-26][2-49]XXXXXXX 
ссылка удалить спам редактировать

ответил 2012-07-17 05:24:17 +0400

thunderamur Gravatar thunderamur
444 ● 70 ● 12 ● 39
0

[s]Значит не умеет, придётся городить портянку на несколько страниц :([/s]

ссылка удалить спам редактировать

ответил 2012-07-16 18:44:21 +0400

thunderamur Gravatar thunderamur
444 ● 70 ● 12 ● 39

обновил 2012-07-17 05:24:47 +0400

Comments

Очень интересная задачка..

litnimax ( 2012-07-16 18:47:16 +0400 )редактировать

зачем? что вам мешает описать все правила как астериск хочет?

meral ( 2012-07-16 20:33:33 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2012-07-16 17:48:46 +0400

Просмотрен: 5,124 раз

Обновлен: Jul 17 '12

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.