Google Apps Script-GoogleJsonResponseException : sheets.spreadsheets.values.update에 대한 API 호출이 다음 오류와 함께 실패했습니다. 잘못된 값 [1] [0]

codeLearnerrr

목표는 JSON 개체 내부의 필드를 쿼리하는 것입니다. 그러나 실행되면 위의 오류가 발생합니다. Dialogflow는 Slack에 앱으로 통합됩니다. Google Apps Script는 웹 앱입니다. 다음은 코드입니다.

    //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의 첫 번째 필드) 를 쿼리 할 수있었습니다 . 프로그램이 추가 필드를 쿼리하는 데 많은 처리 시간이 걸리는 것으로 보이며 결국 오류가 발생합니다. 어떠한 제안?

문서 참조 :

미리 감사드립니다!

codeLearnerrr

오류가 해결되었습니다. 첫째, 포인트 : 다음 JSON을 사용하여 웹훅 에서 수신 된 데이터 를 복구 할 수있었습니다 JSON.stringify.

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;

오류가 해결되었습니다!

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관