make barge in disableable

This commit is contained in:
akirilyuk
2022-02-04 08:05:11 +01:00
parent 91108fa3ef
commit 3a791a67b5
2 changed files with 22 additions and 27 deletions

View File

@@ -189,18 +189,18 @@ class Cognigy extends Task {
* Creates a promt which will be sent to the consumer. We will create a say task if bargein is disabled * Creates a promt which will be sent to the consumer. We will create a say task if bargein is disabled
* for session and nextTurn, else create a gather task. * for session and nextTurn, else create a gather task.
*/ */
_createPromtTask({text, url, turnConfig, dontListenAfterSpeech} = {}) { _createPromtTask({text, url, turnConfig, listenAfterSpeech} = {}) {
const bargeInOnNextTurn = turnConfig?.bargein?.enable?.length > 0; const bargeInOnNextTurn = turnConfig?.bargein?.enable?.length > 0;
const bargeInSession = this.config.bargeInEnabled; const bargeInSession = this.config.bargeInEnabled;
if (bargeInOnNextTurn || bargeInSession) { if (bargeInOnNextTurn || bargeInSession) {
return this._makeGatherTask({textPrompt: text, url, turnConfig, dontListenAfterSpeech}); return this._makeGatherTask({textPrompt: text, url, turnConfig, listenAfterSpeech});
} }
return this._makeSayTask({text, turnConfig}); return this._makeSayTask({text, turnConfig});
} }
_makeGatherTask({textPrompt, urlPrompt, turnConfig} = {}) { _makeGatherTask({textPrompt, urlPrompt, turnConfig, listenAfterSpeech} = {}) {
this.logger.debug({textPrompt, urlPrompt, turnConfig}, '_makeGatherTask'); this.logger.debug({textPrompt, urlPrompt, turnConfig}, '_makeGatherTask');
const config = this.config.makeGatherTaskConfig({textPrompt, urlPrompt, turnConfig}); const config = this.config.makeGatherTaskConfig({textPrompt, urlPrompt, turnConfig, listenAfterSpeech});
const {retry, ...rest} = config; const {retry, ...rest} = config;
this.retry = retry; this.retry = retry;
const gather = makeTask(this.logger, {gather: rest}, this); const gather = makeTask(this.logger, {gather: rest}, this);
@@ -305,7 +305,7 @@ class Cognigy extends Task {
this.logger.info({text}, 'received text'); this.logger.info({text}, 'received text');
this._enqueueTask(async() => { this._enqueueTask(async() => {
// todo inject the session config into the say task // todo inject the session config into the say task
const promtTask = this._createPromtTask({ text, dontListenAfterSpeech: true }); const promtTask = this._createPromtTask({ text, listenAfterSpeech: false });
await promtTask.exec(cs, ep, this); await promtTask.exec(cs, ep, this);
this.logger.debug({text}, 'executed say task'); this.logger.debug({text}, 'executed say task');
}); });
@@ -369,7 +369,7 @@ class Cognigy extends Task {
//then stop execution of currently queues bot output before sending the //then stop execution of currently queues bot output before sending the
//response to waiting bot since otherwise we could stop upcoming bot output //response to waiting bot since otherwise we could stop upcoming bot output
if (this.config.bargeInEnabled && this.config.skipUntilBotInput) { if (this.config.bargeInEnabled && this.config.skipToBotOutputEnd !== false) {
// clear task queue, resolve the last promise and cleanup; // clear task queue, resolve the last promise and cleanup;
this.taskQueue.lastPromise.resolve(); this.taskQueue.lastPromise.resolve();
this.taskQueue.end(); this.taskQueue.end();

View File

@@ -16,14 +16,23 @@ class SpeechConfig extends Emitter {
this.update(opts); this.update(opts);
} }
update(session) { _mergeConfig(changedConfig = {}){
// TODO validation of session params? const merged = lodash.merge(
if (session) {
this.sessionConfig = lodash.merge(
{}, {},
this.sessionConfig, this.sessionConfig,
session session
); );
merged.bargein.enable = changedConfig.bargein?.enable?.length === 0 ? [] : changedConfig.bargein?.enable;
// should we override hints with empty array or leave it as it is once saved?
// merged.recognizer.hints = changedConfig.recognizer?.hints
}
update(session) {
// TODO validation of session params?
if (session) {
this.sessionConfig = this._mergeConfig(session);
} }
this.logger.debug({sessionLevel: this.sessionConfig}, 'SpeechConfig updated'); this.logger.debug({sessionLevel: this.sessionConfig}, 'SpeechConfig updated');
} }
@@ -49,24 +58,10 @@ class SpeechConfig extends Emitter {
}; };
} }
makeGatherTaskConfig({textPrompt, urlPrompt, turnConfig = {}, dontListenAfterSpeech} = {}) { makeGatherTaskConfig({textPrompt, urlPrompt, turnConfig = {}, listenAfterSpeech} = {}) {
// we merge from top to bottom deeply so we wil have // we merge from top to bottom deeply so we wil have
// defaults from session config and then will override them via turn config // defaults from session config and then will override them via turn config
const opts = lodash.merge( const opts = this._mergeConfig(turnConfig);
{},
this.sessionConfig || {}, // this should not be undefined ever
turnConfig
);
/*
const nextTurnKeys = Object.keys(this.turnConfig || {});
const newKeys = nextTurnKeys.filter((k) => !(k in opts));
const bothKeys = nextTurnKeys.filter((k) => k in opts);
for (const key of newKeys) opts[key] = this.turnConfig[key];
for (const key of bothKeys) opts[key] = {...opts[key], ...this.turnConfig[key]};
*/
this.logger.debug({ this.logger.debug({
opts, opts,
@@ -126,7 +121,7 @@ class SpeechConfig extends Emitter {
noInputSpeech, noInputSpeech,
noInputUrl noInputUrl
}, },
listenAfterSpeech: !dontListenAfterSpeech listenAfterSpeech
}; };
const final = stripNulls(config); const final = stripNulls(config);