Я реализую freeswitch ESL с помощью nodejs, для которого я использую модуль modesl, он отлично работает, и я могу вызвать инструменты dialplan с помощью функции execute.freeswitch esl using node js
Однако функция execute является асинхронной реализацией в модуле model nodejs.
Мне нужен синхронный вызов, так что, когда я вызываю функцию execute, выполнение должно ждать, пока freeswitch не завершит выполнение этого приложения.
В приведенном ниже примере кода я получаю вывод «ivr finished» до завершения воспроизведения.
exports.process_ivr = function (conn, id)
{
conn.execute('answer');
conn.execute('playback','/root/before.wav');
console.log('ivr finished');
};
По modesl нет асинхронного способа вызова команд FreeSwitch, есть ли другой способ осуществить это с помощью nodejs?
node.js использует 1 поток, поэтому синхронная функция будет делать «режимы» обслуживать 1 клиент за раз? Я думаю, что вы можете определить, завершено ли выполнение посредством callback 'conn.execute ('воспроизведение', '/ root/before.wav', function() {console.log ('ivr finished')})'; – damphat
, который не помог, он просто регистрируется в конце вызова. Предположим, что я посылаю 4 команды воспроизведения один за другим, тогда все эти команды поставлены в очередь ESL. Идеальный случай - использовать play_and_get_digits и обрабатывать разные ответы на значение dtmf. – user2982115
Но вы можете проверить dtmf, а затем вызвать следующий 'execute' в обратном вызове, тогда у нас есть обратный вызов внутри обратного вызова. Ну, это трудно читать :), но это асинхронно. – damphat