错误“空语音响应”

问题描述 投票:6回答:6

我试图在Google上连接DialogFlow和Actions,所以我创建了一些意图,连接了服务,添加了显式和隐式调用等,但是当我在模拟器https://console.actions.google.com/project/[projectId]/simulator/中尝试机器人时,它总是给我错误:

“无法将Dialogflow响应解析为AppResponse,异常抛出消息:空语音响应”

即使输入类型是“键盘”。

到目前为止我尝试了什么:

不幸的是,文档没有说明这个错误。有任何想法吗?

这里是Actions集成错误的屏幕截图:enter image description here

这是完整的调试输出:

{
  "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:无法使用'INVALID_ARGUMENT'错误解析JSON响应字符串:\”:找不到字段。\“。”

这里是欢迎意图的截图:enter image description here

PS。我花了很多时间才弄明白

“自定义意图缺少查询模式”

意思是 - 所以我只是在这里记录它:在Dialog Flow中 - 意图 - “用户说”当你想将它设置为查询参数时,你必须在文本输入字段中单击一个单词 - 这似乎是Actions on谷歌。

actions-on-google dialogflow google-assistant-sdk
6个回答
9
投票

这发生在我身上。如果您刚刚在Dialogflow控制台中添加了Intent,并且您正在使用Webhook实现操作,请检查intent的实现设置并确保Webhook实现滑块已打开。显然,新的意图不会自动获得webhook履行:你必须零碎地选择每一个(或者至少,这是我的经验)。


2
投票

我也经历过这种情况。我的问题是我在履行index.js中使用了SimpleResponse而没有引用它。所以我的解决方案是在index.js中添加这样的SimpleResponse:

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

因此,请始终检查您是否未使用任何依赖项而不将其包含在js文件中。可能不是问题的最常见原因,但可能是。


1
投票

我在运行codelabs教程(https://codelabs.developers.google.com/codelabs/actions-1/index.html#4)时得到了这个,并没有将我的意图命名为webhook脚本中引用的名称:Name Intent Use Intent


0
投票

我在尝试开发自己的WebHook时遇到了这个错误。我首先通过查看Nginx日志来验证我的代码被调用,之后我知道我的JSON输出中存在问题,因为我的输出基于过时的示例。

API的V1和V2的(最新)文档可以在这里找到:https://dialogflow.com/docs/fulfillment/how-it-works

对话框webhook API的v2的这个示例响应帮助我解决了这个错误:

{
  "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存储库中找到更多示例。


0
投票

另一种可能性是,如果您有文本响应(即使是空的),如下所示:Responses Box

然后,您需要单击响应旁边的垃圾箱以清除它以使用webhook。


-4
投票

Google支持上的操作帮助我解决了这个问题:

我需要将文本作为默认响应添加到用于显式调用的意图。

© www.soinside.com 2019 - 2024. All rights reserved.