Страница 2 из 2
Re: Помогите с Callthrough
Добавлено: 23 апр 2012, 01:55
ded
Вы пробовали читать литературу по Астериску? Там есть примеры.
Код: Выделить всё
exten => s,1,NoOp(Caller ID is ${CALLERID(all)}) ; то что было
exten => s,n,Set(CALLERID(num)=0${CALLERID(num):3}) ; отрезали три символа впереди +49 и вместо них добавили 0
exten => s,n,NoOp(Caller ID is ${CALLERID(all)}) ; то что стало
Re: Помогите с Callthrough
Добавлено: 23 апр 2012, 13:23
scherkhan
Честно скажу, читал. Читал я Asterisk, будущее телефонии (второе издание) 2009 года и неоднократно возвращаюсь к ней. В ней имеются замечательные примеры и хорошие приложения по функциям. Кстати, там же есть пример с назойливой девушкой с использованием функции CallerID. Это все понятно. Но мой(моя) Астериск не хочет корректно обрабатывать номера со знаком "+", т.е. ругается на них (лог привел в прошлом посте). Сейчас у меня установлено 1.8.11.0. Может стоит версию обновить?
да, вот еще, что бы хотел получить:
есть алматинский провайдер, который передает номера с кодом города, но без страны: 7273333333. где 727 код города, а 3333333 номер телефона. Обрезать три символа и подставить семизначный номер не сложно. Но если поступит звонок с мобильного или другого города? Т.е. надо проверить код города. если 727, то обрезаем, если другой, то добавляем еще спереди восьмерку.
Re: Помогите с Callthrough
Добавлено: 23 апр 2012, 13:59
ded
+ - это символ отличный от цифры, поэтому к нему неприменимы шаблоны Z N X.
чтобы парсить плюс надо идти на сделку с совестью:
exten => _+X.,1,NoOp((Caller ID is ${CALLERID(all)})
exten => _+X.,n,Set(CALLERID(num)=0${CALLERID(num):1})
exten => _+X.,n,Goto(incoming,${EXTEN},1)
Если алматинский провайдер передает номера с кодом города, но без страны: 7273333333, то засуньте его в специальный для него контекст и делайте там трансформацию номер, специально только для него. И это не будет касаться других транков, никак.
Re: Помогите с Callthrough
Добавлено: 23 апр 2012, 14:03
Vlad1983
чтоб не было "некоторых" и не плодить маршруты, нужно преобразовать все CID к одному формату своими силами
[inbound]
exten => _X!,1,GoSubIf(0${CALLERID(num)}?sub-cidlookup,s,1)
exten => _X!,n,NoOP( ${CALLERID(name)} ${CALLERID(num)} )
[sub-cidlookup]
exten => s,1,GotoIf($[ ${LEN(${CALLERID(num)})} = 10 ]?add8)
exten => s,n,GotoIf($[ $[ ${LEN(${CALLERID(num)})} = 11 ] & $[ "${CALLERID(num):0:1}" = "8" ] ]?end)
exten => s,n,ExecIf( $[${LEN(${CALLERID(num)})} = 6 ]?Set(CALLERID(num)=83532${CALLERID(num)}) )
exten => s,n,ExecIf( $[${LEN(${CALLERID(num)})} = 5 ]?Set(CALLERID(num)=835342${CALLERID(num)}) )
exten => s,n,Goto(end)
exten => s,n(add8),Set(CALLERID(num)=8${CALLERID(num)})
exten => s,n(end),Set(CALLERID(name)=${CALLERID(num)})
...
exten => s,n,Return()
Re: Помогите с Callthrough
Добавлено: 23 апр 2012, 17:48
scherkhan
Спасибо большое за помощь! потихоньку догоняю
еще один вопросик. как отсортировать входящие по маске? т.е. если телефон в диапазоне 7273130000 - 7273139999, то на одну группу локальных номеров, а остальные на другую?
Спасибо!
Re: Помогите с Callthrough
Добавлено: 23 апр 2012, 22:04
scherkhan
to
Vlad1983
опираясь на ваш пример, подогнал под себя и оставил семизначные номер без кода и префиксов. Т.е. если провайдер передает городской семизначный номер, то так же пропускаем его дальше. если городской местный номер, но с кодом города, (такой провайдер, что может местный номер телефона передать то с кодом, то без) то обрезаем код и передаем дальше уже семь цифр как положено. если с кодом другого города или мобильного, то добавляем еще спереди 8 и передаем уже:
87771234567. все работает отлично.
еще бы это все в макрос бы загнать, т.к. номеров несколько.
Код: Выделить всё
[incoming]
exten => ${SIP9},1,GoSubIf(${CALLERID(num)}?sub-cidlookup,s,1)
[sub-cidlookup]
exten => s,1,GotoIf($[ ${LEN(${CALLERID(num)})} = 7 ]?end)
exten => s,n,GotoIf($[ $[ ${CALLERID(num):0:3} = 727 ] ]?del:add8)
exten => s,n(add8),Set(CALLERID(num)=8${CALLERID(num)})
exten => s,n,Goto(end)
exten => s,n(del),Set(CALLERID(num)=${CALLERID(num):3})
exten => s,n(end),Set(CALLERID(name)=${CALLERID(num)})
exten => s,n,Dial(.........,30)
можно ли доработать или улучшить? желательно в макросах?
Re: Помогите с Callthrough
Добавлено: 23 апр 2012, 23:16
scherkhan
еще немного доработал. в алмате и области нумерация телефонов дебильная. везде код 727, только в городе номера начинаются на двойку и тройку, а в области семерка. т.е. если из города позвонить в область, надо набрать полный код и номер, 87277хххххх. Поэтому, чтобы точно знать, что номер городской, надо проверить первую цифру семизнака на наличие двойки и тройки, иначе передать полный номер с добавлением восьмерки, если конечно не анонимный.
[incoming]
;обработка входищих алматинских номеров
exten => ${SIP9},1,GoSubIf(${CALLERID(num)}?sub-cidlookup,s,1)
exten => ${SIP9},n,NoOP( ${CALLERID(name)} ${CALLERID(num)} )
exten => ${SIP9},n,Dial(....&.....&....,60,rt)
[sub-cidlookup]
exten => s,1,GotoIf($[ ${LEN(${CALLERID(num)})} = 7 ]?end) ;если семизнак, то отправляем в конец
exten => s,n,GotoIf($[ $[ ${CALLERID(num)} = anonymous ] ]?end)
exten => s,n,GotoIf($[ $[ ${CALLERID(num):0:4} = 7272 ] ]?del)
exten => s,n,GotoIf($[ $[ ${CALLERID(num):0:4} = 7273 ] ]?del:add8)
exten => s,n(add8),Set(CALLERID(num)=8${CALLERID(num)})
exten => s,n,Goto(end)
exten => s,n(del),Set(CALLERID(num)=${CALLERID(num):3})
exten => s,n(end),Set(CALLERID(name)=${CALLERID(num)})
exten => s,n,Return()
вопрос с макросом отпадает
Re: Помогите с Callthrough
Добавлено: 25 апр 2012, 12:46
scherkhan
может кому пригодится, решил проблему с плюсами в номерах. хоть по SIP, хоть GSM/Dongle. на одном из немецких форумах получил ответ, что надо в переменную CallerID в кавычки загнать, и астериск уже будет обращаться не как номеру телефона, а как к символьной цепи:
Код: Выделить всё
[incoming]
exten => ${SIP1},1,NoOP( ${CALLERID(name)} ${CALLERID(num)} )
exten => ${SIP1},n,GoSubIf($["${CALLERID(num)}"]?sub-cidlookup-1und1,s,1)
exten => ${SIP1},n,NoOP( ${CALLERID(name)} ${CALLERID(num)} )
...........
exten => ${SIP1},n,Hangup()
[sub-cidlookup-1und1]
exten => s,1,NoOp(Caller ID is ${CALLERID(all)})
exten => s,n,GotoIf($["${CALLERID(num)}"="anonymous"]?end)
exten => s,n,Set(CALLERID(num)=${CALLERID(num):1})
exten => s,n,GotoIf($[ $[ ${CALLERID(num):0:2} = 49 ] ]?del)
exten => s,n,Set(CALLERID(num)=00${CALLERID(num)})
exten => s,n,Goto(end)
exten => s,n(del),Set(CALLERID(num)=0${CALLERID(num):2})
exten => s,n(end),Set(CALLERID(name)=${CALLERID(num)})
exten => s,n,Return()
все работает замечательно и без ошибок!