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

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

0

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

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

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

спросил 2011-06-01 15:49:28 +0400

slevinkelevra Gravatar slevinkelevra
21 2 1 4

Comments

прямые московские номера приходят в формате 4951234567 и 4991234567 slevinkelevra ( 2011-06-01 15:52:12 +0400 )редактировать

4 Ответа

1

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

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

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

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

ответил 2011-06-01 16:05:25 +0400

um2010 Gravatar um2010
2056 70 13 55

Comments

а если номер придет из страны, где 10 знаков вместе с кодом?) cvieri ( 2011-06-01 16:22:53 +0400 )редактировать
не совсем, идея в том, что если номер российский т.е. начинается с 495, 499 или 9 и содержит 10 цифр, то подставить перед номером код страны 7. slevinkelevra ( 2011-06-01 16:53:24 +0400 )редактировать
cvieri, смотри, мне приходит номер 3452399444 - это кто? РФ или зарубеж? или 9044937800 - это что? тогда никак не определить, кроме как в потоке смотреть признак того, в каком формате приходит аон - national или international! um2010 ( 2011-06-01 19:39:59 +0400 )редактировать
ну выше описали красивее) звыняй) cvieri ( 2011-06-01 20:02:18 +0400 )редактировать
не понял красоты, и вопрос всё тот же, как отличить РФ или не РФ в 10 знаках? um2010 ( 2011-06-01 23:24:05 +0400 )редактировать
уточню, 3452399444 - это 10 знаков и РФ, г. Тюмень и что-то я не вижу, чтоб канало под маску ^(9[0-9]{9}|49[59][0-9]{7})$ um2010 ( 2011-06-01 23:31:14 +0400 )редактировать
ааа... понял) ступил сам. Всё верно. Тогда код каждого региона подставлять? cvieri ( 2011-06-02 11:18:12 +0400 )редактировать
нет смысла, поскольку 10 знаков может быть как РФ так и не РФ um2010 ( 2011-06-02 19:05:30 +0400 )редактировать
всё верно. лови плюс. cvieri ( 2011-06-03 11:43:27 +0400 )редактировать
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)})
.
.
.

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

ответил 2011-06-01 19:27:14 +0400

Ecuador Gravatar Ecuador
845 10 10 24

Comments

оно!!! а что значит s/??? cvieri ( 2011-06-01 19:29:14 +0400 )редактировать
Фиг знает, мне тоже интересно :) я то что ниже было скопировал, лень было писать, главное идея понятна Ecuador ( 2011-06-01 19:35:53 +0400 )редактировать
То, что нужно!!! только как быть с проверкой номеров, если звонят с российских сотовых? slevinkelevra ( 2011-06-01 19:45:08 +0400 )редактировать
и s/XXXXXXXXXX заменил на s просто slevinkelevra ( 2011-06-01 19:45:43 +0400 )редактировать
s/XXXXXXXXXX значит на входе номера (did) - нету - это s. а дальше типо 9 знаков взодящий CID. но это не сработает ибо на до _ ванчале добавить(проверять на регулярное выражение). meral ( 2011-06-01 22:24:51 +0400 )редактировать
С сотовыми аналогично. Ecuador ( 2011-06-02 06:37:37 +0400 )редактировать
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})

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

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

ответил 2011-06-01 19:47:21 +0400

um2010 Gravatar um2010
2056 70 13 55

Comments

при использовании такой конструкции я получаю sent into invalid extension 's' in context 'FROM_WORLD_CHECK_2', but no invalid handler slevinkelevra ( 2011-06-01 20:06:02 +0400 )редактировать
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)
ссылка удалить спам редактировать

ответил 2011-06-01 19:56:23 +0400

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

Статистика

Задан: 2011-06-01 15:49:28 +0400

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

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

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