#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, я также не получаю никаких ошибок.
Комментарии:
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
для отправки сообщения об ошибке пользователю).