首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置输入或输出上下文对话框流nodejs v2

设置输入或输出上下文对话框流nodejs v2
EN

Stack Overflow用户
提问于 2019-01-26 16:03:55
回答 3查看 5.7K关注 0票数 1

我正在使用dialogflow NPM模块,我想发送input/output context,但我不知道如何做。我知道在google-assistant NPM中我可以用下面的方法设置contextsparameter

代码语言:javascript
复制
 const parameters = { // Custom parameters to pass with context
     welcome: true,
 };
 conv.contexts.set('welcome-context', 5, parameters);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-26 16:38:13

为了使用对话流 NPM模块发送上下文,您必须首先使用dialogflow.ContextsClient创建上下文,然后在查询中发送上下文。

要将参数转换成对话框所需的格式,您需要使用以下模块:pb-util

代码语言:javascript
复制
const dialogflow = require('dialogflow');
const { struct } = require('pb-util');  

const projectId = 'projectId';
const contextsClient = new dialogflow.ContextsClient();
const sessionClient = new dialogflow.SessionsClient();

async function createContext(sessionId, contextId, parameters, lifespanCount = 5) {

    const sessionPath = contextsClient.sessionPath(projectId, sessionId);
    const contextPath = contextsClient.contextPath(
        projectId,
        sessionId,
        contextId
    );

    const request = {
        parent: sessionPath,
        context: {
            name: contextPath,
            parameters: struct.encode(parameters)
            lifespanCount
        }
    };

    const [context] = await contextsClient.createContext(request);

    return context;
}


function sendQuery(sessionId, query, context) {

    const session = sessionClient.sessionPath(projectId, sessionId);

    const request = {
        session,
        queryInput: {
            text: {
                text: query
            }
        },
        queryParams: {
            contexts: [context] // You can pass multiple contexts if you wish
        }
    };

    return sessionClient.detectIntent(request);
}

(async() => {
    const parameters = { // Custom parameters to pass with context
       welcome: true
    };

    const sessionId = 'my-session';
    const context = await createContext(sessionId, 'welcome-context', parameters);

    const response = await sendQuery(sessionId, 'Hi', context);

    console.log(response);

})();

请记住,您发送输入上下文。输出上下文是在意图中生成的。

如果您在验证客户端SessionClient & ContextClient时遇到问题,可以检查另一个问题:可方便的授权方式

票数 5
EN

Stack Overflow用户

发布于 2019-01-27 11:56:23

首先,对软件包做一些澄清。

  • 谷歌助理包是助手SDK的一个人的实现/包装器,允许您将助手嵌入到任何程序或设备中。这就像建立你自己的谷歌主页。(这个包似乎不是来自Google的,但它确实包装了官方的protobuf,所以您不必自己编译它。)
  • 谷歌上的行动包用于制作一个与Action或对话框一起工作的webhook。这是为了制作一个程序,它与助手一起工作,并发送回响应。(ie -它是用来编写响应“嘿,谷歌,和我的应用程序对话”的代码)
  • 对话流包允许您使用对话框流代理,包括配置它们并向它们发送查询以查看哪些内容与查询匹配。这是一个非常粗略的相当于“谷歌助理”的软件包,但做得更多。
  • 对话框-实现包用于制作一个webhook,它为Dialogflow支持的任何平台提供逻辑和响应。这相当于谷歌上的行动包。

您提供的代码片段看起来像是来自“actions on google”包,并将输出上下文设置为回复的一部分。

与使用“对话框流-实现”包的代码相同的是

代码语言:javascript
复制
 const parameters = { // Custom parameters to pass with context
     welcome: true,
 };
 agent.context.set('welcome-context', 5, parameters);

注意,它是“上下文”,在这个包中没有"s“。

类似地,要获得输入上下文,您可以使用

代码语言:javascript
复制
agent.context.get('name-of-context;);

(您可能会看到一些使用类似agent.setContext()的示例。这些方法已被否决,以支持上述方法。)

票数 8
EN

Stack Overflow用户

发布于 2020-04-01 11:42:15

在马可完美答案的基础上--这里有一个更简单的版本:

package.json

代码语言:javascript
复制
{
  "name": "credtest",
  "version": "1.0.0",
  "dependencies": {
    "dialogflow": "^1.2.0",
    "pb-util": "^0.1.3"
  }
}

index.js

代码语言:javascript
复制
const {ContextsClient} = require('dialogflow')
const { struct } = require('pb-util');  

// REPLACE THESE:

/*
1. Service Account Credential file (KEEP SAFE)
// where/how to get this key: https://cloud.google.com/iam/docs/creating-managing-service-account-keys
// For different auth options, see Marco Casagrande's explainer: https://stackoverflow.com/questions/50545943/dialogflow-easy-way-for-authorization/50546430#50546430)
// Note: JSON hard-coded below for copy/paste, just import/require in when using for real
*/

const credential = {
    "type": "__REPLACE__ME___",
    "project_id": "__REPLACE__ME___",
    "private_key_id": "__REPLACE__ME___",
    "private_key": "__REPLACE__ME___",
    "client_email": "__REPLACE__ME___",
    "client_id": "__REPLACE__ME___",
    "auth_uri": "__REPLACE__ME___",
    "token_uri": "__REPLACE__ME___",
    "auth_provider_x509_cert_url": "__REPLACE__ME___",
    "client_x509_cert_url": "__REPLACE__ME___"
  }
  
/*
2. Project ID, Google cloud project id
Tip: notice the service-account naturally already has your product id
*/
const project_id = '__REPLACE__ME___' // This is your google cloud project


const client = new ContextsClient({
    credentials: credential
});


createContext('123456789', {name: 'bongo_context', lifespanCount: 3, parameters: {a:1, b:2, c:3 }} )


function createContext(sessionID, {name, lifespanCount, parameters = {} } = {} ) {
    const formattedParent = client.sessionPath(project_id, sessionID);
    const formattedContextName = `projects/${project_id}/agent/sessions/${sessionID}/contexts/${name}`
    const context = {
        "name": formattedContextName,
        "lifespanCount": 2,
        "parameters": struct.encode(parameters)
    }

    const request = {
        parent: formattedParent,
        context: context,
    }

    client.createContext(request)
          .then(responses => {
            const response = responses[0];
            console.log('context now active:', response)
          })
          .catch(err => {
            console.error(err);
          });

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54380112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档