API 版本 2:无法解析带有“INVALID_ARGUMENT”错误的 JSON 响应字符串:\“:找不到字段。\”
Posted
技术标签:
【中文标题】API 版本 2:无法解析带有“INVALID_ARGUMENT”错误的 JSON 响应字符串:\\“:找不到字段。\\”【英文标题】:API Version 2: Failed to parse JSON response string with 'INVALID_ARGUMENT' error: \": Cannot find field.\"API 版本 2:无法解析带有“INVALID_ARGUMENT”错误的 JSON 响应字符串:\“:找不到字段。\” 【发布时间】:2018-01-05 18:47:21 【问题描述】:我收到“API 版本 2:无法解析 JSON 响应字符串并出现“INVALID_ARGUMENT”错误:\": 找不到字段。\".' 用于简单语音 webhook 响应的错误。
------------错误--------------
"debugInfo":
"agentToAssistantDebug":
"agentToAssistantJson":
"message": "Unexpected apiai response format: Empty speech response",
"apiResponse":
"id": "31f9c31d-3861-4262-8518-bd1f1e895f86",
"timestamp": "2017-07-29T22:09:23.971Z",
"lang": "en",
"result": ,
"status":
"code": 200,
"errorType": "success"
,
"sessionId": "1501366152335"
,
"sharedDebugInfo": [
"name": "ResponseValidation",
"subDebugEntry": [
"name": "UnparseableJsonResponse",
"debugInfo": "API Version 2: Failed to parse JSON response string with 'INVALID_ARGUMENT' error: \": Cannot find field.\"."
]
]
,
"visualResponse":
我尝试按照https://api.ai/docs/reference/agent/query#response 文档发送以下 json 响应。
------------响应--------------
"result":
"source": "agent",
"resolvedQuery": "city",
"action": "tell.facts",
"actionIncomplete": false,
"parameters":
"facts-category": "city"
,
"contexts": [],
"metadata":
"intentId": "873b1895-cdfc-42a4-b61b-5a1703c72a4d",
"webhookUsed": "true",
"webhookForSlotFillingUsed": "false",
"webhookResponseTime": 417,
"intentName": "tell-facts"
,
"fulfillment":
"speech": "Amsterdam",
"messages": [
"type": 0,
"speech": "Amsterdam"
]
,
"score": 1
我错过了什么?
【问题讨论】:
您设法解决了这个问题吗?我遇到了同样的错误 【参考方案1】:我遇到了这个问题,因为我没有给出任何操作名称。提供操作名称为我解决了这个问题。
【讨论】:
【参考方案2】:在我的情况下,我忘记在 Fulfillment 中启用“使用 webhook”并在 Google Assistant 中启用“结束对话”。
【讨论】:
【参考方案3】:这似乎是端点(heroku 或托管服务器端代码的任何地方)上的错误。你确定它设置正确并且服务器开启了吗?
这使用 python 字典来查找函数并将其映射到操作名称。之后,它会运行返回语音响应的关联函数。
@app.route('/google_webhook', methods=['POST'])
def google_webhook():
# Get JSON request
jsonRequest = request.get_json(silent=True, force=True, cache=False)
print("Google Request:")
print(json.dumps(jsonRequest, indent=4))
# Get result
appResult = google_process_request(jsonRequest)
appResult = json.dumps(appResult, indent=4)
print("Google Request finished")
# Make a JSON response
jsonResponse = make_response(appResult)
jsonResponse.headers['Content-Type'] = 'application/json'
return jsonResponse, jsonRequest
def google_process_request(req):
action = req.get('result').get('action')
session = req.get('sessionId')
if not action in dict(dispatch_table):
return
func = dispatch_table[action]
speech = func(req)
print("Google Response:")
print(speech)
print("session id is " + session)
return
"speech": speech,
"displayText": speech,
"source": "Cloud"
【讨论】:
我在 ServiceNow 实例上有一个入站 REST 服务。我用其他 API 和它的工作测试了它。 xxxxxxxx.service-now.com/api/now/google_assistance_api/… 那可能是你的服务器端代码;我更新了我的原始回复,概述了我要如何返回语音回复。【参考方案4】:有点晚了,但我最近在连接到 Google 助理时遇到了同样的问题。经过一番挠头后,我意识到我的欢迎意图没有正确配置的语音响应。请注意,我还没有使用 webhook。但错误表明缺少语音响应。
在我的情况下,我通过检查所有意图来解决它,并在每个意图的底部,在“默认”选项卡中编写文本响应,然后转到 Google 助理选项卡,并启用“使用响应从默认选项卡作为第一个响应。”之后,我的语音应用就开始工作了。
【讨论】:
【参考方案5】:对我来说,默认欢迎意图中的操作以某种方式发生了变化。我有一个动作要去获取欢迎消息的用户名,但那已经消失了。我把它放回去,它又开始工作了
【讨论】:
【参考方案6】:在我的情况下,我在为 Dialogflow 和 AoG 部署“构建您的第一个代理/应用程序”示例后遇到此错误。我选择使用 Dialogflow v2 Beta,而“第一个应用程序/代理”实现示例目前都使用 v1 API。 v2 的 webhook 格式发生了显着变化。
在 v2 文档赶上之前,我建议使用详细但有效的内联编辑器实现 webhook 示例作为模板,可通过 Dialogflow UI 或从 https://github.com/dialogflow/fulfillment-webhook-nodejs 在 Fulfillment 下访问。
【讨论】:
以上是关于API 版本 2:无法解析带有“INVALID_ARGUMENT”错误的 JSON 响应字符串:\“:找不到字段。\”的主要内容,如果未能解决你的问题,请参考以下文章
Google 应用程序目录 API(1.6 及更高版本)DotNetOpenAuth 无法解析
带有 systemd 的 getaddrinfo() API
带有 jsonp 内容类型的 jQuery.ajax 请求后的解析器错误
无法在 wordpress REST api 上设置 OAuth