Отображение подробного ответа от Dialogflow в приложении узла

# #node.js #dialogflow-es #chatbot #dialogflow-es-fulfillment #richtext

Вопрос:

Я успешно подключил свое приложение node к агенту Dialogflow, он способен определять правильные намерения и возвращать простые текстовые ответы. Однако ему не удалось отобразить расширенные сообщения (gif, полезную нагрузку и т. Д.). Как я должен изменить свой код таким образом, чтобы он мог отображать мои расширенные сообщения в пользовательском интерфейсе?

Я попытался изменить «Текст выполнения» на «Сообщения выполнения», он вернул богатый ответ в виде [объекта] в пользовательском интерфейсе.

Вот мой код для app.js и изображение ответа пользовательского интерфейса:

 const dialogflow = require('@google-cloud/dialogflow');
const uuid = require('uuid');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 5000;
// A unique identifier for the given session
const sessionId = uuid.v4();

const { WebhookClient} = require('dialogflow-fulfillment');

app.use(bodyParser.urlencoded({
  extended:false
}))

app.use(function (req,res,next){
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type');
    res.setHeader('Access-Control-Allow-Credentials', true);
    
    next();
  });

app.post('/send-msg',express.json(), (req,res)=>{
  runSample(req.body.MSG).then(data=>{
    res.send({Reply:data})
  });
});

/**
 * Send a query to the dialogflow agent, and return the query result.
 * @param {string} projectId The project to be used
 */
async function runSample(msg,projectId = 'subjectbotchallenger') {

  // Create a new session
  const sessionClient = new dialogflow.SessionsClient({
    keyFilename:"C:/Users/Chee Keong Bong/Desktop/botui/subjectbotchallenger-2a9c694324b7.json"
  });

  const sessionPath = sessionClient.projectAgentSessionPath(projectId, sessionId);

  // The text query request.
  const request = {
    session: sessionPath,
    queryInput: {
      text: {
        // The query to send to the dialogflow agent
        text: msg,
        // 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].queryResu<
  console.log(`  Query: ${result.queryText}`);
  console.log(`  Response: ${result.fulfillmentMessages}`);
  if (result.intent) {
    console.log(`  Intent: ${result.intent.displayName}`);
  } else {
    console.log('  No intent matched.');
  }
  return result.fulfillmentMessages;
}

app.listen(port,()=>{
  console.log("running on port " port)
})
 

Ответ пользовательского интерфейса

Обнаруженное намерение — Журнал консоли

Комментарии:

1. Не могли бы вы поделиться ожидаемым богатым откликом, которого вы ожидаете в тех случаях, когда вы делились экранами печати ?

2. Можете ли вы попробовать выполнить JSON. Укажите строку для ответа, который вы отправляете обратно в API. Я думаю, это должно решить вашу проблему.