APIにて、payloadのフィールドに値が入っているのに、「必須です」エラーになります

何を実現したいのかを書きましょう

Kintoneのアプリにレコードを追加したい

発生した問題やエラーメッセージを具体的に書きましょう

payloadの「企業名」フィールドには値が入っているのに、APIのレスポンスが「{“code”:“CB_VA01”,“id”:“gVV6COy3uonra1WUjqQM”,“message”:“入力内容が正しくありません。”,“errors”:{“record.企業名.value”:{“messages”:[“必須です。”]}}}」となります。

・Kintoneアプリの「企業名」は、フィールドコードも「企業名」です。必須項目です。
・OAuth認証を使っています。スコープには「 k:record:write」を指定しています。
・Kintoneアプリのアクセス権のあるユーザーを使っています。
・payloadの他の項目をすべて削除し、「企業名」だけを渡してみても、同じ結果でした。

実行したコードをコピー&ペーストしましょう

  //製品テーブル 
  let tableField = [];
  for(dataLine of dataLines){
    let item = {
      "値引き": {"value": dataLine["値引き"]},
      "検索用品名": {"value": dataLine["検索用品名"]},
      "数量": {"value": dataLine["数量"]},
      "支払回数": {"value": dataLine["支払回数"]},
      "期間_開始": {"value": dataLine["期間_開始"]},
      "期間_終了": {"value": dataLine["期間_終了"]},
    }
    tableField.push({"value": item});
  }

  let payload = {
    "app": appId,
    "record": {
      "企業名": {"value": kokyakuName},
      "顧客区分": {"value": kokyakuKbn},
      "会社ID": {"value": compId},
      "顧客ID": {"value": kokyakuId},
      "担当者": {"value": tantoName},
      "担当者_SlackID": {"value": tantoSlack},
      "担当者_部署": {"value": tantoBusho},
      "申込期限": {"value": agreeDate},
      "テーブル": {
        "value": tableField
      }
    }
  };

  //OAuth認証を使う。
  const service = getService();
  if (!service.hasAccess()) {
    Logger.log('認証が必要です。');
    return;
  }
  
  const accessToken = service.getAccessToken();

  options = {
    method: 'post',
    headers: {
      "Content-Type": "application/json",
      Authorization: 'Bearer ' + accessToken
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions : true
  };

  const response = UrlFetchApp.fetch(url, options);
  let statusCode = response.getResponseCode();
  let responseText = response.getContentText();

payloadの中身

{method=post, 
headers={
	Authorization=Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, 
	Content-Type=application/json},
payload={
	"app":xxx,
	"record":{
		"企業名":{"value":"テスト企業名"},
		"顧客区分":{"value":"新規顧客"},
		"会社ID":{"value":"32787403834"},
		"顧客ID":{},
		"担当者":{"value":"テスト 一郎"},
		"担当者_部署":{"value":"SM"},
		"申込期限":{"value":null},
		"テーブル":{
		"value":[{"value":{
			"値引き":{"value":""},
			"検索用品名":{"value":"テスト品名"},
			"数量":{"value":"800"},
			"支払回数":{"value":"1"},
			"期間_開始":{"value":"2026-01-01"},
			"期間_終了":{"value":"2026-01-31"}}
			},]
		}
	}
},
muteHttpExceptions=true}

これはGASからやろうとしてますかね?

エラーの内容からするに、認証は大丈夫そうで、実際にAPIの通信まで行えていると考えるのが妥当でそうですね。
エラーの通りちゃんとPayloadが送られているかということを考えていいかなと思います。

ちなみに、下記のURLは何を指定していますか?

  const response = UrlFetchApp.fetch(url, options);

それによっても送るべきデータがかわるので…

mura様
回答ありがとうございます!
はい、GASからやろうとしています。

urlは、下記のように定義しております。

url = "https://[サブドメイン].cybozu.com/k/v1/record.json";

なるほど、パット見まちがってないようにもみえますね,

切り分けとして、必須条件を一旦なくすとどうでしょうか?
これで空のレコードがつくられるなら、やはりPayloadがうまくおくれてないことになりますね

(おまけで、ちゃんとGASが適用されてるか?もみるといいかもです

mura様

ありがとうございます :person_bowing:
Kintoneアプリが、リアルタイムで社内で使っているものなので、
必須条件をなくすのが難しいのです。

切り分けのため、ダミーアプリを作り、それに対してAPIを叩いてみようと思います。

もしほかに何か思いつかれることがございましたら、ご教示いただけますと有難いです。
よろしくお願いします :person_bowing:

「いいね!」 1

【解決】
「企業名」が、ルックアップにより値がセットされる項目で、
そのため(編集画面を開くまでは)編集不可フィールドになっていることが原因でした。

ご回答ありがとうございました。

「いいね!」 4