Ошибка Пустой речевой ответ

Я попытался подключить DialogFlow и Действия в Google, поэтому я создал несколько намерений, подключил службы, добавил явные и неявные вызовы и т. Д., Но когда я пробую использовать бота в симуляторе https://console.actions.google.com/project/[projectIdvisible/simulator/ он всегда выдает ошибку:

«Не удалось проанализировать ответ Dialogflow в AppResponse, возникло исключение с сообщением: Пустой речевой ответ»

даже жесткий inputType был "KEYBOARD".

Что я пробовал до сих пор:

  • Я установил «Ответ с этой вкладки будет отправлен в интеграцию с Google Assistant» в диалоговом потоке (нужно ли настраивать его для каждого намерения?), Но я не вижу никаких дополнительных настроек для речи.
  • Я отключил второй язык, сначала у меня тоже были намерения на немецком
  • Я также отключил Fullfillment Webhook (реализованный в API v1, а затем также v2) без изменений.
  • Я нашел только этого пользователя с такой же проблемой https://productforums.google.com/forum/#!topic/dialogflow/xYjKlz31yW0;context-place=topicsearchin/dialogflow/Empty 20 долларов за речь 20 долларов ответа, но без решения.
  • флажок выполнения отмечен при намерениях
  • Бот отлично работает, когда я использую его с помощью кнопки «Попробовать сейчас» справа в диалоговом потоке или в веб-демонстрации https://bot.dialogflow.com/994dda8b-4849-4a8a-ab24-c0cd03b5f420

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

Вот скриншот ошибки интеграции действий:  введите описание изображения здесь

Это полный вывод отладки:

{
  "agentToAssistantDebug": {
    "agentToAssistantJson": {
      "message": "Failed to parse Dialogflow response into AppResponse, exception thrown with message: Empty speech response",
      "apiResponse": {
        "id": "c12e1389-e887-49d4-b399-a332188ca946",
        "timestamp": "2018-01-27T03:55:30.931Z",
        "lang": "en-us",
        "result": {},
        "status": {
          "code": 200,
          "errorType": "success"
        },
        "sessionId": "1517025330705"
      }
    }
  },
  "assistantToAgentDebug": {
    "assistantToAgentJson": {
      "user": {
        "userId": "USER_ID",
        "locale": "en-US",
        "lastSeen": "2018-01-27T03:55:03Z"
      },
      "conversation": {
        "conversationId": "1517025330705",
        "type": "NEW"
      },
      "inputs": [
        {
          "intent": "actions.intent.MAIN",
          "rawInputs": [
            {
              "inputType": "KEYBOARD",
              "query": "Talk to Mica, the Hipster Cat Bot"
            }
          ]
        }
      ],
      "surface": {
        "capabilities": [
          {
            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
          },
          {
            "name": "actions.capability.WEB_BROWSER"
          },
          {
            "name": "actions.capability.AUDIO_OUTPUT"
          },
          {
            "name": "actions.capability.SCREEN_OUTPUT"
          }
        ]
      },
      "isInSandbox": true,
      "availableSurfaces": [
        {
          "capabilities": [
            {
              "name": "actions.capability.AUDIO_OUTPUT"
            },
            {
              "name": "actions.capability.SCREEN_OUTPUT"
            }
          ]
        }
      ]
    },
    "curlCommand": "curl -v 'https://api.api.ai/api/integrations/google?token=TOKEN' -H 'Content-Type: application/json;charset=UTF-8' -H 'Google-Actions-API-Version: 2' -H 'Authorization: AUTH_TOKEN'  -A 'Mozilla/5.0 (compatible; Google-Cloud-Functions/2.1; +http://www.google.com/bot.html)' -X POST -d '{\"user\":{\"userId\":\"USER_ID\",\"locale\":\"en-US\",\"lastSeen\":\"2018-01-27T03:55:03Z\"},\"conversation\":{\"conversationId\":\"1517025330705\",\"type\":\"NEW\"},\"inputs\":[{\"intent\":\"actions.intent.MAIN\",\"rawInputs\":[{\"inputType\":\"KEYBOARD\",\"query\":\"Talk to Mica, the Hipster Cat Bot\"}]}],\"surface\":{\"capabilities\":[{\"name\":\"actions.capability.MEDIA_RESPONSE_AUDIO\"},{\"name\":\"actions.capability.WEB_BROWSER\"},{\"name\":\"actions.capability.AUDIO_OUTPUT\"},{\"name\":\"actions.capability.SCREEN_OUTPUT\"}]},\"isInSandbox\":true,\"availableSurfaces\":[{\"capabilities\":[{\"name\":\"actions.capability.AUDIO_OUTPUT\"},{\"name\":\"actions.capability.SCREEN_OUTPUT\"}]}]}'"
  },
  "sharedDebugInfo": [
    {
      "name": "ResponseValidation",
      "subDebugEntry": [
        {
          "debugInfo": "API Version 2: Failed to parse JSON response string with 'INVALID_ARGUMENT' error: \": Cannot find field.\".",
          "name": "UnparseableJsonResponse"
        }
      ]
    }
  ]
}

Также "debugInfo" звучит как внутренняя проблема:

"API версии 2: не удалось проанализировать строку ответа JSON с ошибкой" INVALID_ARGUMENT ": \": Не удается найти поле. \ "."

Вот снимок экрана с приветственным намерением:  введите описание изображения здесь

