【问题标题】:Send parameters to webhook on dialogflow sdk v2在 dialogflow sdk v2 上将参数发送到 webhook
【发布时间】:2018-05-15 00:06:27
【问题描述】:

我正在尝试向 dialogflow (api.ai) 发送一些参数,例如用户名、电子邮件等,但我无法弄清楚。问题是我无法使用 Dialogflow v2 Nodejs SDK 获取/设置任何特定数据(例如用户名、电子邮件等)。我尝试使用 queryParams.payload (v1: originalRequest) 但它没有以某种方式工作。此外,我尝试使用数据触发 自定义事件,但我无法在响应中获取任何事件数据。有人知道如何为 dialogFlow 上的会话发送一些特定数据吗?

有效负载示例

  const projectId = 'test-bot-test-1111';
  const sessionId = user.uuid;
  const languageCode = 'en-GB';

  const sessionClient = new dialogFlow.SessionsClient();
  const sessionPath = sessionClient.sessionPath(projectId, sessionId);

  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        text: query,
        languageCode
      }
    },
    queryParams: {
      payload: {
        data: {
           username: 'bob',
           email: 'bob@test.com'
        }
      }
    }
  };

  let resultReq;

  console.log('request :: ', request, '\n\n');

  try {
    resultReq = await sessionClient.detectIntent(request);
  } catch (err) {
    // eslint-disable-next-line no-console
    return console.error('ERROR:', err);
  }

事件示例

  const projectId = 'test-bot-test-1111';
  const sessionId = user.uuid;
  const languageCode = 'en-GB';

  const sessionClient = new dialogFlow.SessionsClient();
  const sessionPath = sessionClient.sessionPath(projectId, sessionId);

const request = {
    session: sessionPath,
    queryInput: {
      event: {
        name: 'custom_event',
        languageCode,
        parameters: {
          name: 'sam',
          user_name: 'sam',
          a: 'saaaa'
        }
      }
    },
    queryParams: {
      payload: {
        data: user
      }
    }
  };

  let resultReq;

  console.log('request :: ', request, '\n\n');

  try {
    resultReq = await sessionClient.detectIntent(request);
  } catch (err) {
    // eslint-disable-next-line no-console
    return console.error('ERROR:', err);
  }

【问题讨论】:

    标签: node.js sdk dialogflow-es


    【解决方案1】:

    Dialogflow 的 v2 API 使用 gRPC 并且有一些怪癖,其中之一是您遇到过的。如果您查看 Node.js 库的示例,您可以了解如何解决此问题。你需要实现一个jsonToStructProto 方法来将你的JavaScript 对象转换为一个原型结构或者只是复制the structjson.js file in the sample in this gist。下面是一个使用 structjson.js 文件的完整示例:

    // Imports the Dialogflow library
    const dialogflow = require('dialogflow');
    
    // Import the JSON to gRPC struct converter
    const structjson = require('./structjson.js');
    
    // Instantiates a sessison client
    const sessionClient = new dialogflow.SessionsClient();
    
    // The path to identify the agent that owns the created intent.
    const sessionPath = sessionClient.sessionPath(projectId, sessionId);
    
    // The text query request.
    const request = {
      session: sessionPath,
      queryInput: {
        event: {
          name: eventName,
          parameters: structjson.jsonToStructProto({foo: 'bar'}),
          languageCode: languageCode,
        },
      },
    };
    
    sessionClient
      .detectIntent(request)
      .then(responses => {
        console.log('Detected intent');
        logQueryResult(sessionClient, responses[0].queryResult);
      })
      .catch(err => {
        console.error('ERROR:', err);
      });
    

    【讨论】:

    猜你喜欢
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多