1 | изначальная версия редактировать | |
Всем привет! Подскажите по синтаксису: каким образом нужно вызывать макрос из приложения Dial в extensions.ael Логика следующая: приходит входящий в контекст from-trunk -> попадает в очередь -> очередь создает локальный канал на оператора очереди -> происходит вызов оператора -> если вызов был принят, то выполнить макрос StoreCLID. Собственно, примерно так это выглядит в диалплане:
context from-trunk {
_X. => {
if (${DB_EXISTS(blacklist/${CALLERID(num)})}) {
Hangup();
} else {
Gosub(record-office,${EXTEN},1);
Set(__InternalCLID=${SIPCALLID});
Set(CALLERID(name)=VS ${EXTEN:4});
Progress();
Queue(330,,,,300);
.....
};
context from-queue {
hint(Custom:${EXTEN}) _X. => {
Set(GROUP()=${EXTEN});
Set(CALL-LIMIT=2);
if (${GROUP_COUNT(${GROUP})} > ${CALL-LIMIT}) {
Hangup;
} else {
switch(${DEVICE_STATE(SIP/${EXTEN})}) {
case NOT_INUSE:
switch(${DEVICE_STATE(Custom:${EXTEN})}) {
case NOT_INUSE:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
case UNKNOWN:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
default:
break;
};
default:
break;
};
};
};
};
macro StoreCLID( ext ) { NoOp( == ${ext} == ); Set(__DIALEDPEERNUMBER=${ext}); NoOp(Answered is = ${DIALEDPEERNUMBER}); Set(DB(CLID/${DIALEDPEERNUMBER})=${InternalCLID}); return; };
Соответственно, не сработала ни одна из следующим конструкций:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
Dial(SIP/${EXTEN},,tM(&StoreCLID^${EXTEN}));
Dial(SIP/${EXTEN},,tM(&StoreCLID(${EXTEN})));
Dial(SIP/${EXTEN},,tM(StoreCLID(${EXTEN})));
Вся логика отрабатывается, но макрос не вызывается! Не могу понять причину... ael set debug macros ничего в консоль не выводит. Помогите разобраться :( Версия Asterisk 11.7.0
PS: так же не сработало
macro macro-StoreCLID( ext ) {
...
2 | No.2 Revision редактировать |
Всем привет! Подскажите по синтаксису: каким образом нужно вызывать макрос из приложения Dial в extensions.ael Логика следующая: приходит входящий в контекст from-trunk -> попадает в очередь -> очередь создает локальный канал на оператора очереди -> происходит вызов оператора -> если вызов был принят, то выполнить макрос StoreCLID. Собственно, примерно так это выглядит в диалплане:
context from-trunk {
_X. => {
if (${DB_EXISTS(blacklist/${CALLERID(num)})}) {
Hangup();
} else {
Gosub(record-office,${EXTEN},1);
Set(__InternalCLID=${SIPCALLID});
Set(CALLERID(name)=VS ${EXTEN:4});
Progress();
Queue(330,,,,300);
.....
};
context from-queue {
hint(Custom:${EXTEN}) _X. => {
Set(GROUP()=${EXTEN});
Set(CALL-LIMIT=2);
if (${GROUP_COUNT(${GROUP})} > ${CALL-LIMIT}) {
Hangup;
} else {
switch(${DEVICE_STATE(SIP/${EXTEN})}) {
case NOT_INUSE:
switch(${DEVICE_STATE(Custom:${EXTEN})}) {
case NOT_INUSE:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
case UNKNOWN:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
default:
break;
};
default:
break;
};
};
};
};
};
macro StoreCLID( ext ) {
NoOp( == ${ext} == );
Set(__DIALEDPEERNUMBER=${ext});
NoOp(Answered is = ${DIALEDPEERNUMBER});
Set(DB(CLID/${DIALEDPEERNUMBER})=${InternalCLID});
return;
};
Соответственно, не сработала ни одна из следующим конструкций:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
Dial(SIP/${EXTEN},,tM(&StoreCLID^${EXTEN}));
Dial(SIP/${EXTEN},,tM(&StoreCLID(${EXTEN})));
Dial(SIP/${EXTEN},,tM(StoreCLID(${EXTEN})));
Вся логика отрабатывается, но макрос не вызывается! Не могу понять причину... ael set debug macros ничего в консоль не выводит. Помогите разобраться :( Версия Asterisk 11.7.0
PS: так же не сработало
macro macro-StoreCLID( ext ) {
...
3 | нашлось решение редактировать |
Всем привет! Подскажите по синтаксису: каким образом нужно вызывать макрос из приложения Dial в extensions.ael Логика следующая: приходит входящий в контекст from-trunk -> попадает в очередь -> очередь создает локальный канал на оператора очереди -> происходит вызов оператора -> если вызов был принят, то выполнить макрос StoreCLID. Собственно, примерно так это выглядит в диалплане:
context from-trunk {
_X. => {
if (${DB_EXISTS(blacklist/${CALLERID(num)})}) {
Hangup();
} else {
Gosub(record-office,${EXTEN},1);
Set(__InternalCLID=${SIPCALLID});
Set(CALLERID(name)=VS ${EXTEN:4});
Progress();
Queue(330,,,,300);
.....
};
context from-queue {
hint(Custom:${EXTEN}) _X. => {
Set(GROUP()=${EXTEN});
Set(CALL-LIMIT=2);
if (${GROUP_COUNT(${GROUP})} > ${CALL-LIMIT}) {
Hangup;
} else {
switch(${DEVICE_STATE(SIP/${EXTEN})}) {
case NOT_INUSE:
switch(${DEVICE_STATE(Custom:${EXTEN})}) {
case NOT_INUSE:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
case UNKNOWN:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
default:
break;
};
default:
break;
};
};
};
};
macro StoreCLID( ext ) {
NoOp( == ${ext} == );
Set(__DIALEDPEERNUMBER=${ext});
NoOp(Answered is = ${DIALEDPEERNUMBER});
Set(DB(CLID/${DIALEDPEERNUMBER})=${InternalCLID});
return;
};
Соответственно, не сработала ни одна из следующим конструкций:
Dial(SIP/${EXTEN},,tM(StoreCLID^${EXTEN}));
Dial(SIP/${EXTEN},,tM(&StoreCLID^${EXTEN}));
Dial(SIP/${EXTEN},,tM(&StoreCLID(${EXTEN})));
Dial(SIP/${EXTEN},,tM(StoreCLID(${EXTEN})));
Вся логика отрабатывается, но макрос не вызывается! Не могу понять причину... ael set debug macros ничего в консоль не выводит. Помогите разобраться :( Версия Asterisk 11.7.0
PS: так же не сработало
macro macro-StoreCLID( ext ) {
...
Решение нашлось (точнее подсказали)!
Вот так должен выглядеть макрос в ael-ке:
macro macro-StoreCLID() {
catch s {
ext=${ARG1};
NoOp( == ${ext} == );
Set(GLOBAL(DIALEDPEERNUMBER)=${ext});
NoOp(Answered is = ${DIALEDPEERNUMBER});
Set(DB(CLIDT/${DIALEDPEERNUMBER})=${InternalCLID});
};
};
Всем спасибо!
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.