業務自動化で脱・手作業!一人事務のDX活用術 | RPA・自動化ツール

業務自動化で脱・手作業!一人事務のDX活用ブログ|RPA・自動化ツールで業務をもっとラクに、もっとスマートに

GoogleドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法

GoogleドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法

以前、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

GoogleドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法

 

その他の取得方法については、以前の記事で詳しく解説しています。

APIトークンとROOMID

keiridx.net

▼フォルダIDの取得

keiridx.net

ルームIDはどこでも良いですが、ダイレクトチャットあてにも設定できるので上司個人でも良いです。


② GASのコードを書く

以下のGoogle Apps Script(GAS)をGoogleスプレッドシートスクリプトエディタに追加します。

▼【参考】GASとは?初回導入手順はこちら

keiridx.net

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ドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法

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

GoogleドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法


注意点

  • 日報を更新しても再通知はされない

    • 追加されたファイルのみが通知対象となるため、すでに存在するファイルを更新しても通知されません。

    • 必要に応じて手動でChatworkにメッセージを送るか、スクリプトを変更してください。

  • ファイル形式の工夫

    • ExcelファイルよりもPDFファイルの方が確認しやすい場合もあるため、用途に応じてフォーマットを選択しましょう。


③ トリガーを設定する

トリガーを設定しておけば、指定した時間にスクリプトを実行し自動通知してくれます。

まとめ

今回は、Google Apps Script(GAS)を使用し、Googleドライブの特定フォルダにファイルが追加された際にChatworkへ通知&タスク追加をする方法をご紹介しました。

この仕組みを導入することで、日報や承認用のファイルをスムーズに共有し、業務の効率化を図ることができます。Slackよりも比較的簡単にできますので、ぜひ、試してみてください!

▼ 役に立ったらブックマークお願いします!

GoogleドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法

GoogleドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法

人気ブログランキング

GoogleドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法

現役公認会計士が解説!GASで自動化する経営管理【電子書籍】[ 稲垣 大輔 ]

価格:1980円
(2025/2/21 11:54時点)
感想(0件)

 

GoogleドライブのファイルをChatworkへ自動通知!GASで業務効率化する方法

プログラム未経験者でもOK!! 業務効率化/自動化のためのGoogle Apps Script [ 事務職たらこ ]

価格:2420円
(2025/2/21 11:56時点)
感想(0件)