Google Apps Script - GoogleJsonResponseException: API call to sheets.spreadsheets.values.update failed with error: Invalid values[1][0]

Google Apps Script - GoogleJsonResponseException: API call to sheets.spreadsheets.values.update failed with error: Invalid values[1][0]

目标是查询 JSON 对象中的字段。但是执行时会抛出上面的错误。 Dialogflow 作为应用程序集成在 Slack 中。 Google Apps 脚本是网络应用程序。这是代码:

    //Writes in a sheet the Slack User id
    function doPost(e) {
      //Parse incoming JSON from Dialogflow into an object
      var dialogflow = JSON.parse(e.postData.contents);

      //Extracts userId from Slack
      var desiredField = dialogflow.originalDetectIntentRequest.payload.data.event.user;

      //Instantiates Sheets function
      var valueRange = Sheets.newValueRange();

      //Value to insert in cell
      var values = [[ desiredField]];
      valueRange.values = values;

      //Inserts value in cell
      var result = Sheets.Spreadsheets.Values.update(valueRange, 'XXX-YYY-ZZZ', 'rangeReceivingData', {valueInputOption: 'RAW'});
   }

这是传入的 JSON:

{
  "responseId": "XXX-YYY-ZZZ",
  "queryResult": {
    "queryText": "oi",
    "action": "input.welcome",
    "parameters": {
    },
    "allRequiredParamsPresent": true,
    "fulfillmentText": "Oi!",
    "fulfillmentMessages": [{
      "text": {
        "text": ["Oi!"]
      }
    }],
    "outputContexts": [{
      "name": "projects/test-agent-xxyy/agent/sessions/xxx-yyy-zzz/contexts/__system_counters__",
      "parameters": {
        "no-input": 0.0,
        "no-match": 0.0
      }
    }],
    "intent": {
      "name": "projects/test-agent-xxyy/agent/intents/xxx-yyy-zzz",
      "displayName": "Default Welcome Intent"
    },
    "intentDetectionConfidence": 1.0,
    "languageCode": "pt-br"
  },
  "originalDetectIntentRequest": {
    "source": "slack",
    "payload": {
      "data": {
        "event_time": "1589561467",
        "api_app_id": "xxxyyyzzz",
        "type": "event_callback",
        "event": {
          "event_ts": "1589561467.000200",
          "team": "xxxyyyzzz",
          "blocks": [{
            "type": "rich_text",
            "block_id": "xxxyyyzzz",
            "elements": [{
              "elements": [{
                "text": "oi",
                "type": "text"
              }],
              "type": "rich_text_section"
            }]
          }],
          "ts": "1589561467.000200",
          "channel_type": "im",
          "client_msg_id": "xxx-yyy-zzz",
          "text": "oi",
          "type": "message",
          "channel": "xxxyyyzzz",
          "user": "T1H2E3G4O5A6L7"
        },
        "authed_users": ["XXXYYYZZZ"],
        "event_id": "xxxyyyzzz",
        "token": "xxxyyyzzz",
        "team_id": "xxxyyyzzz"
      }
    }
  },
  "session": "projects/test-agent-xxyy/agent/sessions/xxx-yyy-zzz"
}

此外,dialogflow 中的履行响应具有这种奇怪的格式:

fields {
    key: "action"
    value {
      string_value: "input.welcome"
    }
  } ... (this is inside the sheets api error response)

调试时可以查询 respondeId 字段(传入 JSON 的第一个字段)。看起来该程序在查询更多字段上花费了大量处理时间,最后它抛出了错误。有什么建议吗?

文档参考:

提前致谢!

错误,已解决。一、要点: 可以使用 JSON.stringify:

从 webhook 恢复收到的 JSON
function doPost(e) {
  //Parse incoming JSON from Dialogflow
  var dialogflow = JSON.parse(e.postData.contents);

  //Stringify webhook after parsing
  var desiredField = JSON.stringify(dialogflow);

  //Outputs value in sheet
  var valueRange = Sheets.newValueRange();

  //Value to insert in cell
  var values = [[ desiredField]];
  valueRange.values = values;

  //Inserts value in cell
  var result = Sheets.Spreadsheets.Values.update(valueRange, 'spreadSheetId', 'range', 
     {valueInputOption: 'RAW'});
}

传入的JSON如预期的那样,只需查询所需的字段即可:

来自这个:

  //Stringify webhook after parsing
  var desiredField = JSON.stringify(dialogflow);

对此:

 //Extracts userId from Slack
 var desiredField = dialogflow.originalDetectIntentRequest.payload.data.event.user;

错误已解决!