Мой веб-сервис Dialogflow не обнаруживает последующие намерения [Nodejs] - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть резервное намерение по умолчанию, которое имеет присоединенное к нему резервное намерение (это продолжение, также связанное через контексты вывода и ввода). Когда я использую консоль Dialogflow для тестирования этой функции, она работает хорошо. Однако, когда я go через мой API, я не получаю тот же эффект. Может кто-нибудь сказать мне, где я ошибаюсь в моем коде?

"use strict";

const express = require("express");
const bodyParser = require("body-parser");
const app = express().use(bodyParser.json()); // creates http server
const { JWT } = require("google-auth-library");
const dialogflow = require("dialogflow");
const uuid = require("uuid");
const token = "token"; // type here your verification token
const result = "";

app.get("/", (req, res) => {
  // check if verification token is correct
  if (req.query.token !== token) {
    return res.sendStatus(401);
  }

  // return challenge
  return res.end(req.query.challenge);
});

app.post("/", (req, res) => {
  // check if verification token is correct
  if (req.query.token !== token) {
    return res.sendStatus(401);
  }

  // print request body
  console.log(req.body);
  //var request = req;
  //console.log(req.body.result.parameters.testing);
  console.log(req.body.result.resolvedQuery);
  runSample();

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

    // Create a new session
    const sessionClient = new dialogflow.SessionsClient();
    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: req.body.result.resolvedQuery,
          // 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");
    const result = responses[0].queryResult;
    console.log(`  Query: ${result.queryText}`);
    console.log(`  Response: ${result.fulfillmentText}`);
    if (result.intent) {
      console.log(`  Intent: ${result.intent.displayName}`);
      //first not matched user query
      if (result.intent.displayName === 'Default Fallback Intent')
        {
          result.fulfillmentText = 'Sorry, can you rephase your question?';
          //result.fulfillmentText = 'Sorry, I am unable to answer your question';
        }
      if (result.intent.displayName === 'Default Fallback Intent - fallback')
        {
          //result.fulfillmentText = 'Sorry, can you rephase your question?';
          result.fulfillmentText = 'Sorry, I am unable to answer your question';
        } 
      // return a text response
      const data = {
        responses: [
          {
            type: "text",
            elements: [result.fulfillmentText]
          }
        ]
      };
      // return a text response
      res.json(data);
    } else {
      console.log(`  No intent matched.`);
    }
  }
});

// listen for requests :)
const listener = app.listen(3000, function() {
  console.log("Your app is listening on port " + listener.address().port);
});

1 Ответ

0 голосов
/ 25 февраля 2020

Не похоже, что вы просматриваете контекст, который отправляется обратно как часть result, и не отправляете какой-либо контекст в своем вызове на sessionClient.detectIntent(request);. Диалоговый поток поддерживает состояние только в контексте, точно так же, как веб-сервер может поддерживать состояние через файлы cookie, поэтому он не знает, что был установлен выходной контекст, если вы не отправите его в качестве входного контекста в следующем раунде.

Потому что из этого каждый запасной вариант в конечном итоге рассматривается как «заданный по умолчанию намерение возврата».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...