代码之家  ›  专栏  ›  技术社区  ›  Marco Lampis

对话流通过节点传递参数

  •  3
  • Marco Lampis  · 技术社区  · 6 年前

    如何通过nodejs请求传递参数?例如,我想传递我的代码和DialogFlow中的名称,它会自动以包含我传递的参数的响应作为“hi$name”。

    矿山实际要求:

    const request = {
      session: sessionPath,
      queryInput: {
        text: {
          text: query,
          languageCode: languageCode,
        },
      },
    };
    

    编辑4[index.js],这是答案后的新的正确代码

    const projectId    = 'your-project-id';
    const sessionId    = 'session-id';
    
    const query        = 'your-query';
    const languageCode = 'your-language';
    
    const j = require("./structjson.js");   //download It from the answer 
    
    
    const dialogflow    = require('dialogflow');
    const sessionClient = new dialogflow.SessionsClient({keyFilename: './THIS-IS-RIGHT.json'});
    
    // Define session path
    const sessionPath = sessionClient.sessionPath(projectId, sessionId);
    
    
    async function request() {
        const contextClient = new dialogflow.ContextsClient({ keyFilename: './your-path-to-file.json' });
    
        const contextData = {
            name: contextClient.contextPath(projectId, sessionId, 'your-context'),
            parameters: j.jsonToStructProto({ name: 'John' }),
            lifespanCount: 1
        };//An example for the name
    
        const context = await contextClient.createContext({
            parent: sessionPath,
            context: contextData
        });
    
        const request = {
            session: sessionPath,
            queryInput: {
                text: {
                    text: query,
                    languageCode
                }
            },
            queryParams: {
                contexts: context // You may want to add the other contexts here
            }
        };
    
        const result = await sessionClient.detectIntent(request);
        console.log(result);
    }
    
    request();
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Marcos Casagrande    6 年前

    发送时可以传递参数 event 而不是 text .

    您需要将javascript对象转换为proto结构。有一个包裹 pb-util 它将处理编码/解码

    const { struct } = require('pb-util');  
    
    const request = {
        session: sessionPath,
        queryInput: {
            event: {
                name: eventName,
                parameters: struct.encode({ name: 'John' }),
                languageCode
            }
        }
    };
    

    之后,您需要根据自己的意图创建一个具有以下语法的参数。 #eventName.name

    enter image description here


    另一种方法是创建一个上下文,使用 dialogflow.ContextsClient 和; client.createContext() 并将参数添加到上下文,然后用 queryInput 请求。

    async function request() {
        const contextClient = new dialogflow.ContextsClient({ keyFilename: '..' });
        const sessionClient = new dialogflow.SessionsClient({ keyFilename: '..' });
    
        const contextData = {
            name: contextClient.contextPath('[PROJECT]', '[SESSION]', '[YOUR-CONTEXT]'),
            parameters: struct.encode({ name: 'John' }),
            lifespanCount: 1
        };
    
        const context = await contextClient.createContext({ 
            parent: sessionPath, 
            context: contextData 
        });
    
        const request = {
            session: sessionPath,
            queryInput: {
                text: {
                    text: query,
                    languageCode
                }
            },
            queryParams: {
                contexts: context // You may want to add the other contexts here
            }
        };
    
        const result = await sessionClient.detectIntent(request);
        console.log(result);
    }
    

    现在您需要创建一个参数,其值为: #your-context.name

    推荐文章