我尝试在Google上连接 DialogFlow 和操作,因此我创建了一些意图,连接了服务,添加了显式和隐式调用等,但是当我尝试使用bot时在模拟器https://console.actions.google.com/project/[projectId]/simulator/中,它总是给我错误:
"无法将Dialogflow响应解析为AppResponse,异常 抛出消息:空话语回复"
即使是艰难的inputType也是" KEYBOARD"。
到目前为止我尝试了什么:
不幸的是,文档对此错误一无所知。有什么想法吗?
这是完整的调试输出:
{
"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'错误:\":无法找到字段。 \"。"
PS。 我花了很多时间才弄明白,
"自定义意图"
缺少查询模式
意味着 - 所以我只是在这里记录它:在对话流程中 - 意图 - "用户说"如果要将其设置为查询参数,则必须在文本输入字段中的单词上单击双击 - 这似乎是Google上的操作所必需的。
答案 0 :(得分:9)
这件事发生在我身上。如果您刚刚在Dialogflow控制台中添加的Intent发生了这种情况,并且您正在对操作使用Webhook实现,请检查该Intent的实现设置,并确保Webhook实现滑块处于打开状态。显然,新的意图不会自动实现网络挂钩:您必须零碎地选择每个目标(或者至少是我的经验)。
答案 1 :(得分:2)
我也遇到过这种情况。 我的问题是我在实现index.js中使用了SimpleResponse而不引用它。所以对我来说,解决方案是在index.js中添加SimpleResponse:
const {dialogflow, SimpleResponse} = require('actions-on-google');
因此,请始终检查是否在不将任何依赖项包含在js文件中的情况下使用它。 可能不是造成此问题的最常见原因,但可以如此。
答案 2 :(得分:1)
在运行代码实验室教程(https://codelabs.developers.google.com/codelabs/actions-1/index.html#4)时,我得到了这个提示,但没有用与webhook脚本中引用的相同的名称来命名我的意图:
答案 3 :(得分:0)
在尝试开发自己的WebHook时遇到了此错误。我首先通过查看Nginx日志来验证我的代码是否被调用,之后我知道JSON输出中存在问题,因为我的输出基于过时的示例。
API的V1和V2的(最新)文档可在以下位置找到: https://dialogflow.com/docs/fulfillment/how-it-works
此对dialogflow webhook API v2的示例响应帮助我解决了此错误:
{
"payload": {
"google": {
"expectUserResponse": true,
"richResponse": {
"items": [
{
"simpleResponse": {
"textToSpeech": "this is a simple response"
}
}
]
}
}
}
}
您可以在上面链接的官方github存储库中找到更多示例。
答案 4 :(得分:0)
答案 5 :(得分:-4)
Google支持上的操作帮助我解决了这个问题:
我需要将文本作为默认响应添加到用于显式调用的意图。