今回は、Google Apps Script(以下、GAS)を活用した業務効率化の第2弾を投稿します。
参考までに、第1弾として以下記事を投稿しております。こちらも宜しければご覧になってください。
概要
本投稿では、Gmailで特定のメールを受信した際にChatスペースへ連携する方法をご紹介します。
具体的な業務シーンとしては、複数の担当者で対応しているヘルプデスクを想定しています。エンドユーザーからの問合せメールを受信した際に、ヘルプデスク担当者が所属するChatスペースへ連携することで、メンバー間のコミュニケーションを効率化して対応速度を向上させることを目標としています。
プログラムの動作イメージは以下画像の通りです。2つのプログラムで実現します。
①Gmailにて問合せメールを受信した場合に、管理台帳(スプレッドシート)へ転記する(※青字部分がGASの実行対象)
②管理台帳(スプレッドシート)に新規書き込みがあれば、Chatスペースへ送信する(※青字部分がGASの実行対象)
それでは、2つのプログラムについて順番にサンプルコードをご紹介します。
Gmailにて問合せメールを受信した場合に、管理台帳(スプレッドシート)へ転記する
プログラムを実装する前に2つの事前準備を行います。
事前準備1「管理台帳用のスプレッドシートを作成する」
エンドユーザーからの問合せを管理する台帳をスプレッドシートで作成します。
以下画像の通り、ヘッダー情報として1行目に「date」「from」「subject」「message」「id」「result」を入力してください。
事前準備2「Gmailのラベルを作成する」
Gmail画面を起動し、問合せメールを振り分けるラベル作成およびフィルタ設定を実施します。
ラベル名は「ヘルプデスク受付」として、受信メールの件名に【ヘルプデスク受付メール】という文字列が含まれる場合に「ヘルプデスク受付」ラベルへ振り分けるフィルタを設定しました。ラベルやフィルタに関する詳細は、以下のGmail ヘルプのリンクをご参照ください。
GASのサンプルコードを用意する
それでは、サンプルコードを用意していきます。今回は、事前準備1で作成したスプレッドシート上でGASのエディタを起動します。以下画像の通り、「拡張機能 > App Script」をクリックします。
サンプルコードは以下の通りです。
//Gmailからメール取得
const getMails = () => {
const query = "label:ヘルプデスク受付";
const start = 0;
const end = 10;
const threads = GmailApp.search(query, start, end);
const messageForThreads = GmailApp.getMessagesForThreads(threads);
let values = [];
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const ids = sheet.getRange(2, 5, lastRow).getValues().flat();
messageForThreads.forEach(messages => {
const message = messages[0];
const id = message.getId();
if (!ids.includes(id)){
const record = [
message.getDate(),
message.getFrom(),
message.getSubject(),
message.getPlainBody().slice(0, 250),
message.getId()
];
values.push(record);
}
});
if(values.length > 0){
sheet.getRange(lastRow + 1, 1, values.length, values[0].length).setValues(values);
}
}
簡単ですが解説しますと以下の通りです。
まず「ヘルプデスク受付」ラベルが付与されたメールをスレッド単位で10件取得します。
次にスプレッドシートのid列(E列)の値を取得します。
forEachループ文にて、取得したスレッドを順番に読み込み、1番目のメッセージを取り出して、メッセージのidがスプレッドシートのid列に存在しない場合は、メッセージの「受信した日付」、「送信元アドレス」、「件名」、「本文(最大250字まで)」、「メッセージid」を取得します。
最後に取得した値をスプレッドシートへ書き込みます。
管理台帳(スプレッドシート)に新規書き込みがあれば、Chatスペースへ送信する
プログラムを実装する前に2つの事前準備を行います。
事前準備1「Chatスペースを作成してメンバーを追加する」
ヘルプデスク担当者が所属するChatスペースを作成します。
事前準備2「GASから連携するWebhook URLを作成する」
続けて、作成したスペースにてWebhook URLを作成します。
まず、スペース名を選択して、アプリと統合をクリックします。
「Webhookの管理」をクリックして、着信Webhook画面にて名前を入力して「保存」をクリックします。
以下の様にURLが生成されますので、クリップボードにコピーしておきます。
GASのサンプルコードを用意する
それでは、サンプルコードを用意していきます。先ほど同様に、管理台帳のスプレッドシート上でGASのエディタを起動します。サンプルコードは以下の通りです。
//スプレッドシートを参照してメッセージ作成
const setMessageAndSend = () => {
const sheet = SpreadsheetApp.getActiveSheet();
const lastColumn = sheet.getLastColumn(); //最終列番号
const lastRow = sheet.getLastRow(); //最終行番号
const startRow = 2;
const startColumn = 1;
const dataRange = sheet.getRange(startRow, startColumn, lastRow-1, lastColumn); //(B2~最終カラム)まで取得
const data = dataRange.getDisplayValues();
data.forEach((row, i) => {
if (!row[5]){
let text = "<users/all>\n" + "問合せメールを受信しました。各自確認を行い、対応可否をスタンプ(可能:〇、不可:✕)でお知らせください。\n"
+ "```\n" + "【件名】\n" + row[2] + "\n" + "【本文】\n" + row[3] + "\n```\n";
const result = "TRUE";
sheet.getRange(i+2, 6).setValue(result);
//メッセージを送信
chatPushMessages(text);
}
});
}
//チャットスペース(Webhook)へ連携
const chatPushMessages = (text) => {
const webhookUrl = "https://chat.googleapis.com/v1/spaces/xxxxx";
const message = {'text' : text};
const options = {
'payload' : JSON.stringify(message),
'method' : 'POST',
'contentType' : 'application/json'
}
UrlFetchApp.fetch(webhookUrl,options);
}
以下の部分は、先ほどコピーしたURLに変更してください。
const webhookUrl = “https://chat.googleapis.com/v1/spaces/xxxxx”;
簡単ですが解説しますと以下の通りです。
まず、スプレッドシートから値を取得します。
forEachループ文にて値を順番に読み込み、result列(F列)に値が無い場合はchatPushMessages関数を呼び出してChatへメッセージを送信します。その際に、result列へTRUEを入力します。
トリガーを設定する
最後に作成したサンプルコードを自動実行するためにトリガーを設定します。
今回は、以下画像の様に2つのプログラムどちらも5分間隔で実行する設定を実施しました。
動作確認
実際に動作確認した際のイメージは以下の通りです。
まず、Gmailで以下のように2件のメールを受信します。
GASを実行後、スプレッドシートに2件のメール内容が転記されています。
Chatスペースに、2件のメッセージが送信されていることが確認できます。以下の様にスタンプを活用することで、コミュニケーションの促進を図れると思います。
さいごに
いかがだったでしょうか?メールで受信した内容をチャットへ連携することにより、メンバー間のコミュニケーションを効率化して対応速度を向上されることができると考えています。
ぜひ、ご参考にしていただければ幸いです。