お世話になります。
動作はできてはいるもののWEBHOOKのログに△がでて緑のチェックにならないのでご質問です。
請求書作成アプリ
repotoneで請求書を書き出し、チェックボックスが済になったら
作業依頼書アプリ
チェックボックス 済 にしたい。
現状、動作はできているがwebhookが△。
GAS利用。
原因は302がかえっていることですが、原因がわかれば教えていただきたいです。
function doPost(e) {
try {
console.log('===== Webhook受信開始 =====');
if (!e.postData || !e.postData.contents) {
console.log('→ POSTデータなし');
return ContentService
.createTextOutput(JSON.stringify({ result: "No POST data" }))
.setMimeType(ContentService.MimeType.JSON);
}
// Webhookから送られてきたJSONを解析
const data = JSON.parse(e.postData.contents);
console.log('Webhookデータ:', JSON.stringify(data));
const record = data.record;
if (!record) {
console.log('→ recordが存在しない');
return ContentService
.createTextOutput(JSON.stringify({ result: "No record in webhook" }))
.setMimeType(ContentService.MimeType.JSON);
}
const shukko = record\['請求出力区分'\] && record\['請求出力区分'\].value;
if (!shukko || !shukko.includes('済')) {
console.log('→ 請求出力区分が済ではない:', shukko);
return ContentService
.createTextOutput(JSON.stringify({ result: "未済なので処理なし" }))
.setMimeType(ContentService.MimeType.JSON);
}
const kanriNo = record\['作業書管理番号'\] && record\['作業書管理番号'\].value;
if (!kanriNo) {
console.log('→ 管理番号なし');
return ContentService
.createTextOutput(JSON.stringify({ result: "管理番号なし" }))
.setMimeType(ContentService.MimeType.JSON);
}
console.log('管理番号:', kanriNo);
// -----------------------
// kintone 作業書アプリ情報
// -----------------------
const domain = 'xxxxxxxxxxxx'; // kintoneサブドメイン
const apiToken = 'xxxxxxxxxxxxxxxxxx';
const appId = 134;
// -----------------------
// 管理番号で検索
// -----------------------
const query = \`管理番号 = "${kanriNo}"\`;
const getUrl = \`https://${domain}.cybozu.com/k/v1/records.json?app=${appId}&query=${encodeURIComponent(query)}\`;
const getRes = UrlFetchApp.fetch(getUrl, {
method: 'get',
headers: { 'X-Cybozu-API-Token': apiToken }
});
const result = JSON.parse(getRes.getContentText());
console.log('検索結果:', JSON.stringify(result));
if (!result.records || result.records.length === 0) {
console.log('→ 該当レコードなし');
return ContentService
.createTextOutput(JSON.stringify({ result: "該当レコードなし" }))
.setMimeType(ContentService.MimeType.JSON);
}
const targetId = result.records\[0\].$id.value;
console.log('対象レコードID:', targetId);
// -----------------------
// レコード更新
// -----------------------
const putUrl = \`https://${domain}.cybozu.com/k/v1/record.json\`;
const body = {
app: appId,
id: targetId,
record: {
請求書作成区分: { value: \['済'\] } // 複数選択フィールド
}
};
const putRes = UrlFetchApp.fetch(putUrl, {
method: 'put',
headers: {
'X-Cybozu-API-Token': apiToken,
'Content-Type': 'application/json'
},
payload: JSON.stringify(body)
});
console.log('更新レスポンス:', putRes.getContentText());
console.log('===== Webhook処理終了 =====');
return ContentService
.createTextOutput(JSON.stringify({ result: "OK" }))
.setMimeType(ContentService.MimeType.JSON);
} catch (error) {
console.log('エラー発生:', error);
return ContentService
.createTextOutput(JSON.stringify({ result: "ERROR", message: error.message }))
.setMimeType(ContentService.MimeType.JSON);
}
}
監査ログ
| サービス | kintone |
|---|---|
| モジュール | API operation |
| アクション | Webhook notify |
| 結果 | FAILED |
| エラー番号 | |
| 補足 | app id: 61, app name: 見積/請求書アプリ, record id: 202, notification id: 6860d5bb-af49-456f-b795-6bfcb35ce085, event type: UPDATE_RECORD, server url: https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/exec, error type: SERVER_ERROR, status code: 302 |
よろしくお願いいたします。