пс. Мне понадобился ВОЗРАСТ, чтобы понять, что

"Отсутствует шаблон запроса для особого намерения"

означает - поэтому я просто документирую это здесь: В диалоговом потоке - Намерение - «Пользователь говорит» вам нужно ДВОЙНЫМ ЩЕЛЧКОМ по слову в поле ввода текста, если вы хотите установить его как параметр запроса - который, кажется, требуется для действий на Google.


person electrobabe    schedule 27.01.2018    source источник
comment
Можете ли вы обновить свой вопрос, включив снимок экрана с приветственным намерением? Установлен ли у вас флажок выполнения для намерения? Если да, можете ли вы также обновить вопрос, включив в него JSON, который вы возвращаете из веб-перехватчика, и какую версию Dialogflow вы используете?   -  person Prisoner    schedule 27.01.2018
comment
Как тот, кто разместил по вашей ссылке, у меня было другое сообщение об ошибке («Не удается найти поле»), чем у вас - см. Также stackoverflow.com/questions/48158417/ И это было благодаря @Prisoner, который любезно добавить комментарий выше.   -  person Colin G    schedule 27.01.2018
comment
Я видел эту ошибку, когда в моем веб-перехватчике происходит сбой, и я не могу вернуть какой-либо текст или возникает другая проблема с текстом.   -  person Nick Felker    schedule 27.01.2018
comment
@prisoner Я обновил свой вопрос (скриншоты и что пробовал). Проблема также возникает, когда я отключаю веб-перехватчик выполнения. Я также пробовал v1 и v2,   -  person electrobabe    schedule 30.01.2018
comment
Хорошо. Можете ли вы также добавить снимок экрана с изображением того, что выбрана вкладка «Ответ -› По умолчанию »? Когда вы настроили веб-перехватчик выполнения, какой JSON вы отправляли обратно?   -  person Prisoner    schedule 30.01.2018
comment
@Prisoner в ответе - ›Раздел по умолчанию. У меня есть только некоторые тексты - тексты по умолчанию из самого Dialog Flow. Как я уже сказал, веб-перехватчик работает в самом Dialog Flow. imgur.com/a/Ri3zu В V1 я отвечаю JSON {speech: blabla, displayText: blabla} который отлично работает в Dialog Flow, например в веб-демонстрации bot.dialogflow.com/994dda8b-4849-4a8a-ab24- c0cd03b5f420   -  person electrobabe    schedule 30.01.2018


Ответы (6)


Это случилось со мной. Если это происходит для намерения, которое вы только что добавили в консоль Dialogflow, и вы используете выполнение веб-перехватчика для действия, проверьте настройки выполнения намерения и убедитесь, что ползунок выполнения веб-перехватчика включен. Очевидно, что новые намерения не получают автоматического выполнения веб-перехватчика: вы должны выбирать каждое из них по частям (по крайней мере, таков мой опыт).

person Femi    schedule 20.08.2018
comment
Я сделал это, но все еще получаю пустой ответ. Это несмотря на то, что с моего сервера веб-перехватчиков, запущенного на моем компьютере, он показывает статус 200. - person Anshuman Kumar; 01.12.2020

Я тоже испытал эту ситуацию. Моя проблема заключалась в том, что я использовал SimpleResponse в моем выполнении index.js, не ссылаясь на него. Поэтому решением для меня было добавить SimpleResponse в index.js следующим образом:

const {dialogflow, SimpleResponse} = require('actions-on-google');

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

person Jorgé Reyniers    schedule 04.03.2019

Я получил это при просмотре учебника codelabs (https://codelabs.developers.google.com/codelabs/actions-1/index.html#4) и не назвал мое намерение тем же именем, которое указано в скрипте веб-перехватчика:  Намерение имени < / a>  Использовать намерение

person patrickbadley    schedule 15.02.2019

Я столкнулся с этой ошибкой при разработке собственного WebHook. Сначала я проверил, что мой код был вызван, просмотрев журнал Nginx, после чего я понял, что есть проблема в моем выводе JSON, потому что я основывал свой вывод на устаревших примерах.

(Актуальную) документацию API для V1 и V2 можно найти здесь: https://dialogflow.com/docs/fulfillment/how-it-works

Этот пример ответа для v2 API веб-перехватчика диалогового окна помог мне устранить эту ошибку:

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "this is a simple response"
            }
          }
        ]
      }
    }
  }
}

Источник: https://github.com/dialogflow/fulfillment-webhook-json/blob/master/responses/v2/ActionsOnGoogle/RichResponses/SimpleResponse.json

Вы можете найти больше примеров в официальном репозитории github, указанном выше.

person Bertware    schedule 18.01.2019

Другой вариант - если у вас есть текстовый ответ (даже пустой), например: Поле ответов

Затем вам нужно щелкнуть корзину рядом с ответом, чтобы очистить его и использовать веб-перехватчик.

person patrickbadley    schedule 20.02.2019

Служба поддержки Actions on Google помогла мне решить эту проблему:

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

person electrobabe    schedule 30.01.2018
comment
как это выглядело? - person Rich Elswick; 04.06.2018
comment
да. Это избавило от ошибки. Но он всегда дает ответ по умолчанию, а не настраиваемое сообщение из моего index.js - person sureshvv; 11.06.2018
comment
пожалуйста, добавьте полный ответ на свой вопрос, где вы его добавили и какое имя поля вы добавили - person DaImTo; 06.07.2018