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)}) ; то что стало
Честно скажу, читал. Читал я Asterisk, будущее телефонии (второе издание) 2009 года и неоднократно возвращаюсь к ней. В ней имеются замечательные примеры и хорошие приложения по функциям. Кстати, там же есть пример с назойливой девушкой с использованием функции CallerID. Это все понятно. Но мой(моя) Астериск не хочет корректно обрабатывать номера со знаком "+", т.е. ругается на них (лог привел в прошлом посте). Сейчас у меня установлено 1.8.11.0. Может стоит версию обновить?
да, вот еще, что бы хотел получить:
есть алматинский провайдер, который передает номера с кодом города, но без страны: 7273333333. где 727 код города, а 3333333 номер телефона. Обрезать три символа и подставить семизначный номер не сложно. Но если поступит звонок с мобильного или другого города? Т.е. надо проверить код города. если 727, то обрезаем, если другой, то добавляем еще спереди восьмерку.
+ - это символ отличный от цифры, поэтому к нему неприменимы шаблоны 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, то засуньте его в специальный для него контекст и делайте там трансформацию номер, специально только для него. И это не будет касаться других транков, никак.
еще один вопросик. как отсортировать входящие по маске? т.е. если телефон в диапазоне 7273130000 - 7273139999, то на одну группу локальных номеров, а остальные на другую?
to Vlad1983
опираясь на ваш пример, подогнал под себя и оставил семизначные номер без кода и префиксов. Т.е. если провайдер передает городской семизначный номер, то так же пропускаем его дальше. если городской местный номер, но с кодом города, (такой провайдер, что может местный номер телефона передать то с кодом, то без) то обрезаем код и передаем дальше уже семь цифр как положено. если с кодом другого города или мобильного, то добавляем еще спереди 8 и передаем уже:87771234567. все работает отлично.
еще бы это все в макрос бы загнать, т.к. номеров несколько.
еще немного доработал. в алмате и области нумерация телефонов дебильная. везде код 727, только в городе номера начинаются на двойку и тройку, а в области семерка. т.е. если из города позвонить в область, надо набрать полный код и номер, 87277хххххх. Поэтому, чтобы точно знать, что номер городской, надо проверить первую цифру семизнака на наличие двойки и тройки, иначе передать полный номер с добавлением восьмерки, если конечно не анонимный.
может кому пригодится, решил проблему с плюсами в номерах. хоть по SIP, хоть GSM/Dongle. на одном из немецких форумах получил ответ, что надо в переменную CallerID в кавычки загнать, и астериск уже будет обращаться не как номеру телефона, а как к символьной цепи: