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

程序类型已存在: com.google.android.gms.common.api.zzd ,无法解析

带有 Realm 3.4.0 的 .Net Standard 2.0“无法解析引用”Xamarin 表单