
以前、Googleドライブのフォルダにファイルが追加された際にSlackへ通知する方法をご紹介しましたが、業務でChatworkを利用している方も多いのではないでしょうか。
フォルダにファイルをアップロードするだけで、自動的にChatworkへ通知が送られるようにすれば、承認作業や確認作業をスムーズに進めることができます。
今回は、Google Apps Script(GAS)を活用し、Googleドライブにファイルが追加された際にChatworkへ通知を送る手順をご紹介します。
想定シナリオ
日報をExcelで作成し、毎日Googleドライブの特定フォルダにアップロードする運用を想定します。
上司はChatwork上の通知を確認し、アップロードされたファイルのURLを開くことで日報をチェックできるようにします。
同時にタスク追加されるので、チェックしたら完了ボタンを押す仕様にします。
手順
① 必要情報を取得する
以下の情報を取得し、スクリプトに設定する必要があります。
-
CHATWORK_API_TOKEN: ChatworkのAPIトークン
-
CHATWORK_ROOM_ID: 通知を送るChatworkのルームID
-
DRIVE_FOLDER_ID: 監視するGoogleドライブのフォルダID
- CHATWORK_ASSIGNEE_ID:内容を閲覧する人(上司の設定)のID
内容を閲覧する人のIDですが、メンションする際に[To:******]に表示される番号になります。
▼ここの番号がCHATWORK_ASSIGNEE_ID

その他の取得方法については、以前の記事で詳しく解説しています。
▼APIトークンとROOMID
keiridx.net
▼フォルダIDの取得
keiridx.net
ルームIDはどこでも良いですが、ダイレクトチャットあてにも設定できるので上司個人でも良いです。
② GASのコードを書く
以下のGoogle Apps Script(GAS)をGoogleスプレッドシートのスクリプトエディタに追加します。
const CHATWORK_API_TOKEN = "***********************"; // ChatworkのAPIトークン
const CHATWORK_ROOM_ID = "***********************"; // 通知を送るChatworkのルームID
const DRIVE_FOLDER_ID = "***********************"; // 監視するGoogle DriveフォルダのID
const CHATWORK_ASSIGNEE_ID = "***********************"; // タスクの担当者(ChatworkのユーザーID)
function checkNewFiles() {
const folder = DriveApp.getFolderById(DRIVE_FOLDER_ID);
const files = folder.getFiles();
const scriptProperties = PropertiesService.getScriptProperties();
const lastCheckTime = Number(scriptProperties.getProperty("lastCheckTime") || 0);
let latestTimestamp = lastCheckTime;
let messageList = [];
let newFileFound = false;
Logger.log(`📌 最終チェック時刻: ${lastCheckTime}`);
while (files.hasNext()) {
let file = files.next();
let createdTime = new Date(file.getDateCreated()).getTime();
Logger.log(`📂 チェック中: ${file.getName()} (作成日時: ${createdTime})`);
if (createdTime > lastCheckTime) {
let fileUrl = `https://drive.google.com/file/d/${file.getId()}`;
Logger.log(`✅ 新規ファイル検出: ${file.getName()} - ${fileUrl}`);
messageList.push(`📄 ${file.getName()} - ${fileUrl}`);
newFileFound = true;
if (createdTime > latestTimestamp) {
latestTimestamp = createdTime;
}
}
}
if (newFileFound) {
let message = `[info][title]本日分の日報確認お願いします。[/title]\n` + messageList.join("\n") + `\n[/info]`;
Logger.log(`📢 送信メッセージ: ${message}`);
sendChatworkNotification(message);
let taskText = "本日の日報を確認してください。";
let dueTime = Math.floor(new Date().setHours(23, 59, 59) / 1000); // 今日の23:59をUnixタイムスタンプに変換
addChatworkTask(taskText, dueTime, CHATWORK_ASSIGNEE_ID);
scriptProperties.setProperty("lastCheckTime", latestTimestamp);
} else {
Logger.log("⚠️ 新しいファイルなし。通知をスキップ。");
}
}
function sendChatworkNotification(message) {
if (!message || message.trim().length === 0) {
Logger.log("⚠️ 送信メッセージが空なので、通知をスキップしました。");
return;
}
const url = `https://api.chatwork.com/v2/rooms/${CHATWORK_ROOM_ID}/messages`;
const options = {
method: "post",
headers: {
"X-ChatWorkToken": CHATWORK_API_TOKEN
},
payload: {
body: message
}
};
try {
let response = UrlFetchApp.fetch(url, options);
Logger.log(`✅ Chatwork送信成功: ${response.getContentText()}`);
} catch (e) {
Logger.log(`❌ Chatwork送信エラー: ${e.message}`);
}
}
function addChatworkTask(taskText, dueTime, assignee) {
const url = `https://api.chatwork.com/v2/rooms/${CHATWORK_ROOM_ID}/tasks`;
// `taskText` が空でないことを確認
if (!taskText || taskText.trim().length === 0) {
Logger.log("⚠️ タスクの本文が空なので、送信をスキップしました。");
return;
}
// `dueTime` を整数の Unix タイムスタンプに変換
const unixDueTime = parseInt(dueTime, 10); // 文字列や小数を確実に整数化
if (isNaN(unixDueTime) || unixDueTime <= 0) {
Logger.log(`❌ 無効な期限 (limit): ${dueTime}`);
return;
}
const payload = {
body: taskText,
limit: unixDueTime.toString(), // 確実に整数を文字列に変換して渡す
to_ids: String(assignee) // 文字列に変換
};
const options = {
method: "post",
headers: {
"X-ChatWorkToken": CHATWORK_API_TOKEN,
"Content-Type": "application/x-www-form-urlencoded"
},
payload: payload
};
try {
let response = UrlFetchApp.fetch(url, options);
Logger.log(`✅ Chatworkタスク追加成功: ${response.getContentText()}`);
} catch (e) {
Logger.log(`❌ Chatworkタスク追加エラー: ${e.message}`);
}
}
③ フォルダにファイルを追加する
日報をフォルダにアップロードすると、Chatworkへ自動通知されます。

同時にタスク追加されますので、上司は内容を確認して完了します。

注意点
-
日報を更新しても再通知はされない
-
ファイル形式の工夫
③ トリガーを設定する
トリガーを設定しておけば、指定した時間にスクリプトを実行し自動通知してくれます。
まとめ
今回は、Google Apps Script(GAS)を使用し、Googleドライブの特定フォルダにファイルが追加された際にChatworkへ通知&タスク追加をする方法をご紹介しました。
この仕組みを導入することで、日報や承認用のファイルをスムーズに共有し、業務の効率化を図ることができます。Slackよりも比較的簡単にできますので、ぜひ、試してみてください!
▼ 役に立ったらブックマークお願いします!

人気ブログランキング