diff --git a/lib/tasks/listen.js b/lib/tasks/listen.js index 1c80e146..5e44e8cf 100644 --- a/lib/tasks/listen.js +++ b/lib/tasks/listen.js @@ -122,6 +122,12 @@ class TaskListen extends Task { if (this.finishOnKey || this.passDtmf) { ep.on('dtmf', this._dtmfHandler); } + + /* support bi-directional audio */ + ep.addCustomEventListener(ListenEvents.PlayAudio, this._onPlayAudio.bind(this, ep)); + ep.addCustomEventListener(ListenEvents.KillAudio, this._onKillAudio.bind(this, ep)); + + } _removeListeners(ep) { @@ -154,6 +160,24 @@ class TaskListen extends Task { this.logger.info(evt, 'TaskListen:_onConnectFailure'); this.notifyTaskDone(); } + + async _onPlayAudio(ep, evt) { + this.logger.info(`received play_audio event: ${JSON.stringify(evt)}`); + try { + const results = await ep.play(evt.file); + this.logger.debug(`Finished playing file, result: ${JSON.stringify(results)}`); + ep.forkAudioSendText({type: 'playDone', data: Object.assign({id: evt.id}, results)}); + } + catch (err) { + this.logger.error({err}, 'Error playing file'); + } + } + + _onKillAudio(ep) { + this.logger.info('received kill_audio event'); + ep.api('uuid_break', ep.uuid); + } + _onError(ep, evt) { this.logger.info(evt, 'TaskListen:_onError'); this.notifyTaskDone();