Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

спросил 2014-01-22 12:20:48 +0400

kolyanius Gravatar kolyanius

вызов макроса из Dial в extensions.ael

Всем привет! Подскажите по синтаксису: каким образом нужно вызывать макрос из приложения 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 ) { 
...

вызов макроса из Dial в extensions.ael

Всем привет! Подскажите по синтаксису: каким образом нужно вызывать макрос из приложения 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 ) { 
...

вызов макроса из Dial в extensions.ael

Всем привет! Подскажите по синтаксису: каким образом нужно вызывать макрос из приложения 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.