У коллеги 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,508 раз
Обновлен: Sep 13 '11
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.