У коллеги Communigate, соединен с моим астериском. Его callerid приходят неверными, с символами %20 за место пробелов. Как решить проблемы замены - понял, а вот как сделать обработку любого его вызова на любой экстеншен?
По наивности думал, что спасёт контекст s, но тот только если не указан экстеншен.
P>S> Хотел как то так s, 1, System(Callerid(all)=${SHELL(echo ${CALLERID} | sed s/%20/\ /g)})
вот так
[inbound]
include => context1
include =>context2
include =>not_found
[not_found]
exten => s,1,Gosub(replace,s,1)
exten => _.,1,Gosub(replace,s,1)
[replace]
exten => s,1,Set(CALLERID(num)=${REPLACE(CALLERID(num),'%20',)})
exten => s,2,Return
будет выполнять последний только если в первых двух не сошлсоь с номерным планом. в каждом вашем диалплане добавте госуб.
По мне для этого проще использовать
core show function FILTER
exten => s,1,Set(CALLERID(num)=${FILTER([0-9],${CALLERID(num)})})
exten => s,2,Return
ТАК ни в коем случае не делать
exten => _X.,1, System(Callerid(all)=${SHELL(echo ${CALLERID} | sed s/%20/\ /g)})
я думаю как то так
используйте функцию REPLACE
direct*CLI> core show function REPLACE
-= Info about function 'REPLACE' =-
[Synopsis]
Replace a set of characters in a given string with another character.
[Description]
Iterates through a string replacing all the <find-chars> with <replace-ch
ar>. <replace-char> may be either empty or contain one character. If empty,
all <find-chars> will be deleted from the output.
NOTE: The replacement only occurs in the output. The original variable is
not altered.
[Syntax]
REPLACE(varname,find-chars[,replace-char])
[Arguments]
Not available
[See Also]
Not available
Задан: 2011-09-12 10:32:13 +0400
Просмотрен: 1,448 раз
Обновлен: Sep 13 '11
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.