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 isES() { return !this.isCX; }
async exec(cs, {ep}) {
await super.exec(cs);
@@ -439,9 +441,10 @@ class Dialogflow extends Task {
// kill filler audio
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
if (/*this.greetingPlayed &&*/ !this.hangupAfterPlayDone) {
if (this.isES && !this.hangupAfterPlayDone) {
ep.api(this.cmd, `${ep.uuid} ${this.project} ${this.lang}`);
}
@@ -467,12 +470,7 @@ class Dialogflow extends Task {
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;
if (this.hangupAfterPlayDone) {

View File

@@ -4,19 +4,31 @@ class Intent {
this.evt = evt;
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() {
return this.evt.response_id.length === 0;
return !(this.response_id?.length > 0);
}
get fulfillmentText() {
return this.evt.query_result.fulfillment_text;
return this.qr.fulfillment_text;
}
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() {
@@ -28,7 +40,22 @@ class Intent {
}
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() {
@@ -38,11 +65,7 @@ class Intent {
};
}
}
module.exports = Intent;
/**
/**
* Parse a returned intent for DTMF entry information
* i.e.
* allow-dtmf-x-y-z
@@ -55,8 +78,9 @@ module.exports = Intent;
* allow-dtmf-1-4-# : collect 1-4 digits, terminating if '#' is entered
* @param {*} intent - dialogflow intent
*/
const checkIntentForDtmfEntry = (logger, intent) => {
const qr = intent.query_result;
_checkIntentForDtmfEntry(logger, intent) {
const qr = this.isCX ? intent.detect_intent_response.query_result : intent.query_result;
if (!qr || !qr.fulfillment_messages || !qr.output_contexts) {
logger.info({f: qr.fulfillment_messages, o: qr.output_contexts}, 'no dtmfs');
return;
@@ -86,4 +110,7 @@ const checkIntentForDtmfEntry = (logger, intent) => {
};
}
}
};
}
}
module.exports = Intent;