This commit is contained in:
Dave Horton
2024-08-27 11:43:18 -04:00
parent df9bcd9845
commit 1b1ea7a05f
2 changed files with 69 additions and 44 deletions

View File

@@ -87,6 +87,8 @@ class Dialogflow extends Task {
get isCX() { return this.model === 'cx'; } get isCX() { return this.model === 'cx'; }
get isES() { return !this.isCX; }
async exec(cs, {ep}) { async exec(cs, {ep}) {
await super.exec(cs); await super.exec(cs);
@@ -439,9 +441,10 @@ class Dialogflow extends Task {
// kill filler audio // kill filler audio
await ep.api('uuid_break', ep.uuid); await ep.api('uuid_break', ep.uuid);
// start a new intent, (we want to continue to listen during the audio playback) // if ES start a new intent (for CX we do not set single_utterance on),
// (we want to continue to listen during the audio playback)
// _unless_ we are transferring or ending the session // _unless_ we are transferring or ending the session
if (/*this.greetingPlayed &&*/ !this.hangupAfterPlayDone) { if (this.isES && !this.hangupAfterPlayDone) {
ep.api(this.cmd, `${ep.uuid} ${this.project} ${this.lang}`); ep.api(this.cmd, `${ep.uuid} ${this.project} ${this.lang}`);
} }
@@ -467,12 +470,7 @@ class Dialogflow extends Task {
return; return;
} }
} }
/*
if (!this.inbound && !this.greetingPlayed) {
this.logger.info('finished greeting on outbound call, starting new intent');
this.ep.api(this.cmd, `${ep.uuid} ${this.project} ${this.lang}`);
}
*/
this.greetingPlayed = true; this.greetingPlayed = true;
if (this.hangupAfterPlayDone) { if (this.hangupAfterPlayDone) {

View File

@@ -4,19 +4,31 @@ class Intent {
this.evt = evt; this.evt = evt;
this.logger.debug({evt}, 'intent'); this.logger.debug({evt}, 'intent');
this.dtmfRequest = checkIntentForDtmfEntry(logger, evt); this.qr = this.isCX ? evt.detect_intent_response.query_result : evt.query_result;
this.dtmfRequest = this._checkIntentForDtmfEntry(logger, evt);
}
get response_id() {
return this.isCX ? this.evt.detect_intent_response.response_id : this.evt.response_id;
} }
get isEmpty() { get isEmpty() {
return this.evt.response_id.length === 0; return !(this.response_id?.length > 0);
} }
get fulfillmentText() { get fulfillmentText() {
return this.evt.query_result.fulfillment_text; return this.qr.fulfillment_text;
} }
get saysEndInteraction() { get saysEndInteraction() {
return this.evt.query_result.intent.end_interaction ; if (this.isCX) {
const end_interaction = this.qr.response_messages
.find((m) => typeof m === 'object' && 'end_interaction' in m)?.end_interaction;
//TODO: need to do more checking on the actual contents
return end_interaction && Object.keys(end_interaction).length > 0;
}
else return this.qr.intent.end_interaction ;
} }
get saysCollectDtmf() { get saysCollectDtmf() {
@@ -28,7 +40,22 @@ class Intent {
} }
get name() { get name() {
if (!this.isEmpty) return this.evt.query_result.intent.display_name; if (!this.isEmpty) {
if (this.isCX) {
return this.qr.match?.intent?.display_name;
}
else {
return this.qr.intent.display_name;
}
}
}
get isCX() {
return typeof this.evt.detect_intent_response === 'object';
}
get isES() {
return !this.isCX;
} }
toJSON() { toJSON() {
@@ -38,10 +65,6 @@ class Intent {
}; };
} }
}
module.exports = Intent;
/** /**
* Parse a returned intent for DTMF entry information * Parse a returned intent for DTMF entry information
* i.e. * i.e.
@@ -55,8 +78,9 @@ module.exports = Intent;
* allow-dtmf-1-4-# : collect 1-4 digits, terminating if '#' is entered * allow-dtmf-1-4-# : collect 1-4 digits, terminating if '#' is entered
* @param {*} intent - dialogflow intent * @param {*} intent - dialogflow intent
*/ */
const checkIntentForDtmfEntry = (logger, intent) => { _checkIntentForDtmfEntry(logger, intent) {
const qr = intent.query_result; const qr = this.isCX ? intent.detect_intent_response.query_result : intent.query_result;
if (!qr || !qr.fulfillment_messages || !qr.output_contexts) { if (!qr || !qr.fulfillment_messages || !qr.output_contexts) {
logger.info({f: qr.fulfillment_messages, o: qr.output_contexts}, 'no dtmfs'); logger.info({f: qr.fulfillment_messages, o: qr.output_contexts}, 'no dtmfs');
return; return;
@@ -86,4 +110,7 @@ const checkIntentForDtmfEntry = (logger, intent) => {
}; };
} }
} }
}; }
}
module.exports = Intent;