diff --git a/dialogflow-cx/detect_intent_audio.js b/dialogflow-cx/detect_intent_audio.js new file mode 100644 index 00000000000..f81f62fd2fd --- /dev/null +++ b/dialogflow-cx/detect_intent_audio.js @@ -0,0 +1,97 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +async function main( + projectId, + location, + agentId, + audioFileName, + encoding, + sampleRateHertz, + languageCode +) { + // [START dialogflow_cx_detect_intent_audio] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const projectId = 'my-project'; + // const location = 'global'; + // const agentId = 'my-agent'; + // const audioFileName = '/path/to/audio.raw'; + // const encoding = 'AUDIO_ENCODING_LINEAR_16'; + // const sampleRateHertz = 16000; + // const languageCode = 'en' + + // Imports the Google Cloud Some API library + const {SessionsClient} = require('@google-cloud/dialogflow-cx'); + const client = new SessionsClient(); + + const fs = require('fs'); + const util = require('util'); + + async function detectIntentAudio() { + const sessionId = Math.random().toString(36).substring(7); + const sessionPath = client.projectLocationAgentSessionPath( + projectId, + location, + agentId, + sessionId + ); + console.info(sessionPath); + + // Read the content of the audio file and send it as part of the request. + const readFile = util.promisify(fs.readFile); + const inputAudio = await readFile(audioFileName); + + const request = { + session: sessionPath, + queryInput: { + audio: { + config: { + audioEncoding: encoding, + sampleRateHertz: sampleRateHertz, + }, + audio: inputAudio, + }, + languageCode, + }, + }; + const [response] = await client.detectIntent(request); + console.log(`User Query: ${response.queryResult.transcript}`); + for (const message of response.queryResult.responseMessages) { + if (message.text) { + console.log(`Agent Response: ${message.text.text}`); + } + } + if (response.queryResult.match.intent) { + console.log( + `Matched Intent: ${response.queryResult.match.intent.displayName}` + ); + } + console.log( + `Current Page: ${response.queryResult.currentPage.displayName}` + ); + } + + detectIntentAudio(); + // [END dialogflow_cx_detect_intent_audio] +} + +main(...process.argv.slice(2)); +process.on('unhandledRejection', err => { + console.error(err.message); + process.exitCode = 1; +}); diff --git a/dialogflow-cx/detect_intent_streaming.js b/dialogflow-cx/detect_intent_streaming.js new file mode 100644 index 00000000000..ce0702c9287 --- /dev/null +++ b/dialogflow-cx/detect_intent_streaming.js @@ -0,0 +1,121 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +async function main( + projectId, + location, + agentId, + audioFileName, + encoding, + sampleRateHertz, + languageCode +) { + // [START dialogflow_cx_detect_intent_streaming] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const projectId = 'my-project'; + // const location = 'global'; + // const agentId = 'my-agent'; + // const audioFileName = '/path/to/audio.raw'; + // const encoding = 'AUDIO_ENCODING_LINEAR_16'; + // const sampleRateHertz = 16000; + // const languageCode = 'en' + + // Imports the Google Cloud Some API library + const {SessionsClient} = require('@google-cloud/dialogflow-cx'); + const client = new SessionsClient(); + + const fs = require('fs'); + const util = require('util'); + const {Transform, pipeline} = require('stream'); + const pump = util.promisify(pipeline); + + async function detectIntentAudio() { + const sessionId = Math.random().toString(36).substring(7); + const sessionPath = client.projectLocationAgentSessionPath( + projectId, + location, + agentId, + sessionId + ); + console.info(sessionPath); + + // Create a stream for the streaming request. + const detectStream = client + .streamingDetectIntent() + .on('error', console.error) + .on('data', data => { + if (data.recognitionResult) { + console.log( + `Intermediate Transcript: ${data.recognitionResult.transcript}` + ); + } else { + console.log('Detected Intent:'); + const result = data.detectIntentResponse.queryResult; + + console.log(`User Query: ${result.transcript}`); + for (const message of result.responseMessages) { + if (message.text) { + console.log(`Agent Response: ${message.text.text}`); + } + } + if (result.match.intent) { + console.log(`Matched Intent: ${result.match.intent.displayName}`); + } + console.log(`Current Page: ${result.currentPage.displayName}`); + } + }); + + // Write the initial stream request to config for audio input. + const initialStreamRequest = { + session: sessionPath, + queryInput: { + audio: { + config: { + audioEncoding: encoding, + sampleRateHertz: sampleRateHertz, + singleUtterance: true, + }, + }, + languageCode: languageCode, + }, + }; + detectStream.write(initialStreamRequest); + + // Stream the audio from audio file to Dialogflow. + await pump( + fs.createReadStream(audioFileName), + // Format the audio stream into the request format. + new Transform({ + objectMode: true, + transform: (obj, _, next) => { + next(null, {queryInput: {audio: {audio: obj}}}); + }, + }), + detectStream + ); + } + + detectIntentAudio(); + // [END dialogflow_cx_detect_intent_streaming] +} + +main(...process.argv.slice(2)); +process.on('unhandledRejection', err => { + console.error(err.message); + process.exitCode = 1; +}); diff --git a/dialogflow-cx/detect_intent_text.js b/dialogflow-cx/detect_intent_text.js new file mode 100644 index 00000000000..f571845d973 --- /dev/null +++ b/dialogflow-cx/detect_intent_text.js @@ -0,0 +1,76 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +async function main(projectId, location, agentId, query, languageCode) { + // [START dialogflow_cx_detect_intent_text] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const projectId = 'my-project'; + // const location = 'global'; + // const agentId = 'my-agent'; + // const query = ['Hello']; + // const languageCode = 'en' + + // Imports the Google Cloud Some API library + const {SessionsClient} = require('@google-cloud/dialogflow-cx'); + const client = new SessionsClient(); + + async function detectIntentText() { + const sessionId = Math.random().toString(36).substring(7); + const sessionPath = client.projectLocationAgentSessionPath( + projectId, + location, + agentId, + sessionId + ); + console.info(sessionPath); + + const request = { + session: sessionPath, + queryInput: { + text: { + text: query, + }, + languageCode, + }, + }; + const [response] = await client.detectIntent(request); + console.log(`User Query: ${query}`); + for (const message of response.queryResult.responseMessages) { + if (message.text) { + console.log(`Agent Response: ${message.text.text}`); + } + } + if (response.queryResult.match.intent) { + console.log( + `Matched Intent: ${response.queryResult.match.intent.displayName}` + ); + } + console.log( + `Current Page: ${response.queryResult.currentPage.displayName}` + ); + } + + detectIntentText(); + // [END dialogflow_cx_detect_intent_text] +} + +main(...process.argv.slice(2)); +process.on('unhandledRejection', err => { + console.error(err.message); + process.exitCode = 1; +}); diff --git a/dialogflow-cx/list-intents.js b/dialogflow-cx/list-intents.js new file mode 100644 index 00000000000..29551a63011 --- /dev/null +++ b/dialogflow-cx/list-intents.js @@ -0,0 +1,55 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +'use strict'; + +async function main(projectId, location, agentId) { + // [START dialogflow_cx_list_intents] + /** + * TODO(developer): Uncomment these variables before running the sample. + */ + // const projectId = 'my-project'; + // const location = 'global'; + // const agentId = 'my-agent'; + + // Imports the Google Cloud Some API library + const {IntentsClient} = require('@google-cloud/dialogflow-cx'); + const client = new IntentsClient(); + + async function listIntents() { + const parent = client.agentPath(projectId, location, agentId); + console.info(parent); + + const [intents] = await client.listIntents({ + parent, + pageSize: 100, + }); + intents.forEach(intent => { + console.log('===================='); + console.log(`Intent name: ${intent.name}`); + console.log(`Intent display name: ${intent.displayName}`); + console.log(`# Parameters: ${intent.parameters.length}`); + console.log(`# Training Phrases: ${intent.trainingPhrases.length}`); + }); + } + + listIntents(); + // [END dialogflow_cx_list_intents] +} + +main(...process.argv.slice(2)); +process.on('unhandledRejection', err => { + console.error(err.message); + process.exitCode = 1; +});