Dialogflow es 如何通过V2客户端库为node js创建OutPutContext
我正在使用node.js的v2客户端库在代理中创建实体和意图。为此,我正在经历git上的这个过程。它说了一些与会话id和上下文id相关的东西。有人能解释一下什么是sessionId和contextId吗。并提供我的链接,我可以阅读这些东西的细节Dialogflow es 如何通过V2客户端库为node js创建OutPutContext,dialogflow-es,Dialogflow Es,我正在使用node.js的v2客户端库在代理中创建实体和意图。为此,我正在经历git上的这个过程。它说了一些与会话id和上下文id相关的东西。有人能解释一下什么是sessionId和contextId吗。并提供我的链接,我可以阅读这些东西的细节 我无法按照这些示例创建上下文。如何在创建意图的同时创建上下文。以下是创建上下文的代码。不能在单个API调用中创建上下文和意图,首先需要创建上下文,然后创建使用上下文的意图。对create context API调用的响应将返回一个可以在意图中使用的上下文
我无法按照这些示例创建上下文。如何在创建意图的同时创建上下文。以下是创建上下文的代码。不能在单个API调用中创建上下文和意图,首先需要创建上下文,然后创建使用上下文的意图。对create context API调用的响应将返回一个可以在意图中使用的上下文ID
const dialogflow = require('dialogflow');
// Instantiates clients
const entityTypesClient = new dialogflow.EntityTypesClient();
// The path to the agent the created entity type belongs to.
const agentPath = entityTypesClient.projectAgentPath(projectId);
const createEntityTypeRequest = {
parent: agentPath,
entityType: {
displayName: displayName,
kind: kind,
},
};
entityTypesClient
.createEntityType(createEntityTypeRequest)
.then(responses => {
console.log(`Created ${responses[0].name} entity type`);
})
.catch(err => {
console.error('Failed to create size entity type:', err);
});
来源:以下是创建上下文的代码。不能在单个API调用中创建上下文和意图,首先需要创建上下文,然后创建使用上下文的意图。对create context API调用的响应将返回一个可以在意图中使用的上下文ID
const dialogflow = require('dialogflow');
// Instantiates clients
const entityTypesClient = new dialogflow.EntityTypesClient();
// The path to the agent the created entity type belongs to.
const agentPath = entityTypesClient.projectAgentPath(projectId);
const createEntityTypeRequest = {
parent: agentPath,
entityType: {
displayName: displayName,
kind: kind,
},
};
entityTypesClient
.createEntityType(createEntityTypeRequest)
.then(responses => {
console.log(`Created ${responses[0].name} entity type`);
})
.catch(err => {
console.error('Failed to create size entity type:', err);
});
来源:上下文与SessionID密切相关。比如说,你有一个聊天机器人,它在两台计算机上运行,为两个不同的用户提供服务。每个用户都有各自的会话id(如果您在节点中编码,当新用户启动聊天机器人时,您需要确保他/她将获得唯一的会话id) 现在,每个唯一的会话id都有唯一的上下文。从上面的示例中,假设用户1将初始化一个名为“abc”且寿命为2的输入上下文的意图,用户2将初始化另一个名为“xyz”且寿命为5的输入上下文的意图,根据每个用户的单独会话id记录这些各自的上下文。您可以通过编程控制(编辑)上下文及其生命周期。这是代码促进的Dialogflow相对于使用GUI的最大优势。使用像Firebase这样的服务,您还可以保留会话id及其关联的上下文,以便下次再次使用相同的用户登录时,它们可以从上次离开的位置开始 我可以分享我以前的一个项目中的一个片段,在这个项目中,我以编程方式管理上下文。初始化脚本如下所示:
/**
* @author Pruthvi Kumar
* @email pruthvikumar.123@gmail.com
* @create date 2018-08-15 04:42:22
* @modify date 2018-08-15 04:42:22
* @desc Dialogflow config for chatbot.
*/
const dialogflow_config = {
projectId: 'xxx',
sessionId: 'chatbot-session-id', //This is default assignment. This will hve to be overridden by sessionId as obtained from client in order to main context per sessionId.
languageCode: 'en-US'
};
exports.configStoreSingleton = (function () {
let instanceStacks;
let instanceSessionId;
let contextStack = {};
let intentsStack = {};
let successfulIntentResponseStack = {};
function init() {
contextStack[dialogflow_config['sessionId']] = [];
intentsStack[dialogflow_config['sessionId']] = [];
successfulIntentResponseStack[dialogflow_config['sessionId']] = [];
return {
contextStack: contextStack,
intentsStack: intentsStack,
successfulIntentResponseStack: successfulIntentResponseStack
};
}
return {
init: function () {
if (!instanceStacks || (instanceSessionId !== dialogflow_config['sessionId'] && (!intentsStack[dialogflow_config['sessionId']]))) {
console.log('[dialogflow_config]: Singleton is not instantiated previously or New userSession is triggered! Fresh instance stack will be provisioned');
instanceStacks = init();
instanceSessionId = dialogflow_config['sessionId'];
}
return instanceStacks;
}
};
})();
exports.updateSessionIdOfDialogflowConfig = function (sessionId) {
if (typeof (sessionId) === 'string') {
dialogflow_config['sessionId'] = sessionId;
return true;
} else {
console.warn('[dialogflow_config]: SessionId must be of type STRING!');
return;
}
};
exports.getDialogflowConfig = function () {
return dialogflow_config;
};
然后,要以编程方式管理上下文:
/**
* @author Pruthvi Kumar
* @email pruthvikumar.123@gmail.com
* @create date 2018-08-15 04:37:15
* @modify date 2018-08-15 04:37:15
* @desc Operate on Dialogflow Contexts
*/
const dialogflow = require('dialogflow');
const dialogflowConfig = require('../modules/dialogflow_config');
const structjson = require('./dialogflow_structjson');
const util = require('util');
const contextsClient = new dialogflow.ContextsClient();
exports.setContextHistory = function (sessionId, intent_name, context_payload, preservedContext=false) {
/* maintain context stack per session */
/* context_payload = {input_contexts: [], output_contexts = []}
*/
const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;
if (intent_name) {
contextStack[sessionId].push({
intent: intent_name,
contexts: context_payload,
preserveContext: preservedContext
});
} else {
console.warn('[dialogflow_contexts]: Intent name is not provided OR Nothing in context_payload to add to history!');
}
};
exports.getContextHistory = function () {
const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;
return contextStack;
}
exports.preserveContext = function () {
const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;
//Traverse contextStack, get the last contexts.
let context_to_be_preserved = contextStack[dialogflowConfig.getDialogflowConfig()['sessionId']][contextStack[dialogflowConfig.getDialogflowConfig()['sessionId']].length - 1];
//console.log(`context to be preserved is: ${util.inspect(context_to_be_preserved)}`);
return context_to_be_preserved['contexts'].map((context, index) => {
let context_id = exports.getContextId(context);
return exports.updateContext(context_id, true)
});
}
从这里,您可以引用此github资源来构建自己的上下文-
快乐创造数字灵魂 上下文与SessionID密切相关。比如说,你有一个聊天机器人,它在两台计算机上运行,为两个不同的用户提供服务。每个用户都有各自的会话id(如果您在节点中编码,当新用户启动聊天机器人时,您需要确保他/她将获得唯一的会话id) 现在,每个唯一的会话id都有唯一的上下文。从上面的示例中,假设用户1将初始化一个名为“abc”且寿命为2的输入上下文的意图,用户2将初始化另一个名为“xyz”且寿命为5的输入上下文的意图,根据每个用户的单独会话id记录这些各自的上下文。您可以通过编程控制(编辑)上下文及其生命周期。这是代码促进的Dialogflow相对于使用GUI的最大优势。使用像Firebase这样的服务,您还可以保留会话id及其关联的上下文,以便下次再次使用相同的用户登录时,它们可以从上次离开的位置开始 我可以分享我以前的一个项目中的一个片段,在这个项目中,我以编程方式管理上下文。初始化脚本如下所示:
/**
* @author Pruthvi Kumar
* @email pruthvikumar.123@gmail.com
* @create date 2018-08-15 04:42:22
* @modify date 2018-08-15 04:42:22
* @desc Dialogflow config for chatbot.
*/
const dialogflow_config = {
projectId: 'xxx',
sessionId: 'chatbot-session-id', //This is default assignment. This will hve to be overridden by sessionId as obtained from client in order to main context per sessionId.
languageCode: 'en-US'
};
exports.configStoreSingleton = (function () {
let instanceStacks;
let instanceSessionId;
let contextStack = {};
let intentsStack = {};
let successfulIntentResponseStack = {};
function init() {
contextStack[dialogflow_config['sessionId']] = [];
intentsStack[dialogflow_config['sessionId']] = [];
successfulIntentResponseStack[dialogflow_config['sessionId']] = [];
return {
contextStack: contextStack,
intentsStack: intentsStack,
successfulIntentResponseStack: successfulIntentResponseStack
};
}
return {
init: function () {
if (!instanceStacks || (instanceSessionId !== dialogflow_config['sessionId'] && (!intentsStack[dialogflow_config['sessionId']]))) {
console.log('[dialogflow_config]: Singleton is not instantiated previously or New userSession is triggered! Fresh instance stack will be provisioned');
instanceStacks = init();
instanceSessionId = dialogflow_config['sessionId'];
}
return instanceStacks;
}
};
})();
exports.updateSessionIdOfDialogflowConfig = function (sessionId) {
if (typeof (sessionId) === 'string') {
dialogflow_config['sessionId'] = sessionId;
return true;
} else {
console.warn('[dialogflow_config]: SessionId must be of type STRING!');
return;
}
};
exports.getDialogflowConfig = function () {
return dialogflow_config;
};
然后,要以编程方式管理上下文:
/**
* @author Pruthvi Kumar
* @email pruthvikumar.123@gmail.com
* @create date 2018-08-15 04:37:15
* @modify date 2018-08-15 04:37:15
* @desc Operate on Dialogflow Contexts
*/
const dialogflow = require('dialogflow');
const dialogflowConfig = require('../modules/dialogflow_config');
const structjson = require('./dialogflow_structjson');
const util = require('util');
const contextsClient = new dialogflow.ContextsClient();
exports.setContextHistory = function (sessionId, intent_name, context_payload, preservedContext=false) {
/* maintain context stack per session */
/* context_payload = {input_contexts: [], output_contexts = []}
*/
const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;
if (intent_name) {
contextStack[sessionId].push({
intent: intent_name,
contexts: context_payload,
preserveContext: preservedContext
});
} else {
console.warn('[dialogflow_contexts]: Intent name is not provided OR Nothing in context_payload to add to history!');
}
};
exports.getContextHistory = function () {
const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;
return contextStack;
}
exports.preserveContext = function () {
const contextStack = dialogflowConfig.configStoreSingleton.init().contextStack;
//Traverse contextStack, get the last contexts.
let context_to_be_preserved = contextStack[dialogflowConfig.getDialogflowConfig()['sessionId']][contextStack[dialogflowConfig.getDialogflowConfig()['sessionId']].length - 1];
//console.log(`context to be preserved is: ${util.inspect(context_to_be_preserved)}`);
return context_to_be_preserved['contexts'].map((context, index) => {
let context_id = exports.getContextId(context);
return exports.updateContext(context_id, true)
});
}
从这里,您可以引用此github资源来构建自己的上下文-
快乐创造数字灵魂 您当前用于创建意图的代码是什么?请提供准确的代码,我也能够提供上下文,需要查看您的代码以建议修改。要创建意图,您将仅调用链接中提供的createIntent()方法。无论如何,你可以看到它作为参考:它在python中,但是你可以很容易地将它转换成节点JS。你基本上需要添加一行。你目前用于创建意图的代码是什么?请提供准确的代码,我也能够提供上下文,需要查看您的代码以建议修改。要创建意图,您将仅调用链接中提供的createIntent()方法。无论如何,您可以看到这一点以供参考:它在python中,但您可以轻松地将其转换为节点JS。您基本上需要添加一行。您在回答中给出的上述代码是相关实体创建。我很困惑。这如何帮助我创建上下文。正如您所说,您不能在单个API调用中创建上下文和意图,您首先需要创建上下文,然后创建意图。我在文档中没有发现这样的东西。你能分享一些我可以详细阅读的链接吗?这些链接不是在文档中明确的,而是你如何通过API创建意图和上下文的事实。如果创建意图并希望将上下文附加到意图,则需要通过ID引用上下文。当由Dialogflow创建上下文时,将为上下文创建上下文ID,并且在创建上下文之前无法知道上下文ID。因此,由于意图需要上下文ID,并且在创建上下文之前不会生成上下文ID,因此必须在创建意图之前创建上下文。您能否将答案中的代码替换为与上下文相关的代码。您提供的代码是用于entity@FaisalAhmed在这里,您有一些上下文函数要插入到代码中:您在回答中给出的上述代码是相关实体创建。我很困惑。这将如何帮助我创建上下文。正如您所说的,您不能在单个API调用中创建上下文和意图,您首先需要