First time here? Check out the FAQ!

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

Работа со строками в диалплане

0

Добрый всем день! На данный момент от провайдера приходят номера в формате 9261234567 (без кода страны) если звонок из России и в формате 447712345678, если звонок из мира, т.е. с кодом страны. Вопрос: как производить проверку на гражданство номера и, если он российский, то подставлять код страны 7 в начало номера? Если номер международный, то проблем нет, все хорошо.

Провайдер отказался подставлять 7, если звонок из России.

спросил Jun 1 '11

slevinkelevra Gravatar slevinkelevra
21 2 1 4

Comments

прямые московские номера приходят в формате 4951234567 и 4991234567 slevinkelevra (Jun 1 '11)edit

4 Ответа

1

Идея в том, что ко всем десятизначным номерам подставить "7"

exten => s/XXXXXXXXXX,1,Set(CALLERID(num)=7${CALLERID(num):0})

так не подойдет?

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

ответил Jun 1 '11

um2010 Gravatar um2010
2056 70 13 55

Comments

а если номер придет из страны, где 10 знаков вместе с кодом?) cvieri (Jun 1 '11)edit
не совсем, идея в том, что если номер российский т.е. начинается с 495, 499 или 9 и содержит 10 цифр, то подставить перед номером код страны 7. slevinkelevra (Jun 1 '11)edit
cvieri, смотри, мне приходит номер 3452399444 - это кто? РФ или зарубеж? или 9044937800 - это что? тогда никак не определить, кроме как в потоке смотреть признак того, в каком формате приходит аон - national или international! um2010 (Jun 1 '11)edit
ну выше описали красивее) звыняй) cvieri (Jun 1 '11)edit
не понял красоты, и вопрос всё тот же, как отличить РФ или не РФ в 10 знаках? um2010 (Jun 1 '11)edit
уточню, 3452399444 - это 10 знаков и РФ, г. Тюмень и что-то я не вижу, чтоб канало под маску ^(9[0-9]{9}|49[59][0-9]{7})$ um2010 (Jun 1 '11)edit
ааа... понял) ступил сам. Всё верно. Тогда код каждого региона подставлять? cvieri (Jun 2 '11)edit
нет смысла, поскольку 10 знаков может быть как РФ так и не РФ um2010 (Jun 2 '11)edit
всё верно. лови плюс. cvieri (Jun 3 '11)edit
1

exten => s/XXXXXXXXXX,1,Set(CALLERID(num)=${CALLERID(num)})
exten => s/XXXXXXXXXX,n,Gotoif($[${CALLERID(num):0:3} = 495] || $[${CALLERID(num):0:3} = 499])?true:false
exten => s/XXXXXXXXXX,n(true),Set(CALLERID(num)=8${CALLERID(num)}) .
.
.
exten => s/XXXXXXXXXX,n(false),Set(CALLERID(num)=${CALLERID(num)})
.
.
.

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

ответил Jun 1 '11

Ecuador Gravatar Ecuador
845 10 10 24

Comments

оно!!! а что значит s/??? cvieri (Jun 1 '11)edit
Фиг знает, мне тоже интересно :) я то что ниже было скопировал, лень было писать, главное идея понятна Ecuador (Jun 1 '11)edit
То, что нужно!!! только как быть с проверкой номеров, если звонят с российских сотовых? slevinkelevra (Jun 1 '11)edit
и s/XXXXXXXXXX заменил на s просто slevinkelevra (Jun 1 '11)edit
s/XXXXXXXXXX значит на входе номера (did) - нету - это s. а дальше типо 9 знаков взодящий CID. но это не сработает ибо на до _ ванчале добавить(проверять на регулярное выражение). meral (Jun 1 '11)edit
С сотовыми аналогично. Ecuador (Jun 2 '11)edit
0

slevinkelevra,

exten => s/9XXXXXXXXX,1,Set(CALLERID(num)=7${CALLERID(num):0})
exten
=> s/499XXXXXXX,2,Set(CALLERID(num)=7${CALLERID(num):0})
exten
=> s/495XXXXXXX,3,Set(CALLERID(num)=7${CALLERID(num):0})

или через регексп можно и в одну строку, но мне не нра.

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

ответил Jun 1 '11

um2010 Gravatar um2010
2056 70 13 55

Comments

при использовании такой конструкции я получаю sent into invalid extension 's' in context 'FROM_WORLD_CHECK_2', but no invalid handler slevinkelevra (Jun 1 '11)edit
0

у меня сейчас так: от провайдера получаю звонок

[FROM_WORLD]
exten
=> 495XXXXXXX,1,NoOp(${CALLERID(num)})
exten
=> 495XXXXXXX,n,Goto(FROM_WORLD_CHECK,s,1)
exten
=> 495XXXXXXX,n(cont),Dial(SIP/mobile_01@TRUNK-XXX,,tT)
....

[FROM_WORLD_CHECK]
exten
=> s,1,NoOp(${CALLERID(num)})
exten
=> s,n,Set(CALLERID(num)=${CALLERID(num)})
exten
=> s,n,Gotoif($[${CALLERID(num):0:3} = 495] , $[${CALLERID(num):0:3} = 499] , $[${CALLERID(num):0:3} = 909])?true:false
exten
=> s,n(true),Set(CALLERID(num)=7${CALLERID(num)})
exten
=> s,n,Goto(FROM_WORLD,495XXXXXXX,cont)
exten
=> s,n(false),Set(CALLERID(num)=${CALLERID(num)})
exten
=> s,n,Goto(FROM_WORLD,495XXXXXXX,cont)
ссылка удалить спам редактировать

ответил Jun 1 '11

slevinkelevra Gravatar slevinkelevra
21 2 1 4

Ваш ответ

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 ленту новостей

Статистика

Задан: Jun 1 '11

Просмотрен: 2,277 раз

Обновлен: Jun 01 '11

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