0

Google アシスタントのアクションに少し苦労しています。現在、Webhook に Dialogflow と Firebase を使用しています。私のコードでは、API からデータを取得したいと思います。たとえば、次のAPIです。ちなみにNode.jsでコーディングしています。ノードは非同期であるため、データを取得する方法がわかりません。コールバックを作成しようとすると、機能しません。例:

app.intent(GetData, (conv) => {
  var test= "error";

  apicaller.callApi(answer =>
    {
      test = answer.people[0].name
      go()

    })
    function go ()
    {
    conv.ask(`No matter what people tell you, words and ideas change the world ${test}`)
    }

何らかの理由で、これは他のアプリケーションでテストすると機能します。Dialogflowでは機能しません

また、関数 app.intent に asynch を使用しようとし、await で試しましたが、これも機能しませんでした。

どうすればこれを修正できるか分かりますか?

よろしくお願いいたします。

ルカ

4

4 に答える 4

0

まず、Github リポジトリに記載されている手順に従います

https://github.com/googleapis/nodejs-dialogflow

ここでは、README ファイルで既に指定されている作業モジュールを見つけることができます。SessionsClient オブジェクトの作成に格納するkeyFilenameオブジェクトを作成する必要があります (keyFileName である資格情報ファイルを生成する方法については、投稿の最後に移動してください)。作業モジュールの下。

const express = require("express");

const bodyParser = require("body-parser");

const app = express();

app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());

//////////////////////////////////////////////////////////////////
const dialogflow = require("dialogflow");
const uuid = require("uuid");

/**
 * Send a query to the dialogflow agent, and return the query result.
 * @param {string} projectId The project to be used
 */
async function runSample(projectId = "<your project Id>") {
  // A unique identifier for the given session
  const sessionId = uuid.v4();

  // Create a new session
  const sessionClient = new dialogflow.SessionsClient({
    keyFilename: "<The_path_for_your_credentials_file>"
  });
  const sessionPath = sessionClient.sessionPath(projectId, sessionId);

  // The text query request.
  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        // The query to send to the dialogflow agent
        text: "new page",
        // The language used by the client (en-US)
        languageCode: "en-US"
      }
    }
  };

  // Send request and log result
  const responses = await sessionClient.detectIntent(request);
  console.log("Detected intent");
  console.log(responses);
  const result = responses[0].queryResult;
  console.log(`  Query: ${result.queryText}`);
  console.log(`  Response: ${result.fulfillmentText}`);
  if (result.intent) {
    console.log(`  Intent: ${result.intent.displayName}`);
  } else {
    console.log(`  No intent matched.`);
  }
}

runSample();

ここで、Google クラウド プラットフォームを使用して認証情報ファイルである keyFileName ファイルを取得できます。

https://cloud.google.com/docs/authentication/getting-started

完全なチュートリアル (ヒンディー語) については、YouTube ビデオをご覧ください。

https://www.youtube.com/watch?v=aAtISTrb9n4&list=LL8ZkoggMm9re6KMO1IhXfkQ

于 2020-01-31T14:15:14.370 に答える