Где искать ошибку "MalformedResponse Не удалось проанализировать ответ Dialogflow в AppResponse из-за пустого речевого ответа - PullRequest
0 голосов
/ 02 января 2019

Ошибка

MalformedResponse Не удалось проанализировать ответ Dialogflow в AppResponse из-за пустого речевого ответа

прочитал Не удалось проанализировать ответ Dialogflow в AppResponse из-за пустого речевого ответа для Ssml-ответа , но все еще не получил точку.

Я довольно новичок.

Пытался следовать коду, приведенному в разделе «Запрос масштабируемых данных для действий в Google с использованием Cloud Firestore», но получил ошибку.

//Copyright 2018 Google LLC.SPDX-License-Identifier: Apache-2.0

'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const app = dialogflow({debug: true});

admin.initializeApp();

const db = admin.firestore();
const collectionRef = db.collection('restaurants');

app.intent('ask_recipe_intent', (conv, {name}) => {
  const term = name.toLowerCase();
  const termRef = collectionRef.doc(`${term}`);

  return termRef.get()
    .then((snapshot) => {
      const {city, name} = snapshot.data();
      conv.ask(`Here you go, ${name}, ${city}. ` +
            `What else do you want to know?`);

    }).catch((e) => {
      console.log('error:', e);
      conv.close('Sorry, try again and tell me another food.');
    });
});


exports.actionsOracle = functions.https.onRequest(app);

Я пытаюсь понять, что

`${term}`

есть и как это используется в Firebase? У меня нет документа с именем «term».

1 Ответ

0 голосов
/ 03 января 2019

У вас есть несколько не связанных между собой вопросов.

Линия

collectionRef.doc(`${term}`);

слишком сложна.Вы можете смело переписать его как

collectionRef.doc(term);

, поскольку обратная кавычка ничего не делает в этом случае.Заключительные кавычки в последних версиях JavaScript делают расширение выражения внутри части ${}.Таким образом, вычисление выражения

`${term}`

просто оценивает то, чем является term.Таким образом, результатом этой функции является создание ссылки на документ в Firestore с именем term, который является просто строчной версией параметра name из вашего намерения Dialogflow.

Что приводит нас кошибка, которую вы получаете.Обычно это происходит, если вы не можете отправить ответ.Не отправка ответа может произойти по ряду причин, наиболее распространенными из которых являются

  • Вы не звонили conv.ask() или conv.close()
  • Вы выполняете асинхронныйоперация (например, вызов базы данных) без возврата Promise

Однако, в вашем случае, похоже, что вы делаете оба.

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

const term = name.toLowerCase();

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

Возможно, вы захотите ознакомиться со следующими двумя статьями, в которых также рассматриваются вопросы отладки действий при выполнении намерений Google:

...