【GAS】問い合わせメールをスプレッドシート一覧で共有してLINEにも流す①
BtoCかつ小規模の会社さんなどで、意外と厄介になるのが問い合わせメール。
誰かが専任で担当していればよいのですが、複数の人が見てたりすると「あれ、返信してない?」「Bさんの担当じゃなかったっけ?」「問い合わせを1週間放置していた……!!」のようなことになって混乱、というのはわりと見かけるパターンです。
メール共有ソフトを使えばよいのですが、「そんな予算はない!」ということも多いですよね。
じゃあ作っちゃいましょう。
今回作るものはこんなイメージ
↓
LINEに通知がくる
↓
メールが一覧にまとめられる
(※実際の内部処理の順番とは異なります)
では作っていきましょう。1から丁寧に解説していきますよ~。
今回使うのは以下の3つです。
Gメールの用意
まずは、お問い合わせメールをGメールで取得します。
(お問い合わせメールが元々Gメールならこの工程は飛ばします。)
ドメインメールの場合は、以下のどちらかです。
- 問い合わせメールにラベルをつけ、転送設定をする
- pop設定でGメールで指定ドメインメールを受信するようにする
なんにしても、Gメールで問い合わせフォームに来たメールを読み取れればok!
グーグルスプレッドシートの用意
今回はグーグルスプレッドシート(とGAS)が最大のキモです。まずはスプレッドシートで基盤を作ります。
とりあえず例として
「受信日時」「メールタイトル」「送信元」「送信元2」「お問い合わせ内容(メール本文)」を取得することにします。
またGAS的には必要ないですが、問い合わせ対応のチェック用として「担当者」「対応状況」「回答」という行も足しておきます。
こんな感じのスプレッドシートができました。
GASの設定
次に「ツール」→「スクリプトエディタ」へと進みます。
するとこんな画面になります。ここにGASのスクリプトを書き込んでいきます。
最初から書いてある
1 2 3 |
function myFunction() { } |
の部分は消してしまってください。
今回記入するのはこんな感じです。(とりあえずコピペしてしまいましょう)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
function mailandLine () { // グーグルスプレッドシートのURLをここに書き込む var sheet_url = 'スプレッドシートURL'; // グーグルスプレッドシートのシート名をここに書き込む var sheet_name = 'スプレッドシートの名前'; // 問い合わせメールの抽出条件 var strTerms = '(抽出条件)'; var existence_check = true; var ss = SpreadsheetApp.openByUrl(sheet_url); var sheet = ss.getSheetByName(sheet_name); var existence_keys = fetchExistenceKeys(); var mail_data = fetchMailData(); for (var i = 0; item = mail_data[i]; i++) { if (existence_check && existsData(item)) { continue; } sheet.appendRow(itemToRow(item)); } function fetchExistenceKeys () { var existence_keys = {}; var sheet_data = sheet.getDataRange().getValues(); for (var i = 0; row = sheet_data[i]; i++) { existence_keys[generateKey(rowToItem(row))] = true; } return existence_keys; } function existsData (item) { if (existence_keys[generateKey(item)]) { return true; } return false; } function generateKey (item) { var key = item['date'] + '_' + item['subject'] + '_' + item['from'] + '_' + item['to']; // Logger.log(key); return key; } function rowToItem (row) { var item = {}; item['date'] = row[0]; item['subject'] = row[1]; item['from'] = row[2]; item['to'] = row[3]; return item; } function itemToRow (item) { var row = []; row[0] = item['date']; row[1] = item['subject']; row[2] = item['from']; row[3] = item['to']; row[4] = item['body']; return row; } function fetchMailData () { var result = []; var threads = GmailApp.search(strTerms); for (var i = 0; it = threads[i]; i++) { var messages = it.getMessages(); for (var j = 0; message = messages[j]; j++) { var item = {}; item['date'] = message.getDate(); item['subject'] = message.getSubject(); item['from'] = message.getFrom(); item['to'] = message.getTo(); item['body'] = message.getBody(); result.push(item); } } return result; } } |
さてここからは、ちょっとカスタマイズが必要な部分。
先ほどのスクリプトの
1 2 3 4 5 6 |
// グーグルスプレッドシートのURLをここに書き込む var sheet_url = 'スプレッドシートURL'; // グーグルスプレッドシートのシート名をここに書き込む var sheet_name = 'スプレッドシートの名前'; // 問い合わせメールの抽出条件 var strTerms = '(抽出条件)'; |
この部分はそれぞれの内容にあわせて変更する必要があります。
「スプレッドシートURL」は、ご自身が現在作っているスプレッドシートのURLを貼り付けてください。
「スプレッドシートの名前」は、少しだけ注意が必要で、ファイルの名前ではなくシートの名前です。触っていなければ「シート1」とかだと思います。
「抽出条件」は一覧化したいメールの抽出条件で、例えばラベル名などを記入します。
未読のメール全て抽出とかの場合はvar strTerms = ‘(is:unread “*”)’;とか。
条件が欠けたらファイルを保存します。保存名は自分でわかるなら何でもいいです。
保存したら▶の「実行」ボタンを押します。するとこんな感じのポップアップが出ます。
「許可を確認」をクリックし、対応するGメールアカウントを連携してください。
(中途で警告がでるかもしれませんが、全部許可してOKです)
連携が完了すると、「メールをスプレッドシートに一覧で記録する」準備が整いました。
実行すると、先ほど設定した条件にあうメールが次々記録されていくと思います。
定期的なメールの取得
さて、これでメールを取得する一覧はできたわけですが、このままだと新規メールを受け付けても手動実行しない限り反応しません。
それでは困るので、この実行を定期的に自動で行うよう設定します。
スクリプト側を開き、上のツールバーから「現在のプロジェクトのトリガー」を押します。
すると新たな画面が現れます。
まず右下の「トリガーを追加」を選択。
すると入力画面が出てきます。
「実行する関数を選択」は、今回動かしたい関数名を選びます。
コードの部分で名前をmailandLineと定義しましたので、「mailandLine」を選びます。
実行するデプロイを選択はそのまま。イベントのソースを選択は「時間手動型」にします。
時間ベースのトリガーのタイプを選択、と時間の間隔を選択(分)は、それぞれの必要にあわせて設定します。
ここで設定した時間ごとに、新規メールを取得するので、とにかく即時反映させたい場合は短いスパンに、特に急がない場合は長いスパンにします。
※ただ、あまり短くするとGASのリクエスト回数上限にひっかかる可能性があるので、15分置き~支障がない限り長ければ長いほどいいかなという気はします。
最期に右下の「保存」を押すと、トリガー設定が完了です。
これで、メールを定期的に取得して一覧にまとめる部分が作り終わりました。
業務の仕方によっては、これだけあれば大丈夫!という感じだと思います。
区切りがよいので今回はここまで。
②で、この新規メールをLINEに流してお知らせする方法を書きます。