GASでwebからの問い合わせメール( Gmail )をChatworkに通知してみた


はじめに
今回はwebサイトで問い合わせが来た時にどんな内容が来たかを知りたいので、自動で通知する様にしました。
これがかなり便利だったのでご紹介したいと思います。
Chatworkへの通知方法を知らない方はまずは下記記事で送信方法を理解してから本記事を進めて下さい。
Gmailを取得してみた
内容
フローとしては下記画像の様な感じにしたいと思います。
- 受信トレイにあり、labelが付けられておらず、件名に「web問い合わせ」が含まれているメールを取得
- チャットワークに通知
- 通知したメールに通知済ラベルを付与
- 1分毎に上記1〜3を実行
※フローが見づらいので、どこかのタイミングで画像に差し替えます。
コード全体
function getMail() {
const chatworkAPI = "Chatwork API Token"; // ChatworkのAPI Token
const roomID = "Room ID"; // ChatworkのルームID
// 指定条件のメールを取得
const label = "label:inbox"; // 受信ボックスにある
const has = "has:nouserlabels"; // labelが何もついていない
const subject = "subject:web問い合わせ"; // 件名に指定文字列が含まれている
const searchConditions = label + " " + has + " " + subject;
Logger.log(searchConditions);
const threads = GmailApp.search(searchConditions); //指定条件のメールを取得
Logger.log(threads);
// フォーマットを整えてchatworkで通知
for(let i in threads){
let thread = threads[i];
let msgs = thread.getMessages();
for(let n in msgs){
let msg = msgs[n];
let date = msg.getDate();
let body = msg.getBody();
let id = msg.getId();
date = Utilities.formatDate(date,"JST", "yyyy/MM/dd hh:mm:ss");
let sendmsg = date+"\nid:"+id+"\n"+body;
Logger.log(sendmsg);
sendChatWork(chatworkAPI,roomID,sendmsg);// chatworkに送信
}
}
// 取得したメールにラベルをつける
if (threads.length > 0){ // スレッドが0でない事を確認し実行
const labelname = "通知済"; //ラベル名の指定
let addlabel = GmailApp.getUserLabelByName(labelname); // 指定レベルの取得
if (addlabel == null) { // 指定したラベル名がない時に実行して、ラベルの作成と取得
GmailApp.createLabel(labelname);
addlabel = GmailApp.getUserLabelByName(labelname);
}
Logger.log(addlabel)
addlabel.addToThreads(threads); // ラベルの追加
}
}
// Chatworkへ送信
function sendChatWork(chatworkAPI,roomID,msg){
const client = ChatWorkClient.factory({token: chatworkAPI}); // ChatworkAPIクライント作成
client.sendMessage({
room_id: roomID,
body: msg
}); // Chatworkにメッセージを送信
}
GASだと下記画像の様になります。

変更箇所&解説
変更箇所
下記コードのAPIトークンとRoomIDを自前のものに変更します。
const chatworkAPI = "Chatwork API Token"; // ChatworkのAPI Token
const roomID = "Room ID"; // ChatworkのルームID
下記コードの
const subject = "subject:web問い合わせ"; // 件名に指定文字列が含まれている
const labelname = "通知済"; //ラベル名の指定
解説
下記コードで指定条件のメールを取得します。
※条件の設定を詳しく知りたい方はこちらやこちらを参照してみて下さい。
// 指定条件のメールを取得
const label = "label:inbox"; // 受信ボックスにある
const has = "has:nouserlabels"; // labelが何もついていない
const subject = "subject:web問い合わせ"; // 件名に指定文字列が含まれている
const searchConditions = label + " " + has + " " + subject;
Logger.log(searchConditions);
const threads = GmailApp.search(searchConditions); //指定条件のメールを取得
Logger.log(threads);
下記コードで送信フォーマットを整えてChatworkへの送信関数を呼び出します。
// フォーマットを整えてchatworkで通知
for(let i in threads){ let thread = threads[i];
let msgs = thread.getMessages();
for(let n in msgs){
let msg = msgs[n];
let date = msg.getDate();
let body = msg.getBody();
let id = msg.getId();
date = Utilities.formatDate(date,"JST", "yyyy/MM/dd hh:mm:ss");
let sendmsg = date+"\nid:"+id+"\n"+body;
Logger.log(sendmsg);
sendChatWork(chatworkAPI,roomID,sendmsg);// chatworkに送信
}
}
下記コードの関数を呼び出すことでメッセージがChatworkに送信されます。
// Chatworkへ送信
function sendChatWork(chatworkAPI,roomID,msg){
const client = ChatWorkClient.factory({token: chatworkAPI}); // ChatworkAPIクライント作成
client.sendMessage({
room_id: roomID,
body: msg
}); // Chatworkにメッセージを送信
}
下記コードで送信したメールにラベルを付与します。
// 取得したメールにラベルをつける
if (threads.length > 0){ // スレッドが0でない事を確認し実行
const labelname = "通知済"; //ラベル名の指定
let addlabel = GmailApp.getUserLabelByName(labelname); // 指定レベルの取得
if (addlabel == null) { // 指定したラベル名がない時に実行して、ラベルの作成と取得
GmailApp.createLabel(labelname);
addlabel = GmailApp.getUserLabelByName(labelname);
}
Logger.log(addlabel)
addlabel.addToThreads(threads); // ラベルの追加
}
権限の承認
変更箇所の変更が終わりましたら、getMail関数を実行します。
実行すると権限の承認を聞かれるので「権限を確認」ボタンをクリック

使用するアカウントを選択

「詳細」をクリック

「GasTest(安全ではないページ)に移動」をクリック

「許可」ボタンをクリック

こちらで権限の承認は完了になります。
実行結果
getMail関数を選択して実行してエラーが無く完了する事を確認して下さい。
エラーが出た場合は変更した箇所等を見直して下さい。

メールが既に受信ボックスにある場合はChatworkに通知される事を確認して下さい。
下記画像の様に送信されていれば完了です。

トリガーの設定
最後に1分に一度だけ実行するトリガーを設定して自動で通知される様にします。
※トリガーの設定方法がわからない方や詳しく知りたい方は下記記事を参照してみて下さい。
今回設定した内容は下記画像の様になります。

トリガーを設定したら、メールを送信してChatworkに送信されるか確認して下さい。
まとめ
以上、GASでwebからの問い合わせメール( Gmail )をChatworkに通知してみたでした。
GASについて詳しく勉強されたい方は書籍やUdemyを利用して勉強する方法もあります。
おすすめの書籍を記事にまとめてありますのでご参考にしていただければと思います。
また、仕事で使わないといけないけど勉強する時間がない場合などはココナラで外注するのも一つの手かと思います。
まずは登録して、費用間などを調査してみてはいかがでしょうか。
