web-dev-qa-db-ja.com

dialogflow SDK v2でwebhookにパラメーターを送信します

ユーザー名、電子メールなど、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: '[email protected]'
        }
      }
    }
  };

  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);
  }
18
the_bluescreen

Dialogflowのv2 APIはgRPCを使用しており、いくつかの癖があります。 Node.jsライブラリのサンプルを見ると、これを回避する方法がわかります。 JavaScriptオブジェクトをプロトタイプ構造に変換するか、単にコピーするためにjsonToStructProtoメソッドを実装する必要があります _structjson.js_ファイル サンプル中 この要点で 。以下は、_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);
  });
_
19
matthewayne