Задать вопрос
@foxhole

Как в agi событии hangup получить переменную канала?

Имеется 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?
  • Вопрос задан
  • 349 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@foxhole Автор вопроса
Лучшим вариантом решения этого вопроса остался возврат к синхронному коду.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы