Страница 1 из 1
Преобразование номеров Б
Добавлено: 14 июл 2019, 10:44
alifreed3
Всем добрый день!
Приходят звонки на экстеншены вида sipnet74951234567, или например citiroute74953345544
Мне необходимо вырезать имя провайдера (названий провайдеров много и они могут быть разной длины) и поместить его в диалплане в название транка, через который нужно отправить звонок. Соответственно, номер поместить в ${EXTEN}. С приходящего транка есть возможность после названия провайдера вставить любой допустимый символ.
В итоге должно сработать так: Dial(SIP/sipnet/74951234567) или Dial(SIP/citiroute/74953345544)
Так как названия провайдеров могут быть разной длинны, удаление нескольких символов перед номеров не подойдет((
Прошу помощи, или подскажите куда копать.
Re: Преобразование номеров Б
Добавлено: 14 июл 2019, 23:12
ded
Во первых - регистрируйте их правильно, чтобы не склеивать в одно - sipnet74951234567.
Приземляйте звонки от разных провайдеров не в один контекст, а в каждый свой. Где и можно делать нужные преобразования.
Код: Выделить всё
[from-sipnet]
exten => sipnet74951234567,1,Set(OP=sipnet)
same => n,Set(DEST=${EXTEN:6})
[citiroute]
exten => citiroute74953345544,1,Set(OP=citiroute)
same => n,Set(DEST=${EXTEN:9})
[outbound]
exten => _X.,1,SIP/${OP}/${DEST})
Или в один контекст, где разделяйте
Код: Выделить всё
[inbound]
exten => _sipnetX.,1,1,Set(OP=sipnet)
same => n,Set(DEST=${EXTEN:6})
exten => _citirouteX.,1,Set(OP=citiroute)
same => n,Set(DEST=${EXTEN:9})
А хорошо бы вам Книгу почитать, главу 6 - про диал-план.
Re: Преобразование номеров Б
Добавлено: 15 июл 2019, 06:13
alifreed3
Спасибо ded за развернутый ответ!
Чтобы не заводить в диал-плане кажды маршрут, например номер придет sipnetX74951234567, возможно ли диал-планом сделать так:
[from-trunk]
exten => _X.,1,Set(OP=взять все до Х)
same => n,Set(DEST=${взять все что после Х})
[outbound]
exten => _X.,1,SIP/${OP}/${DEST})
Если не возможно, чтобы не писать в диал-плане много строчек под каждого провайдера также думаем подключить AGI скрипт, который будет брать все до X и помещать в переменную OP, и все после X в переменную DEST.
Re: Преобразование номеров Б
Добавлено: 15 июл 2019, 09:58
virus_net
AGI скрипт тут как из пушки по воробьям.
Код: Выделить всё
[test]
exten => s,1,Set(foo=test12345)
exten => s,n,Set(a=${FILTER(0-9,${foo})})
exten => s,n,Set(b=${FILTER(a-z,${foo})})
exten => s,n,NoOp(a is [${a}] or [${a:1}] b is [${b}])
-- Executing [s@test:1] Set("Local/s@test-0000000e;2", "foo=test12345") in new stack
-- Executing [s@test:2] Set("Local/s@test-0000000e;2", "a=12345") in new stack
-- Executing [s@test:3] Set("Local/s@test-0000000e;2", "b=test") in new stack
-- Executing [s@test:4] NoOp("Local/s@test-0000000e;2", "a is [12345] or [2345] b is [test]") in new stack
Re: Преобразование номеров Б
Добавлено: 15 июл 2019, 13:33
alifreed3
Спасибо! То что нужно.
Re: Преобразование номеров Б
Добавлено: 18 июл 2019, 00:45
Zavr2008
названия провов удобнее передавать в callerid(name), так к слову)
Re: Преобразование номеров Б
Добавлено: 18 июл 2019, 10:14
ded
+++ !