То, что написал komrad123 дает нулевой результат. Придумал такой код. По-другому заставить Астериск отрубать 3 последние цифры у любого номера не смог. Теперь и у 4-х, и у 5-ти значных номеров остаются только первые 1, 2 и т.п. цифры =)
exten =>1XX,1,Set(foo=${CALLERID(num)}) exten =>1XX,2,Set(foo2=$[{LEN(${foo})}-3]) exten =>_1XX,3,Dial(SIP/${CALLERID(num):0:${foo2}}${EXTEN})
Janealter ( 2013-08-17 20:32:43 +0400 )редактировать"То, что написал komrad123 дает нулевой результат...." Вы имеете ввиду буквари по астериску? А так работает?
Set(foo=${CALLERID(num):-3})
Olpag ( 2013-08-19 09:54:05 +0400 )редактироватьСмищно =) Нет, не работает и не будет. Чтобы вы лучше понимали ситуацию, приложу описание подстрок.
${foo:offset:length}
- Если значение offset отрицательное, то смещение будет отсчитываться не от начала строки, а от ее конца.
- Если значение length пропущено или отрицательное, то размер возвращаемой строки не ограничивается и будет возвращена вся строка, начиная со смещения offset.
Т.е. Set(foo=${CALLERID(num):-3}) будет давать смещение с конца на три символа. Например при CallerID 2101 с таким смещением переменная будет равняться 101.
Janealter ( 2013-08-19 11:47:42 +0400 )редактироватьможет у нас астериски с разных планет
grep 622 tests.conf
exten => 622,1,NoOp(${CALLERID(num)})
exten => 622,2,NoOp(${CALLERID(num):0:-3})
exten => 622,3,NoOp(${CALLERID(num):0:-2})
== Using SIP RTP CoS mark 5
-- Executing [622@sip_lines:1] NoOp("SIP/i-mbl-00000033", "2501") in new stack
-- Executing [622@sip_lines:2] NoOp("SIP/i-mbl-00000033", "2") in new stack
-- Executing [622@sip_lines:3] NoOp("SIP/i-mbl-00000033", "25") in new stack
komrad123 (
2013-08-19 11:59:16 +0400
)редактироватьВы в начале написали Set(foo=${CALLERID(num):1:-3}). С единицей вместо нуля =) Я это проверял, и естественно это не подошло. С нулем сейчас проверил, и с NoOp действительно работает. А я сидел и придумывал кусок кода с LEN и математической функцией =)
Janealter ( 2013-08-19 12:35:18 +0400 )редактироватьДело в том, что имеется неточность в описании подстрок:
Если значение length пропущено или отрицательное, то размер возвращаемой строки не ограничивается и будет возвращена вся строка, начиная со смещения offset.
На самом деле, когда lenght пропущено, то размер действительно не ограничивается, а когда отрицательное, то длина отсчитывается с конца. Именно поэтому я, понадеясь на описание, не стал сам эксперементировать с минусовым lenght.
Janealter ( 2013-08-19 12:46:27 +0400 )редактировать