Y.A
1
現在、Web hookとGASを使用しKintoneのアプリ内で以下の3点のアクションが行われた時にGoogle Chatへ通知が飛ぶようにしようとしています。
①レコード追加時
②レコード編集時
③コメント追加時
①と②は上手くいけたのですが、③のコメント追加時の通知がうまく動かず困っています。
KintoneのAPIトークンではコメント追加時にエラーは出ません。GAS側の問題かと思っています。
以下、GASで追加したコードとなりますが、コメント追加時のコードで誤っている点、こうした方が良い等、アドバイス頂けたら幸いです。
function doPost(e) {
try {
if (!e || !e.postData || !e.postData.contents) {
throw new Error(“Invalid POST data”);
}
var params = JSON.parse(e.postData.contents);
var chatWebhookUrl = "WebhookURL"; // Webhook URL
// Kintone情報
var appId = "AppID"; // Kintone アプリID
var subdomain = "ドメイン"; // Kintone ドメイン
// レコードID 取得
var recordId = params.record.$id.value;
// レコードURL の生成
var recordUrl = "https://" + subdomain + ".cybozu.com/k/" + appId + "/show#record=" + recordId;
// イベントタイプを取得
var eventType = params.type;
// メッセージ本文を初期化
var messageText = "";
if (eventType === "ADD_RECORD") {
var creator = params.record.申請者.value.name; // 申請者FC
var createdTime = params.record.作成日時.value; // 作成日時FC
messageText = "新しいレコードが追加されました: " + recordUrl + "\n作成者: " + creator + "\n追加時間: " + createdTime;
} else if (eventType === "UPDATE_RECORD") {
var editor = params.record.更新者.value.name; // 更新者FC
var updatedTime = params.record.更新日時.value; // 更新日時FC
messageText = "レコードが編集されました: " + recordUrl + "\n編集者: " + editor + "\n編集時間: " + updatedTime;
} else if (eventType === "ADD_RECORD_COMMENT") {
// コメント追加イベントの場合
var comment = params.comment.text;
var commenter = params.comment.creator.name;
var commentedTime = params.comment.createdAt;
messageText = "レコードにコメントが追加されました: " + recordUrl + "\nコメント: " + comment + "\n追加者: " + commenter + "\n追加時間: " + commentedTime;
}
// Google Chatメッセージ
var message = {
text: messageText
};
var options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(message)
};
UrlFetchApp.fetch(chatWebhookUrl, options);
} catch (error) {
// 簡易的ログ出力
console.error("Error: " + error.message);
}
}
aaa
2
Google Apps ScriptのdoPost()をつかった場合のデバッグ方法を調べてみてください。
コメントの場合は、
// レコードID 取得
var recordId = params.record.$id.value;
ではうけとれないようです。
試していませんが、
params.recordId
のような状態のようです。
params.url
を使えばコメントのURLは取得できるようです。
コメントの書き込み
https://jp.cybozu.help/k/ja/id/040602.html#set_webhook_webhook_notification_30
var comment = params.comment.text;
var commenter = params.comment.creator.name;
var commentedTime = params.comment.createdAt;
は正しく受け取れているのに、不思議な感じがしました。
Y.A
3
ご返信ありがとうございます。
aaa様のアドバイスを頂き、レコードID取得部分のコードを以下に書き直したところ解決し、①~③全ての通知を受け取れるようになりました。
var recordId = params.recordId || (params.record && params.record.$id.value);
私自身も不思議に感じておりますが、無事解決できて良かったです。
ありがとうございました!
aaa
4
1.質問者のはじめの投稿でコードが途切れているので、貼り付け直します。
function doPost(e) {
try {
if (!e || !e.postData || !e.postData.contents) {
throw new Error("Invalid POST data");
}
var params = JSON.parse(e.postData.contents);
var chatWebhookUrl = "WebhookURL"; // Webhook URL
// Kintone情報
var appId = "AppID"; // Kintone アプリID
var subdomain = "ドメイン"; // Kintone ドメイン
// レコードID 取得
var recordId = params.record.$id.value;
// レコードURL の生成
var recordUrl = "https://" + subdomain + ".cybozu.com/k/" + appId + "/show#record=" + recordId;
// イベントタイプを取得
var eventType = params.type;
// メッセージ本文を初期化
var messageText = "";
if (eventType === "ADD_RECORD") {
var creator = params.record.申請者.value.name; // 申請者FC
var createdTime = params.record.作成日時.value; // 作成日時FC
messageText = "新しいレコードが追加されました: " + recordUrl + "\n作成者: " + creator + "\n追加時間: " + createdTime;
} else if (eventType === "UPDATE_RECORD") {
var editor = params.record.更新者.value.name; // 更新者FC
var updatedTime = params.record.更新日時.value; // 更新日時FC
messageText = "レコードが編集されました: " + recordUrl + "\n編集者: " + editor + "\n編集時間: " + updatedTime;
} else if (eventType === "ADD_RECORD_COMMENT") {
// コメント追加イベントの場合
var comment = params.comment.text;
var commenter = params.comment.creator.name;
var commentedTime = params.comment.createdAt;
messageText = "レコードにコメントが追加されました: " + recordUrl + "\nコメント: " + comment + "\n追加者: " + commenter + "\n追加時間: " + commentedTime;
}
// Google Chatメッセージ
var message = {
text: messageText
};
var options = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(message)
};
UrlFetchApp.fetch(chatWebhookUrl, options);
} catch (error) {
// 簡易的ログ出力
console.error("Error: " + error.message);
}
}
2.私が「不思議な感じがした」件
レコードデータとは違うフォーマットの
コメントデータを正常に受け取れている部分がありました。
質問者はkintoneのWebhookの仕様を確認しているようだと感じました。
しかし、一方でコメントデータのレコードIDでエラーが出ている状態でした。
回答者が、質問者の能力を推測するのにつじつまが合わないと感じて不思議だと思いました。
動作しているコードが理解できずに不思議な動作をしているという意味ではありませんでした。
また、let、constをつかわないスタイルも興味深いです。
また、recordId
の変数は、当該レコード・コメントへのリンクを作るために使用しているだけなのに、そこに入る値の部分を修正されているのをみて、webhookでURLも送信されているのになぜ?という気持ちもあります。
system
(system)
クローズされました:
5
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。