Отображение данных из внешнего API JSON и отображение в DIALOGFLOW с помощью AXIOS

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

#node.js #axios #dialogflow-es #чат-бот #dialogflow-es-выполнение

Вопрос:

Мне нужна помощь в отображении ответа, который я получаю от моего API, в пользовательском интерфейсе Dialogflow.Вот мой код. В настоящее время я использую WebHook для подключения Dialogflow к серверной части в Heroku. Мой код

 const functions = require('firebase-functions');
var admin = require("firebase-admin");
var serviceAccount = require("../../reactpageagent-dxug-firebase-adminsdk-26f6q-e1563ff30f.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://reactpageagent-dxug.firebaseio.com"
});

const { WebhookClient } = require('dialogflow-fulfillment');
const { Card, Suggestion } = require('dialogflow-fulfillment');
const axios = require('axios');

module.exports = (request, response) => {
  const agent = new WebhookClient({ request, response });

  function welcome(agent) {
    agent.add('Welcome to my agent');
  }

  function rhymingWordHandler(agent) {
    const word = agent.parameters.word;
    agent.add(`Here are the rhyming words for ${word}`)
    axios.get(`https://api.datamuse.com/words?rel_rhy=${word}`)
      .then((result) => {
        console.log(result.data);
        result.data.map(wordObj => {
          console.log(wordObj.word);
          agent.add(JSON.stringify(wordObj.word));
          return;
          // agent.end(`${wordObj.word}`);
        });
      });
  };

  let intentMap = new Map();
  intentMap.set('Default Welcome Intent', welcome);
  intentMap.set('rhymingWord', rhymingWordHandler);
  agent.handleRequest(intentMap);
}



  

Когда я консолью.зарегистрируйте мой результат. Я получаю данные из API в своей консоли.вывод журнала, но данные не отображаются в пользовательском интерфейсе Dialogflow, я также не получаю никаких ошибок.

Журнал Heroku

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

1. Я попытался запустить ваш API . Он предоставляет набор слов. Вы хотите показать все слова? Я думаю, что agent.add не будет работать внутри метода map. Вам нужно будет либо выбрать первое слово, либо создать строку слов.

2. Строка слов будет в порядке, как мне этого добиться, сэр, возможно, будет оценен пример кода

3. Попробуйте добавить return перед вызовом axios.get.

Ответ №1:

У меня были реальные проблемы со result.data.map строкой кода. В конце концов, я избежал этого и вместо этого обработал result.data после .then((result) => { строки, проверив длину массива, которую вернул мой API, и, если она была > 0 , перебрал ее для вывода каждой строки по отдельности, используя agent.add . Если длина массива была равна 0, я обычно agent.add отображал сообщение «Записи не найдены». Я использовал a catch для регистрации любых ошибок (опять же, используя agent.add для отправки сообщения об ошибке пользователю).