Имеется Asterisk, AGI сервер на Node js и библиотека asterisk-io. Не удается получить переменную канала DIALSTATUS в теле события hangup. Библиотека синхронная, но основной файл, с ней взаимодействующий, переписан с помощью Promise в асинхронный код.
Ниже асинхронный вызов команды Asterisk:
agiHandler.asyncExec=function (_cmd,_params) {
return new Promise(function(resolve, reject) {
_cmd='exec "'+_cmd+'"'+(_params!=undefined?' "'+_params+'"':'');
agiHandler.doLog(L_INFO,'asyncExec() -> start -> '+_cmd);
agiHandler.command(_cmd,function(code,result,value) {
var res={code:code,result:result,value:value};
agiHandler.doLog(L_INFO,'asyncExec() -> end -> '+_cmd+' -> result -> '+JSON.stringify(res));
resolve(res);
});
});
};
Нужно, чтобы в теле события hangup вытаскивалась переменная:
agiHandler.on('hangup', function(){
new Promise(function(resolve, reject){
agiHandler.doLog(L_INFO,'hangup event');
console.log();
//============================================ get vars
//console.log("========================== handler command: ",_cmd)
agiHandler.asyncExec('get variable', 'DIALSTATUS').then(function(res){
console.log("========================== getting var in ast-io hangup event: ", res);
resolve(res);
})
//============================================ end get
});
Код внутри вызова команды get variable не работает, но если в тело асинхронной функции вставить вызов команды, получающей переменную канала, то код работает.
Как избежать лишнего кода в функции общего назначения asyncExec и заставить хватать переменную в событии hangup?