Подскажите по синтаксису: каким образом нужно вызывать макрос из приложения 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
macro macro-StoreCLID() {
catch s {
ext=${ARG1};
NoOp( == ${ext} == );
Set(GLOBAL(DIALEDPEERNUMBER)=${ext});
NoOp(Answered is = ${DIALEDPEERNUMBER});
Set(DB(CLIDT/${DIALEDPEERNUMBER})=${InternalCLID});
};
};
Всем спасибо!