dialogflow/detect.v2beta1.js (291 lines of code) (raw):

// Copyright 2018 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'; const sessionId = require('uuid').v1(); const util = require('util'); async function createKnowledgeBase(projectId, displayName) { // [START dialogflow_create_knowledge_base] // Imports the Dialogflow client library const dialogflow = require('@google-cloud/dialogflow').v2beta1; // Instantiate a DialogFlow client. const client = new dialogflow.KnowledgeBasesClient(); /** * TODO(developer): Uncomment the following lines before running the sample. */ // const projectId = 'ID of GCP project associated with your Dialogflow agent'; // const displayName = `your knowledge base display name, e.g. myKnowledgeBase`; const formattedParent = 'projects/' + projectId; const knowledgeBase = { displayName: displayName, }; const request = { parent: formattedParent, knowledgeBase: knowledgeBase, }; const [result] = await client.createKnowledgeBase(request); console.log(`Name: ${result.name}`); console.log(`displayName: ${result.displayName}`); // [END dialogflow_create_knowledge_base] } /* *This test is commented until the proto change for dialogflow/v2beta1 is finished. */ // async function createDocument( // projectId, // knowledgeBaseFullName, // documentPath, // documentName, // knowledgeTypes, // mimeType // ) { // // [START dialogflow_create_document] // // Imports the Dialogflow client library // const dialogflow = require('@google-cloud/dialogflow').v2beta1; // // Instantiate a DialogFlow Documents client. // const client = new dialogflow.DocumentsClient({ // projectId: projectId, // }); // /** // * TODO(developer): Uncomment the following lines before running the sample. // */ // // const projectId = 'ID of GCP project associated with your Dialogflow agent'; // // const knowledgeBaseFullName = `the full path of your knowledge base, e.g my-Gcloud-project/myKnowledgeBase`; // // const documentPath = `path of the document you'd like to add, e.g. https://dialogflow.com/docs/knowledge-connectors`; // // const documentName = `displayed name of your document in knowledge base, e.g. myDoc`; // // const knowledgeTypes = `The Knowledge type of the Document. e.g. FAQ`; // // const mimeType = `The mime_type of the Document. e.g. text/csv, text/html,text/plain, text/pdf etc.`; // const request = { // parent: knowledgeBaseFullName, // document: { // knowledgeTypes: [knowledgeTypes], // displayName: documentName, // contentUri: documentPath, // source: 'contentUri', // mimeType: mimeType, // }, // }; // const [operation] = await client.createDocument(request); // const [response] = await operation.promise(); // console.log('Document created'); // console.log(`Content URI...${response.contentUri}`); // console.log(`displayName...${response.displayName}`); // console.log(`mimeType...${response.mimeType}`); // console.log(`name...${response.name}`); // console.log(`source...${response.source}`); // // [END dialogflow_create_document] // } async function detectIntentandSentiment( projectId, sessionId, query, languageCode ) { // [START dialogflow_detect_intent_with_sentiment_analysis] // Imports the Dialogflow client library const dialogflow = require('@google-cloud/dialogflow').v2beta1; // Instantiate a DialogFlow client. const sessionClient = new dialogflow.SessionsClient(); /** * TODO(developer): Uncomment the following lines before running the sample. */ // const projectId = 'ID of GCP project associated with your Dialogflow agent'; // const sessionId = `user specific ID of session, e.g. 12345`; // const query = `phrase(s) to pass to detect, e.g. I'd like to reserve a room for six people`; // const languageCode = 'BCP-47 language code, e.g. en-US'; // Define session path const sessionPath = sessionClient.projectAgentSessionPath( projectId, sessionId ); // The text query request. const request = { session: sessionPath, queryInput: { text: { text: query, languageCode: languageCode, }, }, queryParams: { sentimentAnalysisRequestConfig: { analyzeQueryTextSentiment: true, }, }, }; // Send request and log result const responses = await sessionClient.detectIntent(request); console.log('Detected intent'); const result = responses[0].queryResult; console.log(` Query: ${result.queryText}`); console.log(` Response: ${result.fulfillmentText}`); if (result.intent) { console.log(` Intent: ${result.intent.displayName}`); } else { console.log(' No intent matched.'); } if (result.sentimentAnalysisResult) { console.log('Detected sentiment'); console.log( ` Score: ${result.sentimentAnalysisResult.queryTextSentiment.score}` ); console.log( ` Magnitude: ${result.sentimentAnalysisResult.queryTextSentiment.magnitude}` ); } else { console.log('No sentiment Analysis Found'); } // [END dialogflow_detect_intent_with_sentiment_analysis] } async function detectIntentwithTexttoSpeechResponse( projectId, sessionId, query, languageCode, outputFile ) { // [START dialogflow_detect_intent_with_texttospeech_response] // Imports the Dialogflow client library const dialogflow = require('@google-cloud/dialogflow').v2beta1; // Instantiate a DialogFlow client. const sessionClient = new dialogflow.SessionsClient(); /** * TODO(developer): Uncomment the following lines before running the sample. */ // const projectId = 'ID of GCP project associated with your Dialogflow agent'; // const sessionId = `user specific ID of session, e.g. 12345`; // const query = `phrase(s) to pass to detect, e.g. I'd like to reserve a room for six people`; // const languageCode = 'BCP-47 language code, e.g. en-US'; // const outputFile = `path for audio output file, e.g. ./resources/myOutput.wav`; // Define session path const sessionPath = sessionClient.projectAgentSessionPath( projectId, sessionId ); const fs = require('fs'); // The audio query request const request = { session: sessionPath, queryInput: { text: { text: query, languageCode: languageCode, }, }, outputAudioConfig: { audioEncoding: 'OUTPUT_AUDIO_ENCODING_LINEAR_16', }, }; const responses = await sessionClient.detectIntent(request); console.log('Detected intent:'); const audioFile = responses[0].outputAudio; await util.promisify(fs.writeFile)(outputFile, audioFile, 'binary'); console.log(`Audio content written to file: ${outputFile}`); // [END dialogflow_detect_intent_with_texttospeech_response] } async function detectIntentKnowledge( projectId, sessionId, languageCode, knowledgeBaseId, query ) { // [START dialogflow_detect_intent_knowledge] // Imports the Dialogflow client library const dialogflow = require('@google-cloud/dialogflow').v2beta1; // Instantiate a DialogFlow client. const sessionClient = new dialogflow.SessionsClient(); /** * TODO(developer): Uncomment the following lines before running the sample. */ // const projectId = 'ID of GCP project associated with your Dialogflow agent'; // const sessionId = `user specific ID of session, e.g. 12345`; // const languageCode = 'BCP-47 language code, e.g. en-US'; // const knowledgeBaseId = `the ID of your KnowledgeBase`; // const query = `phrase(s) to pass to detect, e.g. I'd like to reserve a room for six people`; // Define session path const sessionPath = sessionClient.projectAgentSessionPath( projectId, sessionId ); const knowledgeBasePath = 'projects/' + projectId + '/knowledgeBases/' + knowledgeBaseId + ''; // The audio query request const request = { session: sessionPath, queryInput: { text: { text: query, languageCode: languageCode, }, }, queryParams: { knowledgeBaseNames: [knowledgeBasePath], }, }; const responses = await sessionClient.detectIntent(request); const result = responses[0].queryResult; console.log(`Query text: ${result.queryText}`); console.log(`Detected Intent: ${result.intent.displayName}`); console.log(`Confidence: ${result.intentDetectionConfidence}`); console.log(`Query Result: ${result.fulfillmentText}`); if (result.knowledgeAnswers && result.knowledgeAnswers.answers) { const answers = result.knowledgeAnswers.answers; console.log(`There are ${answers.length} answer(s);`); answers.forEach(a => { console.log(` answer: ${a.answer}`); console.log(` confidence: ${a.matchConfidence}`); console.log(` match confidence level: ${a.matchConfidenceLevel}`); }); } // [END dialogflow_detect_intent_knowledge] } const cli = require('yargs') .demand(1) .options({ documentId: { alias: 'd', type: 'string', requiresArg: true, description: 'Full path of document in knowledge base', }, documentName: { alias: 'm', type: 'string', default: 'testDoc', requiresArg: true, description: 'Name of Document to Create', }, documentPath: { alias: 'z', type: 'string', requiresArg: true, description: 'uri of document to be added', }, knowledgeBaseName: { alias: 'k', default: 'TestKnowledgeBase', type: 'string', requiresArg: true, description: 'The name of the knowledge base to search from', }, knowledgeBaseFullName: { alias: 'n', type: 'string', requiresArg: true, description: 'full path knowledge base', }, knowledgeTypes: { alias: 't', type: 'string', default: 'FAQ', requiresArg: true, description: 'The Knowledge type of the Document.', }, languageCode: { alias: 'l', default: 'en-US', type: 'string', requiresArg: true, description: 'The language code of the query. Defaults to "en-US".', }, mimeType: { alias: 'y', default: 'text/html', type: 'string', requiresArg: true, description: 'The mime_type of the Document', }, outputFile: { alias: 'f', default: './resources/output.wav', global: true, requiresArg: true, type: 'string', }, projectId: { alias: 'p', default: process.env.GCLOUD_PROJECT || process.env.GOOGLE_CLOUD_PROJECT, description: 'The Project ID to use. Defaults to the value of the ' + 'GCLOUD_PROJECT or GOOGLE_CLOUD_PROJECT environment variables.', requiresArg: true, type: 'string', }, query: { alias: 'q', array: true, string: true, demandOption: true, requiresArg: true, description: 'An array of text queries', default: 'Where is my data stored?', }, sessionId: { alias: 's', default: sessionId, type: 'string', requiresArg: true, description: 'The identifier of the detect session. Defaults to a random UUID.', }, }) .command('createKnowledgeBase', 'Creates a new knowledge base', {}, opts => createKnowledgeBase(opts.projectId, opts.knowledgeBaseName) ) /** * TODO(developer): Uncomment the following lines until proto updates for dialogflow/v2beta1 is complete. * This method should be annotated with (google.longrunning.operationInfo) to generate LRO methods. * Now it's a simple method, without proper LRO response, so it fails because `promise() is not a function`. */ // .command( // 'createDocument', // 'Creates a new document for this knowledge base', // {}, // opts => // createDocument( // opts.projectId, // opts.knowledgeBaseFullName, // opts.documentPath, // opts.documentName, // opts.knowledgeTypes, // opts.mimeType // ) // ) .command( 'detectIntentwithTexttoSpeechResponse', 'Detects the intent of text input, outputs .wav file to target location', {}, opts => detectIntentwithTexttoSpeechResponse( opts.projectId, opts.sessionId, opts.query, opts.languageCode, opts.outputFile ) ) .command( 'detectIntentKnowledge', 'Detects answers from knowledge base queries', {}, opts => detectIntentKnowledge( opts.projectId, opts.sessionId, opts.languageCode, opts.knowledgeBaseFullName, opts.query ) ) .command( 'detectIntentandSentiment', 'Detects sentiment with detect Intent query', {}, opts => detectIntentandSentiment( opts.projectId, opts.sessionId, opts.query, opts.languageCode ) ) .example('node $0 createKnowledgeBase -k "newTestKnowledgeBase"') .example( 'node $0 createDocument -n "KNOWLEDGEBASEFULLNAME" -p "URIHTMLPATHTODOC" -m "MyDoc"' ) .example('node $0 detectIntentwithTexttoSpeechResponse "How do I sign up?"') .example('node $0 detectIntentKnowledge -q "how do i sign up?"') .example( 'node $0 detectIntentandSentiment "Book a great room for six great folks!"' ) .wrap(120) .recommendCommands() .epilogue( 'For more information, see https://cloud.google.com/dialogflow-enterprise/docs' ) .help() .strict(); if (module === require.main) { cli.parse(process.argv.slice(2)); }